Autor Beitrag
Spurius
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Do 11.09.03 19:16 
hallo,
ich hab folgende function:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function getschnitt (summe:integer):integer;
 var i:integer;
  begin
   summe := 0;
   for i := 1 to 7 do   begin
   summe := summe + strtoint(form2.memo1.lines[i]) ;
   end;
   result := summe;
  end;

wenn ich mir jetzt das result anzeigen lasse ist es 0?
was hab ich da falsch gemacht?
MfG
Spurius


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: Do 11.09.03 20:10 
Hallo Spurius!

Was soll denn das werden, wenns mal fertig ist?

Du übergibst einen Parameter "summe", den Du nie auswertest. Eine lokale Variable hätte das auch getan - oder ein direkter Zugriff auf Result!

So ist es besser:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function getschnitt :integer;
  var i:integer;
begin
  Result := 0;
  for i := 1 to 7 do
  begin
    Result := Result + strtoint(form2.memo1.lines[i]) ;
  end;
end;

- das hat die gleiche Funktion.

Wenn die Codeoptimierung eingeschaltet ist (Projekt - Optionen - Compiler) kann man nach dem letzten sinnvollen Zugriff im Debugger sowieso nicht mehr auf die Variable zugreifen ("auf xxx kann wegen Codeoptimierung nicht zugegriffen werden").

Von dem obengenannten überflüssigen Dingen abgesehen kann ich keinen Fehler finden - es sollte klappen. Und da Du StrToInt (nicht StrToIntDef) verwendest, muß auch das Memo korrekte Daten enthalten - ansonsten gäbe es eine Exception.

Oder sollte das Memo lauter Nullen enthalten? Dann wäre das Ergebnis ja korrekt. Ist das überhaupt das richtige Memo?

Gruß

Dietmar Brüggendiek
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 11.09.03 20:16 
Hi,

zunächst mal hast Du eine eigenwillige Code-Formatierung. Du solltest dich an den Object Pascal Style Guide halten, damit andere deinen Code besser lesen können.

Ich nehme an, dass du die Werte in den Memo-Zeilen summieren möchtest. Aber warum nimmt deine Funktion einen Parameter auf, wenn der sowieso gleich auf 0 gesetzt wird. Dann kannst du ihn auch genauso gut weglassen. Ausserdem fängt der Index eines Memos bei 0 an. Die erste Zeile fängt bei 0 an. Für den Endwert der Schleife würde ich die Anzahl der Memozeilen - 1 nehmen. Das würde dann so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function getschnitt: integer;
var
  i: integer;
  summe: integer;
begin
  summe := 0;
  for i := 0 to Form2.Memo1.Lines.Count - 1 do
    summe := summe + strtoint(Form2.Memo1.lines[i]) ;
  Result := summe;
end;


Wenn etwas unklar ist, frag nochmal.

MFG

- Ernesto -
Spurius Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Fr 12.09.03 10:49 
Hallo,
also das mit functionen ist mir noch nicht so ganz klar, ich wollte das halt mal mit functionen machen. Es stimmt, ich will die zahlen in memo1 summieren, aber nicht die erste zeile, das steht drin, dass das schulaufgabennoten sind(soll ein notendrchschnittserrechner werden).

ich hab halt die function mit dem ergebnis result, aber wenn ich z.B. schreib bei button1.click
ausblenden Quelltext
1:
label1.caption := strtoint(result) dann ist das 0					

oder muss ich schreiben label1.getschnitt? funzt auch nicht.
Also wär echt nett wenn jemand geduld mit mit hätte und mir den fehler zeigen könnte. :D
MfG
Spurius
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Fr 12.09.03 10:55 
Hi Spurius,

eine Funktion ruft man nicht mit result auf, sondern mit dem Funktionsnamen. Also müsstest du das so machen:

ausblenden Delphi-Quelltext
1:
Label1.Caption := IntToStr(gettschnitt);					


Schau dir am besten mal ein Paar gute Tutorials zum Thema Prozeduren und Fuktionen an. Z.B. auf delphi-source.de

MFG

- Ernesto -


Zuletzt bearbeitet von ErnestoChe am Fr 12.09.03 10:58, insgesamt 1-mal bearbeitet
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 12.09.03 10:57 
hi,
du musst das so machen:

ausblenden Delphi-Quelltext
1:
label1.caption := IntToStr(getschnitt);					


Die Funktion gibt an der stelle an der du sie einsetzt den Result-Wert zurück. brauchst sie also nicht so ansprechen.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Spurius Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 142

Win XP Home
D3 Prof, D7 Prof
BeitragVerfasst: Fr 12.09.03 12:45 
Hallo nochmal,
jetzt klappt es! Vielen Dank! :D :D :D
MfG
Spurius