Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Hilfe bei Hausaufgabe Array,Procedure und record
Kennyblue - Di 24.06.08 19:24
Titel: Hilfe bei Hausaufgabe Array,Procedure und record
Hi,
ich hab ein Programm das aus einem Dynamischen Array besteht und dann die Minimal / Maximale Zahl und den Durchschnitt ausgibt für die Schule geschrieben.
Der Lehrer will aber das wir, das mit einem record und mit Prodecuren machen. Bekomm es einfach nicht hin. Würd mich freuen wenn mir jemand helfen kann.
So sieht mein Programm bis jetzt aus leider ohne rekord und ohne Proceduren:
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:
| var Form2: TForm2; i : integer ; index : integer ; Messwert : array of single ;
implementation
{$R *.dfm}
procedure TForm2.ButtonAufnehmenClick(Sender: TObject); begin SetLength(EingabeWert,10); Messwert[i] := StrToFloat (Edit1.Text) ; index := i; i := i+1; end;
procedure TForm2.ButtonusgebenClick(Sender: TObject); var n : integer ; a,b,max,min:single; begin max :=Messwert[0]; min :=Messwert[0]; for n := 0 to index do begin a := a+Messwert[n]; b := messwert[n]; if max < b then max := b else if min < b then min:= b;
end; i :=0 ; a := (max+min) / 2 ; Memo1.lines.add('Maximalwert ='+FloatToStr(max)); Memo1.lines.add('Minimalwert ='+FloatToStr(min)); Memo1.lines.add('Durchschnitt ='+Format ('%5.2f',[a]));
end;
end. |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Christian S. - Di 24.06.08 19:32
Hallo und :welcome:!
Zuerst möchte ich Dich bitten, den Titel zu ändern. Der sagt nix über das Thema aus, um das es hier geht. Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
Zu Deinem Problem: Mir ist nicht ganz klar, wo das Record und die Prozedur zum Einsatz kommen soll. Außerdem musst Du noch ein bisschen genauer werden, was Du bereits versucht hast und wo Du nicht weiter kommst. Denn: Wir helfen Dir gerne, aber nur wenn Du selber auch mitmachst!
Grüße
Christian
Kennyblue - Di 24.06.08 19:53
Also ich hab mir es so vorgestellt das ich das Einlesen der Werte in einer Procedure mache, so habe ich es ausprobiert bekomme aber Fehler und weiss nicht wie ich den wegbekomme. Also beim drücken von ButtonAufnehmen, soll die procedure Einlesen gestartet werden. Wo ist der Fehler im Bild ? :P
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Einlesen(Messwert,i ) ; begin SetLength(EingabeWert,10); Messwert[i] := StrToFloat (Edit1.Text) ; index := i; i := i+1; end; procedure TForm2.ButtonAufnehmenClick(Sender: TObject); begin Einlesen (Messwert,i); end; |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Christian S. - Di 24.06.08 19:59
Demnächst bei Fehlern auch direkt die Fehlermeldung mit angeben. In diesem Fall glaube ich, musst Du Dir erst einmal darüber klar werden, wie der Ablauf aussehen soll. Das sieht mir im Moment noch ein bisschen unüberlegtes "zusammen stoppeln" aus.
Mein Tipp, auch wenn er doof klingt: Schreib Dir in normalen Worten auf, was das programm machen soll.
Kennyblue - Di 24.06.08 20:08
Also das Programm soll beim Drücken von Button1 , die Eingegebnen Werte in ein Dynamschises Array schreiben und der Zeige soll immer +1 genommen werden damit Platz für die nächste Zahl gemacht wird.
Der Button Ausgeben soll, mit einer if Schleife den minimalen und den Maximalen Wert des Array ausgeben. Dann soll der Durchschnitt der beiden Werte ermittelt werden.
ps das programm läuft !! (was ich oben gepostet habe)
nun will ich aber , eine procedur aufrufen wenn ich den Button1 drücke.
Diese Procedur soll das machen was Button 1 bis jetzt macht.
Schwer zu erklären :P hoffe es versteht jemand..
Christian S. - Di 24.06.08 20:10
Kennyblue hat folgendes geschrieben: |
nun will ich aber , eine procedur aufrufen wenn ich den Button1 drücke.
Diese Procedur soll das machen was Button 1 bis jetzt macht. |
Okay. Und was genau sind in Deinem Programm globale Variablen und was müssen Parameter der Prozedur sein?
Wie musst Du die Prozedur deklarieren, damit sie auf Edit1 zugreifen kann - denn das gehört ja zur Form! :-) (Hier könnte auch ein Parameter helfen!)
Kennyblue - Di 24.06.08 20:25
hmm,
wenn ich das mal wüsste :P
sollte vielleicht dazu sagen das ich Delphi erst seit paar Monaten in der Schule habe.
Christian S. - Di 24.06.08 20:28
Du hast doch Deinen Quelltext da. Da siehst Du doch zumindest schonmal, welche Variablen global sind. Die als Parameter zu übergeben macht ja dann schonmal keinen Sinn.
oldmax - Mi 25.06.08 07:03
Hi
Ohne nun alles genau durchzulesen ist mir aufgefallen, das du die Parameter der Prozedure einlesen ohne Typ angibst. Da fehlt
Delphi-Quelltext
1:
| procedure Einlesen(Messwert : Array of String ????; i: Integer ) ; |
Bei Messwert bin ich mir nicht sicher, aber wenn es ein Array ist und danach sieht es aus, solltest du einen Typ deklarieren. Außerdem, wenn du Messwert ohne Var also
Delphi-Quelltext
1:
| procedure Einlesen(Var Messwert : Array of String ????; i: Integer ) ; |
schreibst, werden deine Änderungen nicht eingetragen, da eine Procedure diese dann nicht zurückgibt.
Ist das Array Messwerte global vereinbart, solltest du dieses auch nicht als Parameter übergeben.
Über den Code hab ich mir weiter keine Gedanken gemacht, ich denke, da sind noch ein paar weitere Gedankenfehler. Daher überleg dir erst einmal, was soll die Procedure wirklich, welche Information braucht sie, um wirklich sauber zu arbeiten und gibt sie diese Information auch wieder an das Programm, oder weiß nur sie selbst von den Werten, die den Variablen zugeordnet werden.
Ein einfaches Beispiel
Delphi-Quelltext
1: 2: 3: 4:
| Prozedure Addiere(Summe, Wert1, Wert2:Integer); Begin Summe:=Wert1+Wert2; End; |
Sieht toll aus, aber im Programm wird die Summe nicht verändert, auch wenn eine globale Variable existiert.
Der Aufruf
Addiere(Summe,3,4);bringt also nix.
Anders ist:
Delphi-Quelltext
1: 2: 3: 4:
| Prozedure Addiere(Var Summe:Integer; Wert1, Wert2:Integer); Begin Summe:=Wert1+Wert2; End; |
Nach Aufruf von
setzt die Variable Summe auf 7. Dabei ist es auch egal, ob der Aufruf
Delphi-Quelltext
1:
| Addiere(Ergebnis, 3,4); |
erfolgt. Dann wird die Variable Ergebnis eben auf 7 gesetzt.
Ich persönlich bevorzuge allerdings in Fällen der Werterückgabe Functions
Delphi-Quelltext
1: 2: 3: 4:
| Function Addiere(Wert1, Wert2:Integer): Integer; Begin Result:=Wert1+Wert2; End; |
dadurch ist klar:
Delphi-Quelltext
1:
| Ergebnis:=Addiere(3,4); |
Vielleicht hab ich es geschafft, mit diesen paar Zeilen etwas mehr Verwirrung zu schaffen......
( verdammt, wo sind die Smilies...)
Gruß oldmax
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!