Laboratorium Belajar Algoritma & Pemrograman Dasar
Panduan belajar terstruktur dari Modul 1 hingga 5. Dirancang khusus dengan analogi sederhana sehari-hari, catatan penting asisten dosen, dan latihan simulasi langsung tanpa membuat kepala pusing.
Silabus Pembelajaran Praktikum
Pilih modul yang ingin kalian pelajari hari ini:
Animasi & Simulator
Visualisasi interaktif memori RAM, pergeseran bitwise 8-bit, serta animasi alur struct dan union.
Catatan & Analogi Asdos
Penjelasan konsep dari nol dengan analogi dapur, kereta api, dan kisi-kisi pertanyaan responsi dosen.
Simulasi UTS Live
Latihan mengisi titik-titik kode program gabungan Laprak 1 s.d. 5 dengan timer ujian langsung.
π¬ Video Animasi Interaktif: Paham C++ dari Nol
Dibuat dengan metafora sederhana agar konsep-konsep tersulit dapat dipahami dengan mudah oleh orang awam.
Judul Animasi
Tagline Animasi
π Simulasi Ujian UTS: Lengkapi Titik-Titik Kode
Uji kemampuan sintaks & logika C++ dengan melengkapi bagian kode program yang masih kosong!
Judul Paket UTS
Cakupan ModulDeskripsi skenario soal ujian...
Variabel, Konstanta & Tipe Data Dasar
Pelajari bagaimana compiler C++ mengalokasikan memori RAM untuk tipe data integer (short, int, long, unsigned), pecahan (float single precision, double double precision), karakter (char), dan logika (bool).
Biar adik-adik nggak pusing sama istilah teknis, bayangkan RAM komputer itu seperti meja dapur, dan variabel adalah toples yang ditempeli stiker nama:
Simulator RAM & Detektor Overflow Nilai
Pilih tipe data, masukkan nilai angka, dan amati alokasi kotak memori byte di RAM komputer.
π Tabel Spesifikasi Tipe Data Dasar C++ (Pedoman Laprak 1)
Ringkasan ukuran bit, alokasi byte, jangkauan nilai minimum & maksimum, dan contoh pendeklarasiannya.
| Tipe Data | Ukuran Memori | Range Nilai (Jangkauan) | Deskripsi & Peruntukan | Contoh Kode |
|---|
π Bedah Anatomi Baris Kode Program C++
Sering bingung fungsi dari setiap baris di awal kode? Simak penjelasan struktur program C++ standar berikut:
Bedah Teori Mendalam: Variabel, RAM & Tipe Data Dasar
Berikut rangkuman konsep penting yang wajib kalian pahami sebelum maju asistensi atau ujian responsi dengan dosen:
1.1 Kenapa C++ Butuh Tipe Data? (Arsitektur Memori RAM)
Bahasa C++ adalah bahasa statically-typed. Artinya, compiler wajib tahu ukuran memori yang harus dipesan ke RAM sebelum program dijalankan:
- Deklarasi (
int x;): Memesan 4 byte kapling memori kosong di RAM (misal beralamat heksadesimal0x7ffee4). - Inisialisasi (
int x = 10;): Memesan kapling sekaligus mengisi angka 10 biner ke dalam kotak tersebut. - Assignment (
x = 25;): Menimpa isi kapling yang sudah ada dengan nilai baru.
1.2 Signed vs Unsigned & Float vs Double
- Signed vs Unsigned:
intbiasa memakai 1 bit tanda minus (-2 miliar s.d. +2 miliar). Kalau kita tambahunsigned int, angka minus ditiadakan sehingga jangkauan positifnya melonjak 2x lipat (0 s.d. 4,2 miliar)! Cocok untuk umur, harga barang, atau ID mahasiswa yang mustahil negatif. - Float vs Double:
floatmemakai 4 byte (presisi 6β7 digit koma), sedangkandoublememakai 8 byte (presisi 15β17 digit koma). Untuk kalkulasi ilmiah dan keuangan, selalu pakaidoubleagar komanya tidak meleset. - Char & ASCII:
char huruf = 'A';di RAM sebenarnya disimpan sebagai angka integer kode ASCII 65.
1.3
Konstanta: Mengapa Dosen Menyarankan const daripada #define?
Konstanta adalah variabel yang nilainya dikunci mati setelah ditetapkan (read-only). Cara modern adalah const float PHI = 3.14f; karena memiliki tipe data jelas, dicek oleh compiler (*type-safe*), dan terikat aturan scope kurung kurawal. Sedangkan #define PHI 3.14 hanyalah penggantian teks buta tanpa pengecekan tipe data.
int a = 5, b = 2; float c = a / b; menghasilkan 2.0 (bukan 2.5), karena integer dibagi integer dipotong ke integer. Solusinya: tulis (float)a / b atau 5.0 / 2.
'A' adalah karakter tunggal char (1 byte). Sedangkan "A" adalah string (2 byte karena ada null-terminator \0). Jangan terbalik!
Deklarasi
int skor; tanpa nilai awal akan mencetak angka sampah acak sisa program lain di RAM jika langsung dicetak.
π Studi Kasus Resmi dari Laprak 1
Kasus 1: Perhitungan Luas Lingkaran (const float & rumus)
Mendeklarasikan konstanta const float PHI = 3.14; dan jari-jari float r = 2.5; lalu menghitung L = PHI * r * r;.
const float PHI = 3.14f; float r = 2.5f; float L = PHI * r * r; cout << "Luas lingkaran adalah: " << L << " Cm" << endl; // Output: 19.625
Kasus 2: Struk Transaksi Kacamata (Kombinasi 5 Tipe Data)
Menunjukkan pemilihan tipe data yang efisien: unsigned short int umur = 55;, float ukuranKacamata = -2.5f;, unsigned long int hargaKacamata = 2147483;, dan int diskon = 5000;.
Operator dalam Pemrograman C++
Pahami klasifikasi operator berdasarkan jumlah operand, aturan pembagian integer vs modulus, rahasia pre-increment vs post-increment, logika boolean, dan operator geser bit (bitwise shift << dan >>).
Jangan ngafal simbol operator secara kaku, pahami logikanya lewat kejadian sehari-hari:
Visualisator 8-Bit Bitwise Shifter (<< dan >>)
Materi Praktikum 2.2 Laprak: Menggeser bit biner variabel a=1 (<<= 3) dan b=10 (>>= 1).
Simulator Langkah Demi Langkah: Pre (++a) vs Post (a++)
Pahami kapan nilai dievaluasi dan kapan variabel dinaikkan di memori!
int b = a++;
π‘ Sirkuit Logika & Tabel Kebenaran (&&, ||, !)
Ubah saklar input A dan B untuk menguji logika boolean pada C++.
Bedah Teori Mendalam: Operator, Bitwise & Logika C++
Jangan cuma menghafal rumus di laprak tanpa tahu cara kerjanya! Berikut konsep logika operator yang paling sering ditanyakan dosen penguji saat kalian ujian praktikum:
2.1 Klasifikasi Operator Menurut Jumlah Operand (Unary, Binary, Ternary)
- Unary (1 Operand): Cuma butuh 1 variabel. Contoh: tanda minus
-x, negasi logika!lulus, serta penaikan nilai++x/--x. - Binary (2 Operand): Butuh 2 nilai kiri & kanan. Contoh: penjumlahan
a + b, pembandingx >= y, logikaa && b, dan penugasantotal = 100. - Ternary (3 Operand): Satu-satunya operator C++ dengan 3 bagian. Singkatan if-else 1 baris yang elegan:
(kondisi) ? nilaiJikaTrue : nilaiJikaFalse;.
2.2 Modulo (%) & Pre vs Post Increment di Memori
- Operator Modulo (%): Menghasilkan sisa bagi bilangan bulat. Hanya bisa untuk integer (TIDAK BISA untuk float)! Paling sering dipakai untuk cek genap/ganjil (
x % 2 == 0) dan konversi waktu (misal 130 menit = 130/60 jam dan 130%60 menit). - Pre-increment (
b = ++a;): Nilai a di RAM dinaikkan dulu jadi 6, baru disimpan ke b (hasil: a=6, b=6). - Post-increment (
b = a++;): Nilai lama 5 disimpan dulu ke b, baru setelah baris perintah selesai nilai a di RAM naik jadi 6 (hasil: a=6, b=5)!
2.3 Keajaiban Bitwise Shift (<< dan >>) pada Praktikum 2.2
Kenapa di Praktikum 2.2 nilai a = 1 yang di-shift <<= 3 tiba-tiba berubah jadi 8? Dan b = 10 yang di-shift >>= 1 berubah jadi 5?
- Left Shift (
<< n): Menggeser bit biner ke kiri. Setiap 1 geseran sama dengan mengalikan dengan 2! Jadi1 << 3sama dengan \(1 \times 2^3 = 8\). - Right Shift (
>> n): Menggeser bit biner ke kanan. Setiap 1 geseran sama dengan membagi dengan 2! Jadi10 >> 1sama dengan \(10 / 2^1 = 5\). - CPU mengeksekusi bitwise dalam 1 siklus clock prosesor, ribuan kali lebih cepat daripada perkalian biasa!
= adalah memasukkan nilai (penugasan). Sedangkan == adalah membandingkan kesetaraan. Kalau kamu tulis if (x = 5), nilai x dipaksa jadi 5 dan selalu dianggap TRUE oleh C++!
Pada
A && B, jika syarat A sudah salah (FALSE), C++ langsung berhenti tanpa mengecek B. Begitu juga pada A || B, jika A sudah benar (TRUE), B diabaikan!
Perkalian/pembagian/modulo (
* / %) selalu dikerjakan lebih dulu daripada tambah/kurang (+ -). Gunakan selalu tanda kurung () untuk mempertegas urutan!
Tipe Data Bentukan: Struct, Union, Enum, Typedef
Mengapa tipe data bentukan diciptakan? C++ menyediakan 4 pilar konstruksi tipe data kustom: Struct untuk membungkus banyak variabel ke dalam kapling memori mandiri, Union yang menghemat RAM dengan memori bersama, Enum untuk daftar konstanta berurutan mulai dari 0, dan Typedef untuk menciptakan alias nama tipe data yang ramah dibaca!
Kenapa C++ butuh tipe bentukan? Supaya adik-adik tidak perlu membuat puluhan variabel yang tercecer sendirian:
4 Pilar Fondasi Tipe Data Bentukan (Kunci Responsi)
Kapling Memori Terpisah
Membungkus berbagai variabel bertipe data sama maupun berbeda ke dalam satu wadah entitas. Setiap member memiliki alamat memori sendiri, sehingga nilai-nilai tidak saling mengganggu.
struct Mhs {
string nama;
int nim;
};
Satu Alamat Bersama (Overwrite)
Seluruh member berbagi satu alamat fisik memori yang sama persis. Dirancang untuk menghemat memori. Nilai member yang terakhir kali diisi akan menimpa (overwrite) nilai member lainnya!
union Nilai {
float angka;
char huruf;
};
Konstanta Integer Mulai 0
Mendefinisikan kumpulan nama simbolis yang mewakili konstanta bilangan bulat. Secara default nilainya dimulai dari indeks 0 lalu bertambah +1 untuk setiap item berikutnya.
enum Presiden {
Soekarno, // 0
Soeharto, // 1
Habibie // 2
};
namaPresiden + 1.
Alias Nama Baru Tipe Data
Memberikan nama panggilan (alias) baru pada tipe data yang sudah ada, membuat kode program lebih mudah dipahami manusia dan mempersingkat sintaks deklarasi struct.
typedef float angkaPecahan;
typedef string kata;
angkaPecahan p = 10.5;
Simulator Alokasi Memori: Struct vs Union (Laprak 3.2)
Ubah nilai 3 member di bawah ini untuk melihat langsung perbedaan alokasi RAM antara Struct dan Union!
Simulator Fenomena Overwrite Union (Beda Tipe Data)
Uji bagaimana satu kotak memori 4-byte diperlakukan saat diisi oleh char (1 B), int (4 B), dan float (4 B) bergantian!
βοΈ Tabel Perbandingan Struct vs Union (Halaman 31 Laprak)
Poin-poin penting yang wajib dihafal praktikan saat ujian responsi asisten:
| Karakteristik / Aspek | Struct | Union |
|---|
Bedah Teori Mendalam: Struct, Union, Enum & Typedef
Modul 3 adalah gerbang awal pembuatan aplikasi terstruktur di C++. Simak ringkasan konsep di balik 4 pilar tipe bentukan yang paling sering diuji oleh dosen:
3.1 Kenapa Butuh Tipe Bentukan? (User-Defined Types)
Tipe data bawaan (int, float, char) hanya bisa menyimpan 1 nilai tunggal. Di dunia nyata, satu objek selalu memiliki banyak atribut:
- Misal data Mahasiswa memiliki Nama (string), NIM (int), Jurusan (string), dan IPK (float).
- Tanpa tipe bentukan, kalian harus membuat 4 array terpisah yang rawan tertukar indeksnya saat dimanipulasi.
- Dengan
struct, kalian menciptakan tipe data baru rancangan sendiri yang membungkus semua atribut tersebut ke dalam satu kesatuan nama yang rapi!
3.2 Struct vs Union: Beda 180 Derajat di Memori RAM
- STRUCT (Kapling Memori Terpisah): Setiap anggota member memiliki alamat memori RAM mandiri. Total ukuran = penjumlahan seluruh ukuran member (+ padding alinyemen RAM). Semua nilai tersimpan aman tanpa saling ganggu.
- UNION (Satu Alamat Bersama / Shared Memory): Seluruh member berbagi satu alamat fisik memori yang sama. Total ukuran HANYA sebesar member terbesarnya! Nilai member terakhir yang diisi akan langsung menimpa (overwrite) member sebelumnya. Union sangat vital untuk sistem tertanam (IoT / mikrokontroler) yang kapasitas RAM-nya terbatas.
3.3 Enum (Auto-Index 0) & Typedef (Nama Panggilan Alias)
- Enum (Enumerasi): Memberi nama teks yang mudah diingat pada deretan angka bulat (default mulai dari indeks 0). Berfungsi menghilangkan magic numbers agar program tidak rawan salah ketik logika (misal:
enum Status { GAGAL, SUKSES };di mana GAGAL=0, SUKSES=1). - Typedef: Memberi nama panggilan (alias) baru pada tipe data yang sudah ada (sintaks:
typedef tipe_lama nama_baru;). Sangat membantu untuk menyingkat penulisan tipe data panjang sepertiunsigned long long intmenjadiuint64, atau menyederhanakan deklarasi struct.
Hampir 90% praktikan lupa menaruh tanda titik koma setelah kurung kurawal tutup
struct Mhs { ... };. Kelalaian ini menyebabkan error compiler puluhan baris ke bawah!
Gunakan operator titik
. untuk variabel biasa (contoh: mhs.nama). Operator panah -> hanya digunakan jika variabel bertipe pointer (contoh: ptrMhs->nama).
Jawab dengan percaya diri: HANYA sebesar ukuran member terbesarnya! Jika union berisi
int (4B) dan double (8B), maka total ukuran union di RAM tetap 8 byte saja.
π Katalog 5 Studi Kasus Modul 3 (Resmi Laporan Praktikum UNM)
Kasus 3.1 s.d. 3.5Struct Paket Internet "Begadang"
Menyimpan atribut paket kuota (nama string, telpon int, kuota int) dalam memori terpisah objek begadang.
struct paket_internet {
string nama_paket;
int kouta_telpon;
int kouta_internet;
} begadang;
Union Nilai Raport Siswa
Tiga member float (pengetahuan, sikap, psikomotorik) berbagi 4 byte. Nilai pengetahuan 85.5 menimpa nilai lainnya!
union nilaiRaport {
float pengetahuan;
float sikap;
float psikomotorik;
} budi;
sizeof(budi) tetap 4 byte saja.
Enum Urutan Presiden RI
Enum mengindeks otomatis dari 0 (Soekarno=0, Habibie=2, Jokowi=6). Ditambah 1 untuk urutan kepresidenan (Ke-1, Ke-3, dst.).
enum namaPresiden {
Soekarno, Soeharto, Habibie,
Megawati, Gusdur, SBY, Jokowi
};
Union Beda Tipe Data (char, int, float)
Satu wadah menampung char (1 B), int (4 B), dan float (4 B). Total ukuran union adalah 4 byte. Mengisi int 100 menimpa huruf jadi 'd'!
union DataCampur {
char huruf;
int angkaBulat;
float angkaKoma;
} kotak;
Typedef & Struct Volume Balok 3D
Mendefinisikan alias angkaPecahan untuk float dan kata untuk string, menghitung volume Si Merah, Si Kuning, dan Si Hijau.
typedef float angkaPecahan;
typedef string kata;
struct balok {
kata nama;
angkaPecahan p, l, t;
};
Tipe Data String & Pustaka Bawaan <string>
Mengapa tipe data string begitu istimewa di C++? Pahami perbedaan arsitektur klasik C-String (Array of Char) dengan C++ std::string, kuasai teknik input spasi menggunakan cin.get(), dan jelajahi fungsi bawaan seperti .length(), .at(), .replace(), .find(), hingga swap()!
String itu bukan satu benda padat, melainkan deretan karakter yang digandeng berjejer seperti gerbong kereta api:
\0 tidak dihitung.
.at() aman dengan pengecekan batas, mencegah program crash!
cin >> berhenti di spasi pertama, sedangkan cin.get() dan getline() membaca kalimat utuh berspasi!
Laboratorium Real-Time Fungsi Pustaka String C++
Ketikkan teks di bawah ini dan uji langsung bagaimana fungsi-fungsi <string> bekerja seketika!
Menghitung total karakter nyata tanpa memasukkan null terminator \0.
Lebih aman daripada teks[index] karena melempar exception bila indeks di luar batas.
Jika tidak ditemukan, fungsi akan mengembalikan konstanta string::npos.
Menghasilkan nilai boolean true (1) jika string kosong dan false (0) jika berisi.
Mengambil cuplikan substring sepanjang 10 karakter pertama mulai dari indeks 0.
Pratinjau kalimat setelah kata pada rentang indeks yang dipilih diganti dengan kata baru.
Kupas Tuntas: Fungsi .length() & .size()
Di C++, fungsi .length() dan .size() adalah sinonim identik (menghasilkan angka yang persis sama). Keduanya merupakan method anggota dari kelas std::string yang bertugas menghitung jumlah byte/karakter aktif di dalam objek string.
Jika string berisi
"Nisa", maka teks.length() bernilai 4. Karakter terminator pembatas akhir memori \0 tidak ikut dihitung.
.length() diadopsi dari terminologi teks konvensional, sedangkan .size() disediakan agar konsisten dengan koleksi kontainer STL C++ lainnya (seperti vector, list, map).
string nama = "Warnisyah Armin"; cout << "Panjang nama: " << nama.length() << " karakter"; // 15 karakter
Dilema Input Keyboard: Membaca Spasi (Laprak 4.1 vs 4.2)
Masalah paling sering dialami praktikan saat praktikum string adalah teks yang diinputkan terpotong saat menekan spasi! Berikut perbandingannya:
Hanya membaca satu kata! Begitu ada karakter whitespace (spasi, tab, enter), pembacaan langsung berhenti. Contoh input "Warnisyah Armin" hanya menghasilkan "Warnisyah".
Digunakan untuk C-String (char[]). Membaca kalimat utuh termasuk spasi hingga batas kapasitas memori yang ditentukan. Contoh: cin.get(nama, 50);.
Digunakan untuk std::string. Membaca satu baris penuh kalimat berspasi hingga praktikan menekan tombol Enter.
βοΈ Tabel Perbandingan: C-String (char[]) vs C++ std::string
7 Perbedaan fundamental yang sering ditanyakan asisten saat responsi praktikum:
| Aspek Perbandingan | C-String (char array) | C++ std::string |
|---|
π Katalog 10 Metode / Fungsi Bawaan Pustaka <string>
Fungsi esensial yang sering digunakan dalam manipulasi kata dan teks di C++
Bedah Teori Mendalam: String C++, Solusi Spasi & cin.ignore()
Tipe data string sering memicu bug aneh pada tugas praktikan karena karakteristik input stream keyboard. Simak bedah tuntas solusinya di bawah ini:
4.1 C-String (Array Karakter) vs C++ std::string
Memahami dua generasi tipe data teks di C++:
- C-String (
char str[50]): Cara kuno warisan bahasa C. Kapasitasnya statis dan kaku (*fixed*), rawan buffer overflow jika user menginput melebihi kapasitas memori, dan wajib diakhiri tanda batas null terminator\0(ASCII 0). - C++
std::string: Objek kelas modern dari#include <string>. Kapasitas RAM otomatis membesar secara dinamis sesuai kebutuhan, mendukung operator+untuk menggabungkan teks, dan memiliki puluhan method bawaan siap pakai!
4.2
Mengapa cin >> Memotong Spasi? Solusi getline()
Operator ekstraksi cin >> memperlakukan spasi, tab, dan enter sebagai pemisah kata (*delimiter*):
- Jika kalian mengetik
"Warnisyah Armin", yang masuk ke variabel hanya"Warnisyah". Kata"Armin"tertinggal di antrean buffer keyboard. - Solusi Standar: Gunakan
getline(cin, teks);untuk membaca seluruh baris kalimat beserta spasi sampai tombol Enter ditekan. (Untuk array karakter kuno, gunakancin.get(str, kapasitas);).
4.3
Misteri "Hantu Enter" & Penyelamat cin.ignore()
Pernahkah program kalian tiba-tiba melompati input nama setelah kalian menginput umur?
- Saat kalian mengetik angka umur lalu menekan tombol Enter, karakter enter
\ntertinggal di dalam buffer keyboard. - Ketika eksekusi program berlanjut ke baris
getline(cin, nama), fungsi ini langsung menyedot sisa Enter tersebut dan mengira kalian menekan Enter kosong! - Solusi Ampuh Asdos: Selalu sisipkan
cin.ignore();tepat setelahcin >>sebelum barisgetline()untuk membuang sisa tombol Enter.
Keduanya adalah sinonim identik (hasil perhitungannya sama persis). Karakter batas akhir null
\0 tidak dihitung. Contoh: string "Nisa" panjangnya adalah 4 karakter.
Fungsi
.at() jauh lebih aman digunakan karena melakukan bounds checking (melempar peringatan jika indeks melebihi kapasitas teks, bukan membuat program tertutup mendadak).
Gunakan fungsi bawaan
swap(teksA, teksB);! Eksekusi seketika menukar isi memori dua string tanpa perlu variabel penampung sementara.
π Katalog 4 Studi Kasus Modul 4 (Resmi Laporan Praktikum UNM)
Kasus 4.1 s.d. 4.4Input C-String Satu Kata Menggunakan cin >>
Membaca input teks nama panggilan ke dalam array char namaPanggilan[50]. Menunjukkan bagaimana spasi memotong sisa kalimat.
char namaPanggilan[50]; cout << "Masukkan nama panggilan: "; cin >> namaPanggilan; // Berhenti di spasi pertama!
Input C-String Berspasi Menggunakan cin.get()
Membaca nama lengkap ber-spasi seperti "Warnisyah Armin" tanpa terpotong dengan menentukan batas memori cin.get(namaLengkap, 50).
char namaLengkap[50]; cout << "Masukkan nama lengkap: "; cin.get(namaLengkap, 50); // Membaca kalimat utuh!
Manipulasi Lengkap Method Pustaka <string>
Mendemonstrasikan fungsi .length(), .clear(), .replace(), swap(), dan .find() pada objek string C++.
cout << teks.length(); // Panjang karakter
teks.clear(); // Hapus string
teks.replace(11, 8, "sebuah"); // Ganti kata
swap(str1, str2); // Tukar isi variabel
size_t pos = teks.find("adalah"); // Cari posisi
Struct Nama Hewan & Akses Karakter .at()
Mengkombinasikan struct namaHewan yang berisi member string anjing, kucing, macan, lalu mengambil panjang karakter dan karakter indeks ke-1 menggunakan .at(1).
struct namaHewan {
string anjing = "Anjing";
string kucing = "Kucing";
string macan = "Macan";
} mamalia;
cout << mamalia.anjing.length();
cout << mamalia.anjing.at(1); // Karakter 'n'
Seleksi Kondisi & Percabangan (Control Flow)
Kendalikan alur jalannya program agar tidak kaku! Pelajari cara kerja if tunggal, if-else dua arah, if-else-if majemuk (klasifikasi usia 5 rentang), struktur switch-case (nilai mutu MK), hingga studi kasus nyata program kasir diskon bertingkat toko pakaian!
Tanpa percabangan, program hanya berjalan lurus dari atas ke bawah seperti robot buta. Dengan percabangan, program memiliki logika untuk mengevaluasi syarat:
default.
Simulator Jalur Logika if-else if (Praktikum 5.3)
Ubah usia di bawah ini dan perhatikan cabang mana yang menyala hijau (dieksekusi) oleh komputer!
Usia bayi (0 - 1 tahun)
Usia anak-anak (2 - 10 tahun)
Usia remaja (11 - 19 tahun)
Usia dewasa (20 - 60 tahun)
Usia tua / Lansia (> 60 th)
Simulator Kasir Diskon Bertingkat Toko Pakaian (Laprak 5.5)
Aturan Toko: Baju @Rp 60.000 (Diskon 20% jika belanja baju > Rp 100.000), Celana @Rp 40.000 (Diskon 25% jika belanja celana > Rp 70.000).
Keranjang Belanja Pembeli:
βοΈ Tabel Perbandingan: if-else if Majemuk vs switch-case
Pertanyaan wajib asisten dosen saat responsi: "Kapan harus pakai if-else dan kapan pakai switch?"
| Aspek Karakteristik | if - else if Bertingkat | switch - case |
|---|
Bedah Teori Mendalam: Control Flow, Fall-Through & Logika Kasir
Percabangan adalah otak pengambil keputusan di program kalian. Simak rangkuman prinsip dasar kontrol alur yang wajib dikuasai sebelum menghadapi dosen penguji:
5.1 Hirarki 4 Struktur Percabangan C++
Pilihlah struktur percabangan yang tepat sesuai karakteristik masalah yang diselesaikan:
- if Tunggal: Tindakan opsional. Blok kurung kurawal hanya dieksekusi jika kondisi bernilai TRUE. Jika FALSE, program melewatinya begitu saja tanpa aksi alternatif.
- if-else Ganda: Pilihan dua arah yang saling meniadakan (*mutually exclusive*). Pasti salah satu blok yang akan dieksekusi oleh compiler.
- if-else if Majemuk: Pengecekan berantai banyak rentang. Begitu ada satu syarat TRUE yang cocok, blok di bawahnya langsung diabaikan.
- switch-case: Menu pilihan berbasis nilai diskrit (integer/char). Jauh lebih rapi dan cepat daripada menulis belasan rantai if-else yang bertumpuk.
5.2
Bahaya Terjun Bebas (Fall-Through) & Peran Kata Kunci break;
Di dalam switch, label case sebenarnya hanyalah penanda alamat lompatan kode (*jump target*):
- Jika kalian lupa mengetik
break;di akhir suatu case, eksekusi program akan terjun bebas mengeksekusi semua baris case di bawahnya meskipun nilainya sama sekali tidak cocok! - Kata kunci
break;berfungsi sebagai dinding rem darurat yang memaksa program segera melompat keluar dari blok kurung kurawal switch.
5.3 Bedah Logika Program Kasir Diskon Bertingkat (Praktikum 5.5)
Alur perhitungan matematis aplikasi kasir toko pakaian yang benar:
- Evaluasi Mandiri: Diskon belanja baju (> Rp 100.000 diskon 20%) dan celana (> Rp 70.000 diskon 25%) dievaluasi secara terpisah menggunakan dua blok
ifindependen. - Rumus Potongan:
Besar Diskon = Subtotal Belanja * Persentase Diskon; - Rumus Total Bayar:
Total Akhir = Subtotal Baju + Subtotal Celana - Total Diskon; - Validasi Uang:
Kembalian = Uang Diberikan - Total Akhir;(Jika uang bayar kurang, transaksi wajib ditolak oleh program).
Jangan pernah menulis
if (nilai >= 75); dengan titik koma di belakang kurung! Titik koma tersebut langsung mengakhiri pernyataan if sebagai baris kosong, sehingga blok kode di bawahnya SELALU dieksekusi apapun nilainya!
Uji selalu dari rentang paling ketat atau terbesar lebih dulu (≥ 500rb, baru ≥ 250rb, baru ≥ 100rb). Jika kalian menguji dari rentang terkecil, pembeli belanja 600rb akan keliru mendapatkan diskon terendah!
Jawab dengan tegas: TIDAK BISA di C++ standar!
switch hanya menerima tipe data bilangan bulat diskrit (int, char, enum). Jika butuh rentang desimal/pecahan, wajib menggunakan if-else if.
π Katalog 5 Studi Kasus Modul 5 (Resmi Laporan Praktikum UNM)
Sesuai berkas laporan praktikum Warnisyah Armin (Halaman 53 - 71)
Percabangan if Tunggal
Mengecek apakah nilai $x \ge y$ (10 ≥ 10). Karena bernilai benar, teks di dalam kurung kurawal dieksekusi.
if (x >= y) {
cout << "x lebih besar atau sama dengan y" << endl;
}
Percabangan if-else Ganda
Mengecek $x = 7$ dan $y = 10$. Karena kondisi $7 \ge 10$ bernilai false, program beralih ke jalan cadangan di blok else.
if (x >= y) {
cout << "x lebih besar atau sama";
} else {
cout << "x lebih kecil daripada y";
}
Seleksi if-else if Kategori Usia
Mengelompokkan usia ke 5 rentang: Bayi (≤1), Anak (≤10), Remaja (≤19), Dewasa (≤60), dan Lansia.
if (usia <= 1) cout << "Bayi"; else if (usia <= 10) cout << "Anak-anak"; else if (usia <= 19) cout << "Remaja"; else if (usia <= 60) cout << "Dewasa"; else cout << "Lansia";
switch-case Nilai Mata Kuliah
Mencocokkan huruf mutu nilai (A, B, C, D, E) ke case yang cocok. Wajib pakai break agar tidak tembus ke bawah!
switch (nilaiMK) {
case 'A': cout << "A"; break;
case 'B': cout << "B"; break;
default: cout << "Salah input!"; break;
}
Program Kasir Toko Pakaian
Studi kasus perhitungan diskon bertingkat: diskon 20% untuk baju > 100.000 dan diskon 25% untuk celana > 70.000.
if (totalBaju > 100000) diskonBaju = 0.2 * totalBaju; if (totalCelana > 70000) diskonCelana = 0.25 * totalCelana; totalBayar = (totalBaju - diskonBaju) + (totalCelana - diskonCelana);
π» C++ Virtual Code Playground
Pilih kode dari Laporan Praktikum 1-4, sesuaikan variabelnya, dan lihat simulasi eksekusi terminalnya.
Judul Kasus
Deskripsi
π Panduan Simbol Flowchart Standar Laporan Praktikum
Pahami bentuk dan fungsi setiap simbol diagram alir yang wajib digambar di Laporan Praktikum UNM: Mulai & Akhiri (Oval), Deklarasi (Persegi Bergaris Sisi), Proses (Persegi Polos), dan Output/Input (Jajaran Genjang cout/cin).
π Katalog Bentuk Simbol Flowchart Resmi
Gunakan bentuk simbol yang tepat agar tidak mendapat coretan revisi saat asistensi:
Visualisator Flowchart Interaktif (Studi Kasus Laprak)
Lihat diagram alir yang digambar persis seperti di buku laporan praktikum. Klik setiap simbol untuk melihat kode C++!
Inspeksi Baris C++
- int main() → Oval "Mulai"
- Deklarasi variabel / struct → Persegi bergaris sisi
- Inisialisasi & Rumus (=, +, *, <<=) → Persegi polos
- cout << atau cin >> → Jajaran genjang
- return 0 → Oval "Selesai"
Sontekan Pintasan Sintaks C++
Pegangan live coding saat lupa penulisan kode program