Terus ke kandungan
IGCSE·Tuition
Sains Komputer · Pelajaran

Baiki ralat off-by-one

Atur cara yang memberi jumlah salah sering kali tersalah tepat satu pusingan.

Dalam halaman ini
  1. Bagaimana mencari baris yang salah?
  2. Contoh penyelesaian
  3. Kesilapan yang perlu diawasi
  4. Semak sendiri
  5. Seterusnya

Ralat off-by-one bermaksud gelung berjalan sekali terlalu banyak atau sekali terlalu sedikit. Ia antara kesalahan paling biasa dalam soalan algoritma, dan tugasan peperiksaan sering memberi gelung yang salah dan meminta pembaikan.

Pelajaran ini dibina atas menjejak gelung terkawal bilangan dan terkawal syarat dalam pengulangan dan tatasusunan. Ia penting lagi sebaik sahaja tatasusunan muncul.

Bagaimana mencari baris yang salah?

Bekerja mengikut urutan ini:

  1. Nyatakan apa yang patut dilakukan gelung, dalam nombor. Contohnya, “tambah 10 nombor bulat pertama, jadi 10 pusingan, jawapan 55”.
  2. Jejak pusingan pertama dan pusingan terakhir.
  3. Kira bilangan pusingan yang benar-benar dibuat oleh kod.
  4. Bandingkan. Jika kod membuat satu pusingan terlalu sedikit atau terlalu banyak, periksa nilai awal, nilai akhir dan tanda perbandingan.

Contoh penyelesaian

Seorang pengaturcara mahu jumlah nombor bulat 1 hingga 10.

Total ← 0
FOR i ← 1 TO 9
   Total ← Total + i
NEXT i
OUTPUT Total

Nilai gelung ialah 1 hingga 9, iaitu 9 pusingan. Tugasan memerlukan 10 pusingan.

iTotal selepas
11
23
36
410
515
621
728
836
945

Outputnya 45, tetapi jumlah 1 hingga 10 ialah 55. Nilai yang tertinggal ialah 10, dan 45 + 10 = 55. Pembaikannya ialah menukar nilai akhir:

FOR i ← 1 TO 10

Gelung WHILE boleh menyembunyikan kesalahan yang sama dalam syaratnya. Versi ini sepatutnya mencetak empat gandaan 3 yang pertama, iaitu 3, 6, 9 dan 12.

Count ← 0
WHILE Count <= 4 DO
   Count ← Count + 1
   OUTPUT Count * 3
ENDWHILE

Ujian benar bagi Count = 0, 1, 2, 3 dan 4, jadi ada 5 pusingan. Ia mencetak 3, 6, 9, 12 dan 15. Menukar syarat kepada Count < 4 memberi pusingan untuk Count = 0, 1, 2 dan 3. Itu mencetak 3, 6, 9 dan 12, yang betul.

Kesilapan yang perlu diawasi

Kesilapan biasa ialah membaiki output dan bukan gelung.

Pembetulan yang salah: “Jumlahnya 45 dan patut 55, jadi tulis OUTPUT Total + 10.”

Ini memberi 55 untuk input ini sahaja. Gelung masih tertinggal nilai terakhir, dan sebarang nilai akhir lain akan gagal.

Pembetulannya ialah menukar had gelung supaya ia membuat bilangan pusingan yang betul. Kemudian jejak satu kes kecil yang kedua, seperti nombor 1 hingga 3 (jumlah 6), untuk mengesahkan.

Semak sendiri

1. Tatasusunan Score[1:5] menyimpan lima nilai. Kodnya ialah FOR i ← 0 TO 4. Apakah yang salah, dan apakah pembaikannya?

Lihat jawapan

Kedudukan tatasusunan bermula dari 1 hingga 5. Kedudukan 0 tidak wujud, dan kedudukan 5 tidak pernah dilawati. Pembaikannya ialah FOR i ← 1 TO 5.

2. Berapa pusingan yang dibuat oleh FOR i ← 5 TO 12?

Lihat jawapan

Nilainya ialah 5, 6, 7, 8, 9, 10, 11, 12, iaitu 8 pusingan. Semakan: 12 - 5 + 1 = 8.

3. Gelung ini sepatutnya mengeluarkan 2, 4 dan 6 sahaja. Ia mengeluarkan 2, 4, 6 dan 8. Berikan pembaikannya.

n ← 0
WHILE n < 8 DO
   n ← n + 2
   OUTPUT n
ENDWHILE
Lihat jawapan

Ujian benar bagi n = 0, 2, 4 dan 6, jadi empat pusingan berlaku dan output terakhir ialah 8. Tukar syarat kepada WHILE n < 6. Maka n = 0, 2 dan 4 lulus ujian dan outputnya ialah 2, 4 dan 6.

Seterusnya

Seterusnya, gunakan gelung yang betul untuk mengimbas senarai dalam mencari nilai maksimum dalam senarai. Pelatih jejak pseudokod membolehkan anda melangkah melalui gelung yang salah dan melihat pusingan pertama dan terakhir.

Seorang guru dalam tuisyen Computer Science boleh membawa gelung salah yang baharu dan meminta anda menerangkan pembaikan sebelum anda menulisnya.

Soalan lazim

Apakah ralat off-by-one?

Ia ialah gelung yang berjalan sekali terlalu banyak atau sekali terlalu sedikit, atau indeks yang satu kedudukan terlalu tinggi atau rendah. Puncanya biasanya nilai awal salah, nilai akhir salah, atau menggunakan < sedangkan <= diperlukan.

Bagaimana saya menguji gelung untuk ralat off-by-one?

Jejak pusingan pertama dan pusingan terakhir di atas kertas, dan kira bilangan pusingan. Bandingkan bilangan yang anda dapat dengan bilangan yang diperlukan tugasan. Menggunakan kes yang sangat kecil, seperti tiga item, menjadikan pusingan lebih atau kurang mudah dilihat.

Betulkah membetulkannya dengan menambah atau menolak satu pada jawapan?

Tidak. Cara itu menyembunyikan kesalahan dan gagal pada input lain. Baiki had gelung atau syaratnya supaya gelung membuat tepat bilangan pusingan yang diperlukan, kemudian semak keputusan dengan kes kecil yang kedua.

Dikemas kini:

Langkah seterusnya

Jika anda nampak gelung itu salah tetapi menampalnya hanya memindahkan ralat ke tempat lain, seorang guru boleh menjejak pembetulan bersama anda dan menunjukkan cara menguji kedua-dua hujung gelung.

Kelas percubaan berbayar satu jam pada kadar guru yang disahkan, bermula RM80. Yuran lain, jadual dan susunan seterusnya disahkan terus bersama guru selepas kelas percubaan.

Tuisyen diatur bersama ibu bapa atau penjaga. Hantar halaman ini kepada mereka melalui WhatsApp supaya mereka boleh bertanya bagi pihak anda.

Ibu bapa atau penjaga? Tanya di sini

9,000+ pelajar telah dibantu melalui perkhidmatan kami