Mostrando postagens com marcador Laços de Repetição. Mostrar todas as postagens
Mostrando postagens com marcador Laços de Repetição. Mostrar todas as postagens

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!

Potenciação em PHP: Como calcular potência com Laços e a função pow()

💡 O que você vai aprender:

Como calcular a potência de um número no PHP? Neste tutorial, você verá três formas: a lógica manual com laços de repetição (essencial para treinar o raciocínio), o uso da função nativa pow() e o operador de exponenciação moderno **.

A potenciação é uma operação matemática básica onde multiplicamos uma base por ela mesma tantas vezes quanto indicar o expoente. No PHP, existem diversas formas de realizar esse cálculo, desde o controle total via loops até funções de alto nível.

Como funciona a Potenciação?

Para calcular a potência de um número no PHP de forma direta, usamos a função pow($base, $expoente) ou o operador ** (ex: $base ** $expoente). Mas antes de usar os atalhos, entender a lógica por trás é o que diferencia um digitador de código de um programador real.

Potenciação em PHP: Base e Expoente

Exemplo: 5⁴ significa 5 multiplicado por ele mesmo 4 vezes (5x5x5x5 = 625).

Cálculo de Potência usando Laços (While, Do While e For)

Se você estiver em uma entrevista técnica e pedirem para calcular a potência sem usar funções prontas, você usará os loops. A ideia é começar com um resultado igual a 1 e multiplicá-lo pela base repetidamente.


<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Potenciação Manual no PHP</title>
</head>
<body>
    <form action="" method="get">
        Base: <input type="number" name="base" required /><br><br>
        Expoente: <input type="number" name="expoente" required /><br><br>
        <input type="submit" value="Calcular" />
    </form>

<?php
$base = $_GET['base'] ?? null;
$exp = $_GET['expoente'] ?? null;

if ($base !== null && $exp !== null) {
    // 1. Usando WHILE
    $resultadoWhile = 1;
    $count = 1;
    while($count <= $exp) {
        $resultadoWhile *= $base;
        $count++;
    }
    echo "Resultado com WHILE: $resultadoWhile <br>";

    // 2. Usando FOR (Mais limpo)
    $resultadoFor = 1;
    for($i = 1; $i <= $exp; $i++) {
        $resultadoFor *= $base;
    }
    echo "Resultado com FOR: $resultadoFor <br>";
}
?>
</body>
</html>

Domine a Programação em 2026 🚀

Aprenda PHP, JS, Python, Java, C, C++ e HTML com o material didático mais completo da internet. Do zero ao Full-Stack.

Quero meu Mega Pack!

Métodos Nativos do PHP: pow() e Exponenciação (**)

Embora aprender com laços seja importante para a faculdade ou lógica básica, no dia a dia usamos as ferramentas da linguagem. Se você precisar trabalhar com números decimais (ex: 1.5 elevado a 2.3), os laços manuais ficam muito complexos. É aí que entram as funções nativas:

A função pow()

Antigamente, era a forma padrão. Ela aceita dois parâmetros e retorna o resultado, lidando bem com números do tipo float.


$resultado = pow(5, 2); // Retorna 25

O Operador de Exponenciação (Moderno)

Introduzido no PHP 5.6 e padrão absoluto hoje em dia, o operador ** é muito mais intuitivo e rápido.


$resultado = 5 ** 2; // Retorna 25
$cubo = 2 ** 3;    // Retorna 8

🛠️ Curiosidade: O operador ** tem precedência sobre outros operadores matemáticos, o que significa que ele é calculado antes de somas ou subtrações na maioria dos casos!

⚠️ Atenção: Se você estiver estudando para certificações ou concursos, pratique a lógica com laços. Para projetos reais e freelances, use sempre o operador ** pelo desempenho e clareza.


38 Exercícios de Laços e Loops em PHP (Pratique FOR, WHILE e DO WHILE)

Hora de treinar, pessoal! 🏋️‍♂️

O que vai definir, no fim das contas, se você é um bom desenvolvedor web ou não, é a quantidade de exercícios que você resolve (ou pelo menos tenta resolver).

Revise a teoria antes de começar:

⚠️ Regra de Ouro: Tente muito, tente bastante mesmo. Quebre a cabeça e só depois veja a solução!

Lista de Questões: Laços e Loopings em PHP

  1. Faça um programa que peça uma nota, entre zero e dez. Mostre uma mensagem caso o valor seja inválido e continue pedindo até que o usuário informe um valor válido.
  2. Faça um programa que leia um nome de usuário e a sua senha e não aceite a senha igual ao nome do usuário, mostrando uma mensagem de erro e voltando a pedir as informações.
    🔗 Ver Solução: 01 e 02 - Validando dados em PHP
  3. Faça um programa que leia e valide as seguintes informações:
    1. Nome: maior que 3 caracteres;
    2. Idade: entre 0 e 150;
    3. Salário: maior que zero;
    4. Sexo: 'f' ou 'm';
    5. Estado Civil: 's', 'c', 'v', 'd';
    Dica: Use a função strlen(string) para saber o tamanho de um texto.
  4. Supondo que a população de um país A seja da ordem de 80.000 habitantes com uma taxa anual de crescimento de 3% e que a população de B seja 200.000 habitantes com uma taxa de crescimento de 1.5%. Faça um programa que calcule e escreva o número de anos necessários para que a população do país A ultrapasse ou iguale a população do país B, mantidas as taxas de crescimento.
  5. Altere o programa anterior permitindo ao usuário informar as populações e as taxas de crescimento iniciais. Valide a entrada e permita repetir a operação.
    🔗 Ver Solução: 04 e 05 - População de duas cidades
  6. Faça um programa que imprima na tela os números de 1 a 20, um abaixo do outro. Depois modifique o programa para que ele mostre os números um ao lado do outro.
  7. Faça um programa que leia 5 números e informe o maior número.
  8. Faça um programa que leia 5 números e informe a soma e a média dos números.
    🔗 Ver Solução: 07 e 08 - Maior, soma e média
  9. Faça um programa que imprima na tela apenas os números ímpares entre 1 e 50.
  10. Faça um programa que receba dois números inteiros e gere os números inteiros que estão no intervalo compreendido por eles.
  11. Altere o programa anterior para mostrar no final a soma dos números.
  12. Desenvolva um gerador de tabuada, capaz de gerar a tabuada de qualquer número inteiro entre 1 a 10. O usuário deve informar de qual numero ele deseja ver a tabuada. A saída deve ser conforme o exemplo abaixo:
    Tabuada de 5:
    5 X 1 = 5
    5 X 2 = 10
    ...
    5 X 10 = 50
    
    🔗 Ver Solução: Tabuada em PHP
  13. Faça um programa que peça dois números, base e expoente, calcule e mostre o primeiro número elevado ao segundo número. Não utilize a função de potência da linguagem.
    🔗 Ver Solução: Potenciação em PHP
  14. Faça um programa que peça 10 números inteiros, calcule e mostre a quantidade de números pares e a quantidade de números ímpares.
  15. A série de Fibonacci é formada pela sequência 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55... Faça um programa capaz de gerar a série até o n-ésimo termo.
    🔗 Ver Solução: Fibonacci com laços
  16. A série de Fibonacci é formada pela sequência 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55... Faça um programa que gere a série até que o valor seja maior que 500.
  17. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário. Ex.: $5! = 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 120$
    🔗 Ver Solução: Fatorial com laços
  18. Faça um programa que, dado um conjunto de N números, determine o menor valor, o maior valor e a soma dos valores.
  19. Altere o programa anterior para que ele aceite apenas números entre 0 e 1000.
  20. Altere o programa de cálculo do fatorial, permitindo ao usuário calcular o fatorial várias vezes e limitando o fatorial a números inteiros positivos e menores que 16.
  21. Faça um programa que peça um número inteiro e determine se ele é ou não um número primo. Um número primo é aquele que é divisível somente por ele mesmo e por 1.
  22. Altere o programa de cálculo dos números primos, informando, caso o número não seja primo, por quais números ele é divisível.
    🔗 Ver Solução 21 e 22: Números primos em PHP
  23. Faça um programa que mostre todos os primos entre 1 e N sendo N um número inteiro fornecido pelo usuário. O programa deverá mostrar também o número de divisões que ele executou para encontrar os números primos. Serão avaliados o funcionamento, o estilo e o número de testes (divisões) executados.
  24. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário. A saída deve ser conforme o exemplo abaixo:
    Fatorial de: 5
    5! = 5 . 4 . 3 . 2 . 1 = 120
    
  25. O Departamento Estadual de Meteorologia lhe contratou para desenvolver um programa que leia um conjunto indeterminado de temperaturas, e informe ao final a menor e a maior temperaturas informadas, bem como a média das temperaturas.
  26. Os números primos possuem várias aplicações dentro da Computação, por exemplo na Criptografia. Um número primo é aquele que é divisível apenas por um e por ele mesmo. Faça um programa que peça um número inteiro e determine se ele é ou não um número primo.
  27. Encontrar números primos é uma tarefa difícil. Faça um programa que gera uma lista dos números primos existentes entre 1 e um número inteiro informado pelo usuário.
  28. Desenvolva um programa que faça a tabuada de um número qualquer inteiro que será digitado pelo usuário, mas a tabuada não deve necessariamente iniciar em 1 e terminar em 10. O valor inicial e final devem ser informados também pelo usuário, conforme exemplo abaixo:
    Montar a tabuada de: 5
    Começar por: 4
    Terminar em: 7
    
    Vou montar a tabuada de 5 começando em 4 e terminando em 7:
    5 X 4 = 20
    5 X 5 = 25
    5 X 6 = 30
    5 X 7 = 35
    
    Obs: Você deve verificar se o usuário não digitou o final menor que o inicial.
  29. Uma academia deseja fazer um censo entre seus clientes para descobrir o mais alto, o mais baixo, a mais gordo e o mais magro. Faça um programa que pergunte a cada um dos clientes da academia seu código, sua altura e seu peso. O final da digitação de dados deve ser dada quando o usuário digitar 0 (zero) no campo código. Ao encerrar o programa, devem ser informados os códigos e valores do cliente mais alto, do mais baixo, do mais gordo e do mais magro, além da média das alturas e dos pesos.
  30. Um funcionário de uma empresa recebe aumento salarial anualmente. Sabe-se que:
    1. Esse funcionário foi contratado em 1995, com salário inicial de R$ 1.000,00;
    2. Em 1996 recebeu aumento de 1,5% sobre seu salário inicial;
    3. A partir de 1997 (inclusive), os aumentos salariais sempre correspondem ao dobro do percentual do ano anterior.
    Faça um programa que determine o salário atual desse funcionário. Após concluir isto, altere o programa permitindo que o usuário digite o salário inicial.
  31. Faça um programa que leia dez conjuntos de dois valores, o primeiro representando o número do aluno e o segundo representando a sua altura em centímetros. Encontre o aluno mais alto e o mais baixo. Mostre o número do aluno mais alto e o número do aluno mais baixo, junto com suas alturas.
  32. Foi feita uma estatística em cinco cidades brasileiras para coletar dados sobre acidentes de trânsito. Foram obtidos os seguintes dados:
    1. Código da cidade;
    2. Número de veículos de passeio (em 1999);
    3. Número de acidentes de trânsito com vítimas (em 1999).
    Deseja-se saber:
    1. Qual o maior e menor índice de acidentes de trânsito e a que cidade pertence;
    2. Qual a média de veículos nas cinco cidades juntas;
    3. Qual a média de acidentes de trânsito nas cidades com menos de 2.000 veículos de passeio.
  33. Faça um programa que receba o valor de uma dívida e mostre uma tabela com os seguintes dados: valor da dívida, valor dos juros, quantidade de parcelas e valor da parcela.
    Qtd de Parcelas  |  % de Juros sobre o valor inicial
    1                |  0
    3                |  10
    6                |  15
    9                |  20
    12               |  25
    
    Exemplo de saída:
    Valor da Dívida | Valor dos Juros | Qtd de Parcelas | Valor da Parcela
    R$ 1.000,00     | 0               | 1               | R$ 1.000,00
    R$ 1.100,00     | 100             | 3               | R$ 366,00
    R$ 1.150,00     | 150             | 6               | R$ 191,67
    
  34. Faça um programa que leia uma quantidade indeterminada de números positivos e conte quantos deles estão nos seguintes intervalos: [0-25], [26-50], [51-75] e [76-100]. A entrada de dados deverá terminar quando for lido um número negativo.
  35. O cardápio de uma lanchonete é o seguinte:
    Especificação   | Código | Preço
    Cachorro Quente | 100    | R$ 1,20
    Bauru Simples   | 101    | R$ 1,30
    Bauru com ovo   | 102    | R$ 1,50
    Hambúrguer      | 103    | R$ 1,20
    Cheeseburguer   | 104    | R$ 1,30
    Refrigerante    | 105    | R$ 1,00
    
    Faça um programa que leia o código dos itens pedidos e as quantidades desejadas. Calcule e mostre o valor a ser pago por item (preço * quantidade) e o total geral do pedido. Considere que o cliente deve informar quando o pedido deve ser encerrado.
  36. Em uma eleição presidencial existem quatro candidatos. Os votos são informados por meio de código:
    1, 2, 3, 4 - Votos para os respectivos candidatos (monte a tabela, ex: 1-José)
    5 - Voto Nulo
    6 - Voto em Branco
    
    Faça um programa que calcule e mostre: total de votos para cada candidato, total de nulos, total de brancos, e a percentagem de votos nulos e brancos sobre o total. Para finalizar a contagem, digite zero.
  37. Desenvolver um programa para verificar a nota do aluno em uma prova com 10 questões. O programa deve perguntar ao aluno a resposta de cada questão e ao final comparar com o gabarito, calculando o total de acertos e a nota. Após cada aluno, perguntar se outro aluno vai utilizar o sistema. No final, informar: Maior e Menor Acerto, Total de Alunos, Média da Turma.
    Gabarito da Prova:
    01 - A | 02 - B | 03 - C | 04 - D | 05 - E
    06 - E | 07 - D | 08 - C | 09 - B | 10 - A
    
  38. Em uma competição de salto em distância cada atleta tem direito a cinco saltos. O melhor e o pior resultados são eliminados. O resultado fica sendo a média dos três valores restantes. Faça um programa que receba o nome e as cinco distâncias. O programa deve ser encerrado quando não for informado o nome do atleta.
    Atleta: Rodrigo Curvêllo
    Primeiro Salto: 6.5 m
    Segundo Salto: 6.1 m
    ...
    Melhor salto: 6.5 m
    Pior salto: 5.3 m
    Média dos demais saltos: 5.9 m
    
    Resultado final:
    Rodrigo Curvêllo: 5.9 m
    
  39. Em uma competição de ginástica, cada atleta recebe votos de sete jurados. A melhor e a pior nota são eliminadas. Faça um programa que receba o nome do ginasta e as notas, calcule a média e exiba um relatório similar ao do exercício anterior.
  40. Faça um programa que peça um número inteiro positivo e em seguida mostre este número invertido.
    Exemplo:
    12376489 => 98467321
    
  41. Faça um programa que mostre os n termos da Série a seguir e imprima no final a soma da série:

    $S = \frac{1}{1} + \frac{2}{3} + \frac{3}{5} + \frac{4}{7} + \frac{5}{9} + \dots + \frac{n}{m}$
  42. Sendo $H = 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \dots + \frac{1}{N}$, Faça um programa que calcule o valor de H com N termos.
    🔗 Código disponível na Apostila PHP Progressivo
  43. Faça um programa que mostre os n termos da Série a seguir e imprima no final a soma da série:

    $S = \frac{1}{1} + \frac{2}{3} + \frac{3}{5} + \frac{4}{7} + \frac{5}{9} + \dots + \frac{n}{m}$

    🔗 Código disponível na Apostila PHP Progressivo

