Sederhana dan Debugging
Menerapkan konsep kondisional, perulangan, dan fungsi dalam proyek program serta teknik debugging
Agenda
Review Konsep
Kondisional, perulangan, fungsi
Studi Kasus Proyek
Dari masalah ke solusi
Implementasi Proyek
Kode lengkap C++ & Python
Teknik Debugging
Menemukan dan memperbaiki bug
Proyek Kelompok
Tugas akhir dan presentasi
Ringkasan konsep dari pertemuan sebelumnya yang akan digabungkan dalam proyek.
if-elseif-else untuk percabangan, nested if untuk keputusan bertingkat
for loop jika iterasi diketahui, while loop jika bergantung kondisi, break/continue untuk kontrol
Modularitas, parameter, return value, scope variabel
Pertemuan ini adalah puncak! Kita akan menggabungkan semua konsep menjadi proyek yang utuh — kondisional + perulangan + fungsi dalam satu program.
Kantin SMA Padang — dari masalah nyata ke solusi program
Buat program kasir untuk kantin SMA di Padang yang bisa:
tampilkan_menu()for loophitung_total(harga, jumlah)fungsi + paramcek_diskon(total)if-elseif-elsehitung_kembalian(bayar, total)fungsi + returnSistem Kasir Kantin SMA Padang — kasir_kantin.cpp
#include <iostream>
#include <string>
using namespace std;
string menu[] = {"Nasi Padang", "Ayam Pop", "Es Teh", "Jus Jeruk"};
int harga[] = {15000, 12000, 3000, 5000};
void tampilkanMenu() {
for (int i = 0; i < 4; i++)
cout << i+1 << ". " << menu[i]
<< " Rp" << harga[i] << endl;
}
int hitungTotal(int h, int jml) { return h * jml; }
int cekDiskon(int total) {
if (total >= 50000) return total * 15 / 100;
else if (total >= 25000) return total * 10 / 100;
else return 0;
}
int hitungKembalian(int bayar, int tot) { return bayar - tot; }
int main() {
char lagi;
do {
tampilkanMenu();
int pilih, jml;
cout << "Pilih: "; cin >> pilih;
cout << "Jumlah: "; cin >> jml;
int total = hitungTotal(harga[pilih-1], jml);
int diskon = cekDiskon(total);
int bayar = total - diskon;
cout << "Total: Rp" << bayar << endl;
int uang; cout << "Bayar: "; cin >> uang;
cout << "Kembalian: Rp" << hitungKembalian(uang, bayar) << endl;
cout << "Lagi? (y/n): "; cin >> lagi;
} while (lagi == 'y');
return 0;
}
Sistem Kasir Kantin SMA Padang — kasir_kantin.py
menu = ["Nasi Padang", "Ayam Pop", "Es Teh", "Jus Jeruk"]
harga = [15000, 12000, 3000, 5000]
def tampilkan_menu():
for i in range(len(menu)):
print(f"{i+1}. {menu[i]} Rp{harga[i]}")
def hitung_total(h, jml):
return h * jml
def cek_diskon(total):
if total >= 50000:
return total * 15 // 100
elif total >= 25000:
return total * 10 // 100
else:
return 0
def hitung_kembalian(bayar, tot):
return bayar - tot
# Program utama
while True:
tampilkan_menu()
pilih = int(input("Pilih: ")) - 1
jml = int(input("Jumlah: "))
total = hitung_total(harga[pilih], jml)
diskon = cek_diskon(total)
bayar = total - diskon
print(f"Total: Rp{bayar}")
uang = int(input("Bayar: "))
print(f"Kembalian: Rp{hitung_kembalian(uang, bayar)}")
if input("Lagi? (y/n): ") != "y":
break
Perhatikan: Kedua kode memiliki
logika yang sama — hanya sintaks yang berbeda. C++ pakai do-while, Python pakai while True + break. Fungsi-fungsi dipisah agar
modular dan mudah di-debug.
Tiga strategi untuk menemukan dan memperbaiki bug dalam program.
Menambahkan print/cout untuk mengecek nilai variabel di titik tertentu. Paling sederhana dan sering cukup.
Menelusuri program baris per baris secara manual dengan menulis isi variabel di kertas. Sangat efektif untuk pemula.
Menjelaskan kode baris per baris kepada orang lain (atau boneka bebek!). Seringkali dengan menjelaskan, kita sendiri menemukan bug.
Kapan pakai apa? Print debugging untuk bug sederhana, step-by-step tracing untuk bug logika kompleks, rubber duck saat sudah bingung sendiri. Gabungkan ketiganya untuk hasil terbaik!
Program grading dengan 3 bug — temukan dan perbaiki!
#include <iostream>
using namespace std;
int main() {
int nilai[] = {85, 75, 60};
int total = 0;
// Bug 1: Off-by-one → i <= 3
for (int i = 0; i <= 3; i++) {
total += nilai[i];
}
int rata = total / 3;
// Bug 2: Logic error → > bukan >=
if (rata > 80) {
cout << "Grade: A" << endl;
} else if (rata > 70) {
cout << "Grade: B" << endl;
} else {
cout << "Grade: C" << endl;
}
// Bug 3: Wrong variable → total
cout << "Rata-rata: " << total << endl;
return 0;
}
#include <iostream>
using namespace std;
int main() {
int nilai[] = {85, 75, 60};
int total = 0;
// Fix 1: i < 3 (bukan <=)
for (int i = 0; i < 3; i++) {
total += nilai[i];
}
int rata = total / 3;
// Fix 2: >= bukan >
if (rata >= 80) {
cout << "Grade: A" << endl;
} else if (rata >= 70) {
cout << "Grade: B" << endl;
} else {
cout << "Grade: C" << endl;
}
// Fix 3: rata, bukan total
cout << "Rata-rata: " << rata << endl;
return 0;
}
// Output: Grade: B, Rata-rata: 73
Bug itu normal! Bahkan programmer profesional juga membuat bug. Yang penting adalah kemampuan menemukan dan memperbaikinya secara sistematis — bukan menghindarinya.
Level C4–C6 (Bloom's Taxonomy) — KELOMPOK
Perhatikan program berikut yang menghitung rata-rata nilai mata pelajaran siswa SMAN 2 Padang. Program ini memiliki 3 bug. Identifikasi bug-bug tersebut dan jelaskan dampaknya terhadap output.
int nilai[] = {78, 85, 92};
int total = 1; // Bug?
for (int i = 1; i <= 3; i++) { // Bug?
total += nilai[i];
}
float rata = total / 3; // Bug?
cout << "Rata-rata: " << rata;
Dua kelompok membuat program yang sama untuk
simulasi peminjaman buku perpustakaan SMA. Kelompok A menggunakan fungsi
terpisah untuk setiap fitur, Kelompok B menulis semua kode di main() tanpa fungsi. Mana yang lebih baik? Evaluasi
dari sisi readability, maintainability, dan debugging.
Rancang dan implementasikan program simulasi penerimaan siswa baru di SMA favorit Padang. Program harus:
Buat proyek lengkap: flowchart + C++ + Python + presentasi
3-4
Orang per kelompok
2
Bahasa (C++ & Python)
1
Flowchart lengkap
5-7
Menit presentasi
Sistem informasi perpustakaan SMA — input buku, cari buku, pinjam/kembalikan, denda keterlambatan
Program jadwal pelajaran otomatis — input mata pelajaran dan jam, cek bentrok, tampilkan jadwal
Simulasi ujian online sederhana — soal pilihan ganda, hitung skor, tampilkan hasil dan grade
Kalkulator konversi mata uang dan satuan — konversi Rupiah ke mata uang lain, km ke mil, dsb
Buat proyek sendiri! — harus relevan kehidupan SMA di Padang, wajib pakai kondisional + perulangan + fungsi
Flowchart
Kode C++
Kode Python
Screenshot 3 Test Case
Debugging Log
Presentasi harus menjelaskan: masalah yang dipecahkan, alur program, fungsi-fungsi yang dibuat, bug yang ditemukan, dan cara memperbaikinya. Tips: Buat flowchart terlebih dahulu, test kode dengan minimal 3 test case berbeda, dan dokumentasi setiap bug yang ditemukan!