Autor Beitrag
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 02.06.10 18:24 
Hallo,

ich habe ein kleines Problem mit der Entwicklung eines eigenen Algorithmus.

Zur Aufgabe:

Spieler A wirft eine Münze solange bis "Wappen" erscheint, er wirft jedoch höchstens 5 mal. Für jeden Wurf muss er 1€ an Spieler B Zahlen.
Ist nach dem 5. Wurf immer noch kein "Wappen" dabei gewesen so muss er zu den 5€ noch 7€ extra zahlen, also insgesamt 12€ wenn kein Wappen erscheinen sollte.

Hierfür haben wir im Unterricht den Erwartungswert errechnet, dieser beträgt 2,156€.
Auf lange Zeit wird also Spieler A 2,16€ an Spieler B pro Spiel zahlen.

Um zu testen ob dies wirklich so ist, wollte ich jetzt ein Programm entwerfen mit dem ich eine lange Versuchsreihe mache, um zu schauen ob sich der Durchschnitt dem Erwartungswert annähert.

Ich habe auch schon etwas Code, komme jedoch leider nicht weiter und meine function liefert mir jedes mal "19" zurück.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function TForm1.VersuchAnnaeherung(AValue : Integer) : Single;
var
 spiele : Integer;
 wappen, i : Byte;
begin
  Result := 0;
  wappen := 0;
  i := 0;
  Randomize;
  for spiele := 1 to AValue do
  begin
    while (wappen = 0and (i <= 6do
    begin
      Inc(i);
      wappen := Random(2); // Münze wird geworfen
      if i >= 6 then
      begin
        Result := Result + 7// 5 mal kein Wappen
      end
      else
      begin
        Result := Result + 1;  // A zahl einen Euro an B
      end;
    end;
    i := 0;
    wappen := 0;
  end;
  Result := Result / AValue;
end;


Ich hoffe ihr könnt mir weiterhelfen, denn ich komme einfach nicht weiter.

Mit freundlichen Grüßen,
Dude566

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mi 02.06.10 18:50 
Warum "<= 6", es sollen doch max 5 Würfe werden
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  Result := 0;
  Randomize;
  for Spiele := 1 to AValue do
  begin
    Wappen := 0;
    i := 0;
    while (i < 5and (Wappen = 0do //i=0..4 -> 5 mal
    begin
      Wappen := Random(2);
      Inc(i);
    end;
    Result := Result + i;
    if Wappen = 0 then
      Result := Result + 7;
  end;
  Result := Result / AValue;

Als Rückgabewert besser Extended nehmen (oder Int64 und sich das Komma denken, also nicht durch AValue teilen)

Grüsse, Dirk
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 02.06.10 18:52 
Ohne Deinen Code jetzt im Detail nachvollzogen zu haben (hab ja schon Feierabend), springt mir als erstes ins Auge, dass Deine Function einen Single zurückliefert. Sollte das nicht eher sein? :D

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 02.06.10 18:53 
Das mit den 6 stimmt, habe ich einfach aus der Aufgabe übernommen, wir hatten 6 Schritte da es beim 5. Wurf ja 2 Möglichkeiten gibt.

Zum Rückgabewert, was soll das ändern? Und durch AValue muss ich doch teilen um den Durchschnittswert zu bekommen.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mi 02.06.10 18:57 
Wenn ich das ganze genau 10000000 mal aufrufe dann ist das Ergebnis 21565038 - das der Erwartungswert stimmt sehe ich dann auch ohne die Verfälschung durch das Teilen.

Grüsse, Dirk
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 02.06.10 19:01 
Also wenn ich es 10.000.000 mal Aufrufe bekomme ich als Rückgabe dieser Funktion 200000000.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function TForm1.VersuchAnnaeherung(AValue : Integer) : extended;
var
 spiele : Integer;
 wappen, i : Byte;
begin
  Result := 0;
  wappen := 0;
  i := 0;
  Randomize;
  for spiele := 1 to AValue do
  begin
    while (wappen = 0and (i <= 5do
    begin
      Inc(i);
      wappen := Random(1); // Münze wird geworfen
      if i >= 5 then
      begin
        Result := Result + 1;
        Result := Result + 7// 5 mal kein Wappen
      end
      else
      begin
        Result := Result + 1;  // A zahl einen Euro an B
      end;
    end;
    i := 0;
    wappen := 0;
  end;
  //Result := Result / AValue;
end;

procedure TForm1.btnStartAlgoClick(Sender: TObject);
begin
  edtAnnaeherung.Text := FloatToStr(VersuchAnnaeherung(StrToInt(edtSpiele.Text)));
end;

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mi 02.06.10 19:04 
Die Lösung steht oben.. übersehen?

Grüsse, Dirk
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 02.06.10 19:14 
Hey danke, habe ich völlig übersehen. :D
Jetzt ist es auch kürzer und übersichtlicher. ;)

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.