Rolando Dados em PHP: Simulador de Probabilidade e Estatística

Rolando Dados em PHP: O Teste de 1 Milhão de Lançamentos

Sabe o que é mais legal na programação? Ela nos permite provar a matemática na prática! Hoje, vamos resolver o famoso Exercício 4 da nossa lista de funções, misturando probabilidade, arrays e laços de repetição no PHP.

"A probabilidade de dar um valor específico em um dado de 6 lados é de 1/6. Faça um script em PHP que simule 1 milhão de lançamentos e mostre a frequência que deu para cada número."

A Teoria: A Lei dos Grandes Números

A matemática diz que um dado comum tem 6 lados (faces). Se ele não for viciado, a chance de cair qualquer um dos lados é exatamente igual.

Podemos expressar essa probabilidade matematicamente assim:

$$P(face) = \frac{1}{6} \approx 16,66\%$$

Porém, se você jogar um dado apenas 6 vezes na vida real, ele quase nunca vai cair um de cada. Vai repetir números, vai faltar outros... isso é o caos da aleatoriedade de curto prazo! Mas a Lei dos Grandes Números afirma que, quanto mais vezes você jogar, mais o resultado se aproximará dos 16,66% exatos para cada lado.

E como não temos tempo de jogar um dado na mesa 1 milhão de vezes, vamos mandar o nosso servidor PHP fazer isso em milissegundos!

Deixando o script interativo

O exercício original pede 1 milhão de jogadas. Mas nós do PHP Progressivo gostamos de ir além! Vamos criar um formulário HTML onde o próprio usuário escolhe a quantidade de vezes que deseja rolar os dados. Assim, você pode testar com 10 jogadas, mil, ou até milhões!

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Simulador de Dados - PHP Progressivo</title>
    <style>
        .container { font-family: Arial, sans-serif; max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 10px; background: #f9f9f9; }
        .input-box { width: 100%; padding: 10px; font-size: 16px; margin-bottom: 10px; box-sizing: border-box; }
        .btn { background: #2563eb; color: white; padding: 10px 20px; font-size: 16px; border: none; border-radius: 5px; cursor: pointer; width: 100%; }
        .btn:hover { background: #1d4ed8; }
        .bar-container { width: 100%; background-color: #e2e8f0; border-radius: 4px; margin-bottom: 15px; overflow: hidden; }
        .bar { height: 24px; background-color: #10b981; text-align: right; padding-right: 10px; color: white; font-weight: bold; line-height: 24px; white-space: nowrap; }
    </style>
</head>
<body>

<div class="container">
    <h2 style="text-align: center;">🎲 Simulador de Dados em PHP</h2>
    <form action="" method="get">
        <label>Quantas vezes deseja lançar o dado?</label>
        <input type="number" name="jogadas" class="input-box" min="1" max="10000000" placeholder="Ex: 1000000" required>
        <button type="submit" class="btn">Rolar Dados!</button>
    </form>

    <?php
    if (isset($_GET['jogadas'])) {
        // Recebe o valor e garante que é um número inteiro válido
        $n_jogadas = intval($_GET['jogadas']);

        // Limite de segurança para não travar o servidor
        if ($n_jogadas > 0 && $n_jogadas <= 10000000) {
            
            echo "<h3>Resultados para " . number_format($n_jogadas, 0, ',', '.') . " lançamentos:</h3>";

            // Inicializamos o Array para contar quantas vezes cada face caiu
            $faces = array(
                1 => 0, 
                2 => 0, 
                3 => 0, 
                4 => 0, 
                5 => 0, 
                6 => 0
            );

            // O Laço FOR vai rodar a quantidade de vezes que o usuário pediu
            for ($i = 0; $i < $n_jogadas; $i++) {
                $sorteio = rand(1, 6); // Rola o dado
                $faces[$sorteio]++;    // Adiciona +1 na face sorteada
            }

            // Exibindo os resultados de forma visual
            foreach ($faces as $lado => $quantidade) {
                // Calcula a porcentagem
                $porcentagem = ($quantidade / $n_jogadas) * 100;
                $porcentagem_formatada = number_format($porcentagem, 2, ',', '');

                echo "<strong>Face $lado:</strong> " . number_format($quantidade, 0, ',', '.') . " vezes";
                echo "<div class='bar-container'>";
                echo "<div class='bar' style='width: " . $porcentagem . "%;'>$porcentagem_formatada%</div>";
                echo "</div>";
            }

        } else {
            echo "<p style='color: red;'>Por favor, digite um número entre 1 e 10.000.000.</p>";
        }
    }
    ?>
</div>

</body>
</html>

Entendendo o Código (Passo a Passo)

  • 🚀 Array de Frequência: Criamos um $faces = array(...) com 6 posições (1 a 6) iniciando com o valor zero. Esse será o nosso "contador" oficial.
  • 🚀 O Laço For: Ele começa no 0 e vai até o limite que o usuário digitou ($n_jogadas). Se você digitar 1 milhão, esse laço vai girar 1 milhão de vezes na velocidade da luz.
  • 🚀 A Contagem: A linha $faces[$sorteio]++ é genial. Se o dado cair 4, ele vai lá na chave 4 do Array e soma mais um.
  • 🚀 As Barras Visuais: Usamos um foreach para ler os resultados, calculamos a porcentagem com regra de 3 básica e usamos esse valor para definir o width (largura) do CSS.

Faça o teste no seu servidor local! Digite 10 jogadas e veja como as barras ficam irregulares. Depois, digite 1000000 e repare na mágica: todas as barras vão cravar em 16,6%, provando que a matemática da probabilidade é perfeita!

Domine os Arrays e Laços no PHP! 🚀

Se você achou esse exercício incrível, precisa ver os outros desafios que preparamos para você! Na nossa apostila completa de PHP, você aprende do zero ao avançado com centenas de exemplos práticos como este.

Baixar Apostila Completa de PHP

Nenhum comentário: