| Autor |
Beitrag |
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.02.09 23:29
Hallo Leute, ich bin gerade in meine Delphi-Anfängen.
Ist gerade mal ne Schulaufgabe, dir wir lösen sollen, allerdings nicht in dem Ausmaß, in dem ich hier am werken bin ^^
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TForm1.Button1Click(Sender: TObject); var z1, z2, z3, klein, mittel, gross : Real; begin z1:= StrToFloat(Edit1.Text); z2:= StrToFloat(Edit2.Text); z3:= StrToFloat(Edit3.Text);
gross := z1; mittel:= z2; klein := z3;
if (z1<z2) then begin klein := z1; mittel:= z2; end else begin klein := z2; mittel:= z1; end;
if(klein<z3) then begin gross := z3; if (gross<mittel) then begin gross := mittel; mittel:= z3; end; end else begin gross := mittel; mittel:= klein; klein := z3; end;
Edit4.Text := FloatToStr(gross); Edit5.Text := FloatToStr(mittel); Edit6.Text := FloatToStr(klein); end; |
Wie ihr seht, habe ich die "trace()"-Funktion auskommentiert. Allerdings denke ich mittlerweile, dass ich überhaupt keine function dafür verwenden darf, da die immer einen Rückgabewert braucht.
Hab dann also diese procedure geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure trace; begin ListBox1.items.add(FloatToStr(gross)); ListBox1.items.add(FloatToStr(mittel)); ListBox1.items.add(FloatToStr(klein)); end; |
Soll also, wie man schon sieht, immer, wenn ich die Prozedur aufrufe, die aktuelle Reihenfolge in die ListBox eintragen.
Allerdings wird dabei alles bis auf "FloatToStr" nicht anerkannt, also rot unterstrichen.
Die Prozedur befindet sich unter der Einbindung des Projektfenster bzw. unter "{$R *.dfm}" (Das bindet doch dieses optische Fenster ein, oder?).
Habt ihr ne Idee, was ich falsch mache?
achja und nicht vergessen, ich mach die dümmsten Fehler. Also anfängermäßig denken ^^
Gr33tZ
Rn
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 16.02.09 23:39
Du musst der Prozedur auch sagen, dass sie zum Formular gehört, sonst kennt sie das nicht.
Delphi-Quelltext 1:
| procedure TForm1.trace; |
und diese Prozedur dann noch oben unter private hinzufügen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 16.02.09 23:54
Hallo und  im Forum!
Und zudem müsstest du noch die Werte als Parameter übergeben: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Trace(klein, mittel, gross: Real); begin ListBox1.items.add(FloatToStr(gross)); ListBox1.items.add(FloatToStr(mittel)); ListBox1.items.add(FloatToStr(klein)); end; | Dann kannst du das auch mit diesen Parametern aufrufen: Delphi-Quelltext 1:
| Trace(klein, mittel, gross); |
Nebenbei kannst du auch einfach diese Zeilen procedure TForm1. ... unten hinschreiben und Strg + Shift + C drücken, beim kostenlosen Turbo Delphi oder allem anderen, was keine Personal Edition oder zu alt ist, geht das. Dann wird der Teil oben unter TForm1 = class... automatisch ergänzt. (Oder umgekehrt)
Zuletzt bearbeitet von jaenicke am Mo 16.02.09 23:57, insgesamt 1-mal bearbeitet
|
|
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.02.09 23:57
habs jetzt so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| private procedure trace; var klein, mittel, gross : Real; .... procedure TForm1.trace; begin ListBox1.items.add(FloatToStr(gross)+ ' '+FloatToStr(mittel)+ ' '+ FloatToStr(klein)); end; |
Funktioniert super. Danke dir.
Naja, die Art und Weise meiner Programmierung scheint nicht so der Hammer, denn ich habe für einen Durchlauf 2 mal die gleiche Zahl drin ^^
aber naja. Wenigstens funktioniert das Teil an sich.
Thx.
Edit: Jap, so ginge es auch jaenicke und ist sicher auch die besser Variante, falls es zu Missständen mit mehreren Funktionen kommt, nech? Werd's ändern.
Danke dir ebenfalls.
Boah Delphi ist soo kompliziert xD
--- Moderiert von Narses: Beiträge zusammengefasst---
Ah okay. wenn ich schon einmal dabei bin.
Geht's galanter als meine Lösung hier? Also die Sortierung der 3 Zahlen inkl. Ausgabe usw.?
Würde mich echt interessieren.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.02.09 00:30
regsnerven hat folgendes geschrieben : | | und ist sicher auch die besser Variante, falls es zu Missständen mit mehreren Funktionen kommt, nech? |
Globale Variablen sollte man möglichst vermeiden, denn alleine an den Variablen sieht man nicht wo sie einen Wert bekommen, wo sie benutzt werden, etc.
Deshalb macht es den Programmablauf unübersichtlicher. Bei so einem kleinen Programm ist das natürlich kein Problem, aber bei großen Programmen schon. Natürlich kann man das mit Kommentaren dazuschreiben, aber man überblickt es trotzdem schwerer.
regsnerven hat folgendes geschrieben : | | Boah Delphi ist soo kompliziert xD |
Das Gefühl vergeht langsam, wenn man mit der Zeit versteht warum was wie passiert.
regsnerven hat folgendes geschrieben : | | Geht's galanter als meine Lösung hier? Also die Sortierung der 3 Zahlen inkl. Ausgabe usw.? |
Für 3 Zahlen gibt es da nicht so viele Möglichkeiten. Deine ist schon in Ordnung.
Sinnvoll wäre es z.B. nicht alles in dem ButtonClick zu machen, sondern das Sortieren in einer wiederverwendbaren Prozedur zu machen. Zum Beispiel so: 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: 31: 32: 33: 34:
| procedure TForm1.Button1Click(Sender: TObject);
procedure Swap(var Value1, Value2: Real); var tmp: Real; begin tmp := Value1; Value1 := Value2; Value2 := tmp; end;
procedure Sort3Numbers(var Value1, Value2, Value3: Real); begin if Value1 > Value2 then Swap(Value1, Value2); if Value2 > Value3 then Swap(Value2, Value3); if Value1 > Value2 then Swap(Value1, Value2); end;
var z1, z2, z3: Real; begin z1:= StrToFloat(Edit1.Text); z2:= StrToFloat(Edit2.Text); z3:= StrToFloat(Edit3.Text);
Sort3Numbers(z1, z2, z3);
Edit4.Text := FloatToStr(z1); Edit5.Text := FloatToStr(z2); Edit6.Text := FloatToStr(z3); end; | Zur Erklärung: Durch das var vor den Parametern kannst du diese in der Prozedur verändern. Die übergebenen Variablen z1, z2 und z3 haben danach diese Werte.
So sieht man vielleicht besser was eigentlich passiert.
regsnerven hat folgendes geschrieben : | | Würde mich echt interessieren. |
Das ist schon einmal sehr gut fürs Programmieren lernen. (Interesse daran haben und einfach immer ausprobieren.) 
|
|
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.02.09 21:16
So in der Art hat das auch ein Kumpel von mir gemacht.
Der hat das alles aber in einer While-Schleife gepackt mit der Bedingung (z1<z2 ^ z2<z3) (glaube ich).
Das mit dem Swap hat er da so in etwa auch angewandt.
Jap wiederverwendbar ist natürlich am besten, aber das brauche ich dann ja erst später, wenn das Programm dann mal größer werden sollte ^^
Jap. Interesse habe ich so gut wie immer. Ich programmiere unheimlich gerne. bis jetzt fehlt mir nur eine sinnvolle (und umsetzbare) Idee. Muss mich noch einmal an die Datenbank-Anknüpfung rantasten. Allerdings wird das wohl soo schnell nichts werden, da Delphi gerade auf meinem System versagt und ich das immer im Virtual PC laufen lassen muss. ~.~
Naja. Danke für eure Hilfe und deinen Vorschlag, jaenicke
Bis denne Leute, ich melde mich wieder 
|
|
|