Lompat ke konten

Pemrograman

Ilmu Komputer A-Level · Topik 11

Pelajaran video untuk topik ini Buka halaman video
24:05

Dasar-Dasar Pemrograman

Sebuah program harus meminta kata sandi, dan terus memintanya hingga benar. Sederhana — tetapi perulangan mana yang Anda gunakan? Program membuat keputusan dan mengulang pekerjaan, dan memilih…

Narasi bahasa Inggris · Subtitle bahasa Inggris + 中文 disematkan langsung

11.1

Dasar pemrograman

Silabus
Kandidat harus mampu: Catatan dan panduan
Implementasikan dan tulis pseudocode dari desain yang diberikan yang disajikan sebagai diagram alir program atau bahasa Inggris terstruktur
Tulis pernyataan pseudocode untuk: • deklarasi dan inisialisasi konstanta • deklarasi variabel • penugasan nilai ke variabel • ekspresi yang melibatkan operator aritmatika atau logika, input dari keyboard dan output ke konsol
Gunakan fungsi bawaan dan rutinitas perpustakaan Fungsi apa pun yang tidak diberikan dalam panduan pseudocode akan disediakan Fungsi manipulasi string akan selalu diberikan

Sumber: Silabus Cambridge International

Garis kode sumber pada layar gelap
Pemrograman mengubah desain menjadi instruksi yang ditulis sebagai kode

Seorang programmer bekerja di komputer *Programmer menulis kode dan mengujinya seiring berjalan

Dari desain ke kode

Anda harus mampu mengubah desain — flowchart (program flowchart) atau structured English — menjadi pseudocode, lalu menjadi bahasa nyata:

  1. temukan variabel dan tipe data-nya.
  2. ubah kotak input/output menjadi INPUT / OUTPUT.
  3. ubah belah ketupat keputusan menjadi IF...ELSE...ENDIF (atau CASE).
  4. ubah panah loop menjadi WHILE, REPEAT...UNTIL, atau FOR.
  5. ubah kotak proses menjadi penugasan atau perhitungan.
  6. periksa dengan melacak input kecil.

Peta simbol flowchart ke pseudocode: jajar genjang input/output menjadi INPUT atau OUTPUT, belah ketupat keputusan menjadi IF...THEN atau CASE, kotak proses menjadi penugasan x = ekspresi, dan panah loop menjadi WHILE, FOR atau REPEAT *Setiap simbol flowchart menjadi kata kunci pseudocode

Konstanta dan variabel

Konstanta menyimpan nilai yang tidak pernah berubah; variabel menyimpan salah satu yang mungkin berubah. Deklarasikan dengan tipe:

Nilai variabel dapat berubah; konstanta tetap tetap *Nilai variabel dapat berubah; konstanta tetap tetap

CONSTANT Pi = 3.14159
DECLARE Radius : REAL
DECLARE Area : REAL

Radius ← 5
Area ← Pi * Radius * Radius

Gunakan konstanta untuk nilai tetap yang muncul berulang (Pi, MaxScore); mereka membuat kode lebih jelas dan mudah diubah di satu tempat.

Dalam ujian, konstanta adalah jawaban untuk "identifikasi cara yang lebih tepat untuk merepresentasikan" nilai tetap, seperti tarif pajak atau skor maksimum, yang muncul di beberapa tempat dalam pseudocode. Manfaat yang disebutkan skema: nilainya ditetapkan sekali dan tidak dapat diubah secara tidak sengaja oleh program; perubahan dibuat di satu tempat dan mencapai setiap pernyataan yang menggunakannya; pengenal memberikan nilai tersebut makna (MaxScore daripada 100), sehingga kode lebih mudah dibaca dan diperiksa; dan ada risiko kesalahan ketik yang lebih sedikit pada nilai panjang seperti 3.14159. Pertanyaan "nyatakan nilai yang bisa digantikan dengan konstanta" menginginkan literal dari pseudocode (0.2, 40), bukan nama baru.

Setiap variabel dideklarasikan sekali, dengan identifier (namanya) dan tipe data, sebelum digunakan. Enam tipe dalam panduan pseudocode 9618:

Tipe Menyimpan Ditulis dalam kode sebagai Penggunaan umum
INTEGER bilangan bulat 42, -3 penghitung, indeks array, penghitung loop
REAL bilangan dengan bagian pecahan 3.75 harga, rata-rata
CHAR satu karakter 'A' (tanda kutip tunggal) huruf nilai, tombol menu
STRING urutan karakter "Hello" (tanda kutip ganda) nama, kode pos
BOOLEAN TRUE atau FALSE TRUE flag seperti Found
DATE tanggal kalender 12/05/2026 tanggal lahir

Pertanyaan "beri tipe data yang sesuai" dijawab berdasarkan bagaimana variabel digunakan dalam pseudocode: nilai dengan titik desimal adalah REAL; sesuatu yang diatur ke TRUE atau FALSE adalah BOOLEAN; nilai dalam tanda kutip tunggal adalah CHAR; nilai yang digunakan sebagai indeks array, atau dengan DIV dan MOD, adalah INTEGER. Tulis tipe dengan huruf kapital, ejaan sesuai panduan.

Contoh kerja. Nyatakan tipe data yang sesuai untuk setiap variabel.

Found ← FALSE
Initial ← 'K'
Price ← 12.99
Count ← Count + 1
Name ← "Li Wei"

Found adalah BOOLEAN (menyimpan FALSE); Initial adalah CHAR (satu karakter dalam tanda kutip tunggal); Price adalah REAL (nilai desimal); Count adalah INTEGER (pesawat yang naik satu); Name adalah STRING (teks dalam tanda kutip ganda).

Penugasan dan ekspresi

Gunakan ← untuk penugasan:

Total ← Total + 1
Average ← Sum / Count

Ekspresi menggunakan operator:

  • aritmatika + - * /, tambah DIV (pembagian bilangan bulat) dan MOD (sisa): 7 DIV 2 = 3; 7 MOD 2 = 1.
  • perbandingan =, <>, <, >, <=, >=.
  • logika AND, OR, NOT.

Precedence (tertinggi ke terendah): NOT → * / DIV MOD → + - → perbandingan → AND → OR. Gunakan kurung jika ragu.

Input dan output

OUTPUT "Enter your name:"
INPUT Name
OUTPUT "Hello, ", Name

Fungsi bawaan dan rutinitas perpustakaan

