Desafio PHP

Processamento de notas com loops e match

Enunciado

Dado um array de notas (0 a 10), calcule a média, classifique cada nota com match (A: 9-10, B: 7-8.9, C: 5-6.9, D: 0-4.9) e imprima um relatório. Use foreach para percorrer as notas e match para a classificação. No final, imprima a média e a situação da turma: Aprovada se média >= 7, Recuperação se média >= 5, senão Reprovada.

Requisitos

  • Usar foreach para percorrer o array de notas.
  • Usar match para classificar cada nota (A, B, C, D).
  • Calcular a média das notas.
  • Imprimir a situação da turma com base na média.

Código inicial

<?php
$notas = [8.5, 6.0, 9.0, 4.5, 7.5];
// Complete o código

Saída esperada

Nota 8.5: B
Nota 6.0: C
Nota 9.0: A
Nota 4.5: D
Nota 7.5: B
Média: 7.1
Situação: Aprovada
Ver dica

Para o match, use true como expressão e condições nos braços. Para a média, some as notas e divida pelo total.

Mostrar solução
<?php
$notas = [8.5, 6.0, 9.0, 4.5, 7.5];
$soma = 0;

foreach ($notas as $nota) {
    // Classifica a nota usando match com true
    $conceito = match (true) {
        $nota >= 9 => 'A',
        $nota >= 7 => 'B',
        $nota >= 5 => 'C',
        default => 'D',
    };
    echo "Nota $nota: $conceito\n";
    $soma += $nota;
}

$media = $soma / count($notas);
echo "Média: " . number_format($media, 1) . "\n";

$situacao = match (true) {
    $media >= 7 => 'Aprovada',
    $media >= 5 => 'Recuperação',
    default => 'Reprovada',
};
echo "Situação: $situacao\n";

Passo a passo

  1. Definimos o array $notas com cinco valores.
  2. Inicializamos $soma = 0 para acumular as notas.
  3. O foreach percorre cada nota do array.
  4. Dentro do loop, usamos match(true) para comparar a nota com faixas. O primeiro braço verdadeiro define o conceito.
  5. Imprimimos a nota e seu conceito, e somamos a nota à variável $soma.
  6. Após o loop, calculamos a média dividindo $soma pelo número de notas.
  7. Usamos number_format para exibir a média com uma casa decimal.
  8. Um segundo match(true) classifica a situação da turma com base na média.

Por que funciona

O match(true) é uma técnica poderosa: como cada condição é avaliada como booleana, o primeiro braço que resultar em true é retornado. Isso substitui cadeias de if/elseif de forma mais limpa e segura. O foreach simplifica a iteração sobre arrays, e a média é calculada com operações aritméticas básicas.

Erros comuns

  • Usar match com expressão fixa: match($nota) não funciona para faixas; é preciso match(true).
  • Esquecer o default: se nenhuma condição for atendida, o match lança UnhandledMatchError. Sempre inclua um default.
  • Não converter a média para string: echo "Média: $media\n" pode exibir muitas casas decimais. Use number_format ou round.
  • Confundir match com switch: match retorna um valor e não precisa de break.

Outra forma de resolver

Poderia usar switch com case para cada faixa, mas match é mais conciso e moderno. Para a média, poderia usar array_sum($notas) / count($notas).

Saída esperada

Nota 8.5: B
Nota 6.0: C
Nota 9.0: A
Nota 4.5: D
Nota 7.5: B
Média: 7.1
Situação: Aprovada