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.