Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit einem Rechner (https://www.delphipraxis.net/100825-probleme-mit-einem-rechner.html)

Patrick162 4. Okt 2007 12:20


Probleme mit einem Rechner
 
Tach.

Als erster, sry, falls ich hier in der Falschen Sektion gepostet habe.


So kommen wir mal zu meinem Problem.

Ich wollte einen Rechner programmieren, um Kreise auszurrechen.
Also den Umfang, Durchmesser, Radius und Flächeninhalt.

Leider komme ich nicht mehr weiter, da ich immer Fehlermeldungen bekomme...

Ich hoffe ihr könnt mir helfen, hier der Source.Code:

Delphi-Quellcode:
unit Kreisberechnung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  r, u, d, A: extended;
  lol, ergebnis1, ergebnis2, ergebnis3, ergebnis4: string;
  pi: extended;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
r := strtofloat(Edit1.Text);
u := strtofloat(Edit2.text);
d := strtofloat(Edit3.Text);
A := strtofloat(Edit4.Text);
pi := floattostrf(3.14159265358);

ergebnis1 := 2*  pi * r;
Label12.Caption := ergebnis1;
end;
end.



Greets Patrick

stifflersmom 4. Okt 2007 12:24

Re: Probleme mit einem Rechner
 
Auch ohne Deine Fehlermeldung zu kennen...
Du hast pi als String deklariert und versuchst damit in Deiner Formel zu rechnen,
das kann so nicht funktionieren.
Und ein Label kann nur einen String darstellen, eine Zahl dafür müsstest Du also erst in einen String umwandeln.
Moin

Matze 4. Okt 2007 12:26

Re: Probleme mit einem Rechner
 
Hallo Patrick,

herzlich Willkommen!

Es wäre gut, wenn du uns sagen würdest, welche Fehler du wo genau erhälst.

Wie mir scheint fehlen dir auch einige Delphi-Grundlagen. Hier kannst du diese durcharbeiten. Denn sowas wie

Delphi-Quellcode:
pi := floattostrf(3.14159265358);
kann nicht gehen. Pi ist nicht als String deaklariert, was auch blödsinnig wäre, daher musst du da auch nichts konvertieren. Richtig und viel einfacher wäre

Delphi-Quellcode:
pi = 3.14159265358;
bzw. die Unit Math in den uses einzubinden, dann kannst du Pi direkt nutzen.


Edit: Auch wenn sich der Inhalt meines Beitrags mit dem von stifflersmom ähnelt, habe ich ihn dennoch abgesendet aufgrund des Hinweises der fehlenden Grundlagen.

brinkee 4. Okt 2007 12:27

Re: Probleme mit einem Rechner
 
Hoi,

na, schau Dir doch bite an, welche Typen deine Variablen haben... Du versuchst einem String den Wert einer Rechenoperation mit Float-Werten zuzuweisen. Das kann ja nicht klappen...

Delphi-Quellcode:
FloatToStr()
wird Dir helfen...

Wo, das musst Du selber rausfinden. Sind ja kein Hausaufgaben-Erledigungs-Forum...

LG, Markus

DeddyH 4. Okt 2007 12:29

Re: Probleme mit einem Rechner
 
Hallo,

willkommen in der DP :dp:

1. Die Konstante Pi ist bereits definiert (Unit System).
2. Du kannst eine Extended (als Ergebnis einer Berechung) nicht an einen String zuweisen.
Delphi-Quellcode:
ergebnis1 := 2*  pi * r;
Versuch es mal so:
Delphi-Quellcode:
ergebnis1 := Format('%.2f',[2*  pi * r]);

brinkee 4. Okt 2007 12:35

Re: Probleme mit einem Rechner
 
Was soll den so'n Scheiß?

Mark90 4. Okt 2007 12:39

Re: Probleme mit einem Rechner
 
Zitat:

Zitat von brinkee
Was soll den so'n Scheiß?

hasch recht

Patrick162 4. Okt 2007 12:39

Re: Probleme mit einem Rechner
 
Zitat:

Zitat von brinkee
Was soll den so'n Scheiß?


Frag ich mich auch xD




So, hier ist das bild mit Source:

http://www.imagebanana.com/view/k9qng560/Delphi.JPG

Jetzt kommt nur noch eine Fehlermeldung, aber ich weiß nicht wie ich die wegbekommen kann.

brinkee 4. Okt 2007 12:44

Re: Probleme mit einem Rechner
 
Du versuchst, einen String in einen Float zu konvertieren...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
r := strtofloat(Edit1.Text);
u := strtofloat(Edit2.text);
d := strtofloat(Edit3.Text);
A := strtofloat(Edit4.Text);
pi := 1.34;

ergebnis1 := FloatToStr(2*  pi * r);
Label12.Caption := ergebnis1;
end;
Sieh Dir doch bitte für solche Fragen mal zu allererst an, welche Variable welchen Typ hat und wie Du die Typen ineinander umwandeln kannst, was welchert Typ kann. Das man mit Strings nicht rechnen kann erscheint doch logisch, oder?

LG, Markus

(edit) P.S.: 15 ist doch das Alter, in dem man Informatikunterricht das erste Mal in der Schule hat, oder? Lass' Dich nicht verleiten, Dir deine Probleme in Foren lösen zu lassen. Es gibt immer genug Leute, die Dir gerne helfen und aus Ungeduld - so wie ich gerade - die fertige Lösung hinposten. Wenn Du auch nur ansatzweise was aus dem Unterricht mitnehmen willst, dann versuche Dir ein Buch zu packen und es Dir anzulernen..

DeddyH 4. Okt 2007 12:50

Re: Probleme mit einem Rechner
 
Zitat:

Zitat von brinkee
Delphi-Quellcode:
pi := 1.34;

Das war mir neu ;)

