04. Menelusuri program dengan tangan — Solusi PR
Ini adalah soal-soal di kertas, jadi "solusi" yang dimaksud adalah tabel penelusuran yang sudah selesai beserta keluarannya. Bandingkan tabelmu dengan yang ada di sini. Keluaran yang salah hampir selalu berasal dari satu baris di mana nilai baru ditulis di kolom yang keliru, atau satu putaran perulangan yang terlewat.
Soal 1 — Jumlah hitungan mundur
Soal. Telusuri perulangan yang menghitung mundur dan tuliskan nilai yang dicetak.
Cara berpikir. i mulai dari 5 dan turun
1 setiap putaran sampai ke 1, menambahkan nilai i saat itu
ke s.
Penelusuran yang dikerjakan.
Putaran (i) |
s sebelum | s sesudah |
|---|---|---|
| 5 | 0 | 5 |
| 4 | 5 | 9 |
| 3 | 9 | 12 |
| 2 | 12 | 14 |
| 1 | 14 | 15 |
Keluaran: 15. (Ini tidak lain adalah 5
+ 4 + 3 + 2 + 1.)
Soal 2 — Membangun sebuah string
Soal. Telusuri string yang disambung-sambung sebanyak tiga kali.
Cara berpikir. out dimulai kosong
(""). Setiap putaran menempel "ha" ke bagian
akhir dari apa yang dipegang oleh out.
Penelusuran yang dikerjakan.
Putaran (i) |
out sebelum | out sesudah |
|---|---|---|
| 1 | "" |
ha |
| 2 | ha |
haha |
| 3 | haha |
hahaha |
Keluaran: hahaha.
Kesalahan umum. Menulis ha ha ha dengan
spasi. Di programnya tidak ada spasi — .. menyambung
potongan-potongan string tanpa apapun di antaranya.
Soal 3 — Penukaran nilai
Soal. Telusuri tiga baris penukaran nilai dan tuliskan keluaran akhirnya.
Cara berpikir. temp menyimpan salinan
dari a supaya nilai lamanya tidak hilang ketika
a ditimpa pada baris berikutnya.
Penelusuran yang dikerjakan.
| Baris | a | b | temp |
|---|---|---|---|
local a = 2 |
2 | ||
local b = 7 |
2 | 7 | |
local temp = a |
2 | 7 | 2 |
a = b |
7 | 7 | 2 |
b = temp |
7 | 2 | 2 |
Keluaran: 7 2 (dua nilai dicetak
dengan tab di antaranya).
Apa yang dilakukan temp. Ia adalah
tempat penampungan sementara. Tanpanya, a = b akan menimpa
a sebelum nilai lama a sempat masuk ke
b, sehingga keduanya akan bernilai 7.
Tantangan — Temukan kejutannya
Soal. Telusuri program diskon.
Cara berpikir. final dihitung di
barisnya sendiri, menggunakan nilai yang dipegang discount
saat itu (20). Mengubah discount belakangan tidak
menghitung ulang final.
Penelusuran yang dikerjakan.
| Baris | price | discount | final |
|---|---|---|---|
local price = 100 |
100 | ||
local discount = 20 |
100 | 20 | |
local final = price - discount |
100 | 20 | 80 |
discount = 50 |
100 | 50 | 80 |
Keluaran: 80.
Kenapa. final di-set satu kali, saat
discount bernilai 20, jadi nilainya menjadi 80 dan tidak
berubah. discount = 50 hanya mengubah
discount. Sebuah variabel tidak mengingat rumus yang
membuatnya, hanya nilainya saja. Jebakan yang sama seperti contoh yang
dikerjakan di awal bab, hanya dengan kostum yang berbeda.
Sudah selesai?
Sekarang kamu sudah bisa membaca sebuah program dan memprediksi apa yang akan dilakukannya sebelum menjalankannya. Bab berikutnya — Penamaan dan dekomposisi — membahas sisi lain dari membaca kode dengan baik: nama yang jelas, dan memecah pekerjaan besar menjadi bagian-bagian kecil, supaya penelusurannya mudah dari awal.