Terus ke kandungan
IGCSE·Tuition

Sains Komputer · Bantuan untuk kesukaran biasa

Gelung saya tidak berhenti atau terlepas item terakhir

Gelung itu nampak betul apabila dibaca, tetapi ia sama ada tidak pernah berakhir atau senyap-senyap meninggalkan nilai terakhir.

Dalam halaman ini
  1. Bagaimana rupa gelung yang tidak berakhir?
  2. Bagaimana membetulkannya?
  3. Bagaimana rupa gelung yang terlepas item terakhir?
  4. Bagaimana membetulkan ralat satu langkah?
  5. Kesilapan yang mana satu?
  6. Senarai semak untuk mana-mana gelung
  7. Seterusnya ke mana
  8. Bila penjejakan sahaja tidak mencukupi

Gelung yang tidak berakhir mempunyai syarat yang tidak pernah menjadi palsu. Gelung yang terlepas item terakhir berhenti satu pusingan terlalu awal. Kedua-duanya paling cepat ditemui dengan menjejak gelung itu dengan tangan, satu baris bagi setiap pusingan.

Halaman ini memberi satu contoh berlangkah bagi setiap satu, pembetulan dan senarai semak ringkas. Notasi di sini ialah pseudokod ringkas yang mudah dibaca. Kertas anda mungkin menggunakan gaya tertentu, jadi semak sukatan untuk laluan yang terpakai.

Bagaimana rupa gelung yang tidak berakhir?

Baca algoritma ini. Tujuannya mengira turun ke sifar dengan langkah 3.

Num ← 10
WHILE Num <> 0
    Num ← Num - 3
ENDWHILE
OUTPUT "Done"

Jejaknya, dengan menulis keputusan syarat setiap kali.

PusinganNum pada awalNum <> 0 ?Num selepas
110BENAR7
27BENAR4
34BENAR1
41BENAR−2
5−2BENAR−5

Num menjadi 10, 7, 4, 1, −2, −5 dan tidak pernah tepat 0. Ujian “tidak sama dengan 0” kekal BENAR selama-lamanya, jadi “Done” tidak pernah dicapai.

Bagaimana membetulkannya?

Ubah syarat supaya ia berhenti apabila nilai sudah melepasi sasaran, bukan hanya apabila sama dengan sasaran.

Num ← 10
WHILE Num > 0
    Num ← Num - 3
ENDWHILE
OUTPUT Num

Jejak: 10 → 7 → 4 → 1 → −2. Selepas pusingan keempat Num ialah −2, dan −2 > 0 adalah PALSU, jadi gelung berhenti. Outputnya −2.

Tabiat yang patut dikekalkan: apabila nilai bergerak dalam langkah, pilih syarat berasaskan lebih besar atau lebih kecil daripada, kecuali anda sudah membuktikan langkah itu mendarat tepat pada sasaran.

Bagaimana rupa gelung yang terlepas item terakhir?

Berikut tatasusunan (array) lima skor, dikira dari indeks 1 hingga 5 dalam contoh ini. Tugasnya menjumlahkan kesemuanya.

Scores = [12, 7, 15, 9, 10]

Total ← 0
FOR i ← 1 TO 4
    Total ← Total + Scores[i]
NEXT i
OUTPUT Total
iScores[i]Total selepas
11212
2719
31534
4943

Outputnya 43, tetapi jumlah sebenar ialah 12 + 7 + 15 + 9 + 10 = 53. Gelung berhenti pada 4, jadi Scores[5] = 10 tidak pernah ditambah. Bezanya, 53 − 43 = 10, tepat item yang tertinggal, satu petunjuk berguna apabila anda menyemak kerja sendiri.

Bagaimana membetulkan ralat satu langkah?

Jadikan nilai terakhir gelung sebagai indeks terakhir tatasusunan.

Total ← 0
FOR i ← 1 TO 5
    Total ← Total + Scores[i]
NEXT i
OUTPUT Total

Jejak: 12, 19, 34, 43, 53. Output 53. ✓

Jika panjang tatasusunan boleh berubah, gunakan panjangnya dan bukan 5 tetap, contohnya FOR i ← 1 TO Length, dengan Length menyimpan bilangan item.

Kesilapan yang mana satu?