Banyak tugas memiliki rutin perpustakaan yang sudah tersedia, sehingga Anda tidak perlu menuliskannya sendiri. Sisipan Paper 2 mencantumkan rutin yang boleh digunakan, beserta nama persis, parameternya, dan tipe kembalinya; fungsi lain yang dibutuhkan soal akan diberikan dalam soal itu sendiri. Nama-nama di bawah adalah nama-nama dari sisipan tersebut. VAL dan STR merupakan nama IGCSE dan tidak muncul dalam dokumen 9618, sehingga tidak memberikan nilai apa pun. UCASE dan LCASE berada dalam kasus berbeda: mereka merupakan bagian dari 9618, didefinisikan dalam Panduan Pseudocode, tetapi menerima satu CHAR, dan sisipan sama sekali tidak mencantumkannya — untuk seluruh string pada Paper 2, rutinitasnya adalah TO_UPPER.

Perpustakaan program menyimpan rutin yang telah ditulis, dikompilasi, dan diuji sebelumnya; sebuah program memanggilnya alih-alih menulis sendiri. Manfaat yang diakui oleh skema ini untuk pertanyaan "tiga manfaat keadaan tiga" (state three benefits): rutin-rutin tersebut sudah teruji, sehingga lebih kecil kemungkinannya mengandung kesalahan; rutin-rutin tersebut menghemat waktu pengembangan; rutin-rutin tersebut dapat melakukan hal-hal yang tidak bisa ditulis programmer (statistik kompleks, grafik); rutin-rutin tersebut ditulis oleh para ahli dan digunakan kembali melintasi banyak program; serta rutin dengan antarmuka tetap dapat dipanggil dari mana saja dalam program.

Rutin Mengembalikan Contoh
LENGTH(s) jumlah karakter dalam s LENGTH("Hello") = 5
LEFT(s, n) / RIGHT(s, n) karakter pertama / terakhir n RIGHT("Hello", 2) = "lo"
MID(s, start, n) n karakter dari posisi start (posisi dihitung mulai dari 1) MID("Hello", 2, 3) = "ell"
TO_UPPER(s) / TO_LOWER(s) s dalam huruf kapital / dalam huruf kecil TO_UPPER("ab1") = "AB1"
NUM_TO_STR(x) / STR_TO_NUM(s) angka sebagai string / string sebagai angka STR_TO_NUM("3.5") = 3.5
IS_NUM(s) TRUE jika s adalah angka valid IS_NUM("12a") = FALSE
ASC(c) / CHR(n) kode karakter dari c / karakter dengan kode n ASC('A') = 65, CHR(66) = 'B'
INT(x) bagian bilangan bulat dari x INT(7.9) = 7
RAND(n) bilangan real acak dari 0 hingga, tetapi tidak termasuk, n INT(RAND(6)) + 1 adalah lemparan dadu
DAY(d), MONTH(d), YEAR(d) bagian-bagian dari DATE YEAR(TODAY())
DAYINDEX(d), SETDATE(d, m, y), TODAY() hari dalam seminggu (1 = Minggu); tanggal yang dibangun dari tiga bilangan bulat; tanggal hari ini
EOF(f) TRUE ketika file f tidak memiliki baris lagi untuk dibaca WHILE NOT EOF("data.txt")

String digabungkan menggunakan & (penggabungan/konkatenasi): "A" & "BC" adalah "ABC". Gunakan nama persis dari sisipan, dengan parameternya sesuai urutannya.

Tanggal dan bilangan acak muncul sebagai pernyataan satu baris. SETDATE(17, 11, 2007) membangun 17 November 2007; 12 - MONTH(MyDOB) adalah jumlah bulan dari bulan kelahiran hingga akhir tahun; IF DAYINDEX(MyDOB) = 5 THEN menguji apakah hari Kamis, karena Minggu adalah hari ke-1. RAND(n) mengembalikan bilangan real dari 0 hingga, tetapi tidak termasuk, n, sehingga bilangan bulat acak dari Low hingga High secara inklusif adalah INT(RAND(High - Low + 1)) + Low: INT(RAND(21)) - 10 memberikan nilai dari -10 hingga 10.

String COMPUTER ditampilkan sebagai delapan kotak karakter bernomor (posisi 1 hingga 8), dengan hasil latihan: LENGTH(s) = 8, LEFT(s, 3) = COM, MID(s, 4, 3) = PUT, RIGHT(s, 2) = ER, dan UCASE/LCASE mengubah huruf besar/kecil
Rutin string umum yang bekerja pada s = "COMPUTER" (posisi 1–8)

Latihan terpecahkan. Hitung setiap ekspresi, given Word ← "Program", Code ← 'Q', dan N ← 7.

Ekspresi Nilai Alasan
LENGTH(Word) 7 tujuh karakter
MID(Word, 4, 2) "gr" dua karakter, dimulai dari posisi 4
LEFT(Word, 3) & "!" "Pro!" digabungkan dengan &
TO_UPPER(RIGHT(Word, 2)) "AM" fungsi dalam berjalan terlebih dahulu
ASC(Code) - ASC('A') 16 'Q' adalah 81 dan 'A' adalah 65
N DIV 2 + N MOD 2 4 3 + 1
NUM_TO_STR(N) & "th" "7th" angka menjadi string terlebih dahulu
INT(N / 2) 3 3.5 dipotong ke bagian bulatnya

Kerjakan dari dalam ke luar, dan simpan tanda kutip: "7" adalah string dan 7 adalah angka.

Latihan terpecahkan. Setiap pernyataan mungkin mengandung kesalahan dalam penggunaannya fungsi atau operator. Jelaskan kesalahannya, atau tulis TIDAK ADA KESALAHAN. (Asumsikan setiap variabel memiliki tipe yang benar.)

Pernyataan Kesalahan
Result ← 2 & 4 & menggabungkan string; 2 dan 4 adalah bilangan bulat, jadi + diperlukan
SubString ← MID("pseudocode", 4, 1) TIDAK ADA KESALAHAN: satu karakter dari posisi 4, "u"
IF x = 3 OR 4 THEN OR memerlukan Boolean di setiap sisi: IF x = 3 OR x = 4 THEN
Result ← Status AND INT(x / 2) AND memerlukan dua Booleans; INT(x / 2) adalah bilangan bulat
Message ← "Done" + LENGTH(MyString) + tidak dapat menambahkan string ke bilangan bulat: "Done" & NUM_TO_STR(LENGTH(MyString))

Setiap operator bekerja pada tipe tertentu: & pada string, + - * / DIV MOD pada angka, AND OR NOT pada Booleans, dan = <> pada dua nilai dari tipe yang sama. Tabel "hitung setiap ekspresi, atau tulis ERROR" diberi nilai sama: LENGTH(42) dan "A" + 1 adalah ERROR, karena tipenya tidak cocok dengan fungsi atau operator.

Latihan terpecahkan. Dengan Points ← 100, Active ← TRUE, dan Exempt ← FALSE, hitung setiap ekspresi.

Ekspresi Nilai Alasan
(Points > 99) OR Active TRUE kedua sisi benar; salah satu saja cukup
(Points MOD 2 = 0) OR Exempt TRUE 100 MOD 2 adalah 0
(Points <= 75) AND (Active OR Exempt) FALSE sisi pertama adalah false, dan AND membutuhkan keduanya
(Active OR NOT Active) AND NOT Exempt TRUE Active OR NOT Active selalu benar

Ekspresi terakhir disederhanakan: X OR NOT X adalah TRUE apa pun X, sehingga ekspresi keseluruhan hanyalah NOT Exempt. Evaluasi kurung terlebih dahulu, lalu NOT, kemudian AND, lalu OR.

Jelajahi

Variabel adalah kotak berlabel

Setiap penugasan menyimpan satu nilai dalam kotak bernama; menugaskan kembali nama yang sama akan menimpa nilainya. Lanjutkan melalui program dan perhatikan setiap kotak mengambil nilai terkininya.

Kosa kata Latih
English Bahasa Indonesia
flowchart/ˈfləʊtʃɑːt/ flowchart
structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ bahasa Inggris terstruktur
pseudocode/ˈsuːdəʊkəʊd/ pseudocode
variables/ˈveərɪəblz/ variabel
data types/ˈdeɪtə taɪps/ tipe data
assignment/əˈsaɪnmənt/ penugasan
constant/ˈkɒnstənt/ konstan
identifier/aɪˈdentɪfaɪə/ pengenal
array/əˈreɪ/ array
operators/ˈɒpəreɪtəz/ operator
precedence/ˈpresɪdəns/ precedence
function/ˈfʌŋkʃn/ fungsi
library routines/ˈlaɪbrəri ruːˈtiːnz/ rutin perpustakaan
insert/ˈɪnsɜːt/ insert
parameters/pəˈræmɪtəz/ parameter
program library/ˈprəʊɡræm ˈlaɪbrəri/ perpustakaan program
concatenation/kənˌkætəˈneɪʃn/ konkatenasi
IDE/ˌaɪ diː ˈiː/ IDE
breakpoint/ˈbreɪkpɔɪnt/ titik jeda
single stepping/ˈsɪŋɡl ˈstepɪŋ/ langkah tunggal
11.2

Pemilihan

Silabus
Kandidat harus mampu: Catatan dan panduan
Gunakan pseudocode untuk menulis: • pernyataan ‘IF’ termasuk klausa ‘ELSE’ dan pernyataan IF bersarang • struktur ‘CASE’ • perulangan terkontrol ‘count’ (jumlah penghitung): • perulangan ‘post-condition’ (pasca-kondisi) • perulangan ‘pre-condition’ (prakondisi)
Justifikasi mengapa satu struktur perulangan mungkin lebih sesuai untuk memecahkan masalah dibandingkan yang lainnya

Sumber: Silabus Cambridge International

Pemilihan memilih langkah mana yang akan dijalankan.

IF age >= 18 THEN
    OUTPUT "Adult"
ELSE
    OUTPUT "Minor"
ENDIF
Diagram alir: dari awal, beranda keputusan menguji usia >= 18; cabang TRUE menghasilkan 'Dewasa' dan cabang FALSE menghasilkan 'Remaja', dan keduanya bergabung kembali di akhir
IF...ELSE menguji kondisi sekali, lalu menjalankan tepat satu cabang

Untuk lebih dari dua kasus Anda dapat menggunakan IF yang bersarang/nested, tetapi bersarang mendalam sulit dibaca — sebuah CASE lebih bersih saat menguji satu nilai terhadap beberapa opsi:

CASE OF Grade
    "A": OUTPUT "Excellent"
    "B": OUTPUT "Good"
    OTHERWISE: OUTPUT "Try again"
ENDCASE

Cambridge CASE memungkinkan nilai tunggal, daftar nilai (1, 2, 3:), dan rentang (1 TO 5:).

IF bersarang adalah IF di dalam cabang dari IF lain. Setiap IF memerlukan ENDIF-nya sendiri, dan penguji memeriksa bahwa setiap konstruksi ditutup:

IF Mark >= 50 THEN
    IF Mark >= 80 THEN
        OUTPUT "Distinction"
    ELSE
        OUTPUT "Pass"
    ENDIF
ELSE
    OUTPUT "Fail"
ENDIF

Batas adalah tempat poin hilang. "Poin 50 atau lebih lulus" adalah Mark >= 50, bukan Mark > 50; cabang terakhir CASE untuk "apa pun yang lain", ditulis OTHERWISE, bukan kondisi seperti > 200. Perbandingan yang salah di sini adalah kesalahan logika: program berjalan, tetapi memberikan output yang salah untuk beberapa input — dan tabel pelacakan dengan nilai batas seperti 50 adalah cara Anda menemukannya.

Diagram alir pernyataan CASE OF Grade: nilai diuji terhadap setiap penjaga secara bergantian (nilai tunggal, daftar nilai, kemudian rentang); cabang pertama yang cocok menjalankan pernyataannya, jika tidak maka cabang OTHERWISE dijalankan, dan semua cabang bergabung kembali pada ENDCASE
Pernyataan CASE menjalankan cabang yang sesuai dengan nilai

Contoh terpecahkan. Tulis ulang ini dengan fungsionalitas yang sama, tanpa menggunakan struktur CASE.

CASE OF MySwitch
    1: ThisChar ← 'a'
    2: ThisChar ← 'y'
    3: ThisChar ← '7'
    OTHERWISE: ThisChar ← '*'
ENDCASE

Setiap nilai menjadi cabang dari rantai IF, dan OTHERWISE menjadi ELSE terakhir:

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

Dua klausa yang menetapkan nilai yang sama digabungkan menjadi satu klausa dengan daftar nilai: 1, 2: ThisChar ← 'a'. Penjaga diuji secara berurutan: dengan rentang seperti 1 TO 50: diikuti oleh 40 TO 60:, nilai 45 akan mengambil cabang pertama yang cocok, sehingga penugasan di cabang berikutnya mungkin tidak pernah dilakukan — dan ketika cabang-cabang sebelumnya sudah mencakup setiap nilai yang mungkin, cabang OTHERWISE juga tidak akan pernah dicapai.

Kebalikannya, IF bersarang yang menguji beberapa Boolean lebih jelas sebagai satu kondisi per hasil: IF A AND B AND C THEN CALL Sub1(), lalu IF A AND B AND NOT C THEN CALL Sub2(), dan seterusnya. Menggabungkan tes dengan AND dan OR menghilangkan nesting, dan IF A THEN diterima sebagai pengganti IF A = TRUE THEN.

