Hallo ipb:
Ich habe mir Deine Antwort genau angesehen und versucht umzusetzen. Ich glaube, es müsste die Lösung sein:
Delphi-Quellcode:
//Gewichteter Mittelwert:
for i:=5 to 20 do
begin
for x:=i-4 to i do
begin
n:=1; //Darauf muss man erst mal kommen
n:=n*i; // nenner:=nenner+GEW[i]
GMW[i]:=GMW[i]+(Zahlen[X]/5)*n;//zaehler:=zaehler+Zahlen[i]*GEW[i]
end;
end;
//mittel:=zaehler/nenner
for x:=5 to 20 do
GMW[x]:=GMW[x]/n;
Ich fange mit den Gewichten bei 1 an und höre am Schluss mit 20 auf. Verwundert war ich, dass der erste Wert bei 2,72 steht. Dass der letzte Wert bei 15,35, wie bei dem Mittelwert (auf fünf Werte) lautet, scheint wohl zu bestätigen, dass die Lösung stimmt.
Hier die Liste der Ergebnisse:
Zitat:
Zahlen MW5 GWM
...
10,96 10,87 2,72 //Erster Wert, recht niedrig
11,55 11,1 3,33
... Liste gekürzt. Nachfolgend die letzten beiden Werte 19 und 20:
15,5 14,81 14,07
16,67 15,35 15,35 //Scheint zu stimmen: MW(5) entspricht GMW
Interessant für meine Zwecke finde ich auch bei Deiner Lösung, die Gewichte in einem Array zu verlegen und damit unterschiedliche Gewichtungen in Abhängigkeit "anderer Umstände" zu tätigen.
Vielen Dank ibp, damit ist wohl mein Problem gelöst.
Nachtrag:
- Falls jemand eine elegantere Lösung oder auch schnellere Lösung hat, die auf meinen Code basiert, dann nur her damit.
- Kann jemand bestätigen, dass es so richtig ist, und der niedrige Wert 2,72 nur durch die "niedrige" Gewichtung, nämlich 1 resultiert? Ich habe statt i x verwendet: Die Zahlen klaffen weiterhin stark auseinander (was ich nicht erwartet hatte).
Nochmal der Code mit der "Lösung" von ibp:
Delphi-Quellcode:
program Project2000;
{$APPTYPE CONSOLE}
uses
SysUtils;
Var
Zahlen :Array[1..20] of Real; //Basiswerte
MW :Array[1..20] of Real; //Mittelwert
GMW :Array[1..20] of Real; //Gewichteter Mittelwert
i,x,n :Integer;
f :TextFile;
begin
//Zahlen zuweisen:
Zahlen[1]:=10.42;
Zahlen[2]:=11.10;
Zahlen[3]:=10.83;
Zahlen[4]:=11.05;
Zahlen[5]:=10.96;
Zahlen[6]:=11.55;
Zahlen[7]:=11.98;
Zahlen[8]:=12.05;
Zahlen[9]:=12.50;
Zahlen[10]:=12.67;
Zahlen[11]:=13.42;
Zahlen[12]:=14.10;
Zahlen[13]:=13.83;
Zahlen[14]:=14.05;
Zahlen[15]:=13.96;
Zahlen[16]:=14.55;
Zahlen[17]:=14.98;
Zahlen[18]:=15.05;
Zahlen[19]:=15.50;
Zahlen[20]:=16.67;
//Mittelwert zuweisen (5 Werte)
for i:=5 to 20 do
begin
for x:=i-4 to i do MW[i]:=MW[i]+zahlen[X]/5;
end;
//Gewichteter Mittelwert:
for i:=5 to 20 do
begin
for x:=i-4 to i do
begin
n:=1;
n:=n*i;
GMW[i]:=GMW[i]+(Zahlen[X]/5)*n;
end;
end;
for x:=5 to 20 do
GMW[x]:=GMW[x]/n;
// Nachfolgender Code nur für die Bildschirmdarstellung
// und Speicherung der Daten Excel kompatibel
// ### Speicherung Daten
//In Datei für Excel mit Komma als Trenner schreiben, damit ist ein Diagramm möglich
assignfile(f,'C:\Gewichte.csv');
Rewrite(f);
for i:=1 to 20 do
Writeln(f,zahlen[i]:0:2,',',MW[i]:0:2,',',GMW[i]:0:2);
CloseFile(f);
// ### Speicherung Ende
// ### Screen
//.. und auf den Screen natürlich
Writeln('Testprogramm: Gew. Mittelwert');
Writeln;
Writeln('Zahlen MW GMW');
Writeln;
for i:=1 to 20 do
Writeln(zahlen[i]:0:2,' ',MW[i]:6:2,' ',GMW[i]:6:2);
Writeln;
// ### Screen Ende
// ### ENDE
Writeln('Fertig - Programm beenden: [Enter]');Readln;
end.
Beste Grüße!
Go2EITS