Aprenda a resolver problemas clássicos de lógica com PHP
php

Pronto para encarar problemas clássicas de lógica em PHP e descobrir juntos as melhores soluções?

Se você está iniciando sua jornada na programação, já deve ter percebido que a lógica é a bússola que nos guia na criação de soluções eficientes. Dominar a lógica de programação não é apenas entender uma linguagem, mas sim aprender a pensar de forma estruturada para resolver desafios. E que tal fazer isso utilizando o PHP, uma linguagem poderosa e versátil amplamente usada no desenvolvimento web?

Compreendendo a lógica de programação em PHP

Antes de mergulharmos nos problemas, é fundamental entender alguns conceitos básicos do PHP que serão nossos aliados nessa jornada:
  • Estruturas de controle: permitem direcionar o fluxo do programa, como if/else, switch, for, while e foreach.
  • Estruturas de dados: formas de armazenar e manipular dados, como arrays (associativos e indexados) e objetos.
  • Paradigmas específicos: PHP suporta Programação Orientada a Objetos (POO) e recursos funcionais, permitindo escrever código modular e reutilizável.

Missão extra: explore o universo PHP!

Se alguns desses termos são novos para você, não se preocupe! A Rocketseat tem uma série de conteúdos incríveis para te ajudar a dominar esses conceitos. Vamos juntos nessa missão?
📌
Esses conteúdos vão te ajudar a avançar e aprimorar suas habilidades como desenvolvedor PHP.

Problemas clássicos de lógica e suas soluções

Agora que estamos preparados, vamos colocar a mão na massa e resolver alguns problemas clássicos que vão turbinar suas habilidades de programação!

1. Calculadora básica

Crie uma calculadora que realiza as operações aritméticas básicas: adição, subtração, multiplicação e divisão. O usuário deve inserir dois números e escolher a operação desejada.
<?php echo "Digite o primeiro número: "; $num1 = (float) fgets(STDIN); echo "Digite o operador (+, -, *, /): "; $operador = trim(fgets(STDIN)); echo "Digite o segundo número: "; $num2 = (float) fgets(STDIN); $resultado = 0; switch ($operador) { case '+': $resultado = $num1 + $num2; break; case '-': $resultado = $num1 - $num2; break; case '*': $resultado = $num1 * $num2; break; case '/': if ($num2 != 0) { $resultado = $num1 / $num2; } else { echo "Erro: Divisão por zero não é permitida!\n"; exit; } break; default: echo "Operador inválido!\n"; exit; } echo "Resultado: $resultado\n"; ?>

Explicação do código

  1. Entrada de dados: utilizamos fgets(STDIN) para ler a entrada do usuário no terminal.
  1. Conversão de tipos: convertendo as entradas para float para permitir cálculos com decimais.
  1. Operador: o operador é lido como string e usamos trim() para remover espaços em branco.
  1. Estrutura de controle: utilizamos um switch para determinar qual operação será realizada com base no operador fornecido.
  1. Divisão por zero: incluímos uma verificação para evitar divisão por zero, exibindo uma mensagem de erro caso aconteça.
  1. Saída: exibimos o resultado da operação escolhida.

2. Fatorial de um número

Calcule o fatorial de um número fornecido pelo usuário. O fatorial de um número n é a multiplicação de todos os números inteiros positivos menores ou iguais a n.
<?php function calcularFatorial($n) { if ($n <= 1) { return 1; } else { return $n * calcularFatorial($n - 1); } } echo "Digite um número para calcular o fatorial: "; $numero = (int) fgets(STDIN); $resultado = calcularFatorial($numero); echo "O fatorial de $numero é $resultado\n"; ?>

Explicação do código

  1. Função recursiva: a função calcularFatorial chama a si mesma até que n seja menor ou igual a 1.
  1. Caso base: quando n é 0 ou 1, o fatorial é 1.
  1. Recursão: multiplicamos n pelo fatorial de n - 1.
  1. Entrada e saída: o usuário insere um número, e exibimos o fatorial calculado.

3. Sequência de Fibonacci

Gere a sequência de Fibonacci até um número n fornecido pelo usuário. Na sequência de Fibonacci, cada número é a soma dos dois anteriores, começando por 0 e 1.
<?php function fibonacci($n) { $sequencia = [0, 1]; for ($i = 2; $i < $n; $i++) { $sequencia[$i] = $sequencia[$i - 1] + $sequencia[$i - 2]; } return $sequencia; } echo "Quantos termos da sequência de Fibonacci você deseja? "; $termos = (int) fgets(STDIN); $sequencia = fibonacci($termos); echo "Sequência de Fibonacci com $termos termos:\n"; echo implode(", ", $sequencia) . "\n"; ?>

Explicação do código

  1. Inicialização: começamos a sequência com os valores [0, 1].
  1. Loop: utilizamos um for para calcular cada termo adicional, somando os dois anteriores.
  1. Função: a função fibonacci retorna um array com a sequência até o termo desejado.
  1. Saída: utilizamos implode para exibir a sequência separada por vírgulas.

4. Verificar Palíndromo

Verifique se uma palavra ou frase é um palíndromo, ou seja, se pode ser lida da mesma forma de trás para frente.
<?php function ePalindromo($texto) { // Remover espaços e caracteres especiais $textoLimpo = preg_replace('/[^A-Za-z0-9]/', '', strtolower($texto)); // Inverter o texto $textoInvertido = strrev($textoLimpo); // Verificar se é palíndromo return $textoLimpo === $textoInvertido; } echo "Digite uma palavra ou frase: "; $entrada = fgets(STDIN); if (ePalindromo($entrada)) { echo "É um palíndromo!\n"; } else { echo "Não é um palíndromo.\n"; } ?>

Explicação do código

  1. Limpeza do texto: usamos preg_replace para remover espaços e caracteres não alfanuméricos, e strtolower para deixar tudo em minúsculas.
  1. Inversão: utilizamos strrev para inverter o texto limpo.
  1. Comparação: verificamos se o texto limpo é igual ao invertido.
  1. Entrada e saída: o usuário digita uma palavra ou frase, e informamos se é um palíndromo.

5. Máximo divisor comum (MDC)

Calcule o Máximo Divisor Comum (MDC) de dois números usando o algoritmo de Euclides.
<?php function calcularMDC($a, $b) { while ($b != 0) { $resto = $a % $b; $a = $b; $b = $resto; } return $a; } echo "Digite o primeiro número: "; $num1 = (int) fgets(STDIN); echo "Digite o segundo número: "; $num2 = (int) fgets(STDIN); $mdc = calcularMDC($num1, $num2); echo "O MDC de $num1 e $num2 é $mdc\n"; ?>

Explicação do código

  1. Algoritmo de Euclides: repetimos o processo de dividir a por b e atribuir b ao resto até que b seja zero.
  1. Função: a função calcularMDC retorna o MDC dos dois números fornecidos.
  1. Entrada e saída: o usuário insere dois números, e exibimos o MDC calculado.

6. Ordenação com bubble sort

Implemente o algoritmo de ordenação Bubble Sort para ordenar uma lista de números fornecida pelo usuário.
<?php function bubbleSort($array) { $tamanho = count($array); for ($i = 0; $i < $tamanho - 1; $i++) { for ($j = 0; $j < $tamanho - $i - 1; $j++) { if ($array[$j] > $array[$j + 1]) { // Troca $temp = $array[$j]; $array[$j] = $array[$j + 1]; $array[$j + 1] = $temp; } } } return $array; } echo "Digite números separados por vírgula: "; $entrada = fgets(STDIN); $numeros = array_map('intval', explode(',', $entrada)); $numerosOrdenados = bubbleSort($numeros); echo "Números ordenados: " . implode(', ', $numerosOrdenados) . "\n"; ?>

Explicação do código

  1. Entrada de dados: o usuário insere números separados por vírgula, que são convertidos em um array de inteiros.
  1. Algoritmo bubble sort: compara elementos adjacentes e os troca se estiverem fora de ordem, repetindo o processo até que o array esteja ordenado.
  1. Saída: exibimos os números ordenados.

7. Ordenação com quick sort

Implemente o algoritmo de ordenação Quick Sort para ordenar uma lista de números fornecida pelo usuário.
<?php function quickSort($array) { if (count($array) < 2) { return $array; } $pivo = $array[0]; $esquerda = []; $direita = []; for ($i = 1; $i < count($array); $i++) { if ($array[$i] <= $pivo) { $esquerda[] = $array[$i]; } else { $direita[] = $array[$i]; } } return array_merge(quickSort($esquerda), [$pivo], quickSort($direita)); } echo "Digite números separados por vírgula: "; $entrada = fgets(STDIN); $numeros = array_map('intval', explode(',', $entrada)); $numerosOrdenados = quickSort($numeros); echo "Números ordenados: " . implode(', ', $numerosOrdenados) . "\n"; ?>

Explicação do código

  1. Recursão: o Quick Sort é um algoritmo recursivo que divide o array em subarrays menores.
  1. Pivô: escolhemos o primeiro elemento como pivô e separamos os demais em arrays esquerda e direita.
  1. Concatenação: utilizamos array_merge para juntar os arrays ordenados.
  1. Entrada e Saída: o usuário insere números, e exibimos os números ordenados.

Dicas para Resolver Problemas de Lógica em PHP

  • Decomponha o problema: divida em partes menores e resolva uma de cada vez.
  • Use ferramentas de depuração: utilize var_dump, print_r e debuggers para inspecionar variáveis e fluxo do programa.
  • Escreva testes unitários: use frameworks como PHPUnit para validar seu código.
  • Explore bibliotecas e frameworks: Ferramentas como Composer e frameworks como Laravel podem simplificar muito o desenvolvimento.
  • Pratique regularmente: a prática leva à perfeição. Continue desafiando a si mesmo com novos problemas.
💜
Quer acelerar ainda mais seu aprendizado? Participe da comunidade Rocketseat no Discord e troque experiências com outros devs apaixonados por código!

Conclusão

Parabéns por chegar até aqui! Você deu um passo importante na sua jornada como desenvolvedor, explorando e solucionando problemas clássicos de lógica em PHP. Mas essa é apenas a decolagem do seu foguete rumo ao infinito do conhecimento!
Quer ir além e se tornar um mestre em PHP? Então, aperte os cintos e embarque no foguete da Rocketseat! Nossa formação PHP é o combustível que você precisa para decolar na carreira, aprendendo na prática com projetos reais e um suporte personalizado que faz toda a diferença.
Nesta formação, você vai dominar as principais tecnologias do mercado, desenvolvendo habilidades práticas ao lidar com desafios do dia a dia e construindo um portfólio de brilhar os olhos. Imagine ter a chance de criar projetos que simulam situações reais, te preparando para qualquer desafio que encontrar pela frente.
Então, bora codar e expandir nossos conhecimentos juntos? 👇
notion image
 

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA