Autor |
Beitrag |
gecko676
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 13.03.04 15:39
Hallo,
gleich mal eine Entschuldigung. Ich bin ein absoluter Neuling beim Programmieren!
Ich habe einen StringGrid mit 1-n Zeilen und möchte aus einer Spalte die Summe bilden und daraus wiederum den Mittelwert
zur späteren Weiterverwendung.
Wie schon gesagt die Zeilenanzahl ist variabel.
Soll einem Programm zur einfachen statistischen Berechnung von Versuchsergebnissen dienen.
Danke im Voraus.
MfG
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 13.03.04 18:35
Addiere doch einfach die Zelleninhalt auf.
Delphi-Quelltext 1: 2: 3:
| Summe := 0; for i := 0 to StringGrid1.RowCount do begin Summe := Summe + StrToInt (StringGrid1.Cells [1,i]) |
Summe wäre dann Spalte 1 aufaddiert.
_________________ Gruß
Hansa
|
|
gecko676 
Hält's aus hier
Beiträge: 14
|
Verfasst: So 14.03.04 16:17
Danke!!!
Ich komme im Momment nicht mal auf die einfachsten Ansätze.
Also vielen Dank
|
|
gecko676 
Hält's aus hier
Beiträge: 14
|
Verfasst: So 14.03.04 18:38
Habe es jetzt mal in meinem Programm versucht, gibt ne Fehlermeldung: ''' kein Gültiger String!
Keine Ahnung warum!
Nächstes Problem wäre die zu addierenden Werte sind Gleitkommazahlen.
Also müsste man so etwas wie.
Delphi-Quelltext 1: 2: 3:
| Summe := 0; for i := 1 to StringGrid1.RowCount do begin Summe := Summe + Val(StringGrid1.Cells[1,i], Summe?, code); |
oder so ähnlich.
Achso, die ertse Zelle soll ausgeschlossen werden daher i:=1
Würde gern mein ganzes Programm mal hier rein stellen,
aber wie wäre das möglich
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: So 14.03.04 19:10
Val is eine Procedure und hat als solche kein Ergebnis. Das müsstest dann so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var tmp, summe: Extended; code: Integer;
tmp := 0; Summe := 0;
for i := 1 to StringGrid1.RowCount do begin Val(StringGrid1.Cells[1,i], tmp, code); Summe := Summe + tmp; end; |
optional kannst auch "code" auslesen und so auf fehler reagiern.
ich hoff es stimmt so...
raziel
_________________ JSXGraph
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 19.03.04 04:19
Warst wohl lange nicht mehr zuhause ?  Das mit dem Code und Val, das stimmt schon so, aber wie wäre es damit StrToInt duch StrToFloat zu ersetzen ? Wenn VAR summe : real; ? Oh, jetzt ist aber echt Schluß. 
_________________ Gruß
Hansa
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Fr 19.03.04 17:20
in letzter zeit mehr bei FPC
jo so gehts auch, aber wenn der string nich passt, gibs ne exception, bei Val nen netten error code, welches zeichen nich passt, das isn tick informativer
Delphi-Quelltext
geht auch, nur wird real nich von der FPU unterstützt. lieber single, double oder extended...
raziel
_________________ JSXGraph
|
|
gecko676 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 22.03.04 11:56
Hi,
hab ein paar Tage nicht mehr rein geschaut!
Danke für alle Tipps....

|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Di 23.03.04 00:57
hallo gecko676!
versuchs mal auf diese weise:
Delphi-Quelltext 1: 2: 3: 4: 5:
| for i := 1 to StringGrid1.RowCount-1 do begin Val(StringGrid1.Cells[1,i], tmp, code); if code = 0 then Summe:= Summe + tmp end; |
rowcount -1 deshalb, da du sonst eine zeile zu weit liest.
mit code = 0 kannst du überprüfen, ob die umwandlung geklappt hat - ich würde zuerst überprüfen, ob der ganze string richtig umgerechnet wurde, denn sonst könnte es vorkommen, dass du nur teile davon in der variablen 'tmp' zurückgeliefert werden. bei fehlern enthält 'code' die zahl der fehlerstelle
mfg, stefan
|
|