Menghitung sampai berhenti
Setiap loop butuh tiga bagian. Yang paling sering lupa ditulis adalah bagian yang membuatnya berhenti.
Sebaiknya baca lebih dulu: Mengumpulkan nilai satu per satu.
Tiga bagian yang wajib ada
Loop berhitung punya tiga bagian yang sama: nilai awal counter, kondisi berhenti, dan kenaikan. Ketiganya wajib ada, dan yang paling sering lupa ditulis adalah kenaikannya.
SET hasil = [] SET i = 1 WHILE i <= n SET hasil = hasil + [i] SET i = i + 1 END OUTPUT hasil
IngatKondisi diperiksa SEBELUM badan loop dijalankan, bukan sesudahnya.
Kalimat di atas menentukan jawaban untuk kasus yang paling mudah terlewat. Dengan n bernilai nol, kondisi 1 <= 0 sudah salah pada pemeriksaan pertama, jadi badan loop tidak pernah berjalan sekali pun dan hasilnya array kosong. Bukan array berisi satu elemen, bukan galat.
Melihat counter naik
SET hasil = [] SET i = 1 WHILE i <= n SET hasil = hasil + [i] SET i = i + 1 END OUTPUT hasil
Counter dimulai dari satu, dan hasil masih array kosong.
Dua hal dari jejak tadi pantas diingat. Kondisi diperiksa satu kali lebih banyak daripada jumlah putaran, sebab pemeriksaan terakhirnya yang menghentikan. Dan counter berakhir satu langkah melewati batas, jadi nilainya sesudah loop bukan nilai terakhir yang diproses.
Ketika kenaikannya hilang
Tanpa kenaikan
SET i = 1 WHILE i <= n SET hasil = hasil + [i] END
Dengan kenaikan
SET i = 1 WHILE i <= n SET hasil = hasil + [i] SET i = i + 1 END
Kolom kiri tidak pernah berhenti. i tetap bernilai satu, kondisinya tetap benar, dan hasil terus bertambah sampai memorinya habis. Program tidak melaporkan kesalahan apa pun; ia hanya berhenti menjawab. Di arena, kasus ini ditangkap batas waktu sandbox, dan di kode sungguhan ia terlihat sebagai layanan yang menggantung.
Periksa pemahaman
Dengan n bernilai 1, berapa kali kondisi i <= n diperiksa, dan apa hasilnya?
Ringkasan
- Tiga bagian wajib: nilai awal, kondisi berhenti, dan kenaikan.
- Kondisi diperiksa sebelum badan dijalankan, jadi badan dapat tidak berjalan sekali pun.
- Jumlah pemeriksaan selalu satu lebih banyak daripada jumlah putaran.
- Counter berakhir satu langkah melewati batasnya.
- Kenaikan yang hilang tidak menghasilkan pesan galat, hanya program yang berhenti menjawab.