![]() |
AW: Zufallszahlen erstellen
Hallo,
Die Auswertung war tatsächlich fehlerhaft. Wurde zusammen mit dem Einrücken verbessert. :wink: Hier das verbesserte Programm:
Delphi-Quellcode:
Falls ihr noch weitere Fehler findet, immer nur her damit. (:
var
Form1: TForm1; x,a,b,c:integer; Einsatz : integer; Gewinn : integer; Zaehler : integer; Check:Integer; fortschritt:integer; i:integer; //Tabelle : Array[0..10, 0..20] of integer; //Anzahl:Integer; //Menge:Integer; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin x:=random(37); lbzufallszahl.caption := inttostr(x); //rbGerade.checked := true; c:=c+1; if x = 0 then // ##################BANK###################### begin lbAuswertung.caption := 'Die Bank hat gewonnen!'; i:=Random(2); if i = 0 then begin Gewinn := Gewinn-Einsatz; end else if i = 1 then begin Gewinn := Gewinn + Einsatz; end; end else if x Mod 2 = 0 then //##################GERADE##################### begin lbAuswertung.caption := 'Es handelt sich um eine GERADE Zahl!'; If rbGerade.checked = true then //Gewonnen begin Gewinn := Gewinn + Einsatz; lbAuswertung.caption := 'Es handelt sich um eine GERADE Zahl! Sie haben '+inttostr(Einsatz)+' Euro gewonnen'; end; If rbUngerade.checked = true then //Verlooooren begin lbAuswertung.caption := 'Es handelt sich um eine GERADE Zahl! Sie haben '+inttostr(Einsatz)+' Euro verloren'; Gewinn := Gewinn - Einsatz; end; end else If x Mod 2 > 0 then // ###################UNGERADE################ begin lbAuswertung.Caption := 'Es handelt sich um eine UNGERADE Zahl!'; If rbGerade.checked = true then //Verloooren begin lbAuswertung.caption := 'Es handelt sich um eine UNGERADE Zahl! Sie haben '+inttostr(Einsatz)+' Euro verloren'; Gewinn := Gewinn - Einsatz; end; If rbUngerade.checked = true then //Gewonnen begin lbAuswertung.caption := 'Es handelt sich um eine UNGERADE Zahl! Sie haben '+inttostr(Einsatz)+' Euro gewonnen'; Gewinn := Gewinn + Einsatz; end; end; lbGewinn.caption := inttostr(gewinn); lbVersuche.caption := inttostr(c); end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; //Anzahl:=0; //Menge := 0; Check:=1; c:=0; Einsatz := 2; Gewinn := 0; end; procedure TForm1.edEinsatzChange(Sender: TObject); begin If edEinsatz.text = '' then begin edEinsatz.text := '2'; end; Einsatz := strtoint(edEinsatz.text); end; procedure TForm1.btComputerClick(Sender: TObject); var h : integer; begin Fortschritt:=strtoint(edVersuche.text);// Damit die Fortschrittsanzeige funktioniert. Die Zahl brauch ich bestimmmt noch. for check:=1 to strtoint(edVersuche.text) do begin Zaehler := strtoint(edVersuche.text); rbGerade.checked := true; a := Gewinn; Button1Click(Sender); ProgressBar1.max := Fortschritt; ProgressBar1.position := check; If Gewinn < a then // Wir haben verloren begin Einsatz := Einsatz*2; b := 2; {Anzahl := Anzahl+1; if Anzahl > 4 then begin Tabelle[Anzahl,Menge] := Anzahl; end; } end; If (Gewinn > a) and (b = 2) then //Wir haben gewonnen und davor verloren begin b:=1; Einsatz:=2; end; If Einsatz > 1000 then //Das Limit ist erreicht begin Einsatz := Einsatz DIV 2 ; end; edEinsatz.text := inttostr(Einsatz); if h>=1 then begin h:=h-1; btComputerClick(Sender); end; end; end; procedure TForm1.btZurueckClick(Sender: TObject); begin c:=0; lbversuche.caption := ''; end; procedure TForm1.edVersucheChange(Sender: TObject); begin If edVersuche.text = '' then begin edVersuche.text := '1'; end; end; procedure TForm1.btBilanzbackClick(Sender: TObject); begin gewinn:=0; lbgewinn.caption:=''; end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. Ansonsten sollte das Programm jetzt ein Roulette Spiel simulieren, indem der Minimaleinsatz bei 2 Euro liegt und der Maximaleinsatz bei 1000, wodurch es möglich ist, den Einsatz 9x zu verdoppeln. Bei einer 0 wird erneut gedreht und die Chance steht 50:50, dass man den Einsatz zurück erhält. Das bringt mich erneut zu meinem "Unsinn": Zitat:
Die Wahrscheinlichkeit 1 Spiel zu verlireten beträgt: exakt 50% Die Wahrscheinlichkeit 9 Spiele zu verlieren beträgt: (1 / 2)^9 = 0,001953125% (0,998046875 * 2) - (0,001953125% * 1022) = 1,97613281 Falls ich mich nicht irre haben wir also nach den obrigen Bedingungen eine positive Gewinnerwartung. Das es kein Casino gibt, in dem man nach genau den Bedingungen spielen kann, mag stimmen. Bei 32.000 Durchläufen mit meinem Programm bekomme ich auch eine positive Zahl raus. Vielen Dank für die vielen Verbesserungen und Anregungen. :thumb: lg LPIG Edit: bei 10.000.000 Versuchen bekomme ich -80.000 Euro, irgendwo muss ich was falsch gemacht haben. |
AW: Zufallszahlen erstellen
Ich möchte doch meinen Senf noch dazugeben. Ihr vergesst nähmlich das Zufall, Wahrscheinlichkeit und Computerprogramme 3 paar Schuhe sind. Ein C.P. kann Wahrscheinlichkeiten aber nie den Zufall brerchnen. Unser biologischer Computer kann mit der Ausage "eine zerdrückte 3" ohne weiteres was anfangen sogar damit rechnen. Ein Computer kann dies nicht. Random: Bei delphi wird der Inhalt einer Speicherstelle im Processor ausgelesen. Davon aus wird zu dem gewünschten Bereich hoch oder zurück gerechnet.Bei Randomitze wird mit der Systemzeit die Speicherstelle ausgesucht. Mit RandomSeed kann das mit der Hand gemacht werden. Dann kommen gleiche Reihen? Zahlen heraus. Probiert mal IF Random(100)< 50 aus Ihr werdet euch wundern. Um ein noch Zufälligeres Ergebnis zu bekommen ruft Random mit der höstmöglichen Integerzahl auf welche das Gerät verarbeiten kann. Dann werden die Rotienen von Delphi nicht benutzt. Bei gerade und ungerade auswertung nähert sich das Ergebnis immer näher an 100% an, erreicht es aber fast nie. Für Spiele empfehle ich, wie bei Spielautomaten einen gesteuerten Zufall zu benutzen. Das ist gerechter.
gruß Helga |
AW: Zufallszahlen erstellen
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Selten so viel Komisches Zeug gelesen, tut mir leid. Hier ist leider praktisch alles verkehrt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz