| Autor |
Beitrag |
paderborner
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 22.04.09 14:41
Hallo,
ich möchte eine Delphi-Programm schreiben (also in Pascal) mit dem über 3 Edit-Felder drei Zahlen einlesen kann und Delphi mir dann in einem Label die kleinste von den drei Zahlen ausgibt. Leider funktioniert das bisher nicht. Woran könnte das liegen?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); VAR z1,z2,z3:integer; ergebnis: integer;
begin
if z1>z2 then ergebnis:=z2 else ergebnis:=z1; if z2>z3 then ergebnis := z3;
label1.Caption := StrToInt(ergebnis);
end;
end. |
z1,z2 ...sind die 3 Edit-Felder.
Danke schon mal im vorraus.
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mi 22.04.09 14:50
Hi
Du hast da einen logischen Fehler drin: Um Min(a; b; c) zu bilden, kannst du auch Min(Min(a; b); c) bilden und das ganze so auf zwei Argumente pro Min()-Aufruf reduzieren. Was du aber machst, ist Min(z2, z3) für z1 > z2 und Min(z2, z3) sonst, wobei du aber im letzten Fall auf z2 prüfst und z1 ausgibst.
Du musst also auch wirklich Min(z1, z2) = 'ergebnis' mit z3 vergleichen, nicht in jedem Fall z2 mit z3.
Hilft das? 
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Mi 22.04.09 14:54
Ich glaube, der Denkfehler liegt darin begründet, dass z1,z2,z3 Integer-Variablen sind und eben keine Edit-Felder. Du solltest also vor dem von Hidden angemerkten Vergleich die Texte aus den Edits in Integer konvertieren.
Delphi-Quelltext 1:
| z1 := StrToInt (Edit1.Text); |
Das ganze kann/muss dann noch mit Gültigkeitsprüfung versehen werden.
Um dann das Ergebnis auszugeben muss eine Konvertierung von Integer nach String passieren.
Delphi-Quelltext 1:
| Label1.Caption := IntToStr (ergebnis); |
|
|
paderborner 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 22.04.09 15:07
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mi 22.04.09 16:05
Hi
Am besten du zeigst mal den Quelltext fürs ein- und Auslesen der Zahlen. Welche Zahlen stekst du denn rein, welchen Output erwartest du und welcher kommt denn eigentlich?
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
paderborner 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 22.04.09 18:28
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 22.04.09 19:07
|
|
paderborner 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 22.04.09 19:30
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mi 22.04.09 19:32
Nee, so funktioniert das nur wenn z2 nicht das größte kleinste ist.
So gehts:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.Button1Click(Sender: TObject); var z1, z2, z3: Integer; ergebnis: Integer; begin z1 := StrToInt(Edit1.Text); z2 := StrToInt(Edit2.Text); z3 := StrToInt(Edit3.Text);
if z1 > z2 then ergebnis := z2 else ergebnis := z1;
if z3 < ergebnis then ergebnis := z3;
Label2.Caption := IntToStr (ergebnis);
end;
end. |
EDIT: @jaenicke: stimmt, ich dachte irgendwie an größte und nicht kleinste Zahl
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Zuletzt bearbeitet von jakobwenzel am Mi 22.04.09 19:40, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 22.04.09 19:32
Wie wär eher so? Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); var z1, z2, z3: Integer; ergebnis: Integer; begin z1 := StrToInt(Edit1.Text); z2 := StrToInt(Edit2.Text); z3 := StrToInt(Edit3.Text);
if z1 > z2 then ergebnis := z2 else ergebnis := z1;
if ergebnis > z3 then ergebnis := z3; Label2.Caption := IntToStr(ergebnis); end; | // EDIT:
@ jakobwenzel: Nee, falschrum das zweite if. 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 22.04.09 20:08
Oder so?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| uses math;
procedure TForm1.Button1Click(Sender: TObject); var z1, z2, z3: Integer; ergebnis: Integer; begin z1 := StrToInt(Edit1.Text); z2 := StrToInt(Edit2.Text); z3 := StrToInt(Edit3.Text);
ergebnis := MinIntValue([z1,z2,z3]); Label2.Caption := IntToStr(ergebnis); end; |
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 22.04.09 20:13
Wobei das ja vermutlich ne Übung für die Schule ist, da ist die Lösung wohl nicht erwünscht. 
|
|
Die Muhkuh
      
Beiträge: 33
|
Verfasst: Mi 22.04.09 20:17
Sollte man nicht lieber noch StrToIntDef oder TryStrToInt verwenden, dass es bei Fehleingaben nicht knallt?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 22.04.09 20:18
Wenn man etwas in Delphi schreiben soll, wieso soll man da nicht bereits eingebaute Funktionen nutzen? Macht ja irgendwie keinen Sinn.
|
|