Mostrando postagens com marcador Exercícios Resolvidos. Mostrar todas as postagens
Mostrando postagens com marcador Exercícios Resolvidos. Mostrar todas as postagens

Exercícios Resolvidos de Arrays em PHP: Teste sua Lógica de Programação

Parabéns por chegar até aqui em nossa Apostila de PHP Progressivo! Você já dominou a teoria sobre a criação de listas, o laço foreach e as dezenas de funções nativas maravilhosas do PHP.

Mas, na programação, teoria sem prática é apenas ilusão. É quebrando a cabeça com erros e montando a lógica linha por linha que o seu cérebro cria as conexões necessárias para você se tornar um Desenvolvedor Web Sênior.

Nesta página, preparamos uma bateria intensiva de exercícios resolvidos sobre Arrays em PHP. Nossa recomendação máxima: leia o enunciado, abra o seu editor de código (ou um testador PHP online), tente resolver sozinho por pelo menos 15 minutos e apenas depois olhe a nossa solução.

🔥 Regra de Ouro: Não copie e cole as respostas! Digite o código. O ato de digitar ajuda a memorizar a sintaxe e evita que você esqueça ponto-e-vírgula (;) ou chaves ({}).

Exercício 1: O Aquecimento (Soma e Média)

Desafio: Crie um script em PHP que guarde as notas de um aluno (7.5, 8.0, 6.5, 9.5) em um array. Em seguida, use o laço foreach para somar todas as notas, calcule a média final e exiba na tela se ele foi Aprovado (média >= 7) ou Reprovado.

<?php
$notas = [7.5, 8.0, 6.5, 9.5];
$soma = 0;

// Percorrendo o array para somar
foreach ($notas as $nota) {
    $soma += $nota; // Equivalente a: $soma = $soma + $nota;
}

// O count() descobre o total de elementos no array (4 notas)
$media = $soma / count($notas);

echo "A nota total foi: $soma <br>";
echo "A média final é: $media <br>";

if ($media >= 7.0) {
    echo "<strong style='color: green'>Aluno APROVADO!</strong>";
} else {
    echo "<strong style='color: red'>Aluno REPROVADO!</strong>";
}

/* DICA SÊNIOR: Nós usamos a lógica pura com foreach para treinar, 
mas no dia a dia, você poderia usar a função nativa do PHP:
$soma = array_sum($notas); 
*/
?>

Exercício 2: Array Associativo (Cadastro de RH)

Desafio: Crie um array associativo que represente um funcionário, contendo as chaves: "nome", "idade", "cargo" e "salario". Depois, percorra esse array imprimindo a chave e o valor de forma amigável na tela. Se a chave for "salario", adicione o símbolo de "R$" antes do valor.

<?php
$funcionario = [
    "nome" => "Mariana Silva",
    "idade" => 28,
    "cargo" => "Desenvolvedora Back-end",
    "salario" => 6500.00
];

echo "<h3>Ficha do Funcionário:</h3>";
echo "<ul>";

foreach ($funcionario as $chave => $valor) {
    // Tratamento especial para o salário
    if ($chave == "salario") {
        // number_format formata o número para o padrão brasileiro de moeda
        $valorFormatado = number_format($valor, 2, ',', '.');
        echo "<li><b>".ucfirst($chave).":</b> R$ $valorFormatado </li>";
    } else {
        echo "<li><b>".ucfirst($chave).":</b> $valor </li>";
    }
}

echo "</ul>";
?>

Quer mais 500 exercícios como esse?

A lógica de programação se constrói com repetição e aumento gradativo de dificuldade. Não fique caçando exercícios picados pela internet.

Mega Pack 7 Apostilas de Programação PDF

Baixe nosso Mega Pack em PDF. Estude no ônibus, sem distrações do celular, com baterias intensivas de exercícios reais do mercado.

Exercício 3: O Filtro (Números Pares e Ímpares)

Desafio Clássico de Lógica: Crie um array automático usando a função range() contendo números de 1 a 20. Percorra esse array e separe-o em dois novos arrays: um contendo apenas os números pares e outro contendo apenas os números ímpares. No final, exiba os dois novos arrays.

<?php
// 1. Criando o array de 1 a 20 automaticamente
$numeros = range(1, 20);

// 2. Inicializando os arrays vazios que vão receber os filtros
$pares = []; // Pode usar array() também
$impares = [];

// 3. A Lógica de Separação
foreach ($numeros as $num) {
    // Operador Módulo (%): pega o resto da divisão. 
    // Se um número dividido por 2 não sobrar nada (resto 0), ele é PAR!
    if ($num % 2 == 0) {
        array_push($pares, $num); // Adiciona na lista de pares
    } else {
        array_push($impares, $num); // Adiciona na lista de ímpares
    }
}

// 4. Exibindo os resultados usando o utilitário print_r
echo "Lista de Pares:<br>";
print_r($pares);

echo "<br><br>Lista de Ímpares:<br>";
print_r($impares);
?>

Exercício 4: O Simulador da Mega-Sena (Sorteios)

