AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Roulette-Strategie-Simulator

Offene Frage von "Der Siedler"
Ein Thema von Der Siedler · begonnen am 1. Jul 2013 · letzter Beitrag vom 3. Jul 2013
Antwort Antwort
Seite 1 von 3  1 23      
Der Siedler

Registriert seit: 1. Jul 2013
9 Beiträge
 
#1

Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 01:39
Hallo zusammen,

ich bin ganz neu hier und deshalb bitte ich darüber hinwegzusehen, wenn ich hier im falschen Teil des Forums gepostet habe. Ich habe heute Abend ein paar Zeilen geschrieben, die die sog. "Masse egale"-Strategie beim Roulette auf Herz und Nieren überprüfen soll.

Im Grunde ist das Programm aber auch unabhängig vom Roulette betrachtbar. Vereinfacht könnte man sagen, ich zähle Münzwürfe, bis ein bestimmtes Verhältnis von Kopf zu Zahl gefallen ist. Das kann natürlich lange dauern, wie man sich vorstellen kann. Jedenfalls läuft das Programm irgendwann ohne Fehlermeldung einfach nicht mehr weiter. Ich würde mich sehr freuen, wenn mir jemand einen Tipp geben kann.

Anbei der Code. Auch hier weiß ich nicht, inwiefern es üblich ist, hier den Code einfach als bedrohliche Wall of Text zu posten, aber ich wusste mir nicht anders zu helfen.

Gute Nacht,

Der Siedler

Code:
unit MasseEgale;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfMasseEgale = class(TForm)
    btStart: TButton;
    edAnzahl: TEdit;
    lbGewinn: TLabel;
    procedure btStartClick(Sender: TObject);
  private
    i,a : integer;
    aManque,aPasse,aZero,aGewinn,aMinus : real;
    procedure Wurf (pWette : string);
    procedure StueckGewinn;
    procedure Manquespiel;
    procedure Passespiel;
  public
    { Public declarations }
  end;

var
  fMasseEgale: TfMasseEgale;

implementation

{$R *.dfm}

procedure TfMasseEgale.btStartClick(Sender: TObject);
begin
  i := 0;
  aManque := 0;
  aPasse := 0;
  aZero := 0;
  aGewinn := 0;
  aMinus := 0;
  Randomize;
  Stueckgewinn;
end;

procedure TfMasseEgale.Stueckgewinn;
begin
  if i < strtoint(edAnzahl.Text)
    then
    begin
      while ((aManque - aPasse) < 5) and ((aPasse - aManque) < 5) do
      begin
        Wurf('Keine Wette');
      end;
      if aManque - aPasse = 5
        then Passespiel
        else Manquespiel;
      Stueckgewinn;
    end;
  lbGewinn.Caption := floattostr(aGewinn) + ' Gewinn, Rückhalt: ' + floattostr(-aMinus);
  edAnzahl.Text := inttostr(i);
end;

procedure TfMasseEgale.Manquespiel;
var aGewinnziel : real;
begin
  aGewinnziel := aGewinn + 1;
  while aGewinn < aGewinnziel do
  begin
    Wurf('Manque');
  end;
end;

procedure TfMasseEgale.Passespiel;
var aGewinnziel : real;
begin
  aGewinnziel := aGewinn + 1;
  while aGewinn < aGewinnziel do
  begin
    Wurf('Passe');
  end;
end;

procedure TfMasseEgale.Wurf (pWette : string);
begin
  a := Random(37);
  case a of
    0      : begin
               aZero := aZero + 1;
               if pWette <> 'Keine Wette'
                 then aGewinn := aGewinn - 0.5;
             end;
    1..18  : begin
               aManque := aManque + 1;
               if pWette <> 'Keine Wette'
                 then aGewinn := aGewinn -1;
               if pWette = 'Manque'
                 then aGewinn := aGewinn + 2;
             end;
    19..36 : begin
               aPasse := aPasse + 1;
               if pWette <> 'Keine Wette'
                 then aGewinn := aGewinn -1;
               if pWette = 'Passe'
                 then aGewinn := aGewinn + 2;
             end;
  end;
  i := i + 1;
  if aGewinn < aMinus
    then aMinus := aGewinn;
end;

