Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

PHP Dasar

Pelajaran 7 dari 15

Percabangan dan perulangan

Misi: rekap ongkos kirim satu minggu

Setelah pelajaran ini kamu bisa menelusuri program 30 baris dengan foreach, continue, dan match (true), lalu menebak akibat mengubah satu baris.

±17 menitDiperiksa 5 Okt 2026

Materi

Toko Batik Laras di Pekalongan mencatat berat kiriman setiap hari selama seminggu. Tarifnya bertingkat: sampai 2 kg Rp9.000 per kg, sampai 5 kg Rp8.000 per kg, di atas itu Rp7.000 per kg. Program di bawah menghitung total ongkir, jumlah hari tanpa kiriman, dan jumlah hari dengan ongkir di atas Rp50.000.

Buat tabel kecil dengan tujuh baris, satu per hari: berat, tarif yang dipilih match, dan ongkirnya. Ingat bahwa match (true) memakai lengan PERTAMA yang kondisinya benar, dan bahwa hari dengan berat 0 tidak pernah sampai ke match karena continue. Dua soal terakhir mengubah satu baris; telusuri ulang dengan baris yang sudah diganti. Perhatikan letak setiap echo: semuanya berada SETELAH perulangan, sehingga tidak ada yang tercetak bila perulangan berhenti karena galat.

<?php
// Rekap ongkos kirim Toko Batik Laras, Pekalongan, satu minggu
$beratHarian = [1, 3, 0, 7, 2, 12, 5]; // kg, Senin sampai Minggu
$totalOngkir = 0;
$hariKosong = 0;
$hariBesar = 0;

foreach ($beratHarian as $berat) {
    if ($berat == 0) {
        $hariKosong++;
        continue;
    }

    $tarif = match (true) {
        $berat <= 2 => 9000,
        $berat <= 5 => 8000,
        default => 7000,
    };
    $ongkir = $berat * $tarif;

    if ($ongkir > 50000) {
        $hariBesar++;
    }
    $totalOngkir += $ongkir;
}

echo "Total ongkir: Rp" . number_format($totalOngkir, 0, ',', '.') . "\n";
echo "Hari tanpa kiriman: $hariKosong\n";
echo "Hari ongkir di atas Rp50.000: $hariBesar\n";

Latihan

0/4 lulus

Misi akhir modul: luluskan minimal 4 dari 4 tugas. Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 4

Apa yang dicetak baris pertama keluaran?

<?php
// Rekap ongkos kirim Toko Batik Laras, Pekalongan, satu minggu
$beratHarian = [1, 3, 0, 7, 2, 12, 5]; // kg, Senin sampai Minggu
$totalOngkir = 0;
$hariKosong = 0;
$hariBesar = 0;

foreach ($beratHarian as $berat) {
    if ($berat == 0) {
        $hariKosong++;
        continue;
    }

    $tarif = match (true) {
        $berat <= 2 => 9000,
        $berat <= 5 => 8000,
        default => 7000,
    };
    $ongkir = $berat * $tarif;

    if ($ongkir > 50000) {
        $hariBesar++;
    }
    $totalOngkir += $ongkir;
}

echo "Total ongkir: Rp" . number_format($totalOngkir, 0, ',', '.') . "\n";
echo "Hari tanpa kiriman: $hariKosong\n";
echo "Hari ongkir di atas Rp50.000: $hariBesar\n";
Pilih satu jawaban

Latihan 2 dari 4

Apa yang dicetak baris ketiga keluaran?

<?php
// Rekap ongkos kirim Toko Batik Laras, Pekalongan, satu minggu
$beratHarian = [1, 3, 0, 7, 2, 12, 5]; // kg, Senin sampai Minggu
$totalOngkir = 0;
$hariKosong = 0;
$hariBesar = 0;

foreach ($beratHarian as $berat) {
    if ($berat == 0) {
        $hariKosong++;
        continue;
    }

    $tarif = match (true) {
        $berat <= 2 => 9000,
        $berat <= 5 => 8000,
        default => 7000,
    };
    $ongkir = $berat * $tarif;

    if ($ongkir > 50000) {
        $hariBesar++;
    }
    $totalOngkir += $ongkir;
}

echo "Total ongkir: Rp" . number_format($totalOngkir, 0, ',', '.') . "\n";
echo "Hari tanpa kiriman: $hariKosong\n";
echo "Hari ongkir di atas Rp50.000: $hariBesar\n";
Pilih satu jawaban

Latihan 3 dari 4

Kata `continue;` di dalam if pertama diganti `break;`. Apa yang dicetak baris pertama keluaran?

<?php
// Rekap ongkos kirim Toko Batik Laras, Pekalongan, satu minggu
$beratHarian = [1, 3, 0, 7, 2, 12, 5]; // kg, Senin sampai Minggu
$totalOngkir = 0;
$hariKosong = 0;
$hariBesar = 0;

foreach ($beratHarian as $berat) {
    if ($berat == 0) {
        $hariKosong++;
        continue;
    }

    $tarif = match (true) {
        $berat <= 2 => 9000,
        $berat <= 5 => 8000,
        default => 7000,
    };
    $ongkir = $berat * $tarif;

    if ($ongkir > 50000) {
        $hariBesar++;
    }
    $totalOngkir += $ongkir;
}

echo "Total ongkir: Rp" . number_format($totalOngkir, 0, ',', '.') . "\n";
echo "Hari tanpa kiriman: $hariKosong\n";
echo "Hari ongkir di atas Rp50.000: $hariBesar\n";
Pilih satu jawaban

Latihan 4 dari 4

Baris `default => 7000,` dihapus. Apa yang terjadi?

<?php
// Rekap ongkos kirim Toko Batik Laras, Pekalongan, satu minggu
$beratHarian = [1, 3, 0, 7, 2, 12, 5]; // kg, Senin sampai Minggu
$totalOngkir = 0;
$hariKosong = 0;
$hariBesar = 0;

foreach ($beratHarian as $berat) {
    if ($berat == 0) {
        $hariKosong++;
        continue;
    }

    $tarif = match (true) {
        $berat <= 2 => 9000,
        $berat <= 5 => 8000,
        default => 7000,
    };
    $ongkir = $berat * $tarif;

    if ($ongkir > 50000) {
        $hariBesar++;
    }
    $totalOngkir += $ongkir;
}

echo "Total ongkir: Rp" . number_format($totalOngkir, 0, ',', '.') . "\n";
echo "Hari tanpa kiriman: $hariKosong\n";
echo "Hari ongkir di atas Rp50.000: $hariBesar\n";
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke