C++ & Python

Proyek Pemrograman

Sederhana dan Debugging

Menerapkan konsep kondisional, perulangan, dan fungsi dalam proyek program serta teknik debugging

Proyek Debugging Presentasi

Agenda

Daftar Materi

01

Review Konsep

Kondisional, perulangan, fungsi

02

Studi Kasus Proyek

Dari masalah ke solusi

03

Implementasi Proyek

Kode lengkap C++ & Python

04

Teknik Debugging

Menemukan dan memperbaiki bug

05

Proyek Kelompok

Tugas akhir dan presentasi

01

Review Konsep

Ringkasan konsep dari pertemuan sebelumnya yang akan digabungkan dalam proyek.

Kondisional

if-elseif-else untuk percabangan, nested if untuk keputusan bertingkat

Perulangan

for loop jika iterasi diketahui, while loop jika bergantung kondisi, break/continue untuk kontrol

Fungsi

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.

02

Studi Kasus: Sistem Kasir

Kantin SMA Padang — dari masalah nyata ke solusi program

Deskripsi Masalah

Buat program kasir untuk kantin SMA di Padang yang bisa:

  1. Menampilkan menu dan harga
  2. Menerima pesanan pembeli
  3. Menghitung total belanja
  4. Memberikan diskon jika belanja > Rp25.000
  5. Menghitung kembalian
  6. Mencetak struk

Breakdown ke Fungsi

F1tampilkan_menu()for loop
F2hitung_total(harga, jumlah)fungsi + param
F3cek_diskon(total)if-elseif-else
F4hitung_kembalian(bayar, total)fungsi + return

Flowchart Program

Mulai tampilkan_menu() Input pesanan hitung_total(harga, jml) total > 25rb? Ya diskon 10% Tidak hitung_kembalian() Cetak struk Pesan lagi? Ya Tidak Selesai
03

Implementasi: Kode C++

Sistem Kasir Kantin SMA Padang — kasir_kantin.cpp

C++
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;
}
03

Implementasi: Kode Python

Sistem Kasir Kantin SMA Padang — kasir_kantin.py

Python
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.

04

Teknik Debugging

Tiga strategi untuk menemukan dan memperbaiki bug dalam program.

Print Debugging

Menambahkan print/cout untuk mengecek nilai variabel di titik tertentu. Paling sederhana dan sering cukup.

cout << "DEBUG: total = " << total;

Step-by-step Tracing

Menelusuri program baris per baris secara manual dengan menulis isi variabel di kertas. Sangat efektif untuk pemula.

i=0, total=0 → i=1, total=15000

Rubber Duck

Menjelaskan kode baris per baris kepada orang lain (atau boneka bebek!). Seringkali dengan menjelaskan, kita sendiri menemukan bug.

"Baris ini seharusnya..."

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!

04

Contoh Debugging

Program grading dengan 3 bug — temukan dan perbaiki!

Buggy Code
grading_buggy.cpp
#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;
}
Fixed Code
grading_fixed.cpp
#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.

Latihan

Latihan Soal

Level C4–C6 (Bloom's Taxonomy) — KELOMPOK

C4

Menganalisis

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.

rata_rata_buggy.cpp
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;
C5

Mengevaluasi

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.

C6

Mencipta

Rancang dan implementasikan program simulasi penerimaan siswa baru di SMA favorit Padang. Program harus:

  • (a) Menggunakan fungsi untuk setiap fitur
  • (b) Menggunakan loop untuk proses input banyak siswa
  • (c) Menggunakan kondisional untuk seleksi
  • (d) Memiliki fitur debugging (tampilkan proses seleksi)
  • Implementasikan dalam C++ DAN Python dengan flowchart
Proyek

Proyek Kelompok

Buat proyek lengkap: flowchart + C++ + Python + presentasi

Ketentuan Umum

3-4

Orang per kelompok

2

Bahasa (C++ & Python)

1

Flowchart lengkap

5-7

Menit presentasi

Pilih Satu Proyek (atau buat sendiri)

A

Sistem informasi perpustakaan SMA — input buku, cari buku, pinjam/kembalikan, denda keterlambatan

B

Program jadwal pelajaran otomatis — input mata pelajaran dan jam, cek bentrok, tampilkan jadwal

C

Simulasi ujian online sederhana — soal pilihan ganda, hitung skor, tampilkan hasil dan grade

D

Kalkulator konversi mata uang dan satuan — konversi Rupiah ke mata uang lain, km ke mil, dsb

E

Buat proyek sendiri! — harus relevan kehidupan SMA di Padang, wajib pakai kondisional + perulangan + fungsi

Yang Dikumpulkan

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!