Desafio: Escreva um script para gerar um bilhete premiado da Mega-Sena. Ele deve conter 6 números aleatórios entre 1 e 60, sem repetição. Os números devem ser exibidos na tela em ordem crescente.

<?php
// LÓGICA NINJA: Em vez de sortear um por um e verificar se já saiu (difícil),
// Nós criamos o "globo" do bingo inteiro, embaralhamos e tiramos os 6 primeiros!

// 1. Cria as bolinhas de 1 a 60
$globo = range(1, 60);

// 2. Chacoalha e embaralha todas as bolinhas dentro do array
shuffle($globo);

// 3. Retira as 6 primeiras bolinhas do globo embaralhado
$bilhete = [];
for ($i = 0; $i < 6; $i++) {
    // array_pop tira o último elemento do array e nos entrega
    $bolinha_sorteada = array_pop($globo);
    array_push($bilhete, $bolinha_sorteada);
}

// 4. Exigência do cliente: organizar os 6 números do menor para o maior
sort($bilhete);

// 5. Exibe os números separados por um traço usando a função implode()
echo "<h2>Seu bilhete da sorte: </h2>";
echo "<p style='font-size: 24px; letter-spacing: 5px;'>";
echo implode(" - ", $bilhete);
echo "</p>";
?>

Exercício 5: Arrays Multidimensionais (O Carrinho de Compras)

Desafio de Nível Intermediário: Em sistemas reais (como o MercadoLivre ou a Amazon), um carrinho de compras não é uma lista simples, é um "Array dentro de um Array" (Matriz ou Multidimensional). Cada produto possui nome, preço e quantidade. Crie um carrinho com 3 itens, calcule o subtotal de cada produto e o valor total final da compra.

<?php
// Array Multidimensional: Um array grandão contendo 3 arrays associativos
$carrinho = [
    [
        "produto" => "Teclado Mecânico RGB",
        "preco" => 350.00,
        "quantidade" => 1
    ],
    [
        "produto" => "Monitor Gamer 24 pol",
        "preco" => 1200.00,
        "quantidade" => 2
    ],
    [
        "produto" => "Mousepad Extra Grande",
        "preco" => 80.00,
        "quantidade" => 3
    ]
];

$totalCompra = 0;

echo "<h3>Resumo do seu Pedido:</h3>";
echo "<hr>";

foreach ($carrinho as $item) {
    // Acessando os dados do array interno
    $nome = $item["produto"];
    $precoUnitario = $item["preco"];
    $qtd = $item["quantidade"];
    
    // Calcula o subtotal do item (preço x quantidade)
    $subtotal = $precoUnitario * $qtd;
    
    // Adiciona o subtotal ao valor total geral da compra
    $totalCompra += $subtotal;
    
    // Exibe a linha do produto
    echo "{$qtd}x $nome | Unidade: R$ {$precoUnitario} | <b>Subtotal: R$ {$subtotal}</b> <br>";
}

echo "<hr>";
echo "<h4>Valor Total a Pagar: R$ " . number_format($totalCompra, 2, ',', '.') . "</h4>";
?>

Transforme Exercícios em Sistemas Reais! 🚀

Você acabou de ver o coração de uma Loja Virtual funcionando no Exercício 5. Sabe qual é o próximo passo? Aprender a puxar esses produtos direto de um Banco de Dados MySQL de forma segura e profissional. A nossa Apostila Premium te guia do básico até as listagens de bancos reais em passos simples.

📥 Fazer Download da Apostila Completa de PHP

Como Contar a Quantidade de Dígitos de um Número em PHP

Como Contar a Quantidade de Dígitos de um Número em PHP

Neste tutorial do nosso Curso de PHP, vamos resolver a Questão 13 da nossa famosa lista de exercícios de funções. O desafio parece simples, mas esconde vários conceitos importantes de manipulação de dados:

"Faça um programa e uma função que informe a quantidade de dígitos (algarismos) de um determinado número inteiro informado pelo usuário."

1. A Abordagem Web: A Função strlen()

No desenvolvimento Web, quando um usuário digita algo em um formulário HTML (um campo <input>) e envia para o PHP via $_GET ou $_POST, esse dado chega nativamente no formato de String (texto).

Ou seja, se o usuário digitar o ano 2026, o PHP vai enxergar isso como a string "2026". Sendo um texto, a forma mais fácil de contar quantos "caracteres" existem ali é usando a função nativa strlen() (String Length - Comprimento da String):

function tamanhoDigitos($numero){
    return strlen($numero);
}
// echo tamanhoDigitos("2026"); // Retorna 4

2. E se a variável for puramente um Inteiro (Int)?

Se o número não veio de um formulário, mas sim de um cálculo matemático interno do sistema (ex: $n = 150 * 3;), ele será do tipo Integer. A função strlen() espera receber strings. O que fazer?

A solução é forçar a conversão do número para string antes de contar. Chamamos isso de Type Casting. Você pode fazer isso de duas formas simples no PHP:

  • Usando o comando (string): $texto = (string) $numero;
  • Concatenando com aspas vazias: $texto = $numero . "";

🛡️ O Perigo dos Números Negativos!

Se o usuário digitar -350, a função strlen("-350") vai retornar 4, pois ela conta o sinal de menos como um caractere! Para corrigir isso, devemos passar o número pela função abs() (Valor Absoluto), que transforma qualquer número negativo em positivo, removendo o sinal.

3. Curiosidade: A Abordagem Lógica/Matemática

Se você estiver prestando um concurso público ou entrevista de emprego, o avaliador pode pedir para você contar os dígitos sem usar funções prontas de texto. Como fazer isso usando apenas a matemática pura?

Basta criar um laço while (enquanto) que divide o número por 10 sucessivamente até ele chegar a zero, contando quantas divisões foram feitas:

function contarComMatematica($n) {
    $n = abs($n); // Remove o sinal negativo
    if ($n == 0) return 1; // O zero tem 1 dígito
    
    $digitos = 0;
    while ($n >= 1) {
        $digitos++;
        $n = $n / 10; // "Corta" o último número
    }
    return $digitos;
}

Para os amantes da matemática avançada, o número de dígitos $d$ de um inteiro $n$ positivo pode ser descoberto instantaneamente usando logaritmos na base 10:

$$d = \lfloor \log_{10}(n) \rfloor + 1$$

No PHP, isso seria escrito como: floor(log10($n)) + 1. Incrível, não é?

O Código Completo (Script Web)

Vamos juntar tudo em uma interface bonita onde o usuário pode testar livremente:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Contador de Dígitos - PHP</title>
    <style>
        .box { max-width: 400px; margin: 30px auto; text-align: center; font-family: sans-serif; border: 2px solid #94a3b8; border-radius: 8px; padding: 25px; background-color: #f8fafc; }
        input[type="text"] { padding: 12px; width: 80%; margin-bottom: 20px; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 18px; text-align: center; }
        .btn { background-color: #0f172a; color: white; border: none; padding: 12px 25px; border-radius: 4px; cursor: pointer; font-size: 16px; font-weight: bold; width: 88%; }
        .btn:hover { background-color: #334155; }
        .result { margin-top: 20px; padding: 15px; background: #dbeafe; color: #1e3a8a; border-radius: 4px; font-weight: bold; font-size: 1.2em; word-wrap: break-word; }
    </style>
</head>
<body>

    <div class="box">
        <h2>🔢 Contador de Algarismos</h2>
        
        <form action="" method="get">
            <input type="text" name="numero" inputmode="numeric" pattern="-?[0-9]*" required placeholder="Digite um número longo..." />
            <button type="submit" class="btn">Contar Dígitos</button>
        </form>

        <?php
        function contarDigitos($n) {
            $numeroLimpo = preg_replace('/[^0-9]/', '', $n);
            return strlen($numeroLimpo);
        }

        if(isset($_GET['numero']) && $_GET['numero'] !== '') {
            $num_digitado = htmlspecialchars($_GET['numero'], ENT_QUOTES, 'UTF-8');
            $quantidade = contarDigitos($_GET['numero']);
            
            echo "<div class='result'>";
            echo "O número informado possui: <br> <span style='font-size:1.5em; color:#1d4ed8;'>$quantidade dígitos</span>";
            echo "</div>";
        }
        ?>
    </div>

</body>
</html>

🖥️ Teste a Ferramenta em Tempo Real:

Eleve sua Lógica de Programação! 🧠

Entender os bastidores das funções e conseguir resolver problemas de várias maneiras diferentes é o que separa os amadores dos programadores profissionais. Baixe a nossa Apostila Completa de PHP e tenha acesso a centenas de algoritmos e exercícios detalhados!

Baixar Apostila Completa de PHP

Números Perfeitos em PHP: Como Descobrir e Gerar (Exercício Resolvido)

Números Perfeitos em PHP: Lógica e Funções na Prática 

Neste tutorial do nosso Curso de PHP, vamos resolver a incrível Questão 7 da nossa lista de exercícios sobre funções.

"Um número é dito perfeito quando ele é igual à soma de todos os seus divisores próprios (excluindo ele mesmo). Escreva um programa em PHP com funções que receba um número, diga se ele é perfeito e, em seguida, liste todos os números perfeitos até esse limite."

1. A Matemática: O que é um Número Perfeito?

Antes de programar, precisamos entender a regra do jogo. Pegue o número 6. Por quais números podemos dividir o 6 de forma exata (sem sobrar resto)? Podemos dividi-lo por 1, por 2 e por 3.

Agora, some esses divisores:

$$6 = 1 + 2 + 3$$

Como a soma dos divisores resulta exatamente no próprio número, o 6 é um Número Perfeito! Veja outro exemplo famoso, o número 28. Seus divisores são 1, 2, 4, 7 e 14. Se somarmos:

$$28 = 1 + 2 + 4 + 7 + 14$$

Temos outro número perfeito! Os próximos são 496 e 8128. Acredite se quiser, eles são muito raros. Até hoje, os matemáticos não sabem se existe algum número perfeito ímpar ou se eles são infinitos!

2. A Lógica de Programação

Como transformar isso em código PHP? Vamos criar uma função chamada somaDivisores($n). Dentro dela:

  1. Criamos uma variável $soma = 0 para acumular os valores.
  2. Usamos um laço for que começa no 1 e vai até $n - 1.
  3. Dentro do laço, usamos o Operador Módulo (%). Se $n % $i == 0, significa que a divisão é exata. Se for exata, nós adicionamos esse $i na nossa variável $soma.
  4. No final, retornamos a soma. Se o retorno for igual ao número original, EUREKA! É perfeito.

3. O Código PHP Completo e Funcional

Preparamos um código visualmente atraente onde o usuário digita um número. O sistema dirá se aquele número é perfeito e, de bônus, vai varrer e imprimir todos os números perfeitos que existem do 1 até o número que você digitou!

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Detector de Números Perfeitos - PHP</title>
    <style>
        .container { max-width: 500px; margin: 30px auto; font-family: sans-serif; text-align: center; border: 2px solid #cbd5e1; padding: 30px; border-radius: 10px; background: #f8fafc; }
        input[type="number"] { padding: 10px; font-size: 16px; width: 80%; margin-bottom: 15px; border-radius: 5px; border: 1px solid #94a3b8; text-align: center;}
        .btn { background: #10b981; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 5px; cursor: pointer; font-weight: bold; width: 85%; }
        .btn:hover { background: #059669; }
        .resultado { margin-top: 20px; padding: 15px; border-radius: 5px; background: #e0f2fe; color: #0369a1; border: 1px solid #7dd3fc; text-align: left; }
    </style>
</head>
<body>

<div class="container">
    <h2>✨ É um Número Perfeito?</h2>
    <form action="" method="get">
        <input type="number" name="numero" min="1" max="10000" placeholder="Digite um número (ex: 28)" required>
        <button type="submit" class="btn">Verificar e Buscar</button>
    </form>

    <?php
    // FUNÇÃO: Calcula a soma dos divisores de um número
    function somaDivisores($n) {
        $soma = 0;
        // Divide o número por todos os anteriores a ele
        for($i = 1; $i < $n; $i++) {
            if($n % $i == 0) { // Se o resto for 0, é divisor!
                $soma += $i;
            }
        }
        return $soma;
    }

    // Verifica se o usuário enviou o formulário
    if(isset($_GET['numero'])) {
        $num_usuario = intval($_GET['numero']);
        
        echo "<div class='resultado'>";
        
        // 1. Testa se o número digitado é perfeito
        if($num_usuario == somaDivisores($num_usuario)) {
            echo "<strong style='color: green; font-size: 1.2em;'>✔ O número $num_usuario É PERFEITO!</strong><br><br>";
        } else {
            echo "<strong style='color: red;'>❌ O número $num_usuario NÃO é perfeito.</strong><br><br>";
        }

        // 2. Busca todos os números perfeitos de 1 até o número digitado
        echo "<b>Números perfeitos encontrados entre 1 e $num_usuario:</b><br>";
        $encontrou_algum = false;
        
        for($j = 1; $j <= $num_usuario; $j++) {
            if($j == somaDivisores($j)) {
                echo "➔ $j <br>";
                $encontrou_algum = true;
            }
        }
        
        if(!$encontrou_algum) {
            echo "<i>Nenhum número perfeito encontrado nesse intervalo.</i>";
        }
        
        echo "</div>";
    }
    ?>
</div>

</body>
</html>

⚠️ Cuidado com o Processamento!

Como os números perfeitos são calculados dividindo um por um até o infinito, testar números maiores que 10.000 pode travar ou deixar o seu navegador muito lento! Por isso, no nosso formulário HTML, colocamos uma trava de segurança max="10000".

Gostou da Lógica? Aprimore-se! 💡

Exercícios como o dos Números Perfeitos são o segredo para treinar o seu cérebro de programador. Na nossa Apostila Completa de PHP, você encontra dezenas de exercícios resolvidos e comentados como esse, prontos para você estudar.

Baixar Apostila Completa de PHP

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

Conversão de Celsius e Fahrenheit em PHP: Script com Funções

 

Conversão de Celsius e Fahrenheit em PHP usando Funções

Neste tutorial da nossa Apostila de PHP, vamos resolver de forma prática e elegante um dos clássicos da programação mundial: o conversor de temperaturas. Vamos aplicar nossos conhecimentos de funções para converter graus Celsius para Fahrenheit e vice-versa.

Este é o momento de colocar a mão na massa resolvendo o Exercício 01 da nossa Lista de Exercícios sobre Funções:

"Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Fahrenheit ou vice-versa. Para cada conversão, chame a função correspondente."

A Matemática da Conversão

Antes de codificar, precisamos entender as fórmulas matemáticas. Existem escalas diferentes para medir temperatura no mundo (o Brasil usa Celsius, enquanto os Estados Unidos usam Fahrenheit, por exemplo).

As fórmulas matemáticas universais de conversão são:

  • 🌡️ De Celsius para Fahrenheit: $$F=(C \times \frac{9}{5})+32$$
  • 🌡️ De Fahrenheit para Celsius: $$C=(F-32) \times \frac{5}{9}$$

A Lógica do nosso Script PHP

Nós vamos construir um pequeno formulário HTML onde o usuário digita a temperatura. Em vez de pedir para ele digitar "1" ou "2", vamos fazer um código de alto nível usando um elemento <select> para ele escolher o tipo de conversão.

No backend, o nosso PHP fará o seguinte:

  1. Verifica se o formulário foi enviado (usando isset).
  2. Captura a opção escolhida.
  3. Se escolheu "CtoF", chama a nossa função CtoF() e exibe o resultado.
  4. Se escolheu "FtoC", chama a função FtoC().

O Código Completo (HTML + PHP)

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Conversor de Temperaturas - PHP Progressivo</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <h2>Conversor de Temperatura</h2>
    
    <!-- Formulário Inteligente -->
    <form action="" method="get">
        <label>Temperatura:</label>
        <input type="number" step="0.01" name="temperatura" required />
        
        <select name="conversao">
            <option value="CtoF">Graus Celsius para Fahrenheit</option>
            <option value="FtoC">Fahrenheit para Graus Celsius</option>
        </select>
        
        <input type="submit" value="Calcular" />
    </form>

    <?php
    // Verifica se os dados foram enviados para evitar erros
    if (isset($_GET['temperatura']) && isset($_GET['conversao'])) {
        
        // Pega a temperatura e converte para decimal
        $temp = floatval($_GET['temperatura']);
        $opt = $_GET['conversao'];

        echo "<br>"; // Pula uma linha
        
        // Tratamento da Opção
        if ($opt == "CtoF") {
            $resultado = CtoF($temp);
            echo "Resultado: <strong>{$temp}°C</strong> equivalem a <strong>" . number_format($resultado, 2) . "°F</strong>.";
        } elseif ($opt == "FtoC") {
            $resultado = FtoC($temp);
            echo "Resultado: <strong>{$temp}°F</strong> equivalem a <strong>" . number_format($resultado, 2) . "°C</strong>.";
        } else {
            echo "Opção inválida.";
        }
    }

    // ==========================================
    // MINHAS FUNÇÕES (A Mágica acontece aqui!)
    // ==========================================

    function CtoF($celsius) {
        return ($celsius * 9 / 5) + 32;
    }

    function FtoC($fahrenheit) {
        return ($fahrenheit - 32) * 5 / 9;
    }
    ?>

</body>
</html>

Por que isso é tão poderoso?

Prontinho! Veja que bacana, limpo e organizado ficou o nosso script. Agora você pode, inclusive, hospedar seu site na web, pois esse sistema está funcionando perfeitamente.

A maior vantagem de ter criado Funções para isso é a reutilização de código. Imagine que você consiga um emprego de desenvolvedor em um portal de notícias meteorológicas. Você nunca mais precisará escrever essa matemática do zero!

Você pode simplesmente pegar as funções CtoF() e FtoC(), salvá-las em um arquivo chamado conversao.php, e sempre que precisar usá-las no seu sistema, basta incluir a linha require_once "conversao.php"; no topo da sua página.

Isso é o PHP em sua melhor forma! Sensacional, não acha?

Quer mais Códigos Prontos? 🚀

Esse script faz parte da nossa coleção de exercícios de lógica. Na nossa apostila oficial, você encontra centenas de scripts como esse comentados linha a linha para acelerar seu aprendizado.

Baixar Apostila Completa de PHP

13 Exercícios de Funções em PHP: Pratique sua Lógica de Programação

Lista de Exercícios Resolvidos de Funções em PHP

Programação não se aprende apenas lendo, mas sim quebrando a cabeça e escrevendo código! Chegou o momento de testarmos tudo o que você aprendeu sobre criação, invocação e retorno de Funções no PHP.

Abaixo, preparamos uma lista com 13 desafios práticos que vão desde lógicas simples até o uso de funções recursivas avançadas. Tente resolver todos no seu ambiente local antes de olhar as respostas!

💡 Dica de Ouro

Crie um arquivo chamado funcoes.php e coloque todas as funções que você criar lá dentro. Nos arquivos dos exercícios, use o comando include 'funcoes.php';. Isso já te treina para a modularização de sistemas reais!


Lista de Exercícios:

Exercício 01

Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Fahrenheit ou vice-versa. Se ele digitar 1, é de Celsius para Fahrenheit; se digitar 2, é de Fahrenheit para Celsius; se for outro valor, mostre uma mensagem de erro. Para cada conversão, chame a função correta correspondente.

→ Ver Resolução: Conversão Celsius-Fahrenheit

Exercício 02

Faça um programa que contenha uma função que receba três argumentos inteiros e retorne a soma desses três valores. Em seguida, o seu script deve fornecer a média dos três números, através de uma segunda função que invoca a primeira (função chamando função).

Exercício 03

Faça um programa que receba três números do usuário e identifique o maior número através de uma função, e o menor número através de uma outra função separada.

Exercício 04

A probabilidade de dar um valor em um dado comum é de 1/6 (uma em seis). Faça um script em PHP que simule 1 milhão de lançamentos de dados e mostre a frequência que cada número (de 1 a 6) apareceu no final da simulação.

→ Ver Resolução: Lançamento de dados 

Exercício 05

A série de Fibonacci é uma sequência de números onde os dois primeiros são 0 e 1, e o termo seguinte é sempre obtido somando os dois anteriores. Faça um script em PHP que solicite um inteiro positivo ao usuário, que chamaremos de n. Crie uma função recursiva que exiba todos os termos da sequência até o n-ésimo termo.

Exercício 06

Crie uma função que receba um inteiro positivo e teste para saber se ele é primo ou não. Faça um script que recebe um inteiro n do usuário e mostra todos os números primos existentes no intervalo de 1 até n.

Exercício 07

Um número é dito perfeito quando ele é igual à soma de seus fatores divisores. Por exemplo, os fatores de 6 são 1, 2 e 3. Como a soma (1 + 2 + 3) é igual a 6, ele é um número perfeito. Escreva uma função que receba um inteiro e diga se é perfeito ou não. Em outra parte do script, peça um inteiro n e mostre todos os números perfeitos de 1 até n.

→ Ver Resolução: Números perfeitos em PHP

Exercício 08

Use uma função que receba um valor n inteiro e imprima o seguinte padrão numérico na tela (até a n-ésima linha):

1
2   2
3   3   3
.....
n   n   n   n   n   n  ... n
Exercício 09

Use uma função que receba um valor n inteiro e imprima um padrão semelhante ao exercício anterior, mas em formato de escada sequencial:

1
1   2
1   2   3
.....
1   2   3   ...  n
Exercício 10

Faça um programa com uma função que necessite de um argumento. A função deve retornar o caractere 'P' se o seu argumento for positivo, e 'N' se o seu argumento for zero ou negativo.

Exercício 11

Faça um programa com uma função chamada somaImposto(). A função possui dois parâmetros formais: taxaImposto (que é a quantia de imposto sobre vendas expressa em porcentagem) e custo (que é o valor de um item antes do imposto). A função deve alterar e retornar o valor de custo atualizado para incluir o imposto sobre a venda.

Exercício 12

Faça um programa que converta da notação de 24 horas para a notação de 12 horas. Por exemplo, o programa deve converter 14:25 em 2:25 P.M. A entrada é dada em dois inteiros. Deve haver pelo menos duas funções: uma para fazer a conversão e uma para a saída do texto formatado. Registre a informação de período como 'A' para A.M. e 'P' para P.M. Inclua um loop (formulário contínuo) que permita que o usuário repita esse cálculo para novos valores sempre que desejar.

Exercício 13

Faça uma função matemática que informe a quantidade de dígitos de um determinado número inteiro inserido pelo usuário.

→ Ver Resolução: Quantos dígitos tem um número

Gabarito Completo na Apostila 📚

Travou em algum exercício? Não se preocupe! A resolução comentada passo a passo de TODOS esses algoritmos (e dezenas de outros) está disponível na nossa apostila oficial.

Baixar Apostila Completa de PHP

Como Descobrir se um Número é Primo em PHP (Com Código Completo e Lógica)

Dando continuidade à nossa lista de exercícios de Laços de Repetição, chegamos a um clássico absoluto da programação: o algoritmo para descobrir se um número é primo. Esse é um daqueles testes de lógica que separam os meninos dos homens (e as meninas das mulheres) nas entrevistas de estágio. Puxa a cadeira e vamos debulhar esse código!

O que são Números Primos? (A Matemática)

Um número primo é um número inteiro maior que 1 que possui exatamente dois divisores: o número 1 e ele mesmo. Em PHP, descobrimos se um número é primo utilizando o operador de módulo (%) dentro de um laço de repetição (FOR) para testar se há restos de divisões exatas.

Para refrescar sua memória lá do ensino fundamental: dizemos que um número é primo quando a única forma de dividir ele (sem deixar quebrado) é por 1 e por ele mesmo.

  • Exemplo 1: O número 2 só é divisível por 1 e por 2. (É primo).
  • Exemplo 2: O número 4 é divisível por 1, por 2 e por 4. (Não é primo, pois possui 3 divisores).

📝 Lista rápida de alguns números primos para você testar no script:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211...

🧠 Sentindo a cabeça fritar com a lógica?

Criar algoritmos matemáticos no início é assustador. A maioria dos alunos trava exatamente aqui. Foi por isso que estruturei a Apostila PHP Progressivo com gabaritos detalhados passo a passo. Ter o material em PDF offline do lado do teclado salva horas de frustração no StackOverflow. Fica a dica de mestre.

A Lógica do Algoritmo em PHP

Como fazemos o computador pensar? Simples! Para sabermos se um número $n$ é primo, nós mandamos o PHP fazer força bruta. Vamos dividir esse número $n$ por todos os números menores que ele: por 2, por 3, por 4... até chegar em $(n - 1)$.

💡 O Truque do Módulo: Usaremos o operador matemático de módulo (%). Se a operação $n \bmod x = 0$ for verdadeira em qualquer momento desse laço, significa que a divisão foi exata. Logo, encontramos um divisor extra e o número NÃO é primo.

O Passo a Passo do Código:

  1. Criamos uma variável $divisores iniciando em 0.
  2. Iniciamos um laço for com um $count = 2.
  3. O laço vai rodar enquanto $count < $n.
  4. Dentro do laço, um if testa a divisão. Se o resto for 0, nós mostramos qual é o múltiplo e aumentamos nossa variável $divisores++.
  5. Fora do laço, outro if analisa: se $divisores for maior que zero, ele NÃO é primo. Se continuar zero, ele é primo!

Script PHP Completo para Detectar Primo (Com Formulário)

Aqui está a nossa solução entregando o pacote completo: um formulário HTML caprichado integrado com o script PHP de validação. Pode copiar, colar e testar no seu servidor local!

<html>
 <head>
  <title>Calculadora de Números Primos - PHP Progressivo</title>
  <style>
    body { font-family: Arial, sans-serif; padding: 20px; }
    .caixa { background: #f4f4f4; padding: 15px; border-radius: 8px; max-width: 400px; margin-bottom: 20px; }
    input[type=number] { padding: 8px; width: 100%; box-sizing: border-box; margin: 10px 0; }
    input[type=submit] { background: #0284c7; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; }
  </style>
 </head>
 <body>
  
  <div class="caixa">
    <h3>É Primo?</h3>
    <form action="" method="get">
     <label>Digite um número inteiro:</label>
     <input type="number" name="number" required />
     <input type="submit" value="Testar Número" />
    </form>
  </div>

 <?php
  // Verifica se o formulário foi enviado
  if(isset($_GET['number'])){
      
      $n = intval($_GET['number']);
      $divisores = 0;
      
      // Laço para testar todos os números menores que N
      for($count = 2; $count < $n; $count++){
          
          // Testando se a divisão é exata (resto igual a zero)
          if($n % $count == 0){
              echo "Múltiplo encontrado: $count <br />";
              $divisores++; // Incrementa contador de divisores
          }
      }
      
      echo "<hr>"; // Linha de separação
      
      // Avaliação Final
      if($divisores > 0){
          echo "<h4 style='color:red;'>Não é primo!</h4>";
          echo "<p>O número $n tem $divisores divisores além de 1 e dele mesmo.</p>";
      } else {
          // Números menores ou iguais a 1 não são primos por definição
          if($n <= 1){
              echo "<h4 style='color:red;'>Não é primo!</h4>";
              echo "<p>Números menores ou iguais a 1 não são considerados primos.</p>";
          } else {
              echo "<h4 style='color:green;'>É Primo!</h4>";
              echo "<p>O número $n é divisível APENAS por 1 e por ele mesmo.</p>";
          }
      }
  }
 ?>
 
 </body>
</html>

🚀 Domine o PHP sem depender da internet

"Apanhei muito nos exercícios de repetição na faculdade. Essa apostila resolveu meus problemas porque tem a teoria limpa e dezenas de exercícios práticos com o código fonte explicado."
— Felipe Andrade, Desenvolvedor Backend.

Tenha todos os códigos, lógicas e tutorias avançados organizados em PDF. Estude no ônibus, na fila do banco ou quando a internet cair.

Apostila Completa de PHP PDF
Baixar Apostila Completa em PDF 📥

🛠️ Dica de Sênior: Otimizando o Algoritmo

O código acima resolve o problema perfeitamente e tira nota 10 na faculdade. Mas, e se você quiser testar se o número 999.999.937 é primo? O nosso laço for rodaria quase 1 bilhão de vezes, travando seu servidor.

No mundo real da engenharia de software, nós não testamos até $(n - 1)$. Basta testar os divisores até a raiz quadrada do número ( $\sqrt{n}$ ). Se um número não possui nenhum divisor exato até a sua raiz quadrada, é matematicamente impossível que ele possua algum divisor depois dela.

Na prática, bastaria alterar o laço para for($count = 2; $count <= sqrt($n); $count++). Essa simples linha transforma um processamento que levaria segundos em algo que roda em milissegundos!

📚 Consolide seu Conhecimento (O que estudar a seguir):

Para entender esse script de olhos fechados, certifique-se de ter devorado estas aulas passadas:

Quer gabaritar todos os exercícios e dominar a Web?

Leve o arsenal completo: PHP, JavaScript, HTML, CSS, C e Java. Tudo no Mega Pack.

Download Mega Pack Apostilas Programação Progressiva

Como Criar a Sequência de Fibonacci em PHP: Passo a Passo com Laços

O que você vai aprender neste tutorial

  • O que é a famosa Sequência de Fibonacci e como ela funciona.
  • Como estruturar a lógica de troca de variáveis (atual, último e penúltimo).
  • Como criar um script PHP moderno usando o laço de repetição for para gerar a série dinamicamente a partir da entrada do usuário.

O que é a Sequência de Fibonacci?

A sequência de Fibonacci é uma sucessão numérica infinita onde os dois primeiros termos são 0 e 1, e cada número subsequente é calculado pela soma dos dois números imediatamente anteriores a ele.

Essa é, sem dúvida, uma das questões de lógica de programação mais cobradas em entrevistas de emprego para desenvolvedores juniores. Entender como construí-la usando laços de repetição (como o laço FOR ou WHILE) é um divisor de águas no seu aprendizado de algoritmos.

Vamos visualizar a formação da série na prática:

  • Termo 1 = 0
  • Termo 2 = 1
  • Termo 3 = 1 + 0 = 1
  • Termo 4 = 1 + 1 = 2
  • Termo 5 = 2 + 1 = 3
  • Termo 6 = 3 + 2 = 5
  • ...e assim por diante.

💡 Curiosidade: A série de Fibonacci não vive apenas nos computadores. Ela possui proporções matemáticas fascinantes que aparecem frequentemente na natureza, desde a disposição das pétalas de uma flor até espirais de galáxias. Vale a leitura na Wikipédia sobre a Sequência de Fibonacci.

Como Fazer a Série de Fibonacci com Laços em PHP

Para transformarmos essa matemática em código PHP, precisamos que o usuário nos diga quantos termos ele quer ver. Inicialmente, sempre exibimos o 0 e o 1. Portanto, o usuário precisa digitar um número maior que 2 para a brincadeira fazer sentido.

A Lógica das Variáveis

Nós vamos utilizar três variáveis fundamentais para fazer o script "lembrar" dos números passados:

  • $atual - Vai armazenar o número atual que está sendo calculado.
  • $ultimo - Armazena o último número gerado pela série.
  • $penultimo - Armazena o número que veio antes do último.

O estado inicial delas, antes do laço começar, será:

$ultimo = 1;
$penultimo = 0;

Dentro do nosso laço, a mágica acontece nesta ordem exata:

  1. Calculamos o próximo número: $atual = $ultimo + $penultimo;
  2. Imprimimos o valor de $atual.
  3. O pulo do gato: Atualizamos as variáveis para a próxima rodada do laço. O antigo $ultimo passa a ser o $penultimo, e o $atual recém-calculado vira o novo $ultimo.

A Lógica está travando sua evolução? 🧠

Se você teve que ler a explicação das variáveis duas vezes, não se preocupe, é normal! A melhor forma de fixar algoritmos como o de Fibonacci é treinando offline, sem distrações. Baixe o Mega Pack Projeto Progressivo e tenha acesso vitalício a centenas de exercícios resolvidos passo a passo em PHP, JS, Python e mais.

Ver o Conteúdo do Mega Pack Completo

Código Completo: Gerador de Fibonacci em PHP

Abaixo, temos o código HTML para o formulário e o script PHP atualizado. Utilizamos a função intval() e o operador ?? para garantir que o código seja seguro e não gere erros no seu servidor moderno.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Gerador de Fibonacci - PHP Progressivo</title>
</head>
<body>
    <h2>Calculadora da Sequência de Fibonacci</h2>
    <form action="" method="get">
        <label for="number">Exibir até qual termo (maior que 2):</label><br>
        <input type="number" name="number" id="number" min="3" required />
        <input type="submit" value="Calcular" />
    </form> 
    <hr>

    <?php 
    // Verifica se o usuário enviou o número pelo formulário
    if (isset($_GET['number'])) {
        // Captura o valor, garantindo que seja um número inteiro seguro
        $n = intval($_GET['number']);
        
        // Verifica se o número atende ao requisito mínimo
        if ($n > 2) {
            $ultimo = 1;
            $penultimo = 0;
            
            echo "<h3>Os primeiros $n termos são:</h3>";
            // Exibe os dois primeiros termos fixos
            echo "0 <br> 1 <br>";
            
            // O laço começa em 1 e vai até $n - 2 (pois já exibimos 2 termos)
            for ($count = 1; $count <= $n - 2; $count++) {
                
                // Regra de negócio do Fibonacci
                $atual = $ultimo + $penultimo;
                echo $atual . "<br>";
                
                // Atualização de variáveis para a próxima iteração
                $penultimo = $ultimo;
                $ultimo = $atual;
            }
        } else {
            echo "<p style='color:red;'>Por favor, insira um número maior que 2.</p>";
        }
    }
    ?>
</body>
</html>

⚠️ Atenção ao detalhe técnico: Nossa variável de controle do for vai de 1 até $n - 2. Subtraímos dois do total justamente porque já imprimimos o 0 e o 1 manualmente fora do laço. Se não fizéssemos isso, a sequência teria dois números a mais do que o usuário pediu!