'********************************************************************************** '*************** A Namorada disconfiada ************************************** Sub JoaoJose() n = 1000000: p = 0.5: Joao = 0 For i = 1 To n pare = 0: conta = 0 'Inicio do jogo While pare = 0 conta = conta + 1 M1 = (Rnd() > p) + 1 'Moeda 1 M2 = (Rnd() > p) + 1 'Moeda 2 If (M1 + M2 <> 1) Then pare = 1 'Pára se der 0 ou 2 Wend If conta Mod 2 = 1 Then Joao = Joao + 1 'Verifica se é impar Next MsgBox "Estimativa da Probabilidade: " & Joao / n End Sub '********************************************************************************** '*************** Esperança – O dilema do prisioneiro ************************* 'Um bandido é preso em uma cela que contém 3 portas. A primeira porta o leva a um 'túnel que o conduz à propria cela depois de 2 dias de viagem. A segunda porta 'leva-o a um túnel que o conduz à própria cela depois de 4 dias de viagem. 'A terceira porta o conduz à liberdade depois de um dia de viagem. Se assumimos que 'o bandido seleciona as portas 1, 2 e 3 com probabilidades 0.5, 0.3 e 0.2 'respectivamente, qual o número esperado de dias para que alcance a liberdade? 'http://www.fernandohrosa.com.br/br/P/problem/esperanca-o-dilema-do-prisioneiro/ '********************************************************************************** Sub Prisioneiro() n = 100000: p1 = 0.5: p2 = 0.3 dias = 0 For i = 1 To n saida = 0: conta = 0 'Inicio do jogo While saida = 0 x = Rnd() If x < p1 Then dias = dias + 2 'porta = 1 If x > p1 And x < p1 + p2 Then dias = dias + 4 'porta = 2 If x > p1 + p2 Then dias = dias + 1: saida = 1 'porta = 3 Wend Next MsgBox "Estimativa do tempo médio para saída: " & dias / n End Sub '********************************************************************************** '*************** O problema dos encontros ************************************ ' Suponha que bolas numeradas de 1 a n são colocadas ao acaso em ' caixas, também numeradas de 1 a n. A bola "encontrou" seu lugar correio se foi ' colocada na caixa de mesmo número. Obtenha a probabilidade de todas as bolas ' irem para caixas erradas. '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** '********************************************************************************** Sub Teste() n = 10 lambda = 0.1 Soma = 0 For i = 1 To n x = Rnd() y = -1 / lambda * Log(1 - x) y = (b - a) * x + a Soma = Soma + x Next MsgBox "Média = " & Soma / n End Sub '********************************************************************************** '********************************************************************************** Sub Conjunta() n = 1000000 Soma1 = 0 Soma2 = 0 For i = 1 To n x = 10 * Rnd() y = 10 * Rnd() fxy = Exp(-(x + y)) Soma1 = Soma1 + fxy If (x < 1 And y > 1 And y < 2) Then Soma2 = Soma2 + fxy Next MsgBox "Probabilidade = " & Soma2 / Soma1 End Sub '********************************************************************************** '********************************************************************************** Sub FreqInt() Dim F(20, 2) As Single Dim y As Double ' K = InputBox("Introduza o Número de classes:") K = 20 n = 10000 Pi = 4 * Atn(1) For j = 1 To K F(j, 1) = Cells(j + 1, 2) ' MsgBox "F(" & i & " , " & 1 & ") = " & F(i, 1) Next For i = 1 To n 'y = Rnd() * 4 - 2 ' Gerando U(-2,2) R1 = Rnd() R2 = Rnd() y = Sin(2 * Pi * R1) * Sqr(-2 * Log(R2)) 'Gerando N(0,1) 'y = Application.NormSInv(Rnd()) For j = 1 To K If (y < F(j, 1)) Then F(j, 2) = F(j, 2) + 1 Next Next For j = 1 To K Cells(j + 1, 3) = (F(j, 2) - F(j - 1, 2)) / n Next ' Geração de Gráfico ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Range("B2:C21") ActiveChart.SeriesCollection(1).Select 'ActiveSheet.ChartObjects("Gráfico 1").Activate 'With Selection ' .MarkerStyle = 2 ' .MarkerSize = 7 'End With 'Selection.MarkerStyle = 8 'Selection.MarkerSize = 6 'Selection.MarkerSize = 5 'MsgBox "Concluído!" End Sub '********************************************************************************** '********************************************************************************** Sub SomaNormais() n = 100000 Pi = 4 * Atn(1) Soma = 0 For i = 1 To n / 2 x = Rnd() y = Rnd() Z = Sqr(-2 * Log(x)) * Cos(2 * Pi * y) w = Sqr(-2 * Log(x)) * Sin(2 * Pi * y) Soma = Soma + Z + w Next MsgBox "Média = " & Soma / n End Sub '********************************************************************************** '********************************************************************************** Sub Constante6() n = 1000000 Soma1 = 0 Soma2 = 0 For i = 1 To n x = Rnd() y = Rnd() fxy = 1 Soma1 = Soma1 + fxy If (y > x ^ 2 And y < x) Then Soma2 = Soma2 + fxy Next MsgBox "Constante = " & Soma2 / Soma1 End Sub '********************************************************************************** '********************************************************************************** Sub Exemploxxx() n = 1000000 Soma1 = 0 Soma2 = 0 For i = 1 To n x = Rnd() y = 2 * Rnd() fxy = x ^ 2 + x * y / 3 Soma1 = Soma1 + fxy If (x + y > 1) Then Soma2 = Soma2 + fxy Next MsgBox "Probabilidade = " & Soma2 / Soma1 End Sub