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
foreachpara percorrer o array de notas. - Usar
matchpara 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
- Definimos o array
$notascom cinco valores. - Inicializamos
$soma = 0para acumular as notas. - O
foreachpercorre cada nota do array. - Dentro do loop, usamos
match(true)para comparar a nota com faixas. O primeiro braço verdadeiro define o conceito. - Imprimimos a nota e seu conceito, e somamos a nota à variável
$soma. - Após o loop, calculamos a média dividindo
$somapelo número de notas. - Usamos
number_formatpara exibir a média com uma casa decimal. - 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
matchcom expressão fixa:match($nota)não funciona para faixas; é precisomatch(true). - Esquecer o
default: se nenhuma condição for atendida, omatchlançaUnhandledMatchError. Sempre inclua umdefault. - Não converter a média para string:
echo "Média: $media\n"pode exibir muitas casas decimais. Usenumber_formatouround. - Confundir
matchcomswitch:matchretorna um valor e não precisa debreak.
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