Como Usar BREAK e CONTINUE no PHP (Pare ou Pule Loops como um Sênior)

🚀 O que você vai aprender nesta aula:

  • O que é o comando BREAK e como usá-lo para evitar processamento inútil.
  • Como o CONTINUE ajuda a pular iterações e limpar seu código de IFs gigantes.
  • A diferença prática (e visual) entre interromper e pular rodadas de um loop.
  • Dica Sênior: Como parar laços aninhados (um dentro do outro) de uma vez só.

Fala, dev! Agora que você já sabe criar laços de repetição (como FOR e WHILE), você ganhou o poder de automatizar tarefas. Mas, como diz o ditado: com grandes poderes, vêm grandes responsabilidades.

E se você precisar parar um laço pela metade porque já encontrou o que procurava? Ou se quiser ignorar um item específico da lista e pular direto para o próximo? É aí que entram os super-heróis do controle de fluxo: break e continue.

Comando break e continue em PHP

O que é o comando BREAK em PHP?

O comando break no PHP serve para encerrar imediatamente a execução de um laço de repetição (WHILE, FOR, FOREACH ou DO WHILE) ou estrutura condicional (SWITCH). Assim que o PHP lê a palavra "break", ele abandona o loop atual na mesma hora e continua executando o resto do programa.

Você já cruzou com ele na aula de SWITCH, mas nos loops ele ganha uma nova dimensão: a de otimização de performance.

Exemplo 1: Otimizando um laço FOR

Imagine que você tem uma lista de 1.000.000 de números e quer encontrar o primeiro número que seja múltiplo de 11 e de 13 ao mesmo tempo. Veja como o break salva o servidor de um colapso:

<?php
for ($count = 1; $count <= 1000000; $count++) {
    // Se for múltiplo de 11 e 13...
    if ($count % 11 == 0 && $count % 13 == 0) {
        echo "Achei! O número é o $count";
        break; // O loop PARA AQUI. Os outros números não serão testados!
    }
}
?>

⚠️ Pense bem: Sem o break, o PHP acharia a resposta no número 143, mas continuaria processando os outros 999.857 números à toa. Isso é o que chamamos de código ineficiente.

Exemplo 2: O Loop Infinito Controlado (WHILE true)

Muitas vezes, não sabemos quantas vezes o loop vai rodar até a condição ser atingida. Nesses casos, criamos um loop que "roda para sempre", mas o encerramos por dentro usando o break.

<?php
$count = 1;

while (true) { // Vai rodar para sempre?
    if ($count % 12 == 0 && $count % 21 == 0) {
        echo "O MMC entre 12 e 21 é: $count";
        break; // ...Não! O break garante a saída.
    }
    $count++;
}
?>
Apostila PHP Progressivo

Tempo é dinheiro. Aprenda do jeito certo. ⏳

Ficar caçando erros de loops infinitos ou tentar juntar pedaços de tutoriais desatualizados atrasa sua carreira. Se você quer economizar meses de estudo, precisa de um método sequencial e lógico.

A Apostila PHP Progressivo entrega exercícios resolvidos que moldam seu raciocínio lógico direto ao ponto.

Acelerar Meu Aprendizado →

O que é o comando CONTINUE em PHP?

O comando continue serve para interromper apenas a iteração (rodada) atual do loop, ignorando todo o código que está abaixo dele e pulando diretamente para a próxima avaliação do laço de repetição. O loop, no entanto, continua vivo.

Sabe aquele momento que você quer filtrar algo indesejado e apenas "passar reto"? É pra isso que ele serve.

Exemplo Prático: O Jogo do PIM

No clássico jogo do PIM, contamos os números, mas quando encontramos um múltiplo de 4, falamos "PIM" no lugar do número.

<?php
for ($count = 1; $count <= 20; $count++) {

    if ($count % 4 == 0) {
        echo "PIM <br>";
        continue; // Ignora o 'echo' lá embaixo e pula pro próximo número
    }

    echo "$count <br>";
}
?>

🛠️ Por que isso é profissional? O continue evita que você crie estruturas de if/else gigantes. Ele atua como uma cláusula de guarda: "Se for múltiplo de 4, imprima PIM, pule a rodada e nem olhe para o resto do código".

🔥 Dica Avançada (Conteúdo Sênior)

Em projetos reais, é comum termos loops dentro de loops (laços aninhados). O que acontece se você der um break; no loop de dentro? Ele só para o de dentro.

Mas o PHP permite que você diga quantos níveis quer quebrar ou pular usando break N; ou continue N;.

<?php
for ($i = 0; $i < 5; $i++) {
    for ($j = 0; $j < 5; $j++) {
        if ($i == 2 && $j == 2) {
            break 2; // Quebra os DOIS loops de uma vez!
        }
    }
}
?>

Isso é programação em alto nível!

Resumo: Qual usar e quando?

  • 🛑 Use BREAK quando: Você encontrou o dado que estava procurando (num banco de dados, num array) ou um erro crítico aconteceu e não faz sentido continuar verificando o resto.
  • ⏭️ Use CONTINUE quando: Você quer descartar itens inválidos ou aplicar regras específicas, mas precisa que o loop continue rodando até o final da fila.

Cuidado com os Erros de Principiante!

  • ⚠️ WHILE sem incremento + CONTINUE: Se você usar um continue dentro de um WHILE antes de incrementar o contador, o contador nunca vai subir e você criará um loop infinito travando a página.
  • ⚠️ Usar Break no lugar errado: Lembrar que ele aborta a missão. Não o use se a intenção for apenas pular um valor.

Como Criar uma Tabuada em PHP: Exercício Prático com FOR, WHILE e DO WHILE

💡 O que você vai aprender nesta aula:

  • Como criar uma tabuada em PHP passo a passo e de forma dinâmica.
  • A diferença prática (e visual) entre os laços WHILE, DO WHILE e FOR.
  • Qual estrutura de repetição os programadores seniores escolhem em cada situação.
  • Como capturar dados da URL de forma segura usando $_GET e o operador de coalescência nula.

Fala, dev! Se você quer testar se realmente entendeu como os laços de repetição funcionam, não existe exercício melhor do que este. Escrever uma tabuada vai forçar você a usar variáveis, matemática básica e controle de fluxo, tudo ao mesmo tempo.

Como fazer uma tabuada em PHP?

Para criar uma tabuada em PHP, basta usar uma estrutura de repetição (como o laço FOR) que percorra os números de 1 até 10, multiplicando cada um deles por uma variável base. O resultado de cada iteração é exibido na tela usando o comando echo.

Neste tutorial do Curso de PHP do Programação Progressiva, vamos resolver esse problema clássico de três formas diferentes, para você nunca mais ter dúvidas sobre loops.

Qual loop usar: WHILE, DO WHILE ou FOR?

Essa é uma dúvida que assombra 9 em cada 10 iniciantes em lógica de programação. Resumindo a ópera:

  • WHILE: Perfeito para quando você não sabe exatamente quantas repetições vão acontecer (ex: ler arquivos até acabar).
  • DO WHILE: Ideal quando o código precisa ser executado pelo menos uma vez, antes mesmo de testar a condição (ex: menus de opções).
  • FOR: O queridinho para quando você já sabe o início, o fim e o tamanho do passo (ex: exatamente o nosso caso da tabuada, que vai de 1 a 10).

A verdade nua e crua? Todos resolvem o problema da tabuada. A diferença está na elegância e na organização do seu código final.

Apostila PHP Progressivo

Cansado de depender de conexão com a internet para estudar? 📚

Lógica de programação se aprende com repetição e foco. Ficar abrindo mil abas no navegador só atrapalha. A Apostila PHP Progressivo foi criada para você baixar, estudar offline no seu ritmo e ter acesso imediato a dezenas de exercícios resolvidos (como esse da tabuada, mas muito mais avançados).

Economize tempo. Tenha a referência completa sempre à mão.

Baixar Apostila em PDF agora →

A Mágica do $_GET (Preparando o terreno)

Antes de criarmos os loops, repare nos códigos abaixo que usaremos a instrução $tabuada = $_GET['tab'] ?? 1;. Isso serve para pegarmos o número que o usuário digitou na URL (ou num formulário em PHP).

O operador ?? (coalescência nula) diz o seguinte: "Se o usuário não enviar nenhum número, faça a tabuada do 1 por padrão". Moderno e à prova de erros!

1. Tabuada com WHILE

Aqui, criamos o contador antes do laço e lembramos de incrementá-lo manualmente no final.

<?php
$tabuada = $_GET['tab'] ?? 1;
$count = 1;

while ($count <= 10) {
    echo "$tabuada x $count = " . ($tabuada * $count) . "<br>";
    $count++; // Se esquecer isso, o loop será infinito!
}
?>

💡 Dica: O WHILE verifica a condição primeiro. Se $count já começasse valendo 11, o bloco de código nem seria executado.

2. Tabuada com DO WHILE

Nesta abordagem, o PHP primeiro executa a conta e imprime na tela, e só depois se pergunta se deve repetir o processo.

<?php
$tabuada = $_GET['tab'] ?? 1;
$count = 1;

do {
    echo "$tabuada x $count = " . ($tabuada * $count) . "<br>";
    $count++;
} while ($count <= 10);
?>

⚠️ Atenção: Mesmo que a condição seja falsa desde o início, o DO WHILE obriga a execução da primeira linha. Use com cuidado em cálculos críticos!

3. Tabuada com FOR (A escolha dos profissionais)

Veja como o código fica limpo. Tudo que controla o loop (início, condição e incremento) está empacotado nos parênteses.

<?php
$tabuada = $_GET['tab'] ?? 1;

for ($count = 1; $count <= 10; $count++) {
    echo "$tabuada x $count = " . ($tabuada * $count) . "<br>";
}
?>

🛠️ Curiosidade: O FOR é o mais usado pelo mercado para este tipo de tarefa. Ele reduz a chance de esquecermos o incremento e deixa a leitura do código muito mais rápida para outro desenvolvedor que for dar manutenção no seu sistema.

Resumo: Qual a melhor opção para a Tabuada?

Como lidamos com um início (1) e um fim (10) claramente definidos, a melhor opção sem dúvidas é o FOR. Seu código fica mais limpo, previsível e profissional.

Mas parabéns por ter chegado até aqui! Entender que a lógica é soberana e que a ferramenta (o laço) apenas se adapta ao seu raciocínio é o que vai te transformar em um dev fora da curva.


Laço DO WHILE no PHP: A Diferença Crucial para o WHILE (Com Exemplos)

💡 O que você vai aprender hoje:

  • A diferença crucial entre os laços WHILE e DO WHILE.
  • O conceito de looping pré-condicionado vs. pós-condicionado.
  • Como garantir que um bloco de código rode pelo menos uma vez.
  • Aplicações práticas com contadores e formulários HTML no PHP.

No nosso Curso de PHP, já dissecamos o looping WHILE tradicional. Nele, deixamos uma regra clara: o código dentro do laço só é executado se o teste condicional for verdadeiro desde o início.

Mas e se você precisar que o código rode pelo menos uma vez antes de fazer qualquer pergunta? É exatamente para preencher essa lacuna lógica que existe o laço do...while.

Laço DO WHILE no PHP: O que é e para que serve?

O laço DO WHILE em PHP é uma estrutura de repetição pós-condicionada. Isso significa que ele executa o bloco de código internamente pelo menos uma vez antes de testar se a condição é verdadeira. Se a condição for falsa na primeira verificação, o laço para, mas o código já terá rodado aquela primeira vez.

[Image of do while loop flowchart]

Pense na diferença com a analogia do segurança de balada:

  • WHILE: O segurança pede sua identidade na porta. Se você não tiver idade (condição falsa), você nem entra. (Pré-condicionado).
  • DO WHILE: Você já está dentro da festa (o código roda). O segurança passa no meio do salão e pede a identidade. Se você não tiver, ele te expulsa, mas você já curtiu pelo menos alguns minutos. (Pós-condicionado).

Como usar o DO WHILE (Sintaxe)

A sintaxe é bem intuitiva se você traduzir do inglês: "Faça (do) este código, enquanto (while) esta condição for verdade".

<?php 
 do {
    // Código a ser executado ao menos uma vez
    // Lógica e incremento
 } while (teste_condicional);
?>

⚠️ Atenção dev iniciante: Repare no ponto e vírgula ; no final do while(). No laço WHILE tradicional nós não usamos ponto e vírgula ali, mas no DO WHILE ele é obrigatório para encerrar a instrução. Esquecer isso é um erro clássico que vai quebrar sua página!

Exemplo Prático 1: Executando no "Falso"

O script abaixo prova que a primeira iteração do laço sempre ocorre. A condição matemática 0 em PHP é tratada como FALSE. Mesmo assim, a mensagem vai aparecer na sua tela uma vez.

<?php 
 do {
    echo "Esta mensagem aparece, mesmo a condição sendo falsa!<br>";
 } while (0); // 0 equivale a FALSE em condicionais
?>

Bateu aquela dúvida de quando usar qual laço? 🤔

Saber a sintaxe é fácil, difícil é ter a visão de arquiteto para escolher entre FOR, WHILE e DO WHILE em um projeto real. Na Apostila PHP Progressivo, nós te damos dezenas de exercícios práticos offline para treinar sua lógica de programação até essas escolhas virarem instinto.

Baixar Apostila Completa e Exercícios →

Exemplo 2: Contagem Simples de 1 até 100

Claro, o uso mais comum ainda é criar repetições controladas. Veja como fica o clássico contador de 1 a 100 usando o laço pós-condicionado:

<?php 
  $count = 1;
  
  do {
      echo "Contagem atual: $count <br />";
      $count++; // Incremento essencial para não gerar loop infinito
  } while ($count <= 100);
?>

Exemplo 3: DO WHILE com entrada do Usuário (GET)

Uma aplicação fantástica para o do...while no desenvolvimento web real é a validação de menus e formulários (exibir a interface uma vez, e repetir caso o usuário digite algo errado). Abaixo, temos um script que pergunta ao usuário até onde ele quer contar.

🛠️ Curiosidade técnica: Usamos a VARIÁVEIS SUPERGLOBAIS GET $_GET para pegar o número digitado no formulário HTML e jogar dentro da nossa lógica PHP.

<html>
 <head>
  <title>Apostila PHP Progressivo - Contador Dinâmico</title>
 </head>
 <body>
  <!-- Formulário HTML -->
  <form action="" method="get">
   Deseja contar até qual número? 
   <input type="number" name="count" required /><br />
   <input type="submit" name="submit" value="Iniciar Contagem" />
  </form> 
  
  <hr>

<?php 
  // O código PHP só executa a lógica principal se o formulário for enviado
  if(isset($_GET['count'])) {
      $final = (int) $_GET['count']; // Casting para garantir que é um número inteiro
      $contador = 1;
      
      echo "<h3>Iniciando contagem até $final:</h3>";
      
      do {
          echo "Número: $contador <br />";
          $contador++;
      } while ($contador <= $final);
  }
?>
 </body>
</html>

Neste exemplo, modernize o input HTML para type="number" e adicionei a função isset() FUNÇÃO ISSET. Isso evita que o PHP lance um aviso na tela ("Notice") caso o usuário acesse a página pela primeira vez sem ter enviado o formulário.


Pronto para deixar sua lógica ainda mais limpa? O próximo laço é o favorito dos programadores.

Próxima Aula: O Laço FOR »

Laço WHILE no PHP: O Guia Definitivo com Exemplos Práticos e Loops

 

💡 O que você vai aprender hoje:

  • A diferença real entre um teste único (IF) e uma repetição (WHILE).
  • Como usar a sintaxe correta para evitar travamentos no servidor.
  • Exemplos práticos de contadores progressivos e regressivos.
  • O perigo (e a utilidade controlada) do Looping Infinito.

Na aula passada, vimos como os operadores de atribuição poupam nossos dedos. Agora, imagine que você precisa imprimir os números de 1 a 1 milhão. Você não vai escrever 1 milhão de linhas de código, certo? É aqui que entra o poder dos Loopings no PHP.

Laço WHILE no PHP: O que é e para que serve?

O laço WHILE é uma estrutura de repetição que executa um bloco de código repetidamente enquanto uma condição específica for verdadeira (TRUE). Diferente do IF, que testa a condição uma única vez, o WHILE reavalia a expressão a cada ciclo, parando apenas quando ela se torna falsa (FALSE).

[Image of while loop flowchart in programming]

Imagine o WHILE como um vigia: enquanto o sinal estiver verde (condição verdadeira), ele permite que o código continue rodando em círculos. Assim que o sinal fica vermelho, ele interrompe o fluxo imediatamente.

Como usar o WHILE (Sintaxe Moderna)

A estrutura do WHILE é limpa e direta. Veja como declarar no seu script:

<?php 
 while(teste_condicional){
    // O código aqui dentro se repete
    // Enquanto o teste resultar em TRUE
 }
?>

O PHP testa a condição entre parênteses. Se for verdade, ele executa o bloco entre chaves, volta ao topo e testa novamente. Esse ciclo se repete até que a condição não seja mais atendida.

Cuidado com o Looping Infinito!

Se você criar uma condição que nunca muda para falso, o PHP rodará o código até esgotar a memória do servidor ou travar o navegador do seu usuário. É o famoso "loop infinito".

<?php 
 // AVISO: Isso vai travar seu navegador!
 while(TRUE){
    echo "PHP Progressivo rodando para sempre... <br />";
 }
?>

Sua lógica travou ou o código deu nó? 🌀

Entender loopings é o que separa quem "brinca" de quem programa de verdade. Na Apostila PHP Progressivo, explicamos o WHILE, FOR e DO-WHILE com exercícios práticos e reais para você nunca mais travar um servidor.

Baixar Apostila Completa →

Exemplo Prático: Contador de 1 a 10

Para um loop útil, precisamos de uma variável de controle. Ela deve ser inicializada, testada e, o mais importante, incrementada.

<?php 
  $count = 1; // 1. Inicialização

  while($count <= 10){ // 2. Teste
    echo "Número: $count <br />";
    
    $count++; // 3. Incremento (Evita o loop infinito!)
  }
?>

🛠️ Curiosidade: Tente mudar o $count++ para $count += 2. O que acontece? Você terá um contador apenas de números ímpares! O PHP te dá liberdade total sobre o passo da repetição.

Desafio: Validação com Senha

Loopings também servem para validar dados. Enquanto a condição de "senha correta" não for atingida, o sistema pode insistir na cobrança (logicamente, em sistemas reais, usamos isso para fluxos de tentativas).

<?php 
  $senha_correta = 'rush2112';
  $senha_digitada = $_GET['password'] ?? '';

  while($senha_digitada != $senha_correta && $senha_digitada != ''){
      echo "Acesso Negado! Digite novamente.<br />";
      // No mundo real, aqui interrompemos para nova entrada
      break; 
  }
  
  if($senha_digitada === $senha_correta) {
      echo "<strong>Entrando no sistema...</strong>";
  }
?>

Dominou o WHILE? Então você está pronto para o laço FOR, que é ainda mais organizado!

Próxima Aula: Laço DO WHILE »