Seleksi dan iterasi
| English | Bahasa Indonesia |
|---|---|
| selection/sɪˈlekʃn/ | pemilihan |
| iteration/ˌɪtəˈreɪʃn/ | iterasi |
| trace table/treɪs ˈteɪbl/ | tabel jejak |
| nested/ˈnestɪd/ | bersarang |
| logic error/ˈlɒdʒɪk ˈerə/ | kesalahan logika |
| count-controlled loop/kaʊnt kənˈtrəʊld luːp/ | loop terkontrol hitung |
| array/əˈreɪ/ | array |
| pre-condition loop/priː kənˈdɪʃn luːp/ | loop pra-kondisi |
| post-condition loop/pəʊst kənˈdɪʃn luːp/ | loop pasca-kondisi |
| dry run/draɪ rʌn/ | jalur kering |
Satu baris terlalu banyak
- Pada tahun 2014 Apple mengirim pembaruan keamanan karena satu baris berulang tunggal. Di dalam kode yang memeriksa sertifikat situs web,
goto fail;muncul dua kali berturut-turut. - Salinan kedua berada di luar
IF-nya, sehingga berjalan setiap kali, dan pengecekan di bawahnya tidak pernah melakukannya. Selama berbulan-bulan, penyerang apa pun dapat berpura-pura menjadi situs web apa pun. - Seleksi dan iterasi adalah konstruksi yang memutuskan apa yang berjalan dan berapa sering. Salah satu baris darinya dan program masih berjalan, hanya saja salah.
- Pelajaran ini adalah IF, CASE dan tiga loop, serta tabel lacak yang menangkap kesalahan sebelum ujian dilakukan.
Seleksi
IF umur >= 18 THEN … ELSE … ENDIF
ELSEadalah opsional,ENDIFtidak. SetiapIFharus ditutup.- Kondisi adalah ekspresi Boolean apa pun: perbandingan, atau perbandingan yang digabungkan oleh
AND,ORdanNOT.

Sebuah IF … ELSE menguji sekali, lalu menjalankan tepat satu cabang
IF Bersarang dan Batas
- Nested IF adalah IF di dalam cabang IF lain, dan masing-masing membutuhkan
ENDIF-nya sendiri. - Batas adalah tempat nilai hilang. "Nilai 50 atau lebih lulus" adalah
Mark >= 50, bukanMark > 50. - Perbandingan yang salah adalah kesalahan logika: program berjalan dan memberikan jawaban yang salah untuk beberapa input. Jejak dengan nilai batas, yaitu 50 itu sendiri, adalah cara menemukannya.
"Nilai 50 atau lebih lulus" ditulis sebagai IF Mark ____ 50 THEN.
"Atau lebih" mencakup angka 50 itu sendiri, jadi perbandingannya adalah lebih besar dari atau sama dengan. > akan gagal siswa yang tepat mendapat nilai 50.
KASUS
CASE OF Grade … ENDCASEmenguji satu nilai terhadap beberapa pilihan dan lebih bersih daripada rantai IF bersarang.- Pelindung bisa berupa satu nilai
"A":, daftar1, 2, 3:, atau rentang1 TO 5:. Cabang terakhir untuk "segala hal lain" adalahOTHERWISE, bukan kondisi seperti> 200. - Pelindung diuji berurutan. Dengan
1 TO 50:diikuti oleh40 TO 60:, nilai 45 akan mengambil cabang pertama, sehingga penugasan dalam cabang kedua mungkin tidak pernah berjalan. Jika cabang-cabang sebelumnya mencakup setiap kemungkinan nilai,OTHERWISEjuga tidak akan dilakukan.

CASE menjalankan cabang pertama whose pelindung cocok dengan nilai
Pernyataan CASE lebih rapi daripada IF bersarang ketika Anda:
CASE mencocokkan satu nilai terhadap banyak kemungkinan; IF bersarang yang dalam menjadi sulit dibaca.
Manakah dari berikut ini yang merupakan penjaga (guards) valid dalam pernyataan CASE Cambridge? Pilih semua yang berlaku.
Satu nilai, daftar nilai, rentang, dan OTHERWISE. Perbandingan seperti > 200 bukan penjaga; apa pun yang tidak tercakup akan masuk ke OTHERWISE.
Contoh Terpecahkan : tulis ulang CASE tanpa CASE
CASE OF MySwitchdengan1: ThisChar ← 'a',2: ThisChar ← 'y',3: ThisChar ← '7',OTHERWISE: ThisChar ← '*'.- Setiap nilai menjadi satu cabang dari rantai IF, dan
OTHERWISEmenjadi akhirELSE.
IF MySwitch = 1 THEN
ThisChar <- 'a'
ELSE
IF MySwitch = 2 THEN
ThisChar <- 'y'
ELSE
IF MySwitch = 3 THEN
ThisChar <- '7'
ELSE
ThisChar <- '*'
ENDIF
ENDIF
ENDIF
- Tiga IF, tiga ENDIF. Berjalan sebaliknya, dua klausa CASE yang menetapkan nilai sama bergabung menjadi satu pelindung dengan daftar nilai,
1, 2:.
Tiga perulangan
- Iterasi mengulang sebuah blok, dan tiga perulangan berbeda di mana kondisinya diuji.
- Perulangan terkontrol penghitung,
FOR i ← 1 TO 10 … NEXT i, berjalan sejumlah kali yang diketahui;STEP -1menghitung mundur. Gunakan ini untuk jumlah tetap atau setiap elemen array. - Perulangan pra-kondisi,
WHILE … DO … ENDWHILE, menguji sebelum setiap lemparan, sehingga mungkin berjalan nol kali. Perulangan pasca-kondisi,REPEAT … UNTIL, menguji setelah setiap lemparan, sehingga selalu berjalan setidaknya sekali.

Di mana kondisi berada menentukan berapa kali tubuh dapat berjalan
Cocokkan setiap loop dengan kapan Anda akan menggunakannya.
FOR = dikontrol hitungan; WHILE = kondisi diuji sebelum (0+ lintasan); REPEAT = kondisi diuji setelah (1+ lintasan).
REPEAT...UNTIL menguji kondisinya SETELAH tubuh (body), sehingga tubuh selalu berjalan setidaknya sekali.
Uji pasca-kondisi inilah yang menjadi perbedaan dengan WHILE, yang dapat berjalan nol kali.
Memilih perulangan : jawaban dua nilai
- Satu nilai untuk nama, satu untuk alasan, dalam kata-kata skema.
- Terkontrol penghitung, karena jumlah iterasi diketahui sebelum perulangan dimulai. Pasca-kondisi, karena tubuh perulangan harus dieksekusi setidaknya sekali. Pra-kondisi, karena perulangan mungkin tidak perlu dieksekusi sama sekali.
- Perulangan atas empat elemen array yang ditulis sebagai
WHILEdengan penghitung adalah "tidak paling sesuai"; FOR loop adalah, karena count diketahui.
Soal meminta Anda untuk "identifikasi loop yang lebih sesuai dan justifikasikan pilihan Anda" untuk 2 poin. Apa yang mendapatkan kedua poin?
Satu poin untuk loop, satu untuk alasan: hitungannya diketahui, tubuh harus berjalan sekali, atau loop mungkin tidak berjalan sama sekali.
Contoh Terpecahkan : perulangan mana yang cocok untuk setiap tugas?
- Cetak tabel perkalian 12: count diketahui sebelumnya, jadi FOR loop.
- Terus baca angka hingga pengguna memasukkan 0: count tidak diketahui dan input pertama mungkin sudah 0, jadi tes harus datang sebelum tubuh: WHILE loop.
- Minta password hingga benar: pengguna harus ditanya setidaknya sekali, jadi REPEAT … UNTIL loop.
- Tanyakan dua pertanyaan: berapa kali, dan apakah tubuh harus berjalan sebelum tes pertama?
"Terus minta kata sandi sampai benar, tetapi selalu minta setidaknya sekali." Loop manakah yang cocok?
Anda harus meminta setidaknya sekali, jadi REPEAT...UNTIL pasca-kondisi adalah pilihan alami.
Tabel Jejak
- Tabel jejak mencatat setiap nilai variabel saat Anda menjalankan kering algoritma secara manual. Ini adalah cara perulangan diuji di kertas dan soal enam nilai di sebagian besar Paper 2.
- Satu kolom per variabel, ditambah kolom untuk output apa pun. Tulis baris baru hanya ketika nilai berubah, dan evaluasi kondisi perulangan pada saat perulangan mencapainya.
- Teruslah sampai kondisi mengakhiri perulangan, lalu catat output akhir.
Jejakkan loop, langkah demi langkah
Tabel jejak mencatat setiap variabel setelah setiap lintasan loop. Perhatikan counter i naik sementara total berjalan terbentuk — persis seperti yang diminta soal jejak ujian untuk diisi.
Setelah total = 0; FOR i = 1 TO 5: total = total + i, berapa nilai total?
Menambahkan 1+2+3+4+5 = 15 — persis seperti yang dibangun tabel jejak lintasan demi lintasan.
Contoh Terpecahkan : tabel jejak terisi
Count <- 1
Total <- 0
WHILE Total < 10 DO
Total <- Total + Count
Count <- Count + 1
ENDWHILE
OUTPUT Count
- Baris (Count, Total): (1, 0) → (2, 1) → (3, 3) → (4, 6) → (5, 10).
- Pada Total = 10 kondisi
Total < 10adalah false, perulangan berakhir, dan outputnya adalah 5. - Baris terakhir adalah yang paling sering salah: periksa kondisi satu kali lagi sebelum menulis output.
Dalam jejak terpecahkan, loop berakhir dengan Total = 10 dan Count = 5, sehingga outputnya adalah 5.
Setelah lintasan keempat Total mencapai 10, kondisi Total < 10 menjadi salah, dan Count telah ditingkatkan menjadi 5.
⟦⟧ Nilai yang sering terlewat
>=dan>adalah jawaban berbeda. Uji nilai batas dalam pikiran Anda sebelum menulis perbandingan.OTHERWISEadalah kata kunci, bukan kondisi. Dan setiapIF,CASE,WHILEdanFORditutup denganENDIF,ENDCASE,ENDWHILEatauNEXT.- A
WHILEdapat berjalan nol kali; aREPEATtidak bisa. Pilih berdasarkan apakah tubuh harus berjalan sekali sebelum tes pertama. - Dalam tabel jejak, nilai yang tidak berubah tidak ditulis ulang, dan output hanya ditulis ketika baris
OUTPUTberjalan.
Anda telah memahaminya
- IF … ELSE … ENDIF untuk pilihan; nested IFs masing-masing ditutup; CASE untuk satu nilai terhadap banyak pelindung, diuji berurutan,
OTHERWISEterakhir - FOR jumlah diketahui · WHILE menguji sebelum, mungkin berjalan nol kali · REPEAT … UNTIL menguji setelah, berjalan setidaknya sekali
- justifikasi perulangan dengan nama dan alasannya: jumlah diketahui, mungkin tidak berjalan, harus berjalan sekali
- tabel jejak menjalankan algoritma secara manual satu baris per perubahan; periksa kondisi sekali lagi sebelum output akhir