Aprenda a resolver problemas clássicos de lógica com 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
eforeach
.
- 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
- Entrada de dados: utilizamos
fgets(STDIN)
para ler a entrada do usuário no terminal.
- Conversão de tipos: convertendo as entradas para
float
para permitir cálculos com decimais.
- Operador: o operador é lido como string e usamos
trim()
para remover espaços em branco.
- Estrutura de controle: utilizamos um
switch
para determinar qual operação será realizada com base no operador fornecido.
- Divisão por zero: incluímos uma verificação para evitar divisão por zero, exibindo uma mensagem de erro caso aconteça.
- 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
- Função recursiva: a função
calcularFatorial
chama a si mesma até quen
seja menor ou igual a 1.
- Caso base: quando
n
é 0 ou 1, o fatorial é 1.
- Recursão: multiplicamos
n
pelo fatorial den - 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
- Inicialização: começamos a sequência com os valores
[0, 1]
.
- Loop: utilizamos um
for
para calcular cada termo adicional, somando os dois anteriores.
- Função: a função
fibonacci
retorna um array com a sequência até o termo desejado.
- 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
- Limpeza do texto: usamos
preg_replace
para remover espaços e caracteres não alfanuméricos, estrtolower
para deixar tudo em minúsculas.
- Inversão: utilizamos
strrev
para inverter o texto limpo.
- Comparação: verificamos se o texto limpo é igual ao invertido.
- 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
- Algoritmo de Euclides: repetimos o processo de dividir
a
porb
e atribuirb
ao resto até queb
seja zero.
- Função: a função
calcularMDC
retorna o MDC dos dois números fornecidos.
- 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
- Entrada de dados: o usuário insere números separados por vírgula, que são convertidos em um array de inteiros.
- Algoritmo bubble sort: compara elementos adjacentes e os troca se estiverem fora de ordem, repetindo o processo até que o array esteja ordenado.
- 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
- Recursão: o Quick Sort é um algoritmo recursivo que divide o array em subarrays menores.
- Pivô: escolhemos o primeiro elemento como pivô e separamos os demais em arrays
esquerda
edireita
.
- Concatenação: utilizamos
array_merge
para juntar os arrays ordenados.
- 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? 👇