| 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 |
Pemrograman
Ilmu Komputer A-Level · Topik 11
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
Sumber: Silabus Cambridge International

*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:
- temukan variabel dan tipe data-nya.
- ubah kotak input/output menjadi
INPUT/OUTPUT. - ubah belah ketupat keputusan menjadi
IF...ELSE...ENDIF(atauCASE). - ubah panah loop menjadi
WHILE,REPEAT...UNTIL, atauFOR. - ubah kotak proses menjadi penugasan atau perhitungan.
- periksa dengan melacak input kecil.
*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
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
+ - * /, tambahDIV(pembagian bilangan bulat) danMOD(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.

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.
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.
| 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

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.

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.
Pemilihan (IF / ELSE)
Ubah input dan lihat cabang mana yang berjalan — inti dari pemilihan.
| 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

- 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.
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.
Tracing a loop
Langkah demi langkah loop dan saksikan variabel berubah setiap kali lompatan — persis apa yang dicatat oleh tabel jejak.
| 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.

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.

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".


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)atauFUNCTION 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:

- Header, sebagaimana dijelaskan dalam soal:
PROCEDURE Name(Param : TYPE)atauFUNCTION Name(Param : TYPE) RETURNS TYPE, denganBYREFdi mana rutin harus mengubah argumen. - Deklarasi lokal:
DECLAREsetiap variabel lokal dengan tipenya, dan inisialisasi penghitung dan total (Count ← 0). - Loop yang mengunjungi setiap elemen:
FOR Index ← 1 TO 50untuk array yang ukurannya diberikan;WHILE NOT EOF(...)untuk file. - Kondisi, dengan perbandingan dan batas yang benar, pada item yang tepat:
IF Score[Index] > Limit THEN. - Pembaruan di dalam cabang: jumlah bertambah, nilai disimpan, atau pesan ditampilkan.
- Akhir:
RETURNsekali, setelah loop, dalam fungsi;ENDFUNCTIONatauENDPROCEDURE; dan setiapIF,FORdanWHILEditutup.
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.

i dengan posisi Len - i + 1 dan berhenti di tengahFUNCTION 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.
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.
| 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, bukann) dan inisialisasi variabel sebelum digunakan.

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.
VALdanSTRadalah nama IGCSE dan tidak memberikan skor;UCASEdanLCASEadalah rutin nyata 9618 dari Panduan Pseudokode tetapi bekerja pada satu karakter, jadi pada Kertas 2 seluruh string memerlukanTO_UPPERatauTO_LOWER. - Dalam jawaban "tulis pseudokode", header, deklarasi, loop, kondisi, pembaruan, dan
RETURNmasing-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:
6untuk 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
IFmembutuhkanENDIF, setiapFORmembutuhkanNEXT, setiapWHILEmembutuhkanENDWHILE, dan setiap fungsi membutuhkanRETURN; skema ini memberikan nilai poin untuk hal tersebut. - Batas yang salah: menggunakan
>untuk "paling sedikit" (yang seharusnya>=), atau menggunakanFORyang dimulai dari0untuk array yang dideklarasikan[1:50]. - Counter atau total yang tidak pernah diatur ke
0sebelum 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 sisiORdanANDharus 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.