Guten Abend,
ich habe mittlerweile ein funktionstüchtiges Programm für das Problem fertiggestellt. Es ist eigentlich garnicht so schwer
Und Jelly, du hattest Recht. Ich hatte das mit dem fehlend und noch irgendwas anderes in der falschen Schleife drin und es wurde immer wieder neu gesetzt und konnte somit nie eine andere Bedingung erfüllen.
Hier nochmal der fertige 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;
//Eingabe: Variablen holen
bilder_gesamt := StrToInt(edtGesamtbilder.Text);
AnzahlDurchlaeufe := StrToInt(edtDurchlaeufe.Text);
Ergebnis := 0;
//dynamischer Array
SetLength(Bilder, bilder_gesamt);
//Verarbeitung: "Einkauf" Schleife
for durchlaeufe := 1 to AnzahlDurchlaeufe do
begin
fehlend := bilder_gesamt;
Tafeln := 0;
//Zuerst müssen alle Bilder den Wert 0 haben
for i := 0 to (bilder_gesamt - 1) do
begin
Bilder[i]:=0;
end;
while fehlend > 0 do
begin
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
fehlend := fehlend - 1;
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.
Ahh, ein tolles Gefühl, wenn's endlich läuft ! Vielen Dank nochmal an alle, die hier gepostet haben. Ohne euch hätte ich das bestimmt nicht hingekriegt. Ihr seid einfach die besten!
Mit freundlichen Grüßen
me2u