Jelajahi

Pemilihan (IF / ELSE)

Ubah input dan lihat cabang mana yang berjalan — inti dari pemilihan.

Kosa kata Latih
English Bahasa Indonesia
nested/ˈnestɪd/ bersarang
logic error/ˈlɒdʒɪk ˈerə/ kesalahan logika
trace table/treɪs ˈteɪbl/ tabel jejak
11.2

Iterasi

Iterasi mengulang sebuah blok. Tiga jenis perulangan berbeda dalam berapa kali tubuh perulangan tersebut berjalan.

Perulangan terkontrol penghitung (FOR)

Perulangan terkontrol penghitung — gunakan ketika Anda tahu berapa kali harus diulang:

FOR i ← 1 TO 10
    OUTPUT i
NEXT i

Starter STEP dapat mengubah penghitung (misalnya FOR i ← 10 TO 1 STEP -1). Terbaik untuk jumlah pengulangan tetap atau memproses setiap elemen array.

Pra-kondisi (WHILE) loop

Perulangan pra-kondisi menguji kondisi sebelum setiap lemparan, sehingga mungkin berjalan nol kali:

WHILE total < 100 DO
    INPUT n
    total ← total + n
ENDWHILE

Pasca-kondisi (REPEAT...UNTIL) loop

Perulangan pasca-kondisi menguji kondisi setelah setiap lemparan, sehingga selalu berjalan paling sedikit sekali:

REPEAT
    INPUT password
UNTIL password = correctPassword

Memilih perulangan yang tepat

Tiga kolom diagram alir. FOR: kotak penghitung (i = 1 to N) kemudian kotak tubuh, melingkar kembali, untuk jumlah lemparan tertentu. WHILE: berlian tes di atas kotak tubuh, sehingga kondisi dicek sebelum tubuh dan perulangan mungkin berjalan nol kali. REPEAT: kotak tubuh di atas berlian tes, sehingga kondisi dicek setelah tubuh dan perulangan berjalan paling sedikit sekali
Tiga perulangan berbeda dalam kapan kondisi diuji — sebelum tubuh (WHILE), setelahnya (REPEAT), atau sejumlah waktu tertentu (FOR)
  • penghitung diketahui di awal → FOR.
  • mungkin butuh nol lemparan → WHILE.
  • selalu minimal satu lemparan → REPEAT...UNTIL.

Justifikasikan pilihan Anda berdasarkan apakah penghitung diketahui dan apakah tubuh harus berjalan setidaknya sekali. Soal típikal memberikan skenario ("minta kata sandi hingga benar, tetapi minta setidaknya sekali") dan bertanya perulangan mana yang sesuai.

Dua poin diberikan untuk nama perulangan dan alasan, dengan 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 telah ditulis sebagai WHILE dengan counter adalah "tidak yang paling tepat": penghitung, empat, diketahui, sehingga perulangan FOR sesuai.

Contoh terpecahkan. Perulangan mana yang sesuai untuk setiap tugas? (a) cetak tabel perkalian 12; (b) terus baca angka hingga pengguna memasukkan 0; (c) minta kata sandi hingga benar. Pilih dengan bertanya berapa kali tubuh berjalan dan kapan tes terjadi. (a) Penghitung diketahui sebelumnya (12), jadi gunakan perulangan FOR. (b) Penghitung tidak diketahui, dan input pertama mungkin sudah 0 - jadi tes harus datang sebelum tubuh: perulangan WHILE, yang berjalan nol atau lebih banyak kali. (c) Penghitung tidak diketahui, tetapi Anda harus selalu meminta paling sedikit sekali sebelum ada apa pun untuk diuji - jadi tes datang setelah tubuh: REPEAT...UNTIL, yang berjalan satu atau lebih banyak kali. Pertanyaan penentu adalah apakah tubuh harus berjalan setidaknya sekali: WHILE mungkin berjalan nol kali, REPEAT selalu berjalan sekali.

Dry running dengan tabel pelacakan

Sebuah tabel pelacakan mencatat nilai setiap variabel saat Anda melakukan dry run (bekerja melalui secara manual) algoritma. Ini adalah cara Anda menguji perulangan di atas kertas, dan soal enam poin di sebagian besar Paper 2.

DECLARE Count, Total : INTEGER
Count ← 1
Total ← 0
WHILE Total < 10
    Total ← Total + Count * 2
    Count ← Count + 1
ENDWHILE
OUTPUT Count, Total
Count Total Total < 10 OUTPUT
1 0 TRUE
2 2 TRUE
3 6 TRUE
4 12 FALSE 4, 12

Aturan yang mendapatkan poin: satu kolom per variabel, sesuai urutan yang diberikan soal; tulis nilai hanya ketika itu berubah; mulai baris baru setiap kali perulangan berulang; evaluasi kondisi dengan nilai saat ini, dan hentikan segera setelah menjadi FALSE; masukkan output di kolomnya sendiri, persis seperti yang akan muncul. Telusuri algoritma sebagaimana ditulis, bukan yang Anda pikirkan dimaksudkan — jika tidak pernah berhenti, katakanlah demikian.

Contoh terpecahkan. Konstruksi mana yang digunakan setiap baris — seleksi, iterasi, atau panggilan subrutin?

Pseudocode Selection Iteration Subroutine
IF Ready = TRUE THEN
CALL Start()

ENDIF | FOR I ← 1 TO 20 ... NEXT I | | yes | | | WHILE NOT IsFull() ... ENDWHILE | | yes | yes | | CASE OF Key ... OTHERWISE ... ENDCASE | yes | | |

IF dan CASE adalah seleksi; FOR, WHILE dan REPEAT adalah iterasi; nama yang diikuti tanda kurung — Start(), IsFull() — adalah pemanggilan prosedur atau fungsi, di mana pun muncul, termasuk di dalam kondisi.

Jelajahi

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.

Jelajahi

Tracing a loop

Langkah demi langkah loop dan saksikan variabel berubah setiap kali lompatan — persis apa yang dicatat oleh tabel jejak.

Kosa kata Latih
English Bahasa Indonesia
selection/sɪˈlekʃn/ pemilihan
iteration/ˌɪtəˈreɪʃn/ iterasi
count-controlled loop/kaʊnt kənˈtrəʊld luːp/ loop terkontrol hitung
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
11.3

Prosedur dan fungsi