Patrick162 4. Okt 2007 12:51

Re: Probleme mit einem Rechner
 
Danke für alles, jetzt klappt es :)

Delphi-Quellcode:
ergebnis1 := Format('%.2f',[2*  pi * r]);
Label2.Caption := ergebnis1;
Jetzt muss ich nur nochmal alles durchschaun wofür z.B. das
Delphi-Quellcode:
Format('%.2f',
gut ist.



BTW.:

Naja, wir haben keinen Informatikunterricht in der Schule :(
Habe mir auch schon das Buch: Delphi für Kids besorgt.

und mir hat auch shcon jmd verscuht zu helfen mit dem Rechner, aber owohl er eigentlich sehr gut ist, hat er es trotzdem nicht geschafft...

brinkee 4. Okt 2007 12:55

Re: Probleme mit einem Rechner
 
Hehe, 1,34 ist natürlich nicht so ganz passend ;) Meine Monte-Carlo-Simulation versucht mir schon den ganzen Tag zu erklören, dass Pi 2.69 ist, aber hey... ;)

LG, Markus

Patrick162 4. Okt 2007 14:56

Re: Probleme mit einem Rechner
 
Nächstes Problem:


'' is not a valid floating point value



Habe jetzt schon diverse Sachen ausprobiert, aber wieder keinen Erfolg gehabt :cry:

Ich hoffe ihr könnt mir jetzt noch einmal helfen... :oops:

Hier die Source:


Delphi-Quellcode:
unit Kreisberechnung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Button1: TButton;
    Button2: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  r, u, d, A, r2: extended;
  ergebnis1, ergebnis2, ergebnis3, ergebnis4: string;
  pi: extended;
  lol: integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

r := strtofloat(Edit1.Text);
u := strtofloat(Edit2.text);
d := strtofloat(Edit3.Text);
A := strtofloat(Edit4.Text);
pi := 3.14159265358;

if lol = 1 then
ergebnis2 := Format('%.2f',[2* pi * r]);
Label2.Caption := ergebnis2;
ergebnis3 := Format('%.2f',[2* r]);
Label3.Caption := ergebnis3;
ergebnis4 := Format('%.2f',[pi* r * r]);
Label4.Caption := ergebnis4;

if lol = 2 then
ergebnis1 := Format('%.2f',[u / 2 * pi]);
Label1.Caption := ergebnis1;
r2 := strtoint(ergebnis1);
ergebnis3 := Format('%.2f',[r2 * 2]);
Label3.Caption := ergebnis3;
ergebnis4 := Format('%.2f',[pi* r2 *r2]);
Label4.Caption := ergebnis4;

if lol = 3 then
ergebnis1 := Format('%.2f',[d / 2]);
Label1.Caption := ergebnis1;
r2 := strtoint(ergebnis1);
ergebnis2 := Format('%.2f',[2* pi * r2]);
Label2.Caption := ergebnis2;
ergebnis4 := Format('%.2f',[pi* r2 * r2]);
Label4.Caption := ergebnis4;

if lol = 4 then
ergebnis1 := Format('%.2f',[pi * A / 2]);
Label1.Caption := ergebnis1;
r2 := strtoint(ergebnis1);
ergebnis2 := Format('%.2f',[2* pi * r]);
Label2.Caption := ergebnis2;
ergebnis3 := Format('%.2f',[r2* 2]);


end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin

case Combobox1.ItemIndex of
0: lol := 1;
1: lol := 2;
2: lol := 3;
3: lol := 4;
end;

if lol = 1 then
Edit1.Enabled := True;

if lol = 2 then
Edit2.Enabled := True;

if lol = 3 then
Edit3.enabled := true;

if lol = 4 then
Edit4.enabled := True


end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Enabled := False;
Edit2.Enabled := False;
Edit3.Enabled := False;
Edit4.Enabled := False;
end;

end.





Danke schön schonmal im voraus!
Greets

DeddyH 4. Okt 2007 14:59

Re: Probleme mit einem Rechner
 
Hast Du auch in alle Edits eine Fließkommazahl eingetragen?

Matze 4. Okt 2007 15:01

Re: Probleme mit einem Rechner
 
Kann es sein, dass in einem der Edits nichts steht? Das musst du noch überprüfen (bsp. mit Delphi-Referenz durchsuchenTryStrToFloat).

