Algoritmika · Pelajaran 4 dari 10
Menelusuri pseudocode
9 menit baca · BelajarCode
Soal algoritmika memberikan potongan pseudocode atau kode, lalu bertanya berapa nilai akhirnya. Tidak ada komputer saat lomba, jadi kamu harus bisa "menjalankan" kode di kepala dan di kertas.
Teknik 1: hitung dengan rumus
x ← 0
UNTUK i DARI 1 SAMPAI 10 LAKUKAN
UNTUK j DARI i SAMPAI 10 LAKUKAN
x ← x + 1
AKHIR UNTUK
AKHIR UNTUK
TULIS xSaat i = 1, perulangan dalam berjalan 10 kali. Saat i = 2, 9 kali. Begitu seterusnya sampai i = 10, 1 kali. Jadi x = 10 + 9 + ... + 1 = 10 × 11 / 2 = 55.
1x = 02for i in range(1, 11):3 for j in range(i, 11):4 x += 15print(x)55
Teknik 2: tabel jejak untuk beberapa langkah pertama
a ← 1
b ← 1
UNTUK i DARI 1 SAMPAI 5 LAKUKAN
c ← a + b
a ← b
b ← c
AKHIR UNTUK
TULIS b| i | c | a | b |
|---|---|---|---|
| awal | 1 | 1 | |
| 1 | 2 | 1 | 2 |
| 2 | 3 | 2 | 3 |
| 3 | 5 | 3 | 5 |
| 4 | 8 | 5 | 8 |
| 5 | 13 | 8 | 13 |
Polanya adalah bilangan Fibonacci. Jawabannya 13. Setelah mengenali pola seperti ini, kamu bisa menjawab untuk perulangan 50 kali sekalipun tanpa menelusuri semuanya.
Teknik 3: pahami maksud fungsi rekursif
FUNGSI f(n)
JIKA n = 0 MAKA KEMBALIKAN 0
KEMBALIKAN (n mod 10) + f(n div 10)
AKHIR FUNGSI
TULIS f(9876)n mod 10 adalah digit terakhir dan n div 10 membuang digit terakhir. Jadi fungsi ini menjumlahkan semua digit: 9 + 8 + 7 + 6 = 30.
1def f(n):2 if n == 0:3 return 04 return n % 10 + f(n // 10)56print(f(9876))30
Langkah kerja di lomba
Pertama, jalankan dengan masukan kecil dan tulis tabel jejak. Kedua, cari polanya. Ketiga, buktikan atau setidaknya periksa pola itu dengan satu kasus lagi sebelum menjawab untuk masukan besar.
Cek pemahaman
Pada pseudocode x ← 0, UNTUK i DARI 1 SAMPAI 20, JIKA i mod 3 = 0 MAKA x ← x + i, berapa nilai akhir x?
Latihan
Telusuri fungsi misteri
Berapa keluaran pseudocode berikut? Jelaskan apa yang dikerjakan fungsi g.
FUNGSI g(a, b)
JIKA b = 0 MAKA KEMBALIKAN a
KEMBALIKAN g(b, a mod b)
AKHIR FUNGSI
TULIS g(84, 36)Pembahasan
| Panggilan | a mod b | Panggilan berikutnya |
|---|---|---|
| g(84, 36) | 84 mod 36 = 12 | g(36, 12) |
| g(36, 12) | 36 mod 12 = 0 | g(12, 0) |
| g(12, 0) | b = 0 | mengembalikan 12 |
Keluarannya 12. Fungsi ini adalah algoritma Euclid untuk mencari FPB (faktor persekutuan terbesar). FPB dari 84 dan 36 memang 12.
1def g(a, b):2 if b == 0:3 return a4 return g(b, a % b)56print(g(84, 36))12
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.