Autor Beitrag
Roomi
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 14.01.06 12:21 
Hallo !

Wir haben versucht ein Unterprogramm in Form von einer Funktion zu erstellen.
Wir wollen den Mittelwert von den in einem StringGrid eingegebenen Zahlen berechnen, dazu soll die Summer dieser Zahlen in der Function berechnet werden. In der Procedure greifen wir dann auf die Summe zurück, doch die aktuelle Procedure greift nicht auf Unterprogramm zurück.

Quelltext:


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:
const n=5;
type Zahlen=array[0..n]of byte;
var
  FormFunction: TFormFunction;

implementation

{$R *.DFM}


function summe(var Z:zahlen;n:integer):real;
var i,sum:integer;
begin

     sum:=0 ;
     i:=0;

     while i<=n do
     begin
     summe:=sum+Z[i];
     i:=i+1;

     end;
end;

procedure TFormFunction.ButtonmittelwertClick(Sender: TObject);
var mittelw,zahl:real;
    i:integer;
    Z:zahlen;
begin
     for i:=0 to n-1 do
     Z[i]:=strtoint(Stringgrid1.cells[i,1]);
     begin
          if zahl<0 then
          zahl:=abs(zahl);
          ShowMessage('Die eingegebene Zahl ist kleiner 0, es wird mit dem Betrag gerechnet.')
      end;
      begin
     mittelw:=summe/n;
     end;
     end;
     showMessage(floattostr(mittelw));
end;

end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 14.01.06 13:18 
Deklaration: function summe(var Z:zahlen;n:integer):real;

Aufruf: mittelw:=summe/n;


Da Fehlt doch was!

Überprüf doch mal, ob sich da nicht noch ein paar Parameter dazugehören.

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 14.01.06 13:19 
Moin und :welcome: im Forum!

Du hast etwas "Unordnung" in deinen begin-end-Klammern. :wink: Probier das mal 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:
const
  n = 5;  

type
  Zahlen = array[0..n] of byte;  

function summe(var Z: Zahlen; N: integer): Real;
  var
    i: Integer;  
begin  
  Result := 0;
  for i := 0 to n do;
    Result := Result +Z[i];
end;  
 
procedure TFormFunction.ButtonmittelwertClick(Sender: TObject);  
  var
    mittelw: real;
    i: integer;
    Z: zahlen;
begin  
  for i := 0 to n-1 do begin
    Z[i] := StrToInt(Stringgrid1.Cells[i,1]);
    if (Z[i] < 0) then begin
      Z[i] := Abs(Z[i]);
      ShowMessage('Die eingegebene Zahl ist kleiner 0, es wird mit dem Betrag gerechnet.')  
    end;
  end;
  mittelw := summe(Z,n) /n;
  ShowMessage(FloatToStr(mittelw));
end;

cu
Narses
Nine
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 14.01.06 16:17 
@[quote]Grenzgaenger

Ich gehöre zu Roomi und arbeite mit ihr an der Sache, aber da wir nicht so die Ahnung von Unterprogrammen haben, und gerade versuchen, da durch zu sehen, weiß ich nicht genau, was du meinst was fehlt! :oops:
Nine
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 14.01.06 16:32 
@Narses:

Das funktioniert so leider auch nicht. Wenn ich das ausprobiere, gibt er mir die FehlerMeldung, falsche integer-Werte auch wenns stimmt.
Woher weiß die function, dass result das ist was auf die summe geschrieben wird?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 14.01.06 16:41 
result ist der wert der die Funktion zurückgibt.

In klassischem Pascal wäre dies der name der Funktion:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function Func: Integer;
begin
  Func:= 1;
end;

entspricht
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function Func: Integer;
begin
  result := 1;
end;


Die Schleife in der Funktion hat auch eine falsche Grenze statt n muß es n-1 heißen.

_________________
Markus Kinzler.
Nine
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 14.01.06 19:06 
Das erklärt natürlich einiges mit dem Result.
Meine Mitstreiterin war sehr erfolgreich *lob* und hat das Programm zum Laufen gekriegt! :dance:
Bruder Lal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 31

WIN XP
Delphi 2005
BeitragVerfasst: Sa 14.01.06 19:12 
1. Du brauchst keinen Übergabeparameter N wenn doch nur die Unitweite Konstante n übergeben wird. Das kannst du einfach streichen, das n wird in der Funktion trotzdem funktionieren.
2. Die Funktion kannst du auch als Integer deklarieren, nicht als real. Sie bildet nur die Summe aus ganzen Zahlen(byte). Das hätte sonst keine Auswirkungen, aber ich glaube Integer verbraucht weniger Platz(bin mir aber nicht sicher).
edit: natürlich solltest du schon irgendwas übergeben.. da steht grade
Zitat:

mittelw:=summe/n;