Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - StringGrid Zellen addieren und Mittelwert bilden


gecko676 - Sa 13.03.04 15:39
Titel: StringGrid Zellen addieren und Mittelwert bilden
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 - 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.


gecko676 - So 14.03.04 16:17

Danke!!!

Ich komme im Momment nicht mal auf die einfachsten Ansätze.

Also vielen Dank


gecko676 - 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 - 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; { oder single bzw. double } 
      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


hansa - Fr 19.03.04 04:19

Warst wohl lange nicht mehr zuhause ? :lol: 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ß. 8)


raziel - Fr 19.03.04 17:20

in letzter zeit mehr bei FPC :oops:

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
1:
var summe: real;                    

geht auch, nur wird real nich von der FPU unterstützt. lieber single, double oder extended...


raziel


gecko676 - Mo 22.03.04 11:56

Hi,

hab ein paar Tage nicht mehr rein geschaut!

Danke für alle Tipps....


:wink:


grayfox - 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