Autor Beitrag
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 ^^


ausblenden volle Höhe 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:
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;

  //trace();

  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;

 //  trace();

  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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mo 16.02.09 23:39 
Du musst der Prozedur auch sagen, dass sie zum Formular gehört, sonst kennt sie das nicht.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 16.02.09 23:54 
Hallo und :welcome: im Forum! ;-)

Und zudem müsstest du noch die Werte als Parameter übergeben:
ausblenden 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:
ausblenden 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



BeitragVerfasst: Mo 16.02.09 23:57 
habs jetzt so gemacht:

ausblenden 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 user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.02.09 00:30 
user profile iconregsnerven hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconregsnerven hat folgendes geschrieben Zum zitierten Posting springen:
Boah Delphi ist soo kompliziert xD
Das Gefühl vergeht langsam, wenn man mit der Zeit versteht warum was wie passiert. ;-)

user profile iconregsnerven hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden volle Höhe 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:
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. ;-)

user profile iconregsnerven hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: 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 :D