04. Menelusuri program dengan tangan — Solusi pekerjaan rumah
Ini adalah soal-soal di atas kertas, jadi "solusi" adalah tracing yang selesai dan keluarannya. Bandingkan tabelmu dengan yang ini. Keluaran yang salah hampir selalu merupakan satu baris dengan nilai baru di kolom yang salah, atau satu putaran loop yang dilewati.
Soal 1 — Jumlah hitungan mundur
Soal. Lacak loop yang menghitung mundur dan berikan nilai yang dicetak.
Cara berpikir. i dimulai dari 5 dan
turun 1 setiap putaran sampai 1, menambahkan i saat ini ke
s.
Tracing 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. (Itu hanyalah 5 + 4 + 3 +
2 + 1.)
Soal 2 — Membangun string
Soal. Lacak string yang digabungkan tiga kali.
Cara berpikir. out dimulai kosong
(""). Setiap putaran menempelkan "ha" ke akhir
apa yang dipegang out.
Tracing yang dikerjakan.
Putaran (i) |
out sebelum | out sesudah |
|---|---|---|
| 0 | "" |
ha |
| 1 | ha |
haha |
| 2 | haha |
hahaha |
Keluaran: hahaha.
Kesalahan umum. Menulis ha ha ha dengan
spasi. Program tidak punya satu pun — + menggabungkan
potongan-potongan tanpa apa pun di antara keduanya.
Soal 3 — Pertukaran
Soal. Lacak pertukaran tiga baris dan berikan keluaran akhir.
Cara berpikir. temp menyimpan salinan
a sehingga nilai lamanya tidak hilang saat a
ditimpa berikutnya.
Tracing yang dikerjakan.
| Baris | a | b | temp |
|---|---|---|---|
a = 2 |
2 | ||
b = 7 |
2 | 7 | |
temp = a |
2 | 7 | 2 |
a = b |
7 | 7 | 2 |
b = temp |
7 | 2 | 2 |
Keluaran: 7 2 (dua nilai dicetak dengan
spasi di antara keduanya).
Apa yang dilakukan temp. Ia adalah
tempat penyimpanan sementara. Tanpanya, a = b menimpa
a sebelum nilai lama a mencapai
b, sehingga keduanya berakhir sebagai 7.
Tantangan — Temukan kejutannya
Soal. Lacak program diskon.
Cara berpikir. final dihitung pada
barisnya sendiri, menggunakan nilai discount pada saat
itu (20). Mengubah discount nanti tidak mengulang
final.
Tracing yang dikerjakan.
| Baris | price | discount | final |
|---|---|---|---|
price = 100 |
100 | ||
discount = 20 |
100 | 20 | |
final = price - discount |
100 | 20 | 80 |
discount = 50 |
100 | 50 | 80 |
Keluaran: 80.
Mengapa. final ditetapkan sekali,
ketika discount adalah 20, sehingga menjadi 80 dan tetap di
sana. discount = 50 hanya mengubah discount.
Sebuah variable tidak mengingat rumus yang membuatnya, hanya nilainya.
Jebakan yang sama seperti contoh yang dikerjakan di bagian atas bab,
kostum baru.
Selesai?
Sekarang kamu bisa membaca program dan mengatakan apa yang akan dilakukannya sebelum menjalankannya. Bab berikutnya — Penamaan dan dekomposisi — mencakup setengah lainnya dari membaca dengan baik: nama-nama yang jelas, dan memotong pekerjaan besar menjadi yang kecil, sehingga tracing mudah dari awal.