Des weiteren wäre es evtl. sinnvoll, wenn du Delphi-Referenz durchsuchencase of anstelle der vielen if nutzen würdest, wie du es an anderen Stellen im Code auch machst:

Delphi-Quellcode:
case lol of
  1: begin

     end;
  2: begin

     end;
  // ...
end;
Auch das könntest du vereinfachen:

Delphi-Quellcode:
case Combobox1.ItemIndex of
0: lol := 1;
1: lol := 2;
2: lol := 3;
3: lol := 4;
end;
und zwar so:

Delphi-Quellcode:
lol := Combobox1.ItemIndex + 1;

brinkee 4. Okt 2007 15:03

Re: Probleme mit einem Rechner
 
Hi,

erstmal nicht:

Delphi-Quellcode:
if lol = 1 then
ergebnis2 := Format('%.2f',[2* pi * r]);
Label2.Caption := ergebnis2;
ergebnis3 := Format('%.2f',[2* r]);
Label3.Caption := ergebnis3;
ergebnis4 := Format('%.2f',[pi* r * r]);
Label4.Caption := ergebnis4;
sondern: in deinem Fall wohl eher:

Delphi-Quellcode:
if lol = 1 then
begin
  ergebnis2 := Format('%.2f',[2* pi * r]);
  Label2.Caption := ergebnis2;
  ergebnis3 := Format('%.2f',[2* r]);
  Label3.Caption := ergebnis3;
  ergebnis4 := Format('%.2f',[pi* r * r]);
  Label4.Caption := ergebnis4;
end;
Aber das schlimmste ist, dass Du mit

Delphi-Quellcode:
r2 := strtoint(ergebnis1);
Versuchst, einen String, in dem '1.45333' oder so (also ein Gleitkommawert in einen String konvertert), in ein Integer umzuwandeln, also eine Ganzzahl. Da meckert er mit Recht. Alo entweder runden, oder in Float konvertieren.

LG, Markus

Patrick162 4. Okt 2007 15:12

Re: Probleme mit einem Rechner
 
Meinst du wenn ich die exe starte?

tschuldigung, bin noch ein anfänger xD

also, man wählt aus was vorgegeben ist und nur dieses edit wird freigegeben.
z.B edit 1 für r.
dann habe ich 3, 3,0 und 3.0 eingegeben und jedes mal kommt der error


Edit: ok danke, ich probiers mal!

DeddyH 4. Okt 2007 15:14

Re: Probleme mit einem Rechner
 
Zitat:

Zitat von Patrick162
also, man wählt aus was vorgegeben ist und nur dieses edit wird freigegeben.

Und die anderen Edits sind dann leer? Dann benutz TryStrToFloat statt StrToFloat.

brinkee 4. Okt 2007 16:47

Re: Probleme mit einem Rechner
 
So, mit deinen Edits ist alles im Lot. Ich weiß zwar nicht genau, was Du damit vorhast, aber okay...

Delphi-Quellcode:
[..]

var
  Form1: TForm1;
  r, u, d, A, r2: extended;
  ergebnis1, ergebnis2, ergebnis3, ergebnis4: string;
  pi: extended;
  lol: integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

r := strtofloat(Edit1.Text);
u := strtofloat(Edit2.text);
d := strtofloat(Edit3.Text);
A := strtofloat(Edit4.Text);
pi := 3.14159265358;

if lol = 1 then
begin
  ergebnis2 := FloatToStr(2* pi * r);
  Label2.Caption := ergebnis2;
  ergebnis3 := FloatToStr(2* r);
  Label3.Caption := ergebnis3;
  ergebnis4 := FloatToStr(pi* r * r);
  Label4.Caption := ergebnis4;
end;

if lol = 2 then
begin
  ergebnis1 := FloatToStr(u / 2 * pi);
  Label1.Caption := ergebnis1;
  r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!!
  ergebnis3 := FloatToStr(r2 * 2);
  Label3.Caption := ergebnis3;
  ergebnis4 := FloatToStr(pi* r2 *r2);
  Label4.Caption := ergebnis4;
end;

if lol = 3 then
begin
  ergebnis1 := FloatToStr(d / 2);
  Label1.Caption := ergebnis1;
  r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!!
  ergebnis2 := FloatToStr(2* pi * r2);
  Label2.Caption := ergebnis2;
  ergebnis4 := FloatToStr(pi* r2 * r2);
  Label4.Caption := ergebnis4;
end;

if lol = 4 then
begin
  ergebnis1 := FloatToStr(pi * A / 2);
  Label1.Caption := ergebnis1;
  r2 := strtofloat(ergebnis1);// StrToFloat, statt StrToInt!!!
  ergebnis2 := FloatToStr(2* pi * r);
  Label2.Caption := ergebnis2;
  ergebnis3 := FloatToStr(r2* 2);
end;

end;
[...]
Wie gesagt: beschäftige Dich mal damit, was String, Integer, Float, Real usw. bedeuten und wie man sie ineinander umwandelt. Mir scheint, als hättest Du von Variablentypen noch nie etwas gehört...

LG, Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz