Monty Hall problem: Difference between revisions

→‎{{header|BASIC}}: Added ANSI BASIC.
(Added Modula-2.)
(→‎{{header|BASIC}}: Added ANSI BASIC.)
Line 542:
Staying wins 10963 times.</pre>
 
=={{header|ANSI BASIC}}==
{{trans|XPL0}}
{{works with|Decimal BASIC}}
<syntaxhighlight lang="basic">
PROGRAM MontyHallProblem
DEF NGames = 10000
RANDOMIZE
LET NWins = 0
FOR Game = 0 TO NGames
IF IsGameWon(0) <> 0 THEN LET NWins = NWins + 1
NEXT Game
PRINT "NOT switching doors wins car in ";
PRINT USING "##.#": NWins / NGames * 100;
PRINT "% of games."
LET NWins = 0
FOR Game = 0 TO NGames
IF IsGameWon(1) <> 0 THEN LET NWins = NWins + 1
NEXT Game
PRINT "But switching doors wins car in ";
PRINT USING "##.#": NWins / NGames * 100;
PRINT "% of games."
END
REM ***
EXTERNAL FUNCTION IsGameWon(Sw)
REM Play one game.
REM Switching if and only if Sw <> 0.
REM Returns 1 if the game is won, 0 otherwise.
LET Car = INT(RND * 3) ! Randomly place car behind a door.
LET Player0 = INT(RND * 3) ! Player randomly chooses a door.
DO
LET Monty = INT(RND * 3) ! Monty opens door revealing a goat.
LOOP UNTIL (Monty <> Car) AND (Monty <> Player0)
IF Sw <> 0 THEN ! Player switches TO remaining door.
DO
LET Player = INT(RND * 3)
LOOP UNTIL (Player <> Player0) AND (Player <> Monty)
ELSE
LET Player = Player0 ! Player sticks with original door.
END IF
IF Player = Car THEN
LET IsGameWon = 1
ELSE
LET IsGameWon = 0
END IF
END FUNCTION
 
</syntaxhighlight>
{{out}}(example)
<pre>
NOT switching doors wins car in 32.3% of games.
But switching doors wins car in 67.3% of games.
</pre>
 
==={{header|BASIC256}}===
Line 641 ⟶ 693:
END
</syntaxhighlight>
 
 
=={{header|BBC BASIC}}==
511

edits