Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kleinste Zahl
paderborner - Mi 22.04.09 14:41
Titel: Kleinste Zahl
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 - 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? ;)
iKilledKenny - 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 - Mi 22.04.09 15:07
Hidden hat folgendes geschrieben : |
Hi :)
Du musst also auch wirklich Min(z1, z2) = 'ergebnis' mit z3 vergleichen, nicht in jedem Fall z2 mit z3.
Hilft das? ;) |
Hi... danke erstmal. Allerdings bin nicht ich mir jetzt nich sicher, wie ich das umsezten soll. (sorry). Nehmen wir mal an, ich würde nur von 2 Zahlen die kleinste heraus haben wollen. Dann könne ich doch schreiben:
Delphi-Quelltext
1:
| if z1>z2 then ergebnis:=z2 else ergebnis:=z1; |
Doch leider wird mir als Ergebniss dann eine völlig falsche Zahl angegeben..
Mfg
paderborner
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Hidden - 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,
paderborner - Mi 22.04.09 18:28
Der Code für das einlesen der Zahlen aus den Edit-Feldern ist hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Edit1Change(Sender: TObject); begin z1 := StrToInt (Edit1.Text); end;
procedure TForm1.Edit2Change(Sender: TObject); begin z2 := StrToInt (Edit2.Text) end;
procedure TForm1.Edit3Change(Sender: TObject); begin z3 := StrToInt (Edit3.Text) end;
end. |
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
jaenicke - Mi 22.04.09 19:07
paderborner hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); VAR z1,z2,z3:integer; ergebnis: integer;
begin
if z1>z2 then ergebnis:=z2 else ergebnis:=z1; | |
Da du gleichnamige lokale Variablen deklariert hast, werden die globalen mit den eingelesenen Werten ja ignoriert.
Aber was hat es für einen Sinn das OnChange der Edits zu benutzen? :shock:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| 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; ...
EditErgebnis.Text := ... |
paderborner - Mi 22.04.09 19:30
Yeahh!! Danke an Euch alle! Es funktioniert 8) 8) . Hier der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| 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 z2 > z3 then ergebnis := z3 else ergebnis := z2;
if z1 > z3 then ergebnis := z3 else ergebnis := z1;
Label2.Caption := IntToStr (ergebnis);
end;
end. |
Schöne grüße aus Paderborn :wink:
jakobwenzel - 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
jaenicke - 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. ;-)
Delete - 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 - 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. :mrgreen:
Die Muhkuh - Mi 22.04.09 20:17
Sollte man nicht lieber noch StrToIntDef oder TryStrToInt verwenden, dass es bei Fehleingaben nicht knallt?
Delete - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!