Silabus
Kandidat harus mampu: Catatan dan panduan
Definisikan dan gunakan prosedur
Jelaskan di mana dalam penyusunan algoritma penggunaan prosedur akan tepat
Gunakan parameter Sebuah prosedur dapat memiliki nol, satu, atau lebih parameter. Sebuah parameter dapat diteruskan oleh referensi atau oleh nilai
Definisikan dan gunakan fungsi
Jelaskan di mana dalam penyusunan algoritma penggunaan fungsi adalah tepat Sebuah fungsi digunakan dalam sebuah ekspresi, mis. nilai kembali menggantikan pemanggilan
Gunakan terminologi yang terkait dengan prosedur dan fungsi termasuk header prosedur/fungsi, antarmuka prosedur/fungsi, parameter, argumen, nilai kembali
Tulis pseudocode yang efisien

Sumber: Silabus Cambridge International

Pemrograman terstruktur membangun program dari subrutina kecil yang bernama, masing-masing dengan satu tugas.

Prosedur

Sebuah prosedur adalah blok bernama yang melakukan tindakan; dapat menerima parameter tetapi tidak mengembalikan nilai.

PROCEDURE Greet(name : STRING)
    OUTPUT "Hello, ", name
ENDPROCEDURE

CALL Greet("Ada")

Fungsi

Sebuah fungsi mirip dengan prosedur tetapi mengembalikan nilai yang menjadi bagian dari ekspresi.

FUNCTION Square(x : INTEGER) RETURNS INTEGER
    RETURN x * x
ENDFUNCTION

result ← Square(5) + 1     // result = 26

Gunakan prosedur ketika subrutina melakukan tindakan; gunakan fungsi ketika menghitung nilai untuk pemanggilnya.

Kurikulum meminta di mana dalam konstruksi algoritma masing-masing sesuai digunakan. Prosedur sesuai di mana kelompok langkah yang sama diperlukan di beberapa titik (validasi input, cetak menu, tukar dua nilai): langkah-langkah ditulis sekali dan dipanggil secara CALL oleh nama. Fungsi sesuai di mana satu nilai harus dihitung lalu digunakan dalam ekspresi — total, hasil TRUE/FALSE, bilangan lebih besar dari dua angka — karena nilai kembalian menggantikan pemanggilan: IF IsValid(Code) THEN.

Dua panel. Prosedur: panggil Greet(Ada) melakukan tindakan dan mencetak Halo, Ada, tidak mengembalikan nilai. Fungsi: set y = Square(5) menghitung 5 kali 5 = 25, mengembalikan 25, sehingga y kemudian berisi 25
Prosedur melakukan tindakan dan tidak mengembalikan apa-apa; fungsi mengembalikan nilai yang Anda gunakan dalam ekspresi

Parameter

Sebuah parameter adalah variabel yang dideklarasikan subrutina untuk menerima input; nilai yang disediakan pemanggil disebut argumen. Dua cara meneruskannya:

  • pass by value (lulus berdasarkan nilai) — rutine mendapat salinan; perubahan di dalamnya tidak mempengaruhi pemanggil. Gunakan untuk input yang hanya dibacanya.
  • pass by reference (lulus berdasarkan referensi) — rutine mendapat referensi ke variabel pemanggil; perubahan memang mempengaruhi pemanggil. Gunakan jika harus memperbarui parameter.
Dua diagram kotak memori. Pass by value: variabel x = 5 pemanggil disalin ke kotak parameter terpisah a = 5, sehingga mengubah a meninggalkan x tetap 5. Pass by reference: parameter a adalah panah yang menunjuk ke kotak x sendiri pemanggil, sehingga mengubah a juga mengubah x
Pass by value menyalin nilai ke kotak baru; pass by reference memungkinkan rutine mengubah variabel pemanggil sendiri
PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
    DECLARE temp : INTEGER
    temp ← a
    a ← b
    b ← temp
ENDPROCEDURE

Cambridge pseudocode menulis mode di header, BYVAL atau BYREF, sebelum setiap parameter. Jika keduanya tidak ditulis, BYVAL diasumsikan, jadi rutine yang harus mengubah variabel pemanggil — Swap, atau prosedur yang memperbarui total berjalan — memerlukan BYREF di header-nya.

Contoh kerja. Apa keluarannya?

PROCEDURE Adjust(BYREF X : INTEGER, BYVAL Y : INTEGER)
    X ← X + Y
    Y ← Y * 2
ENDPROCEDURE

A ← 5
B ← 3
CALL Adjust(A, B)
OUTPUT A, B

X adalah referensi ke A, jadi A menjadi 8. Y adalah salinan dari B, jadi menggandakan Y meninggalkan B pada 3. Keluaran adalah 8, 3. Jika header mengatakan BYVAL X, A akan tetap 5.

Variabel lokal vs global

Sebuah variabel lokal dideklarasikan di dalam subrutina dan hanya ada saat berjalan. Variabel global dideklarasikan di luar dan terlihat di mana saja. Preferkan variabel lokal dan parameter — penggunaan global yang berat membuat kode sulit diikuti dan diuji. (Daerah di mana nama terlihat adalah skop-nya.)

Perbedaan satu baris: variabel global dapat diakses dari mana saja dalam program, variabel lokal hanya di dalam subrutina yang mendeklarasikannya. Manfaat variabel lokal yang diterima skema: pengenal yang sama dapat digunakan dalam subrutina lain tanpa bentrok; nilainya tidak dapat diubah secara tidak sengaja oleh bagian lain program; memori dilepas saat subrutina berakhir; dan subrutina mandiri, sehingga dapat diuji sendiri dan digunakan kembali dalam program lain.

Variabel lokal dibuat setiap kali subrutina dipanggil dan dihancurkan saat kembali, jadi tidak dapat membawa nilai dari satu panggilan ke panggilan berikutnya. Prosedur yang membangun string melalui panggilan berulang maka perlu string tersebut menjadi global (atau diteruskan BYREF). Jika MyString diubah dari global menjadi lokal yang dideklarasikan di dalam MyOutput(), setiap panggilan dimulai dengan MyString baru dan kosong, teks yang ditambahkan oleh panggilan sebelumnya hilang, dan prosedur "tidak bekerja seperti yang diharapkan".

Tiga panggilan prosedur yang sama pada garis waktu; setiap panggilan membuat kotak MyString lokalnya sendiri, baru dan kosong, yang hilang saat panggilan kembali, sementara satu kotak MyString global di atasnya mempertahankan nilainya antar panggilan
Variabel lokal adalah kotak baru dan kosong pada setiap panggilan; hanya variabel global (atau parameter BYREF) yang menyimpan nilai antar panggilan
Kotak luar besar berlabel skop global memegang variabel global Total, terlihat di mana saja, dan kotak dalam kecil berlabel PROCEDURE Calc, skop lokal, memegang variabel lokal temp, yang hanya ada saat Calc berjalan
Variabel global terlihat di mana saja; variabel lokal hanya ada di dalam prosedurnya sendiri

