Disusun bertahap dari dasar sampai tracing — tujuan akhirnya satu: membaca logika program baris demi baris dan menentukan output dengan benar, bukan menebak pola.
Variabel adalah tempat menyimpan nilai yang bisa berubah selama program berjalan, dikenali lewat namanya. Assignment adalah aksi mengisi/mengganti nilai variabel itu, ditulis dengan ← (bukan tanda sama-dengan matematika).
Tiap nilai punya jenis (tipe). Tiga yang paling sering muncul:
Dipakai untuk menghitung nilai baru dari angka-angka yang ada.
| Operator | Arti | Contoh |
|---|---|---|
| + | Penjumlahan | 7 + 2 = 9 |
| - | Pengurangan | 7 - 2 = 5 |
| * | Perkalian | 7 * 2 = 14 |
| MOD | Sisa bagi | 7 MOD 2 = 1 |
| DIV | Pembagian bulat (dibulatkan ke bawah) | 7 DIV 2 = 3 |
Membandingkan dua nilai, hasilnya selalu TRUE atau FALSE — inilah yang nanti dipakai di dalam kondisi IF/WHILE.
| Operator | Arti | Contoh |
|---|---|---|
| = | Sama dengan | 5 = 5 → TRUE |
| ≠ | Tidak sama dengan | 5 ≠ 3 → TRUE |
| > | Lebih besar | 5 > 3 → TRUE |
| < | Lebih kecil | 5 < 3 → FALSE |
| ≥ | Lebih besar atau sama dengan | 5 ≥ 5 → TRUE |
| ≤ | Lebih kecil atau sama dengan | 5 ≤ 3 → FALSE |
Menggabungkan atau membalik nilai boolean (hasil perbandingan) untuk membentuk satu kondisi akhir.
| Operator | Arti | Contoh |
|---|---|---|
| AND | Hasilnya TRUE hanya kalau KEDUA sisi TRUE | TRUE AND FALSE → FALSE |
| OR | Hasilnya TRUE kalau SALAH SATU sisi TRUE | TRUE OR FALSE → TRUE |
| NOT | Membalik nilai boolean | NOT TRUE → FALSE |
Blok kode di dalam IF hanya dijalankan kalau kondisinya TRUE. Kalau FALSE, blok itu dilewati begitu saja.
Menyediakan jalur alternatif kalau kondisinya FALSE. Selalu tepat satu dari dua blok yang jalan — tidak pernah dua-duanya, dan tidak pernah tidak ada sama sekali.
Aturan paling penting: kondisi dicek dari atas ke bawah, satu per satu. Begitu ketemu kondisi pertama yang TRUE, blok itu dijalankan dan langsung berhenti — semua kondisi di bawahnya TIDAK dicek lagi, sekalipun kondisi itu kebetulan juga TRUE.
IF tidak harus punya satu syarat saja — beberapa syarat perbandingan bisa digabung pakai AND/OR/NOT (dari Tahap 1) supaya jadi satu kondisi akhir.
Dipakai kalau jumlah pengulangan sudah pasti diketahui dari awal — biasanya berbentuk "ulangi dari angka A sampai angka B".
| i | hasil ← hasil × i | hasil (setelah) |
|---|---|---|
| 1 | 1 × 1 | 1 |
| 2 | 1 × 2 | 2 |
| 3 | 2 × 3 | 6 |
| 4 | 6 × 4 | 24 |
i sudah mencapai batas TO 4, loop selesai setelah putaran i=4. OUTPUT 24.
Dipakai kalau jumlah pengulangan TIDAK diketahui dari awal — loop terus jalan selama kondisinya masih TRUE, berapa pun jumlah putarannya nanti.
| Sebelum | n > 1 ? | n ← n − 7 | langkah |
|---|---|---|---|
| n=50 | ya | 43 | 1 |
| n=43 | ya | 36 | 2 |
| n=36 | ya | 29 | 3 |
| n=29 | ya | 22 | 4 |
| n=22 | ya | 15 | 5 |
| n=15 | ya | 8 | 6 |
| n=8 | ya | 1 | 7 |
| n=1 | tidak | — | berhenti |
OUTPUT langkah = 7.
FOR berhenti begitu variabel penghitungnya melewati batas akhir yang ditentukan (mis. TO 4 berarti berhenti setelah i=4 selesai diproses, tidak lanjut ke i=5).
WHILE berhenti tepat pada saat kondisinya dicek dan hasilnya SALAH — pengecekan ini dilakukan ULANG setiap akhir putaran, bukan cuma sekali di awal.
Jangan pernah menebak hasil akhir loop hanya dengan membaca kodenya sekilas. Cara amannya: bikin tabel iterasi — satu baris per putaran, catat nilai tiap variabel yang berubah, sampai loop benar-benar berhenti (seperti dua tabel di atas). Ini teknik yang sama persis yang akan dipakai terus di Tahap 5.
Array adalah satu variabel yang menyimpan banyak nilai sekaligus, berurutan. Tiap posisi punya nomor urut yang disebut index. Di latihan ini, index dimulai dari 1 (bukan 0).
| Index | Nilai |
|---|---|
| warna[1] | "Merah" |
| warna[2] | "Kuning" |
| warna[3] | "Hijau" |
Menggunakan nama[index] untuk MEMBACA nilai di posisi tertentu, tanpa mengubahnya.
Assignment juga berlaku untuk satu posisi array — nama[index] ← nilaiBaru MENGGANTI isi posisi itu saja, posisi lain tidak ikut berubah.
Kombinasi paling sering muncul: FOR dipakai untuk mengunjungi tiap elemen array satu per satu, biasanya berbentuk FOR i ← 1 TO panjang.
| i | angka[i] | total ← total + angka[i] | total (setelah) |
|---|---|---|---|
| 1 | 4 | 0 + 4 | 4 |
| 2 | 8 | 4 + 8 | 12 |
| 3 | 2 | 12 + 2 | 14 |
| 4 | 6 | 14 + 6 | 20 |
OUTPUT total = 20.
Ini tahap integrasi — menggabungkan semua yang sudah dipelajari (Tahap 1-4) jadi satu kemampuan: membaca pseudocode dari baris pertama sampai terakhir, dan tahu PERSIS apa yang terjadi di tiap baris, bukan menebak dari sekilas lihat.
Caranya: siapkan kolom untuk tiap variabel yang ada. Jalankan baris satu per satu, urut dari atas. Setiap kali sebuah variabel berubah nilai, catat nilai barunya di kolomnya. Jangan pernah melompati baris atau mengerjakan dua baris sekaligus di kepala.
Saat trace bertemu IF: hitung dulu nilai kondisinya pakai nilai variabel yang SUDAH terlacak sejauh itu, tentukan TRUE atau FALSE, lalu ikuti hanya SATU jalur yang sesuai. Baris-baris di cabang yang tidak diambil dianggap tidak pernah ada — jangan sampai ikut ditrace.
Sama seperti di Tahap 3: bikin tabel iterasi, satu baris per putaran. Untuk FOR, berhenti otomatis setelah batas akhir tercapai. Untuk WHILE, cek ulang kondisinya di akhir SETIAP putaran — begitu FALSE, berhenti seketika itu juga, sisa kode setelah loop baru dilanjutkan.
Saat variabel loop (mis. i) dipakai sebagai index array di dalam badan loop, di tiap putaran cek dulu nilai i saat itu, baru cari nilai array[i] yang sesuai — jangan menghitung dari ingatan/perkiraan urutan array.
Contoh yang menggabungkan variabel, IF, WHILE, dan array sekaligus — persis pola yang akan muncul di soal tracing sesungguhnya.
| i | angka[i] | angka[i] > 4 ? | total (setelah) |
|---|---|---|---|
| 1 | 3 | tidak | 0 |
| 2 | 7 | ya | 7 |
| 3 | 2 | tidak | 7 |
| 4 | 9 | ya | 16 |
| 5 | 4 | tidak | 16 |
Setelah i=5 diproses, i menjadi 6, dicek 6 ≤ 5 → FALSE → WHILE berhenti. OUTPUT total = 16.