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.