Kapan menggunakan subrutina

Gunakan subrutina ketika:

  • logika yang sama muncul di lebih dari satu tempat — tulis sekali, panggil banyak kali.
  • blok memiliki tujuan bernama yang jelas — nama mendokumentasikan apa yang dilakukannya.
  • program kompleks — pecah menjadi bagian (dekomposisi).
  • Anda ingin menguji sebagian secara terpisah.

Jangan buat terlalu kecil sehingga biaya pemanggilan lebih tinggi daripada pekerjaan di dalamnya.

Terminologi

  • definisi — blok PROCEDURE ... ENDPROCEDURE (atau fungsi).
  • pemanggilan — di mana dipanggil. argumen — nilai yang masuk. parameter — variabel yang menerimanya.
  • nilai kembalian — apa yang dilewatkan fungsi.
  • header prosedur/fungsi — baris pertama yang memberikan nama dan parameter (PROCEDURE Name(params) atau FUNCTION Name(params) RETURNS type).
  • antarmuka/prosedur-fungsi / tanda tangan — nama + parameter + tipe kembali: apa yang harus diketahui pemanggil untuk menggunakannya.

Contoh terpecahkan. Jelaskan setiap istilah yang digunakan dalam header FUNCTION Pass2(Count : INTEGER) RETURNS BOOLEAN.

Istilah Makna
FUNCTION subrutin yang mengembalikan nilai
Pass2 pengenal yang digunakan untuk memanggilnya
Count parameter: pengenal yang menerima argumen yang dimasukkan
INTEGER tipe data dari parameter
RETURNS BOOLEAN tipe data dari nilai yang dikembalikan fungsi

Dua pengenal di PROCEDURE MyProc(Count : INTEGER, Message : STRING) adalah parameter: mereka menerima nilai yang dimasukkan ketika prosedur dipanggil, dan digunakan di dalamnya seperti variabel lokal.

Untuk mengonversi prosedur menjadi fungsi: ubah PROCEDURE ke FUNCTION dan tambahkan RETURNS <type>; ganti OUTPUT (atau parameter BYREF yang membawa hasil keluar) dengan pernyataan RETURN; dan ubah setiap pemanggilan agar nilai yang dikembalikan digunakan, Result ← Unpack(Text) bukannya CALL Unpack(Text, Result). Untuk soal "tuliskan header", tulis seluruh baris: FUNCTION Calculate(Expression : STRING) RETURNS INTEGER. Parameter array dikirim referensi, sehingga prosedur yang menulis ke dalam array mengubah array pemanggil.

Ketika program mendapatkan modul baru, antarmuka adalah hal yang disepakati pertama: nama, parameter (berapa banyak, urutan apa, tipenya apa) dan tipe kembali, serta data global apa pun yang dibaca atau ditulis modul tersebut. Modul yang mengirim pengingat sebelum tanggal jatuh tempo memerlukan rekaman (atau indeksnya) sebagai parameter dan tidak mengembalikan apa pun, jadi itu adalah prosedur; program utamanya memanggilnya sekali per rekaman.

Menulis modul untuk Kertas 2

Setengah dari Kertas 2 adalah "tulis pseudocode untuk modul X". Skema memberi poin per fitur, jadi modul yang belum selesai masih mendapat skor untuk setiap bagian yang benar. Bagian-bagian yang dilihat penguji:

Fungsi pseudocode berannotasi, CountAbove, dengan kutipan pada setiap bagian yang mendapat nilai: header dengan parameternya dan tipe kembalinya, deklarasi lokal, total yang diinisialisasi sebelum loop, loop FOR untuk setiap elemen, kondisi IF dengan batas kanan, pembaruan di dalam IF, konstruk tertutup, dan RETURN setelah loop
Setiap bagian jawaban modul memiliki poinnya sendiri, jadi tulis semuanya meskipun satu bagian diragukan
  1. Header, sebagaimana dijelaskan dalam soal: PROCEDURE Name(Param : TYPE) atau FUNCTION Name(Param : TYPE) RETURNS TYPE, dengan BYREF di mana rutin harus mengubah argumen.
  2. Deklarasi lokal: DECLARE setiap variabel lokal dengan tipenya, dan inisialisasi penghitung dan total (Count ← 0).
  3. Loop yang mengunjungi setiap elemen: FOR Index ← 1 TO 50 untuk array yang ukurannya diberikan; WHILE NOT EOF(...) untuk file.
  4. Kondisi, dengan perbandingan dan batas yang benar, pada item yang tepat: IF Score[Index] > Limit THEN.
  5. Pembaruan di dalam cabang: jumlah bertambah, nilai disimpan, atau pesan ditampilkan.
  6. Akhir: RETURN sekali, setelah loop, dalam fungsi; ENDFUNCTION atau ENDPROCEDURE; dan setiap IF, FOR dan WHILE ditutup.

Contoh terpecahkan. Array global Score : ARRAY[1:50] OF INTEGER menyimpan nilai ujian. Tulislah fungsi CountAbove(Limit : INTEGER) yang mengembalikan berapa banyak nilai yang lebih besar dari Limit.

FUNCTION CountAbove(BYVAL Limit : INTEGER) RETURNS INTEGER
    DECLARE Index, Count : INTEGER
    Count ← 0
    FOR Index ← 1 TO 50
        IF Score[Index] > Limit THEN
            Count ← Count + 1
        ENDIF
    NEXT Index
    RETURN Count
ENDFUNCTION

Nilai: header dengan parameternya dan RETURNS INTEGER; Count dideklarasikan dan diatur ke 0; loop untuk semua 50 elemen; perbandingan > Limit (bukan >=); count diperbarui di dalam IF; RETURN Count setelah loop. Program utama menggunakan nilai kembali dalam ekspresi atau output: OUTPUT "Above 70: ", CountAbove(70).

Contoh terpecahkan. Tulislah fungsi IsValid(Code : STRING) yang mengembalikan TRUE ketika Code membaca dua huruf kapital diikuti empat digit — format AB1234 — dan FALSE sebaliknya.

FUNCTION IsValid(BYVAL Code : STRING) RETURNS BOOLEAN
    DECLARE Index : INTEGER
    DECLARE Ch : STRING
    IF LENGTH(Code) <> 6 THEN
        RETURN FALSE
    ENDIF
    FOR Index ← 1 TO 6
        Ch ← MID(Code, Index, 1)
        IF Index <= 2 THEN
            IF Ch < "A" OR Ch > "Z" THEN
                RETURN FALSE
            ENDIF
        ELSE
            IF Ch < "0" OR Ch > "9" THEN
                RETURN FALSE
            ENDIF
        ENDIF
    NEXT Index
    RETURN TRUE
ENDFUNCTION

Pengecekan panjang dilakukan terlebih dahulu, sehingga MID tidak pernah diminta untuk posisi yang tidak ada. Validasi seperti ini mengembalikan BOOLEAN agar pemanggil dapat menulis IF IsValid(Entry) THEN ... ELSE OUTPUT "Invalid code" ENDIF: pesan kepada pengguna ditampilkan oleh pemanggil, bukan oleh fungsi — fungsi menghitung, prosedur bertindak.

Contoh terpecahkan. Tulislah fungsi IsPalindrome(Word : STRING) yang mengembalikan TRUE ketika Word dibaca sama dari belakang, seperti "RACECAR".

Bandingkan karakter dari kedua ujung, bergerak ke dalam: posisi Index berpasangan dengan posisi Len - Index + 1, dan hanya setengah pertama yang perlu diuji.

Kata RACECAR dalam tujuh kotak bernomor; busur berpasangan posisi 1 dengan 7, 2 dengan 6 dan 3 dengan 5, berlabel posisi i dan posisi Len kurang i plus 1; karakter tengah tidak memiliki pasangan
Pengecekan palindrom berpasangan posisi i dengan posisi Len - i + 1 dan berhenti di tengah
FUNCTION IsPalindrome(BYVAL Word : STRING) RETURNS BOOLEAN
    DECLARE Len, Index : INTEGER
    Len ← LENGTH(Word)
    FOR Index ← 1 TO Len DIV 2
        IF MID(Word, Index, 1) <> MID(Word, Len - Index + 1, 1) THEN
            RETURN FALSE
        ENDIF
    NEXT Index
    RETURN TRUE
ENDFUNCTION

Tiga alat yang sama — iterasi FOR atas posisi, membaca satu karakter dengan MID(s, i, 1), dan membangun string baru dengan & — menjawab sebagian besar modul string pada Kertas 2: menghitung seberapa sering sebuah karakter muncul (IF MID(s, i, 1) = Ch THEN Count ← Count + 1), mengganti setiap kemunculan karakter (tambahkanevent NewChar atau karakter asli ke NewString di setiap posisi), menyembunyikan semua kecuali empat digit terakhir nomor kartu (tambahkan '*' untuk setiap posisi hingga Len - 4), atau menulis fungsi MID() Anda sendiri dengan menggabungkan karakter dari Start hingga Start + Length - 1. Meminta MID untuk posisi melewati akhir string adalah kesalahan waktu berjalan, jadi periksa LENGTH terlebih dahulu.

File. Nilai dalam variabel hilang ketika program berakhir, sehingga modul yang harus menyimpan data untuk menjalankan berikutnya menuliskannya ke file: OPENFILE "scores.txt" FOR WRITE, satu WRITEFILE "scores.txt", NUM_TO_STR(Score[Index]) per baris di dalam loop, dan CLOSEFILE "scores.txt" sekali, setelah loop; membaca kembali menggunakan FOR READ, READFILE, dan WHILE NOT EOF("scores.txt"). Topik 10 memiliki bagian lengkap tentang file; di sini nilainya untuk membuka dalam mode yang benar, baca atau tulis di dalam loop, dan menutup sekali setelahnya.

Jelajahi

Tumpukan panggilan: push saat dipanggil, pop saat dikembalikan

Memanggil subrutina mendorong bingkai baru ke atas; mengembalikan memunculkan bingkai tersebut dan memberikan nilai kembali kepada pemanggil. Panggilan yang sedang berjalan selalu merupakan bingkai di posisi teratas.

Kosa kata Latih
English Bahasa Indonesia
procedure/prəˈsiːdʒə/ prosedur
structured programming/ˈstrʌktʃəd ˈprəʊɡræmɪŋ/ pemrograman terstruktur
subroutines/ˈsʌbruːtiːnz/ subrutin
return value/rɪˈtɜːn ˈvæljuː/ nilai kembalian
arguments/ˈɑːɡjuːmənts/ argumen
pass by value/pæs baɪ ˈvæljuː/ lulus dengan nilai
pass by reference/pæs baɪ ˈrefrəns/ lulus dengan referensi
global variable/ˈɡləʊbl ˈveərɪəbl/ variabel global
local variable/ˈləʊkl ˈveərɪəbl/ variabel lokal
scope/skəʊp/ scope
decomposition/ˌdiːkɒmpəˈzɪʃn/ dekomposisi
signature/ˈsɪɡnɪtʃə/ tanda tangan
format/ˈfɔːmæt/ format
Validation/ˌvælɪˈdeɪʃn/ Validasi
run-time error/rʌn taɪm ˈerə/ kesalahan masa jalan
invariant/ɪnˈveərɪənt/ invarian
linear search/ˈlɪnɪə sɜːtʃ/ pencarian linear
syntax error/ˈsɪntæks ˈerə/ kesalahan sintaksis
11.3

Menulis pseudocode yang efisien

Tiga ciri yang membuat pseudokode lebih mudah dipahami — jawaban untuk pertanyaan "sebutkan tiga ciri" — adalah pengenal bermakna (Total, bukan t), indentasi pada pernyataan di dalam setiap struktur, dan komentar (// ...) yang menjelaskan tujuan; kata kunci dalam huruf kapital, satu pernyataan per baris, dan baris kosong antar bagian juga diterima. Pseudokode yang efisien melangkah lebih jauh:

  • pindahkan invarian keluar dari loop — jika sebuah nilai (invarian) tidak berubah seiring penghitung loop, hitung sekali sebelum loop.
  • keluar dari loop lebih awal ketika jawaban ditemukan (hentikan pencarian linear segera setelah target muncul).
  • hindari pekerjaan redundan — simpan hasil dan gunakan kembali alih-alih menghitung ulang.
  • pilih struktur data yang tepat — array mengalahkan banyak variabel terpisah ketika item-item tersebut saling terkait.
  • ganti IF bertingkat dalam dengan CASE saat menguji satu nilai terhadap banyak kemungkinan.
  • beri komentar tentang niat, bukan mekanisme (// validate the postcode, bukan // loop 6 times).
  • gunakan nama yang bermakna (numberOfPupils, bukan n) dan inisialisasi variabel sebelum digunakan.
Pindahkan pekerjaan yang tidak pernah berubah keluar dari loop, agar berjalan sekali alih-alih setiap kali iterasi
Pindahkan pekerjaan yang tidak berubah keluar dari loop agar berjalan sekali
11.3

Pengujian dan kesalahan

Tiga jenis kesalahan, masing-masing ditemukan dengan cara berbeda:

Kesalahan Apa itu Contoh Ditemukan oleh
kesalahan sintaks pernyataan yang melanggar aturan bahasa semicolon yang hilang ENDIF; OUTPT "Hi" penerjemah, sebelum program dijalankan
kesalahan waktu menjalankan program berjalan, tetapi pernyataan tidak dapat dieksekusi pembagian dengan nol; indeks array 0 atau 51; fungsi dipanggil dengan parameter tidak valid; loop yang tidak pernah berakhir, sehingga program "terkunci" saat berjalan: program berhenti atau macet
kesalahan logika program berjalan hingga selesai, tetapi outputnya salah > di mana seharusnya >=; total tidak pernah diset ke 0 pengujian dengan tabel pelacakan dan data uji yang dipilih

Sebuah IDE membantu menemukan dua kesalahan terakhir: titik henti menghentikan program pada baris yang dipilih; langkah tunggal kemudian menjalankan satu pernyataan sekaligus; dan jendela laporan (atau pemantauan) menunjukkan nilai setiap variabel pada saat itu, sehingga baris di mana nilai menjadi salah terlihat langsung. Metode pengujian dan data uji ada di topik 12.

11.3

Definisi yang diterima oleh penguji

Pertanyaan definisi dinilai berdasarkan kata-kata tetap. Hafalkan ini persis.

Istilah Definisi
prosedur subrutin yang melakukan tugas (urutan langkah) dan tidak mengembalikan nilai; dipanggil dengan CALL
fungsi subrutin yang mengembalikan satu nilai ke titik pemanggilannya, sehingga dapat digunakan dalam ekspresi
parameter pengenal dalam header subrutin yang menerima nilai atau referensi saat subrutin dipanggil
argumen nilai (atau variabel) yang diberikan dalam pemanggilan, cocok dengan parameter
pengiriman berdasarkan nilai salinan nilai argumen diberikan kepada subrutin, sehingga perubahan di dalamnya tidak memengaruhi variabel asli
pengiriman berdasarkan referensi alamat variabel diberikan kepada subrutin, sehingga perubahan di dalamnya mengubah variabel asli
header baris pertama definisi subrutin: namanya, parameternya, dan, untuk fungsi, tipe kembalinya
antarmuka apa yang harus diketahui program Caller untuk menggunakan subrutin: namanya, parameternya (jumlah, urutan, tipe), dan tipe kembalinya
nilai kembalian nilai yang dilemparkan fungsi kembali ke ekspresi yang memanggilnya
variabel lokal dideklarasikan di dalam subrutin; hanya ada selama subrutin berjalan dan hanya dapat digunakan di dalamnya
variabel global dideklarasikan di luar semua subrutin; dapat digunakan di mana saja dalam program
loop terkontrol jumlah mengulang sejumlah kali tetap, dikendalikan oleh penghitung (FOR ... NEXT)
loop pra-kondisi menguji kondisinya sebelum setiap iterasi, sehingga tubuh mungkin tidak pernah berjalan (WHILE ... ENDWHILE)
loop pasca-kondisi menguji kondisinya setelah setiap iterasi, sehingga tubuh berjalan setidaknya sekali (REPEAT ... UNTIL)
konstanta nilai bernama yang tidak dapat berubah selama program berjalan
subrutin blok kode mandiri yang melakukan tugas dan dipanggil dengan nama: prosedur atau fungsi
rutinitas perpustakaan subrutin yang sudah ditulis dan diuji, serta tersedia untuk dipanggil dari program
11.3

Tips ujian

  • Bedakan prosedur (tidak ada nilai kembalian) dari fungsi (mengembalikan nilai); pahami pengiriman berdasarkan nilai vs berdasarkan referensi.
  • Pilih loop yang tepat: terkontrol jumlah (FOR) ketika jumlah pengulangan diketahui, terkontrol kondisi (WHILE/REPEAT)page.
  • Bedakan variabel lokal vs global dan jangkauan; preferensikan variabel lokal dalam modul yang dapat digunakan kembali.
  • Gunakan nama rutin dan urutan parameter persis sesuai instruksi. VAL dan STR adalah nama IGCSE dan tidak memberikan skor; UCASE dan LCASE adalah rutin nyata 9618 dari Panduan Pseudokode tetapi bekerja pada satu karakter, jadi pada Kertas 2 seluruh string memerlukan TO_UPPER atau TO_LOWER.
  • Dalam jawaban "tulis pseudokode", header, deklarasi, loop, kondisi, pembaruan, dan RETURN masing-masing mendapatkan satu poin: tulis keenam bagian, bahkan jika salah satu belum pasti.

Kesalahan umum

  • Memanggil fungsi dan tidak menggunakan nilai kembaliannya. Tetapkan hasilnya, atau gunakan dalam ekspresi atau output: Sorted ← BubbleSort(MyArray, 7).
  • Mengirim panjang satu terlalu banyak: 6 untuk array tujuh elemen, atau indeks terakhir di mana panjang diminta. Tentukan apakah parameternya adalah panjang atau indeks, dan pastikan elemen terakhir dikunjungi.
  • Menutup file di dalam loop yang membacanya. Buka sekali, tutup sekali, setelah loop.
  • Menggunakan input sebagai nama file secara langsung. Tambahkan ekstensi yang diberikan soal: FileName ← Choice & ".txt".
  • Meninggalkan konstruk terbuka. Setiap IF membutuhkan ENDIF, setiap FOR membutuhkan NEXT, setiap WHILE membutuhkan ENDWHILE, dan setiap fungsi membutuhkan RETURN; skema ini memberikan nilai poin untuk hal tersebut.
  • Batas yang salah: menggunakan > untuk "paling sedikit" (yang seharusnya >=), atau menggunakan FOR yang dimulai dari 0 untuk array yang dideklarasikan [1:50].
  • Counter atau total yang tidak pernah diatur ke 0 sebelum perulangan.
  • Dalam tabel jejak, menulis ulang setiap variabel di setiap baris, atau mengubah nilai sebelum pernyataan yang mengubah nilainya berjalan.
  • Separuh kondisi: IF x = 3 OR 4 — setiap sisi OR dan AND harus merupakan perbandingan lengkap. Dan + tidak menggabungkan string; & yang melakukannya.
  • Mendeklarasikan sebagai lokal nilai yang harus bertahan antar panggilan. Total berjalan atau string yang dibangun selama beberapa panggilan bersifat global atau BYREF.

Pelajaran interaktif untuk topik ini

Kerjakan langkah demi langkah, dengan latihan pengecekan instan.

Soal-Soil Masa Lalu

Topik lain dalam Ilmu Komputer A-Level

Masuk atau buat akun

IGCSE, A-Level & AP