Sorry, dass ich nochmal nerve, aber ich habe Probleme bei dem Mittelwert berechnen. Irgendwie bin ich ganz durcheinander ^^ Bin mir auch nicht sicher, was ich da mit den ganzen neuen Variablen (x und durchlaeufe) überhaupt gemacht hab bzw. machen wollte.
Hier mein Code:
Delphi-Quellcode:
procedure TForm1.btnBerechnenClick(Sender: TObject);
var Bilder : array of integer;
bilder_gesamt: integer; //Anzahl aller Bilder
Tafeln : integer; //Anzahl der Tafeln Schokolade, die gekauft werden
fehlend : integer; //Anzahl der Bilder, die man noch nicht gesammelt hat
durchlaeufe : integer; //Zählvariable
Mittelwert : real;
Ergebnis : integer; //Summe aller Tafeln
AnzahlDurchlaeufe : integer;//gewünschte Anzahl der Durchläufe
i, x : integer; //Zählvariablen
begin
//Zufallsgenerator initialisieren
randomize;
//Startwerte setzen
bilder_gesamt := StrToInt(edtGesamtbilder.Text);
//dynamischer Array
SetLength(Bilder, bilder_gesamt);
AnzahlDurchlaeufe := StrToInt(edtDurchlaeufe.Text);
Ergebnis := 0;
//Verarbeitung: "Einkauf" Schleife
for durchlaeufe := 1 to AnzahlDurchlaeufe do
begin
while fehlend > 0 do
begin
Tafeln := 0;
fehlend := bilder_gesamt;
//Zuerst müssen alle Bilder den Wert 0 haben
for i := 0 to (bilder_gesamt - 1) do
begin
Bilder[i]:=0;
end;
Tafeln := Tafeln + 1;
x := Random(bilder_gesamt);
//Bild wird als gekauft "markiert"
Bilder[x] := Bilder[x] + 1;
//Wenn man das Bild hat, wird fehlend verringert
IF Bilder[x] = 1 THEN
begin
fehlend := fehlend - 1;
end;
end;
//Man addiert alle Tafeln
Ergebnis := Ergebnis + Tafeln;
end;
Mittelwert := Ergebnis/AnzahlDurchlaeufe;
//Ausgabe
lblAusgabe.Caption := 'Man muss rund ' + FloatToStr(Mittelwert) + ' Tafeln kaufen bis man alle Bilder gesammelt hat.';
end;
end.
Irgendwelche Vorschläge, wieso das eine Endlosschleife gibt, wären sehr hilfreich. Achja, und mache ich da nicht auch Sachen, die sinnlos sind? Also, was könnte man optimieren ?
mfg
me2u