Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid - Minimum, Maximum, Durchschnitt bestimmen (https://www.delphipraxis.net/99839-stringgrid-minimum-maximum-durchschnitt-bestimmen.html)

Tormentor32 20. Sep 2007 13:47

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Häng das Bild doch einfach als Anhang an dein Posting dran, dann können auch die, bei denen Imageshack gesperrt ist deinen Fehler sehen!

tr909 20. Sep 2007 13:53

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Der Fehler tritt wohl auf, wenn in der Zelle kein Wert steht. Probier mal so.

Delphi-Quellcode:
var //DCL Abweichung
    AbweichungsQuadrat: single;
    Standardabweichung: single;
    temp: double;
begin

//Abweichung ermitteln
Mittelwert:= summe / (sgMess.RowCount-1);
AbweichungsQuadrat:=0;
for i:= 1 to sgMess.RowCount-1 do
begin

try
 temp := StrToFloat(sgMess.Cells[1,i]);
except
 temp := 0;
end;

AbweichungsQuadrat:=AbweichungsQuadrat + (temp) - Mittelwert) * (temp) - Mittelwert);
Standardabweichung:= SQRT((AbweichungsQuadrat)/(sgMess.RowCount-1)*(temp) -1);
end;
edAbw.text:=FloatToStr(Standardabweichung);

end;

Oder sorg dafür das bei keinem Wert 0 drin steht.

Gruß
tr909

atgis 20. Sep 2007 14:02

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Also ich hab jetzt nochmal gebastelt:

Ausgangsproblem war das hier:
Delphi-Quellcode:
//Abweichung ermitteln
Mittelwert:= edMittel.text;
AbweichungsQuadrat:=0;
for i:= 1 to Anzahl do
 AbweichungsQuadrat:=AbweichungsQuadrat + (x[i] - Mittelwert) * (x[i] - Mittelwert);
Standardabweichung:= SQRT(AbweichungsQuadrat/(Anzahl(Zahlenfeld) -1)
Mir ist aber noch unklar was Zahlenfeld genau ist?!

Ich habe jetzt das hier mal gemacht:

Delphi-Quellcode:
var AbweichungsQuadrat: single;
    Standardabweichung: single;

begin
//Abweichung ermitteln
Mittelwert:= summe / (sgMess.RowCount-1);
AbweichungsQuadrat:=0;
for i:= 1 to sgMess.RowCount-1 do
 AbweichungsQuadrat:=AbweichungsQuadrat + (StrToFloat(sgMess.Cells[1,i]) - Mittelwert) * (StrToFloat(sgMess.Cells[1,i]) - Mittelwert);
 Standardabweichung:= SQRT((AbweichungsQuadrat)/(sgMess.RowCount-1)*(StrToFloat(sgMess.Cells[1,sgMess.RowCount-1])) -1);

edAbw.text:=FloatToStr(Standardabweichung);
end;
Es rechnet jetzt auch einen Wert aus...aber nicht mit allen Werten :gruebel: ...
Ich habe eine Liste in der alle Werte 0019 sind...da gibt es also keine Abweichung und das Prog. stürzt mit einer Exception "keine Gültige Gleitkomma-Operation" ab...das müsste man noch abfangen...

Mh...bloß stimmen die ergebnisse auch?

atgis 20. Sep 2007 15:40

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
So ich habs endlich :-D...

Also ich hab eine Bsp. Rechnung gefunden. Ich möchte es mal kurz erklären:

Die Standardabweichung ist eine einfache nummerische Transformation der Varianz. Sie entspricht der Quadratwurzel aus der Varianz.

Die Varianz basiert auf der Summe der quadrierten Abweichungen jedes Variablenwertes vom arithmetischen Mittel geteilt durch die Anzahl der Variablen minus 1 (n-1).

Beispiel: Die Varianz der Altersangaben 18, 21, 21, 27, 27, 27, 30, 31 und 45 berechnet man wie folgt:

Mittelwert:
18+21+21+27+27+27+30+31+45 = 247
247 / 9 = 27,44444444

Varianz:
18-27,44444444² = 89,197
21-27,44444444² = 41,530
21-27,44444444² = 41,530
27-27,44444444² = 0,197
27-27,44444444² = 0,197
27-27,44444444² = 0,197
30-27,44444444² = 6,531
31-27,44444444² = 12,642
45-27,44444444² =308,197

Summe = 500,218531

Standardabweichung:
Wurzel aus(500,218531 / 9 -1)
= 7,91 Jahre




In Delphi sieht es nun so aus:

Delphi-Quellcode:
Mittelwert:= summe / (sgMess.RowCount-1);
AbweichungsQuadrat:=0;
for i:= 1 to sgMess.RowCount-1 do
 AbweichungsQuadrat:=AbweichungsQuadrat + (StrToFloat(sgMess.Cells[1,i]) - Mittelwert) * (StrToFloat(sgMess.Cells[1,i]) - Mittelwert);
 Standardabweichung:= SQRT((AbweichungsQuadrat)/(sgMess.RowCount-2));

edAbw.text:=FloatToStrF(Standardabweichung, ffFixed, 10, 2);
Vielen Danke an alle, die mir so tatkräftig geholfen haben!

pstruh 20. Sep 2007 18:35

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Hallo atgis!
Schön, dass wir dir helfen konnten. War heute nicht am PC, sonst hätte ich schon früher bemerkt, dass der Divisor ja nur "n-1", in unserem Fall also verkürzt "RowCount-2", ist. Aber bedenke bitte, das gilt nur, wenn es EINE fixe oberste Zeile gibt!! Allgemeingültig muss es heissen: "RowCount-FixedRows-1" (Gibt vielleicht einen Extrapunkt in der mündlichen Prüfung. Sprich das ruhig an und erkläre es - macht einen guten Eindruck, kostet Zeit und die Prüfer können weniger selber Fragen).
Tja, dann viel Erfolg am Montag!
Gruß aus Hamburg

grenzgaenger 20. Sep 2007 20:22

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
in aller regel verwendet man n - 1 als divisor und nicht n. ausser es sind bestimmte voraussetzungen gegeben.

PPS: welche art von mittelwert willste eigentlich? es gibt davon viele mit jeweils speziellen einsatzbereichen... :roll:

grenzgaenger 20. Sep 2007 20:24

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
*gelöscht*


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.
Seite 5 von 5   « Erste     345   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz