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.