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 user profile iconChristian 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 user defined image oder user defined image 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 user profile iconChristian 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

user profile iconKennyblue 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

Delphi-Quelltext
1:
Addiere(summe, 3,4);                    

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