Einzelnen Beitrag anzeigen

me2u
(Gast)

n/a Beiträge
 
#15

Re: Sammelbilder [lineares Feld]

  Alt 2. Mai 2007, 22:41
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
  Mit Zitat antworten Zitat