Lompat ke konten utama
←

Go dari Nol

Pelajaran 7 dari 15

Percabangan dan perulangan

Misi: membaca program rekap absensi

Setelah pelajaran ini kamu bisa menelusuri program yang menggabungkan for range, switch dengan beberapa nilai per case, dan if-else if, lalu memprediksi keluarannya dan akibat perubahan kecil.

±17 menitDiperiksa 5 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Bagian personalia sebuah kantor di Semarang merekap absensi delapan hari kerja seorang karyawan. Setiap hari bernilai hadir, izin, sakit, atau alpa. Program menghitung jumlah hadir dan tidak hadir, mencatat hari alpa, mencari alpa beruntun terpanjang, lalu menentukan status dari persentase kehadiran. Batas 75 dan 50 persen di sini adalah aturan contoh kelas ini. Datanya ditulis langsung di slice absen, bukan dibaca dari berkas, supaya keluarannya bisa ditelusuri dengan tangan.

package main

import "fmt"

func main() {
	absen := []string{"hadir", "alpa", "hadir", "alpa", "alpa", "izin", "hadir", "hadir"}
	hadir, tidakHadir, alpaBeruntun, terpanjang := 0, 0, 0, 0

	for i, s := range absen {
		switch s {
		case "hadir":
			hadir++
			alpaBeruntun = 0
		case "izin", "sakit":
			tidakHadir++
			alpaBeruntun = 0
		default:
			tidakHadir++
			alpaBeruntun++
			if alpaBeruntun > terpanjang {
				terpanjang = alpaBeruntun
			}
			fmt.Println("Alpa di hari ke-", i+1)
		}
	}

	persen := hadir * 100 / len(absen)
	fmt.Println("Hadir:", hadir, "Tidak hadir:", tidakHadir)
	fmt.Println("Alpa beruntun terpanjang:", terpanjang)
	if persen >= 75 {
		fmt.Println("Status: aman")
	} else if persen >= 50 {
		fmt.Println("Status: peringatan")
	} else {
		fmt.Println("Status: surat panggilan")
	}
}

Telusuri program dengan tabel kecil: satu baris per putaran, dengan kolom i, s, hadir, tidakHadir, alpaBeruntun, dan terpanjang. Ingat bahwa indeks range dimulai dari 0 dan bahwa persen dihitung dengan pembagian bulat. Perhatikan juga apa yang terjadi pada teks yang tidak cocok dengan case mana pun.

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 baris pertama yang dicetak program ini?

package main

import "fmt"

func main() {
	absen := []string{"hadir", "alpa", "hadir", "alpa", "alpa", "izin", "hadir", "hadir"}
	hadir, tidakHadir, alpaBeruntun, terpanjang := 0, 0, 0, 0

	for i, s := range absen {
		switch s {
		case "hadir":
			hadir++
			alpaBeruntun = 0
		case "izin", "sakit":
			tidakHadir++
			alpaBeruntun = 0
		default:
			tidakHadir++
			alpaBeruntun++
			if alpaBeruntun > terpanjang {
				terpanjang = alpaBeruntun
			}
			fmt.Println("Alpa di hari ke-", i+1)
		}
	}

	persen := hadir * 100 / len(absen)
	fmt.Println("Hadir:", hadir, "Tidak hadir:", tidakHadir)
	fmt.Println("Alpa beruntun terpanjang:", terpanjang)
	if persen >= 75 {
		fmt.Println("Status: aman")
	} else if persen >= 50 {
		fmt.Println("Status: peringatan")
	} else {
		fmt.Println("Status: surat panggilan")
	}
}
Pilih satu jawaban

Latihan 2 dari 4

Status apa yang dicetak?

package main

import "fmt"

func main() {
	absen := []string{"hadir", "alpa", "hadir", "alpa", "alpa", "izin", "hadir", "hadir"}
	hadir, tidakHadir, alpaBeruntun, terpanjang := 0, 0, 0, 0

	for i, s := range absen {
		switch s {
		case "hadir":
			hadir++
			alpaBeruntun = 0
		case "izin", "sakit":
			tidakHadir++
			alpaBeruntun = 0
		default:
			tidakHadir++
			alpaBeruntun++
			if alpaBeruntun > terpanjang {
				terpanjang = alpaBeruntun
			}
			fmt.Println("Alpa di hari ke-", i+1)
		}
	}

	persen := hadir * 100 / len(absen)
	fmt.Println("Hadir:", hadir, "Tidak hadir:", tidakHadir)
	fmt.Println("Alpa beruntun terpanjang:", terpanjang)
	if persen >= 75 {
		fmt.Println("Status: aman")
	} else if persen >= 50 {
		fmt.Println("Status: peringatan")
	} else {
		fmt.Println("Status: surat panggilan")
	}
}
Pilih satu jawaban

Latihan 3 dari 4

Elemen keenam ditulis "Izin" dengan huruf I besar, bukan "izin". Apa yang berubah pada keluaran?

package main

import "fmt"

func main() {
	absen := []string{"hadir", "alpa", "hadir", "alpa", "alpa", "izin", "hadir", "hadir"}
	hadir, tidakHadir, alpaBeruntun, terpanjang := 0, 0, 0, 0

	for i, s := range absen {
		switch s {
		case "hadir":
			hadir++
			alpaBeruntun = 0
		case "izin", "sakit":
			tidakHadir++
			alpaBeruntun = 0
		default:
			tidakHadir++
			alpaBeruntun++
			if alpaBeruntun > terpanjang {
				terpanjang = alpaBeruntun
			}
			fmt.Println("Alpa di hari ke-", i+1)
		}
	}

	persen := hadir * 100 / len(absen)
	fmt.Println("Hadir:", hadir, "Tidak hadir:", tidakHadir)
	fmt.Println("Alpa beruntun terpanjang:", terpanjang)
	if persen >= 75 {
		fmt.Println("Status: aman")
	} else if persen >= 50 {
		fmt.Println("Status: peringatan")
	} else {
		fmt.Println("Status: surat panggilan")
	}
}
Pilih satu jawaban

Latihan 4 dari 4

Pada program semula, baris alpaBeruntun = 0 di case "hadir" dihapus. Berapa alpa beruntun terpanjang yang dicetak sekarang?

package main

import "fmt"

func main() {
	absen := []string{"hadir", "alpa", "hadir", "alpa", "alpa", "izin", "hadir", "hadir"}
	hadir, tidakHadir, alpaBeruntun, terpanjang := 0, 0, 0, 0

	for i, s := range absen {
		switch s {
		case "hadir":
			hadir++
			alpaBeruntun = 0
		case "izin", "sakit":
			tidakHadir++
			alpaBeruntun = 0
		default:
			tidakHadir++
			alpaBeruntun++
			if alpaBeruntun > terpanjang {
				terpanjang = alpaBeruntun
			}
			fmt.Println("Alpa di hari ke-", i+1)
		}
	}

	persen := hadir * 100 / len(absen)
	fmt.Println("Hadir:", hadir, "Tidak hadir:", tidakHadir)
	fmt.Println("Alpa beruntun terpanjang:", terpanjang)
	if persen >= 75 {
		fmt.Println("Status: aman")
	} else if persen >= 50 {
		fmt.Println("Status: peringatan")
	} else {
		fmt.Println("Status: surat panggilan")
	}
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke