Materi
Wali kelas XI IPA 2 di sebuah SMA di Yogyakarta merekap nilai tiga ujian setiap siswa. Program menghitung rata-rata per siswa, membulatkannya ke satu angka desimal dengan `round`, memberi predikat, mengurutkan dari yang tertinggi, lalu mencetak daftar siswa yang rata-ratanya 70 ke atas.
Hitung rata-rata keempat siswa lebih dulu. Nilai 0 tetap dihitung sebagai satu ujian karena count menghitung semua elemen. Perhatikan bahwa round menghasilkan float, dan float bulat dicetak echo tanpa angka desimal. arsort mengurutkan nilai dari besar ke kecil sambil menjaga nama sebagai kunci; array_filter juga menjaga kunci, sehingga array_keys menghasilkan nama. Soal terakhir mengganti arsort dengan sort; ingat apa yang dilakukan sort terhadap kunci array asosiatif, bukan hanya terhadap urutannya.
<?php
// Rekap nilai ujian kelas XI IPA 2, sebuah SMA di Yogyakarta
$nilai = [
"Ayu" => [80, 92, 85],
"Bima" => [60, 55, 70],
"Citra" => [95, 88, 91],
"Dodi" => [70, 0, 65],
];
function rataRata(array $skor): float {
return array_sum($skor) / count($skor);
}
function predikat(float $rata): string {
return match (true) {
$rata >= 85 => "A",
$rata >= 70 => "B",
$rata >= 60 => "C",
default => "D",
};
}
$rekap = [];
foreach ($nilai as $nama => $skor) {
$rekap[$nama] = round(rataRata($skor), 1);
}
arsort($rekap);
$lulus = array_filter($rekap, fn($r) => $r >= 70);
foreach ($rekap as $nama => $rata) {
echo $nama . ": " . $rata . " (" . predikat($rata) . ")\n";
}
echo "Lulus: " . implode(", ", array_keys($lulus)) . "\n";