AGB  ·  Datenschutz  ·  Impressum  







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

Ziegenproblem

Ein Thema von 0x92 · begonnen am 5. Mär 2014 · letzter Beitrag vom 9. Mär 2014
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

AW: Ziegenproblem

  Alt 5. Mär 2014, 15:57
Naja und hier mein bisheriger Code dazu. Gibt anscheinend noch einen kleinen Bug denn manchmal gewinnt man obwohl da eine Ziege sein sollte xD
Ganz schlechte Fehlerbeschreibung, insbesondere da das Ergebnis ja zufällig ist. Dein Code sieht eigentlich okay aus.

Denk' auch dran, dass man seine Gewinnchance nur erhöht (von 33% auf 66%), wenn man die Tür wechselt. Man kann immer noch verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#2

AW: Ziegenproblem

  Alt 5. Mär 2014, 16:01
Naja und hier mein bisheriger Code dazu. Gibt anscheinend noch einen kleinen Bug denn manchmal gewinnt man obwohl da eine Ziege sein sollte xD
Ganz schlechte Fehlerbeschreibung, insbesondere da das Ergebnis ja zufällig ist. Dein Code sieht eigentlich okay aus.

Denk' auch dran, dass man seine Gewinnchance nur erhöht (von 33% auf 66%), wenn man die Tür wechselt. Man kann immer noch verlieren.
Ich sehe da atm noch gar keine Gewinnchancen... o.O
00111100001100110010000001000100011001010110110001 1100000110100001101001

Geändert von Back2Code ( 5. Mär 2014 um 16:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ziegenproblem

  Alt 5. Mär 2014, 16:06
Warum ist Doors als Integer und nicht als Boolean deklariert?

Und warum wird dieses Array nicht initialisiert?
Bist du dir sicher, daß nach dem SetLength alle Integer auf 0 (False) stehen?

Zitat:
Delphi-Quellcode:
    if Doors[RandomDoor] = 0 then //Wenn das was im Array drinsteht 0 ist vom Index RandomDoor
      WriteLn('Door number: ' + IntToStr(RandomDoor +1) + ' Ohhh, it is a goat! ;O');
      WriteLn('Do you want to change your door?');
      WriteLn;
Die CodeFormatierung meint, daß da BEGIN und END fehlen.

Zitat:
Delphi-Quellcode:
    Decision := 'None';

    while not (Decision = 'Y') and not (Decision = 'y') and not (Decision = 'N') and not (Decision = 'n') do
    begin
      WriteLn('# NOTE: Only Y/y or N/n accepted');
      ReadLn(Decision);
    end;
Die Repeat-Until-Schleife kennst du aber?

Delphi-Quellcode:
    repeat
      WriteLn('# NOTE: Only Y/y or N/n accepted');
      ReadLn(Decision);
    until (UpperCase(Decision) = 'Y') or (UpperCase(Decision) = 'N');
Kann es sein, daß da noch eine Schleife fehlt?
Vorallem Wenn man mehr als 3 Türen vorgibt.

Und nicht vergessen, der Moderator darf nur fragen, wenn mehr als 2 Türen noch nicht gewählt wurden, denn ansonsten würde man nie verlieren können,
da der Moderator ja alle falschen Türen öffnen würde, mit seinem "ich zeige ihnen mal was".
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Mär 2014 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von 0x92
0x92

Registriert seit: 14. Feb 2014
6 Beiträge
 
#4

AW: Ziegenproblem

  Alt 5. Mär 2014, 16:08
Warum ist Doors als Integer und nicht als Boolean deklariert?

Und warum wird dieses Array nicht initialisiert?
Bist du dir sicher, daß nach dem SetLength alle Integer auf 0 (False) stehen?

Zitat:
Delphi-Quellcode:
    if Doors[RandomDoor] = 0 then //Wenn das was im Array drinsteht 0 ist vom Index RandomDoor
      WriteLn('Door number: ' + IntToStr(RandomDoor +1) + ' Ohhh, it is a goat! ;O');
      WriteLn('Do you want to change your door?');
      WriteLn;
Die CodeFormatierung meint, daß da BEGIN und END fehlen.

Zitat:
Delphi-Quellcode:
    Decision := 'None';

    while not (Decision = 'Y') and not (Decision = 'y') and not (Decision = 'N') and not (Decision = 'n') do
    begin
      WriteLn('# NOTE: Only Y/y or N/n accepted');
      ReadLn(Decision);
    end;
Die Repeat-Until-Schleife kennst du aber?

Delphi-Quellcode:
    repeat
      WriteLn('# NOTE: Only Y/y or N/n accepted');
      ReadLn(Decision);
    until (UpperCase(Decision) = 'Y') or (UpperCase(Decision) = 'N');
Bisher noch nie eingesetzt...

Und bzgl. des Arrays...Ich hatte erst ne Schleife drin die alle Elemente auf 0 erstmal setzt hab dann aber beim Debuggen gesehen, dass des sowieso schon passiert und alles auf 0 steht
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Ziegenproblem

  Alt 5. Mär 2014, 19:43
Ich hab vor einiger Zeit mich auch damit auseinandergesetzt, nur weil ich keinen Vorteil darin sah zu wechseln. Ich hab im Laufe meiner Überlegungen ein halbes Dutzend Programme geschrieben um die These überprüfen. Leider habe ich später in eignen einen Fehler entdeckt, habe es aber versäumt die zu löschen, so dass ich heute nicht mehr weiß welche Programme nun falsch sind.

Hier eines der Programme:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  AnzahlSpiele = 1000;
var
  i, Preis, Ziege1, Ziege2, DirektTreffer, WechselTreffer,
  ErsteWahl, NeueWahl: Integer;
begin
  DirektTreffer := 0;
  WechselTreffer := 0;
  Randomize;

  for i := 1 to AnzahlSpiele do
  begin
    //Die Wahl ist eigentlich ein unnötig, man könnte auch 1, 2, 3 nehmen,
    //aber wir tun mal so

    //Preis und zwei Ziegen zufällig auf Tore 1, 2 und 3 verteilen
    Preis := Random(3) + 1;
    repeat Ziege1 := Random(3) + 1 until Ziege1 <> Preis;
    repeat Ziege2 := Random(3) + 1 until (Ziege2 <> Preis) and (Ziege2 <> Ziege1);

    //Erste Wahl des Spielers, bei der er bleibt
    ErsteWahl := Random(3) + 1;
    //repeat ErsteWahl := Random(3) + 1 until ErsteWahl <> Ziege1;

    //Zweite Wahl des Spielers, nach dem Öffnen des Tores mit Ziege1
    repeat NeueWahl := Random(3) + 1 until NeueWahl <> Ziege1;

    //Zählen
    if ErsteWahl = Preis then Inc(DirektTreffer); //Treffer des Spielers beim nicht Wechsel
    if NeueWahl = Preis then Inc(WechselTreffer); //Treffer des Spielers beim Wechsel
  end;

  ShowMessage(Format('Direkte Treffer: %d, Wechsel Treffer: %d', [DirektTreffer, WechselTreffer]));
end;
Ich bin selbst heute der Meinung, dass es keinen Vorteil gibt. Ich kenne die mathematische Erklärung. Am Anfang hat man eine 33% Chance auf den Preis. Danach nimmt der Spielleiter ein Tor aus dem Spiel, wobei es immer ein Tor mit einer Ziege ist, so dass nun noch zwei Tore übrig bleiben, eines mit dem Preis und eines mit einer weiteren Ziege. Bei zwei Toren steht die Chance bei 50%. Beim Wechsel hat man nun eine Chance von 66% auf den Preis.

Das Problem ist allerdings, selbst wenn das Programm ein anderes Ergebnis nennt (aber wie gesagt, ich weiß nicht ob es das richtige Ergebnis liefert), dass man schon bei der ersten Wahl die Chance bei 50:50 lag, denn schon von Anfang an war sicher, das eines der Tore mit der Ziege aus dem Spiel genommen wird. Es war also schon von Anfang an die Wahl zwischen dem Preis und einer der Ziegen.

Der Vorteil ist somit zwar mathematisch da, weil es im Grunde zwei Spiele gibt, eines mit 33% und eines mit 50%, aber nicht praktisch, weil immer ein Tor mit einer Ziege raus fliegt.
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Ziegenproblem

  Alt 5. Mär 2014, 20:05
Das Problem ist allerdings, selbst wenn das Programm ein anderes Ergebnis nennt (aber wie gesagt, ich weiß nicht ob es das richtige Ergebnis liefert), dass man schon bei der ersten Wahl die Chance bei 50:50 lag, denn schon von Anfang an war sicher, das eines der Tore mit der Ziege aus dem Spiel genommen wird. Es war also schon von Anfang an die Wahl zwischen dem Preis und einer der Ziegen.

Der Vorteil ist somit zwar mathematisch da, weil es im Grunde zwei Spiele gibt, eines mit 33% und eines mit 50%, aber nicht praktisch, weil immer ein Tor mit einer Ziege raus fliegt.
Der Vorteil ist nicht nur mathematisch sondern auch praktisch da, da Du ja am Anfang trotzdem aus 3 Toren wählst. Stell Dir vor, Du hast eine Chance von 1/3 den Gewinn zu bekommen; Wenn jetzt der Quizmaster eins der beiden übrigen Tore öffnet, dann muss er ja das ohne den Gewinn nehmen (außer Du bist von Anfang an Richtig, dass allerdings nur mit der Wahrscheinlichkeit von 1/3). Auf den beiden anderen liegt eine Wahrscheinlichkeit von 2/3 die beim öffnen eines Tores auf das noch geschlossene übertragen wird. Das ist relativ abstrakt, aber grundsätzlich auch praktisch so verwendbar. Interessant wäre jetzt das einige 1000 mal durchzuprobieren um diese These zu prüfen, aber laut heutigem Stand der Wissenschaft würde das schon so sein.
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#7

AW: Ziegenproblem

  Alt 5. Mär 2014, 20:11
Der Vorteil ist somit zwar mathematisch da, weil es im Grunde zwei Spiele gibt, eines mit 33% und eines mit 50%, aber nicht praktisch, weil immer ein Tor mit einer Ziege raus fliegt.
Es gibt keine zwei Spiele, sondern die erste (alle bis auf die letzte) Auswahl ist sinnlos. Nur die letzte Auswahl entscheidet über den Gewinn. Daher ist immer die Chance 50:50
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Ziegenproblem

  Alt 5. Mär 2014, 20:50
@TForm1

Wie schon gesagt, das Problem ist abstrakt. Der Vorteil liegt nur zwischen der Chance des ersten Durchgangs und des zweiten Durchgangs. Ich hab das Spiel beim ersten Fall falsch wiedergegeben. Korrekt lautet die Regel: zuerst hat man die Wahl zwischen drei Toren, also eine Chance von 33% auf den Gewinn. Beim zweiten Durchgang nimmt der Spielleiter vorher ein Tor mit einer Ziege raus und bietet nun den Wechsel des Tors. Nun der korrekte Vorgang: man muss auf jeden Fall wechseln, erst dann hat man die 66% Chance, wechselt man nicht, bleibt die Chance bei 33%.

Mathematisch ist alles korrekt und das zweifele ich auch nicht an. Praktisch gibt es keinen Vorteil. Den Grund habe ich schon genannt, eines der Tore mit einer der Ziegen war schon von Anfang an faktisch raus, also nicht wirklich in der Rechnung.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:20 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