GejalaPunca mungkinSemakan pertama
Atur cara tidak pernah siapSyarat tidak pernah menjadi PALSUAdakah gelung mengubah pemboleh ubah yang digunakan syarat?
Berhenti, tetapi jawapan kurang satu itemHad terlalu rendah satu, atau < dan bukan <=Tulis indeks pertama dan terakhir di sebelah gelung
Ranap atau ralat di hujungHad terlalu tinggi satu, membaca melepasi tatasusunanAdakah indeks terakhir dalam julat?
Berjaya untuk 5 item, gagal untuk 1 atau 0Gelung menganggap sekurang-kurangnya dua itemUji kes terkecil dengan tangan

Senarai semak untuk mana-mana gelung

  1. Tulis nilai pertama dan terakhir yang patut dikendalikan gelung.
  2. Jejak pusingan pertama dan pusingan terakhir sepenuhnya.
  3. Tanya apa yang menjadikan syarat palsu, dan semak gelung bergerak ke arahnya.
  4. Uji dengan senarai kosong atau satu item.
  5. Semak sama ada hasilnya munasabah, contohnya dengan menjumlahkan senarai dengan cara lain.

Pelatih penjejakan pseudokod terhad membolehkan anda melangkah melalui algoritma asli dan melihat setiap keputusan cabang dan gelung, jika laluan anda membenarkan. Kotak pasir penaakulan Python selamat menunjukkan larian terhad yang dihentikan jika gelung berjalan terlalu lama.

Seterusnya ke mana

Untuk idea penuh, baca pengulangan dan tatasusunan. Pepijat sempadan ada halamannya sendiri: atur cara saya berjalan tetapi gagal pada kes sempadan. Kemudian cuba soalan campuran dalam latihan asli, dan lihat panduan pembelajaran untuk peta keseluruhan.

Bila penjejakan sahaja tidak mencukupi

Sesetengah pelajar menjejak dengan teliti tetapi masih tidak nampak mengapa gelung tersilap, kerana kepercayaan di sebaliknya, seperti “pemboleh ubah dikemas kini sendiri”, tidak kelihatan di atas kertas. Memerhatikan anda berfikir dengan kuat menjadikan kepercayaan itu mudah ditemui. Tuisyen Computer Science dalam talian satu dengan satu bermula dengan kelas percubaan berbayar selama satu jam pada kadar yang disahkan oleh guru yang ditugaskan, bermula dari RM80.

Soalan lazim

Mengapa gelung WHILE saya tidak berhenti?

Syaratnya tidak pernah menjadi palsu. Biasanya pemboleh ubah dalam syarat tidak diubah di dalam gelung, atau berubah dengan cara yang melangkau nilai berhenti, seperti mengira turun 3 dan menunggu tepat 0. Jejak tiga pusingan dengan tangan dan lihat apa yang syarat nampak setiap kali.

Mengapa gelung saya melangkau item terakhir?

Ini ralat terlebih atau terkurang satu (off-by-one). Gelung berhenti satu langkah terlalu awal, misalnya kerana had terlalu rendah satu atau ujian menggunakan < sedangkan <= diperlukan. Tulis indeks pertama dan terakhir dengan tangan, kemudian semak gelung anda melawat kedua-duanya.

Adakah tatasusunan bermula pada 0 atau 1?

Ia bergantung pada notasi dan bahasa laluan peperiksaan anda. Sesetengah contoh pseudokod mengira dari 1 dan Python mengira dari 0. Semak sukatan Cambridge untuk kod dan tahun anda, kemudian tulis indeks pertama dan terakhir pada kerja anda sebelum menulis gelung.

Bagaimana menguji gelung tanpa menjalankannya?

Gunakan jadual penjejakan. Buat satu lajur bagi setiap pemboleh ubah dan satu baris bagi setiap pusingan, dan tulis keputusan syarat di sebelah setiap baris. Jika sesuatu baris tidak mengubah nilai yang diperlukan syarat, anda sudah menemui gelung tanpa henti sebelum menjalankan apa-apa.

Sumber rujukan

  1. Cambridge IGCSE Computer Science 0478 syllabus page

Dikemas kini:

Langkah seterusnya

Jika kesilapan gelung terus berulang selepas anda membetulkannya sekali, guru satu dengan satu boleh memerhatikan anda menjejak dan mengesan tabiat di sebaliknya.

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.

9,000+ pelajar telah dibantu melalui perkhidmatan kami