end.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 08:43
Was verstehst Du unter 'läuft einfach nicht weiter'?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 09:05
Delphi-Quellcode:
procedure TfMasseEgale.Stueckgewinn;
begin
  if i < strtoint(edAnzahl.Text) then
  begin
    while ((aManque - aPasse) < 5) and ((aPasse - aManque) < 5) do
    begin
      Wurf('Keine Wette');
    end;
    if aManque - aPasse = 5
      then Passespiel
      else Manquespiel;
    Stueckgewinn;
  end;
  lbGewinn.Caption := floattostr(aGewinn) + ' Gewinn, Rückhalt: ' + floattostr(-aMinus);
  edAnzahl.Text := inttostr(i);
end;
i wird immer wieder um 1 erhöht und wird irgendwann wohl die Zahl, die im Editfeld eingegeben wurde, erreichen, danach passiert nichts mehr, denn "if i < strtoint(edAnzahl.Text)" wird nicht mehr erfüllt und somit kommt er nicht mehr in die while-Schleife.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Der Siedler

Registriert seit: 1. Jul 2013
9 Beiträge
 
#4

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:16
Erstmal Danke für die Rückmeldung

Unter "läuft einfach nicht weiter" verstehe ich, dass das Programm sich "aufhängt". Es ist nicht mehr bedienbar und liefert auch bei sehr langem Warten kein Ergebnis. Nach einiger Zeit wird das Fenster dann komplett weiß.

Der Zähler i ist ja gerade dafür gedacht, dass das Programm nicht unendlich weiterläuft. Das ist quasi die Mindestanzahl von Würfen. Das funktioniert auch so weit alles wie gedacht, nur habe ich das Gefühl, dass Delphi das alles nicht unendlich oft durchführt, sondern bei der x-ten Wiederholung ins Stocken gerät. Könnte das sein?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:28
Also ich habs bei mir mal laufen lassen. Ja, manchmal kommt er nie wieder aus der while-Schleife raus, weil aManque immer gleich aPasse ist.

Bei einem anderen Test kam er aus der anderen while-Schleife bei PasseSpiel nimmer raus, weil aGewinn -1193345 fallend war.

EDIT: Durch Setzen eines Haltepunkts innerhalb der while-Schleifen kannst du ganz leicht sehen, dass er sich nicht aufhängt, sondern brav in der Endlos-Schleife hängt.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 1. Jul 2013 um 10:37 Uhr)
  Mit Zitat antworten Zitat
Der Siedler

Registriert seit: 1. Jul 2013
9 Beiträge
 
#6

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:34
Wie hast du denn die beiden Werte im Auge? Oder ist das eine Vermutung?

Ich stimme dir zwar zu, dass es Fälle geben mag, wo der Fall von (aManque - aPasse) < 5 bzw. umgekehrt sehr lange nicht auftritt, aber irgendwann muss es doch so weit sein. Heißt das, hier sind einfach die Grenzen von Delphi erreicht
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:38
Delphi-Quellcode:
procedure TfMasseEgale.Stueckgewinn;
begin
  if i < strtoint(edAnzahl.Text)
    then
    begin
      while ((aManque - aPasse) < 5) and ((aPasse - aManque) < 5) do
      begin
        Wurf('Keine Wette');
      end;
      if aManque - aPasse = 5
        then Passespiel
        else Manquespiel;
      Stueckgewinn;
    end;
  lbGewinn.Caption := floattostr(aGewinn) + ' Gewinn, Rückhalt: ' + floattostr(-aMinus);
  edAnzahl.Text := inttostr(i);
end;
Ruft sich selber auf, dadurch kommt das Programm in eine Endlosschleife.
Solltest also die Werte im Auge behalten...

Edit:
Wenn das:

      while ((aManque - aPasse) < 5) and ((aPasse - aManque) < 5) do nicht erfüllt wird, hängt er hier in einer Endlosschleife.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)

Geändert von lbccaleb ( 1. Jul 2013 um 10:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:39
Setz dir einen Haltepunkt in allen while-Schleifen und schau dir in den überwachten Ausdrücken die einzelnen Variablen an.

EDIT: Du kannst es auch erst eine Weile laufen lassen und wenn du meinst es hängt, dann erst die Haltepunkte setzen, bis er anhält.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 1. Jul 2013 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Der Siedler

Registriert seit: 1. Jul 2013
9 Beiträge
 
#9

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:42
@lbccaleb: Auch das ist gewollt. Da dieser Selbstaufruf aber nur stattfindet, wenn i die Grenze noch nicht überschreitet, kann das nicht die Ursache des Fehlers sein. Der tritt schließlich auch dann auf, wenn als Grenze 1 eingegeben wird.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Roulette-Strategie-Simulator

  Alt 1. Jul 2013, 10:45
Wie hast du denn die beiden Werte im Auge?
http://www.delphipraxis.net/41047-tu...ortgeschr.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz