Olá,
Para testar a teoria do Monty Hall na realidade envio-te em anexo uma folha de excel com macro. Abaixo os algoritmos para poderes verificar (são intuitivos - vê as descrições) que não há qualquer bias.
Como utilizar a folha:
1- Na celular amarela colocas o número de interações (loops), quanto maior o número mais precisos são os resultados, mas também demora mais tempo;
2- No botão "rock & roll" faz a simulação toda seguida, considerando o número de interações e apresenta os resultados no fim;
3- No botão "Step by step" faz a simulação sorteio a sorteio e permite-te escolher se vais trocar a porta ao não. Vais verificar se nunca trocares terás um acerto de aproximadamente 1/3 face a se trocares sempre que será de 2/3.
:-) diverte-te e brinca com o teu irmão.
Sub LOOPPING()
Dim Total As Integer
Dim Count As Integer
' clear
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("C10").Value = 0
Range("C20").Value = 0
Application.CalculateFullRebuild
Application.ScreenUpdating = True
If Range("G4").Value = Empty Then Range("G4").Value = 1000
Looping = Range("F4").Value
Total = Range("G4").Value
For Count = 1 To Total
door = WorksheetFunction.RandBetween(1, 3) ' o premío - escolha aleatória entre a porta 1 e 3
Range("B3").Value = door ' registo da porta premiada
' registo das percentagens de saidas de prémios para cada uma das 3 portas
If door = 1 Then
Range("B4").Value = "X"
Range("B5").Value = Range("B5").Value + 1
Range("C4").Value = "-"
Range("D4").Value = "-"
End If
If door = 2 Then
Range("C4").Value = "X"
Range("C5").Value = Range("C5").Value + 1
Range("B4").Value = "-"
Range("D4").Value = "-"
End If
If door = 3 Then
Range("D4").Value = "X"
Range("D5").Value = Range("D5").Value + 1
Range("B4").Value = "-"
Range("C4").Value = "-"
End If
choosen = WorksheetFunction.RandBetween(1, 3) ' a nossa porta - escolha aleatoria entre a porta 1 e 3
Range("C9").Value = choosen ' registo da porta escolhida
' a porta a mostrar
If (door = 1 Or door = 2) And (choosen = 1 Or choosen = 2) Then opendoor = 3
If (door = 2 Or door = 3) And (choosen = 2 Or choosen = 3) Then opendoor = 1
If (door = 3 Or door = 1) And (choosen = 3 Or choosen = 1) Then opendoor = 2
Range("C14").Value = opendoor ' registo da porta mostrar
' a porta a trocar
If (opendoor = 1 Or opendoor = 2) And (choosen = 1 Or choosen = 2) Then swap = 3
If (opendoor = 2 Or opendoor = 3) And (choosen = 2 Or choosen = 3) Then swap = 1
If (opendoor = 3 Or opendoor = 1) And (choosen = 3 Or choosen = 1) Then swap = 2
Range("C19").Value = swap ' registo da porta trocada
' registo das percentagens de acertos na porta escolhida
If door = choosen Then
Range("C10").Value = Range("C10").Value + 1
End If
' registo das percetnagem de acertos na porta trocada
If door = swap Then
Range("C20").Value = Range("C20").Value + 1
End If
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Looping = Looping + 1
Range("F4").Value = Looping
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Range("B4").Value = "-"
Range("C4").Value = "-"
Range("D4").Value = "-"
Next Count
MsgBox "DONE. If you swaped the door you won " & Format(Range("C21").Value, "#.00 %") & " of the time"
End Sub
Sub stepbystep()
Dim Total As Integer
Dim Count As Integer
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("C10").Value = 0
Range("C20").Value = 0
Range("I14").Value = 0
Application.CalculateFullRebuild
Application.ScreenUpdating = True
If Range("G4").Value = Empty Then Range("G4").Value = 1000
Looping = Range("F4").Value
Total = Range("G4").Value
For Count = 1 To Total
door = WorksheetFunction.RandBetween(1, 3) ' o premío - escolha aleatória entre a porta 1 e 3
Range("B3").Value = door ' registo da porta premiada
' registo das percentagens de saidas de prémios para cada uma das 3 portas
If door = 1 Then
Range("B4").Value = "X"
Range("B5").Value = Range("B5").Value + 1
Range("C4").Value = "-"
Range("D4").Value = "-"
End If
If door = 2 Then
Range("C4").Value = "X"
Range("C5").Value = Range("C5").Value + 1
Range("B4").Value = "-"
Range("D4").Value = "-"
End If
If door = 3 Then
Range("D4").Value = "X"
Range("D5").Value = Range("D5").Value + 1
Range("B4").Value = "-"
Range("C4").Value = "-"
End If
choosen = WorksheetFunction.RandBetween(1, 3) ' a nossa porta - escolha aleatoria entre a porta 1 e 3
Range("C9").Value = choosen ' registo da porta escolhida
Application.CalculateFullRebuild
Application.ScreenUpdating = True
' a porta a mostrar
If (door = 1 Or door = 2) And (choosen = 1 Or choosen = 2) Then opendoor = 3
If (door = 2 Or door = 3) And (choosen = 2 Or choosen = 3) Then opendoor = 1
If (door = 3 Or door = 1) And (choosen = 3 Or choosen = 1) Then opendoor = 2
Range("C14").Value = opendoor ' registo da porta mostrar
Application.CalculateFullRebuild
Application.ScreenUpdating = True
' a porta a trocar
If (opendoor = 1 Or opendoor = 2) And (choosen = 1 Or choosen = 2) Then swap = 3
If (opendoor = 2 Or opendoor = 3) And (choosen = 2 Or choosen = 3) Then swap = 1
If (opendoor = 3 Or opendoor = 1) And (choosen = 3 Or choosen = 1) Then swap = 2
Range("C19").Value = swap ' registo da porta trocada
Application.CalculateFullRebuild
Application.ScreenUpdating = True
answer = MsgBox("You choose door " & choosen & ". Do you wanna swap?", vbQuestion + vbYesNo + vbDefaultButton2, "YOU CHOOSE!")
' registo das percentagens de acertos na porta escolhida
If door = choosen And answer = vbNo Then
Range("I14").Value = Range("I14").Value + 1
End If
' registo das percetnagem de acertos na porta trocada
If door = swap And answer = vbYes Then
Range("I14").Value = Range("I14").Value + 1
End If
Looping = Looping + 1
Range("F4").Value = Looping
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Range("B4").Value = "-"
Range("C4").Value = "-"
Range("D4").Value = "-"
Application.CalculateFullRebuild
Next Count
MsgBox "DONE. If you swaped the door you won " & Format(Range("I15").Value, "#.00 %") & " of the time"
End Sub
Sub CLEAR()
Application.CalculateFullRebuild
Application.ScreenUpdating = True
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("F4").Value = 0
Range("B5").Value = 0
Range("C5").Value = 0
Range("D5").Value = 0
Range("C10").Value = 0
Range("C20").Value = 0
Range("I14").Value = 0
Application.CalculateFullRebuild
Application.ScreenUpdating = True
End Sub