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
Baris kedua nilai awalnya, baris ketiga kondisi berhentinya, baris kelima kenaikannya. Ketiganya terlihat sebagai baris terpisah, dan itu disengaja.

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
n3
i1
hasil[]

Counter dimulai dari satu, dan hasil masih array kosong.

Langkah 1 dari 9
n bernilai 3. Langkahi satu satu; perhatikan kondisi diperiksa empat kali, bukan tiga.

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.