Gelung hanya tamat apabila syaratnya berubah dengan cara yang betul. Untuk membaikinya, jejak pemboleh ubah dalam syarat dan tanya sama ada ia boleh membuat gelung berhenti pada titik yang dimaksudkan.
Pelajaran ini sebahagian daripada pseudokod untuk sukatan berkenaan. Ia menggunakan kemahiran menjejak daripada tugasan dan perbandingan dan bentuk gelung dalam pengulangan dan tatasusunan.
Apakah pepijat penamatan yang lazim?
Ada empat. Pemboleh ubah syarat tidak pernah dikemas kini, atau kemas kininya menggerakkannya ke arah yang salah.
Atau ujian menggunakan <> atau = dan nilai melompatinya. Atau ujian terlebih atau terkurang satu, menggunakan < di tempat yang memerlukan <=.
Bagi setiap pepijat, pembaikannya sama: tentukan apa yang gelung patut lakukan, kemudian pastikan kemas kini dan ujian sepadan.
Contoh berlangkah
Gelung ini sepatutnya menambah 1, 3, 5, 7 dan 9, kemudian berhenti.
Total ← 0
Count ← 1
WHILE Count <> 10 DO
Total ← Total + Count
Count ← Count + 2
ENDWHILE
OUTPUT Total
Jejak pusingan pertama:
| Pusingan | Count semasa ujian | Count <> 10 | Total selepas badan | Count selepas badan |
|---|---|---|---|---|
| 1 | 1 | TRUE | 1 | 3 |
| 2 | 3 | TRUE | 4 | 5 |
| 3 | 5 | TRUE | 9 | 7 |
| 4 | 7 | TRUE | 16 | 9 |
| 5 | 9 | TRUE | 25 | 11 |
| 6 | 11 | TRUE | 36 | 13 |
Count hanya mengambil nilai ganjil, jadi ia melompati 10 dan ujian sentiasa TRUE. Gelung tidak pernah tamat.
Pembaikan: tukar ujian kepada WHILE Count < 10 DO. Kini pusingan 5 berakhir dengan Count = 11, ujian 11 < 10 ialah FALSE, dan gelung berhenti. Total ialah 25. Semak: 1 + 3 + 5 + 7 + 9 = 25.
Kesilapan yang perlu diawasi
Silap yang lazim ialah membaiki gejala, bukan punca.
Pembaikan yang salah: tukar
Count + 2kepadaCount + 1supaya Count mencapai 10.Gelung kini berhenti, tetapi ia menambah 1 + 2 + 3 + … + 9 = 45. Algoritma itu tidak lagi melakukan apa yang dimaksudkan.
Pembetulannya ialah mengekalkan tingkah laku yang dimaksudkan dan menukar ujian. Gunakan < atau <= dan bukan <> apabila pemboleh ubah melangkah lebih daripada 1, kerana ujian “tidak sama” hanya selamat jika nilai pasti mendarat pada sasaran.
Semak sendiri
1. X ← 20, WHILE X > 0 DO, X ← X - 6, ENDWHILE. Berapakah X di akhir, dan berapa kali gelung berjalan?
Tunjukkan jawapan
X menjadi 20, 14, 8, 2, kemudian -4. Badan gelung berjalan 4 kali dan X berakhir -4.
2. Mengapakah Flag ← TRUE, WHILE Flag = TRUE DO OUTPUT "Hi" ENDWHILE tidak pernah tamat?
Tunjukkan jawapan
Tiada apa di dalam gelung yang mengubah Flag, jadi syarat kekal TRUE. Tambah kemas kini seperti Flag ← FALSE di bawah syarat yang betul.
3. Mulakan dengan Count ← 1, kemudian REPEAT Count ← Count + 1 UNTIL Count > 5. Berapakah Count di akhir?
Tunjukkan jawapan
Count menjadi 2, 3, 4, 5, 6. Ia berhenti apabila Count ialah 6, jadi Count ialah 6.
Ke mana selepas ini
Habiskan modul dengan menyemak tahun peperiksaan sebelum memilih tatatanda. Alat latihan jejak pseudokod terhad menghentikan gelung liar pada had keselamatan, jadi anda boleh menguji gelung yang rosak tanpa membekukan apa-apa.
Penyahpepijatan ialah kemahiran yang berkembang apabila kesilapan sendiri diterangkan. Itulah yang dilakukan guru kami dalam tuisyen Computer Science dalam talian satu dengan satu.