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…
English narration · English + 中文 subtitles burned in · Narasi bahasa Inggris · Subtitle bahasa Inggris + 中文 disematkan langsung
11.1
Programming basics · Dasar pemrograman
Syllabus · Silabus
English
Candidates should be able to:
Notes and guidance
Implement and write pseudocode from a given design presented as either a program flowchart or structured English
Write pseudocode statements for: • the declaration and initialisation of constants • the declaration of variables • the assignment of values to variables • expressions involving any of the arithmetic or logical operators input from the keyboard and output to the console
Use built-in functions and library routines
Any functions not given in the pseudocode guide will be provided String manipulation functions will always be given
Bahasa Indonesia
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
Source: Cambridge International syllabus · Sumber: Silabus Cambridge International
English
From design to code
You should be able to turn a design — a flowchart 流程图 (program flowchart) or structured English 结构化英语 — into pseudocode 伪代码, and then into a real language:
find the variables 变量 and their data types 数据类型.
turn input/output boxes into INPUT / OUTPUT.
turn decision diamonds into IF...ELSE...ENDIF (or CASE).
turn loop arrows into WHILE, REPEAT...UNTIL, or FOR.
turn process boxes into assignments or calculations.
check by tracing a small input.
Constants and variables
A constant 常量 holds a value that never changes; a variable holds one that may change. Declare them with a type:
Use constants for fixed values that recur (Pi, MaxScore); they make code clearer and easy to change in one place.
In the exam, a constant is the answer to "identify a more appropriate way of representing" a fixed value, such as a tax rate or a maximum score, that appears at several places in the pseudocode. The benefits the scheme lists: the value is set once and cannot be changed accidentally by the program; a change is made in one place and reaches every statement that uses it; the identifier gives the value a meaning (MaxScore rather than 100), so the code is easier to read and to check; and there is less risk of a typing error in a long value such as 3.14159. A "state a value that could be replaced by a constant" question wants the literal from the pseudocode (0.2, 40), not a new name.
Every variable is declared once, with an identifier 标识符 (its name) and a data type, before it is used. The six types in the 9618 pseudocode guide:
Type
Holds
Written in the code as
Typical use
INTEGER
whole numbers
42, -3
a count, an array index, a loop counter
REAL
numbers with a fractional part
3.75
a price, an average
CHAR
one character
'A' (single quotes)
a grade letter, a menu key
STRING
a sequence of characters
"Hello" (double quotes)
a name, a postcode
BOOLEAN
TRUE or FALSE
TRUE
a flag such as Found
DATE
a calendar date
12/05/2026
a date of birth
A "give the appropriate data type" question is answered from how the variable is used in the pseudocode: a value with a decimal point is REAL; something set to TRUE or FALSE is BOOLEAN; a value in single quotes is CHAR; a value used as an array index, or with DIV and MOD, is INTEGER. Write the type in capitals, spelled as the guide spells it.
Worked example. State the appropriate data type for each variable.
Found is BOOLEAN (it holds FALSE); Initial is CHAR (one character in single quotes); Price is REAL (a decimal value); Count is INTEGER (a counter that goes up by one); Name is STRING (text in double quotes).
Assignment and expressions
Use ← for assignment 赋值:
Expressions use operators 运算符:
arithmetic + - * /, plus DIV (integer division) and MOD (remainder): 7 DIV 2 = 3; 7 MOD 2 = 1.
comparisons =, <>, <, >, <=, >=.
logic AND, OR, NOT.
Precedence 优先级 (highest to lowest): NOT → * / DIV MOD → + - → comparisons → AND → OR. Use brackets when unsure.
Input and output
Built-in functions and library routines
Many tasks have ready-made library routines 库例程, so you need not write them. The Paper 2 insert 附页 lists the ones you may use, with their exact names, parameters and return types; any other function a question needs is given in the question. The names below are the insert's names. VAL and STR are IGCSE names and appear in neither 9618 document, so they earn nothing. UCASE and LCASE are a different case: they are 9618, defined in the Pseudocode Guide, but they take a single CHAR, and the insert does not list them at all — for a whole string on Paper 2 the routine is TO_UPPER.
A program library 程序库 holds routines that have already been written, compiled and tested; a program calls them instead of writing its own. The benefits the scheme accepts, for a "state three benefits" question: the routines are already tested, so they are less likely to contain errors; they save development time; they may do things the programmer could not write (complex statistics, graphics); they are written by experts and reused across many programs; and a routine with a fixed interface can be called from anywhere in the program.
Routine
Returns
Example
LENGTH(s)
the number of characters in s
LENGTH("Hello") = 5
LEFT(s, n) / RIGHT(s, n)
the first / last n characters
RIGHT("Hello", 2) = "lo"
MID(s, start, n)
n characters from position start (positions count from 1)
MID("Hello", 2, 3) = "ell"
TO_UPPER(s) / TO_LOWER(s)
s in capitals / in small letters
TO_UPPER("ab1") = "AB1"
NUM_TO_STR(x) / STR_TO_NUM(s)
a number as a string / a string as a number
STR_TO_NUM("3.5") = 3.5
IS_NUM(s)
TRUE if s is a valid number
IS_NUM("12a") = FALSE
ASC(c) / CHR(n)
the character code of c / the character with code n
ASC('A') = 65, CHR(66) = 'B'
INT(x)
the whole-number part of x
INT(7.9) = 7
RAND(n)
a random real number from 0 up to, but not including, n
INT(RAND(6)) + 1 is a dice roll
DAY(d), MONTH(d), YEAR(d)
the parts of a DATE
YEAR(TODAY())
DAYINDEX(d), SETDATE(d, m, y), TODAY()
the day of the week (1 = Sunday); a date built from three integers; today's date
EOF(f)
TRUE when the file f has no more lines to read
WHILE NOT EOF("data.txt")
Strings are joined with & (concatenation 连接): "A" & "BC" is "ABC". Use the exact names from the insert, with the parameters in its order.
Dates and random numbers come up as one-line statements. SETDATE(17, 11, 2007) builds 17 November 2007; 12 - MONTH(MyDOB) is the number of months from the month of birth to the end of the year; IF DAYINDEX(MyDOB) = 5 THEN tests for a Thursday, because Sunday is day 1. RAND(n) returns a real number from 0 up to, but not including, n, so a random integer from Low to High inclusive is INT(RAND(High - Low + 1)) + Low: INT(RAND(21)) - 10 gives a value from -10 to 10.
Worked example. Evaluate each expression, given Word ← "Program", Code ← 'Q' and N ← 7.
Expression
Value
Why
LENGTH(Word)
7
seven characters
MID(Word, 4, 2)
"gr"
two characters, starting at position 4
LEFT(Word, 3) & "!"
"Pro!"
joined with &
TO_UPPER(RIGHT(Word, 2))
"AM"
the inner function runs first
ASC(Code) - ASC('A')
16
'Q' is 81 and 'A' is 65
N DIV 2 + N MOD 2
4
3 + 1
NUM_TO_STR(N) & "th"
"7th"
the number becomes a string first
INT(N / 2)
3
3.5 cut to its whole part
Work from the inside out, and keep the quotes: "7" is a string and 7 is a number.
Worked example. Each statement may contain an error in its use of a function or operator. Describe the error, or write NO ERROR. (Assume every variable has the correct type.)
Statement
Error
Result ← 2 & 4
& joins strings; 2 and 4 are integers, so + is needed
SubString ← MID("pseudocode", 4, 1)
NO ERROR: one character from position 4, "u"
IF x = 3 OR 4 THEN
OR needs a Boolean on each side: IF x = 3 OR x = 4 THEN
Result ← Status AND INT(x / 2)
AND needs two Booleans; INT(x / 2) is an integer
Message ← "Done" + LENGTH(MyString)
+ cannot add a string to an integer: "Done" & NUM_TO_STR(LENGTH(MyString))
Every operator works on particular types: & on strings, + - * / DIV MOD on numbers, AND OR NOT on Booleans, and = <> on two values of the same type. An "evaluate each expression, or write ERROR" table is marked the same way: LENGTH(42) and "A" + 1 are ERROR, because the type does not match the function or the operator.
Worked example. With Points ← 100, Active ← TRUE and Exempt ← FALSE, evaluate each expression.
Expression
Value
Why
(Points > 99) OR Active
TRUE
both sides are true; one would do
(Points MOD 2 = 0) OR Exempt
TRUE
100 MOD 2 is 0
(Points <= 75) AND (Active OR Exempt)
FALSE
the first side is false, and AND needs both
(Active OR NOT Active) AND NOT Exempt
TRUE
Active OR NOT Active is always true
The last expression simplifies: X OR NOT X is TRUE whatever X is, so the whole expression is just NOT Exempt. Evaluate the brackets first, then NOT, then AND, then OR.
Bahasa Indonesia
Pemrograman mengubah desain menjadi instruksi yang ditulis sebagai kode
*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 (atau CASE).
ubah panah loop menjadi WHILE, REPEAT...UNTIL, atau FOR.
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 + - * /, 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.
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.
Explore · Jelajahi
A variable is a labelled box · Variabel adalah kotak berlabel
Each assignment stores one value in a named box; reassigning the same name overwrites it. Step through the program and watch each box take its current value. · 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.
Use pseudocode to write: • an ‘IF’ statement including the ‘ELSE’ clause and nested IF statements • a ‘CASE’ structure • a ‘count-controlled’ loop: • a ‘post-condition’ loop • a ‘pre-condition’ loop
Justify why one loop structure may be better suited to solve a problem than the others
Bahasa Indonesia
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
Source: Cambridge International syllabus · Sumber: Silabus Cambridge International
English
Selection 选择 chooses which steps run.
For more than two cases you can use a nested 嵌套 IF, but deep nesting is hard to read — a CASE is cleaner when testing one value against several options:
Cambridge CASE allows single values, value lists (1, 2, 3:), and ranges (1 TO 5:).
A nested IF is an IF inside a branch of another IF. Each IF needs its own ENDIF, and the examiner checks that every construct is closed:
Boundaries are where marks are lost. "A mark of 50 or more passes" is Mark >= 50, not Mark > 50; the last CASE branch, for "anything else", is written OTHERWISE, not a condition such as > 200. A wrong comparison here is a logic error 逻辑错误: the program runs, but gives the wrong output for some inputs — and a trace table with a boundary value such as 50 is how you find it.
Worked example. Rewrite this with the same functionality, without using a CASE structure.
Each value becomes a branch of a chain of IFs, and OTHERWISE becomes the last ELSE:
Two clauses that assign the same value are merged into one clause with a value list: 1, 2: ThisChar ← 'a'. The guards are tested in order: with ranges such as 1 TO 50: followed by 40 TO 60:, a value of 45 takes the first branch that matches, so an assignment in a later branch may never be performed — and when the earlier branches already cover every possible value, the OTHERWISE branch is never reached either.
Going the other way, nested IFs that test several Booleans are clearer as one condition per outcome: IF A AND B AND C THEN CALL Sub1(), then IF A AND B AND NOT C THEN CALL Sub2(), and so on. Joining tests with AND and OR removes the nesting, and IF A THEN is accepted in place of IF A = TRUE THEN.
Bahasa Indonesia
Pemilihan memilih langkah mana yang akan dijalankan.
IF age >= 18 THEN
OUTPUT "Adult"
ELSE
OUTPUT "Minor"
ENDIF
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.
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.
Explore · Jelajahi
Selection (IF / ELSE) · Pemilihan (IF / ELSE)
Change the input and see which branch runs — the essence of selection. · Ubah input dan lihat cabang mana yang berjalan — inti dari pemilihan.
Iteration 迭代 repeats a block. Three loops differ in how many times the body runs.
Count-controlled (FOR) loop
A count-controlled loop 计数循环 — use it when you know how many times to repeat:
A STEP can change the count (e.g. FOR i ← 10 TO 1 STEP -1). Best for a fixed number of repeats or processing each element of an array 数组.
Pre-condition (WHILE) loop
A pre-condition loop 前测循环 tests the condition before each pass, so it may run zero times:
Post-condition (REPEAT...UNTIL) loop
A post-condition loop 后测循环 tests the condition after each pass, so it always runs at least once:
Choosing the right loop
count known up front → FOR.
may need zero passes → WHILE.
always at least one pass → REPEAT...UNTIL.
Justify your choice by whether the count is known and whether the body must run at least once. A typical question gives a scenario ("ask for a password until correct, but always ask at least once") and asks which loop fits.
The two marks are for the name of the loop and the reason, in the scheme's words: count-controlled, because the number of iterations is known before the loop starts; post-condition, because the loop body must be executed at least once; pre-condition, because the loop may not need to execute at all. A loop over the four elements of an array that has been written as a WHILE with a counter is "not the most appropriate": the count, four, is known, so a FOR loop fits.
Worked example. Which loop suits each task? (a) print the 12 times table; (b) keep reading numbers until the user enters 0; (c) ask for a password until it is correct. Choose by asking how many times the body runs and when the test happens. (a) The count is known in advance (12), so use a FOR loop. (b) The count is unknown, and the very first input might already be 0 - so the test must come before the body: a WHILE loop, which runs zero or more times. (c) The count is unknown, but you must always ask at least once before there is anything to test - so the test comes after the body: a REPEAT...UNTIL, which runs one or more times. The deciding question is whether the body must run at least once: WHILE may run zero times, REPEAT always runs once.
Dry running with a trace table
A trace table 跟踪表 records the value of each variable as you dry run 手工跟踪 (work through by hand) an algorithm. It is how you test a loop on paper, and a six-mark question on most Paper 2s.
Count
Total
Total < 10
OUTPUT
1
0
TRUE
2
2
TRUE
3
6
TRUE
4
12
FALSE
4, 12
Rules that earn the marks: one column per variable, in the order the question gives; write a value only when it changes; start a new row each time the loop repeats; evaluate the condition with the current values, and stop the moment it is FALSE; put the output in its own column, exactly as it would appear. Trace the algorithm as written, not the one you think was intended — if it never stops, say so.
Worked example. Which constructs does each line use — selection, iteration or a subroutine call?
Pseudocode
Selection
Iteration
Subroutine
IF Ready = TRUE THEN
ENDIF
| FOR I ← 1 TO 20 ... NEXT I | | yes | |
| WHILE NOT IsFull() ... ENDWHILE | | yes | yes |
| CASE OF Key ... OTHERWISE ... ENDCASE | yes | | |
IF and CASE are selection; FOR, WHILE and REPEAT are iteration; a name followed by brackets — Start(), IsFull() — is a call to a procedure or a function, wherever it appears, including inside a condition.
Bahasa Indonesia
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 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.
Explore · Jelajahi
Trace a loop, pass by pass · Jejakkan loop, langkah demi langkah
A trace table records each variable after every pass of the loop. Watch the counter i climb while the running total builds up — exactly what an exam trace question asks you to fill in. · 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.
Explore · Jelajahi
Tracing a loop
Step through the loop and watch the variables change each pass — exactly what a trace table records. · Langkah demi langkah loop dan saksikan variabel berubah setiap kali lompatan — persis apa yang dicatat oleh tabel jejak.
Explain where in the construction of an algorithm it would be appropriate to use a procedure
Use parameters
A procedure may have none, one or more parameters A parameter can be passed by reference or by value
Define and use a function
Explain where in the construction of an algorithm it is appropriate to use a function
A function is used in an expression, e.g. the return value replaces the call
Use the terminology associated with procedures and functions
including procedure/function header, procedure/function interface, parameter, argument, return value
Write efficient pseudocode
Bahasa Indonesia
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
Source: Cambridge International syllabus · Sumber: Silabus Cambridge International
English
Structured programming 结构化编程 builds a program from small named subroutines 子程序, each with one job.
Procedure
A procedure 过程 is a named block that does an action; it may take parameters 参数 but does not return a value.
Function
A function 函数 is like a procedure but it returns a value that becomes part of an expression.
Use a procedure when the subroutine performs an action; use a function when it computes a value for the caller.
The syllabus asks where in the construction of an algorithm each is appropriate. A procedure is appropriate where the same group of steps is needed at several points (validate an input, print a menu, swap two values): the steps are written once and CALLed by name. A function is appropriate where a single value must be calculated and then used in an expression — a total, a TRUE/FALSE result, the larger of two numbers — because the return value 返回值 replaces the call: IF IsValid(Code) THEN.
Parameters
A parameter is a variable a subroutine declares to receive input; the values the caller supplies are arguments 实参. Two ways to pass them:
pass by value 传值 — the routine gets a copy; changes inside it do not affect the caller. Use for inputs it only reads.
pass by reference 传引用 — the routine gets a reference to the caller's variable; changes do affect the caller. Use when it must update a parameter.
Cambridge pseudocode writes the mode in the header, BYVAL or BYREF, before each parameter. If neither is written, BYVAL is assumed, so a routine that must change the caller's variable — Swap, or a procedure that updates a running total — needs BYREF in its header.
Worked example. What is output?
X is a reference to A, so A becomes 8. Y is a copy of B, so doubling Y leaves B at 3. The output is 8, 3. Had the header said BYVAL X, A would still be 5.
Local vs global variables
A local variable 局部变量 is declared inside a subroutine and exists only while it runs. A global variable 全局变量 is declared outside and is visible everywhere. Prefer locals and parameters — heavy use of globals makes code hard to follow and test. (The region where a name is visible is its scope 作用域.)
The one-line difference: a global variable can be accessed from anywhere in the program, a local variable only inside the subroutine that declares it. Benefits of local variables the scheme accepts: the same identifier can be used in another subroutine without a clash; the value cannot be changed accidentally by other parts of the program; the memory is released when the subroutine ends; and the subroutine is self-contained, so it can be tested on its own and reused in another program.
A local variable is created each time the subroutine is called and destroyed when it returns, so it cannot carry a value from one call to the next. A procedure that builds up a string over repeated calls therefore needs that string to be global (or passed BYREF). If MyString is changed from a global to a local declared inside MyOutput(), every call starts with a new, empty MyString, the text added by earlier calls is lost, and the procedure "does not work as expected".
When to use a subroutine
Use a subroutine when:
the same logic appears in more than one place — write it once, call it many times.
a block has a clear named purpose — the name documents what it does.
the program is complex — break it into parts (decomposition 分解).
you want to test a piece in isolation.
Don't make them so tiny that the call costs more than the work inside.
Terminology
definition — the PROCEDURE ... ENDPROCEDURE (or function) block.
call — where it is invoked. argument — a value passed in. parameter — the variable that receives it.
return value — what a function passes back.
procedure/function header — the first line giving the name and parameters (PROCEDURE Name(params) or FUNCTION Name(params) RETURNS type).
procedure/function interface / signature 签名 — name + parameters + return type: what a caller must know to use it.
Worked example. Describe each term used in the header FUNCTION Pass2(Count : INTEGER) RETURNS BOOLEAN.
Term
Meaning
FUNCTION
a subroutine that returns a value
Pass2
the identifier used to call it
Count
the parameter: the identifier that receives the argument passed in
INTEGER
the data type of the parameter
RETURNS BOOLEAN
the data type of the value the function returns
The two identifiers in PROCEDURE MyProc(Count : INTEGER, Message : STRING) are parameters: they receive the values passed in when the procedure is called, and are used inside it like local variables.
To convert a procedure into a function: change PROCEDURE to FUNCTION and add RETURNS <type>; replace the OUTPUT (or the BYREF parameter that carried the result out) with a RETURN statement; and change every call so that the returned value is used, Result ← Unpack(Text) instead of CALL Unpack(Text, Result). For a "write the header" question, write the whole line: FUNCTION Calculate(Expression : STRING) RETURNS INTEGER. An array parameter is passed by reference, so a procedure that writes into an array changes the caller's array.
When a program gains a new module, the interface is what is agreed first: the name, the parameters (how many, in what order, of what type) and the return type, plus any global data the module reads or writes. A module that sends a reminder before a due date needs the record (or its index) as a parameter and returns nothing, so it is a procedure; the main program calls it once per record.
Writing a module for Paper 2
Half of Paper 2 is "write pseudocode for module X". The scheme awards a mark per feature, so a module that is not finished still scores for every correct part. The parts the examiner looks for:
The header, as the question describes it: PROCEDURE Name(Param : TYPE) or FUNCTION Name(Param : TYPE) RETURNS TYPE, with BYREF where the routine must change the argument.
Local declarations: DECLARE every local variable with its type, and initialise counters and totals (Count ← 0).
The loop that visits every element: FOR Index ← 1 TO 50 for an array whose size is given; WHILE NOT EOF(...) for a file.
The condition, with the right comparison and boundary, on the right item: IF Score[Index] > Limit THEN.
The update inside the branch: the count increased, the value stored, or the message output.
The end: RETURN once, after the loop, in a function; ENDFUNCTION or ENDPROCEDURE; and every IF, FOR and WHILE closed.
Worked example. A global array Score : ARRAY[1:50] OF INTEGER holds test scores. Write a function CountAbove(Limit : INTEGER) that returns how many scores are greater than Limit.
Marks: the header with its parameter and RETURNS INTEGER; Count declared and set to 0; a loop over all 50 elements; the comparison > Limit (not >=); the count updated inside the IF; RETURN Count after the loop. The main program uses the return value in an expression or an output: OUTPUT "Above 70: ", CountAbove(70).
Worked example. Write a function IsValid(Code : STRING) that returns TRUE when Code is two capital letters followed by four digits — the format 格式AB1234 — and FALSE otherwise.
The length check comes first, so MID is never asked for a position that does not exist. Validation 验证 like this returns a BOOLEAN so the caller can write IF IsValid(Entry) THEN ... ELSE OUTPUT "Invalid code" ENDIF: a message to the user is output by the caller, not by the function — a function calculates, a procedure acts.
Worked example. Write a function IsPalindrome(Word : STRING) that returns TRUE when Word reads the same backwards, such as "RACECAR".
Compare the characters from the two ends, moving inwards: position Index is paired with position Len - Index + 1, and only the first half needs testing.
The same three tools — a FOR over the positions, MID(s, i, 1) to read one character, and & to build a new string — answer most string modules on Paper 2: counting how often a character occurs (IF MID(s, i, 1) = Ch THEN Count ← Count + 1), replacing every instance of a character (add either NewChar or the original character to NewString at each position), hiding all but the last four digits of a card number (add '*' for every position up to Len - 4), or writing your own MID() by joining the characters from Start to Start + Length - 1. Asking MID for a position past the end of the string is a run-time error, so check LENGTH first.
Files. Values in variables disappear when the program ends, so a module that must keep data for the next run writes it to a file: OPENFILE "scores.txt" FOR WRITE, one WRITEFILE "scores.txt", NUM_TO_STR(Score[Index]) per line inside the loop, and CLOSEFILE "scores.txt" once, after the loop; reading back uses FOR READ, READFILE and WHILE NOT EOF("scores.txt"). Topic 10 has the full file section; here the marks are for opening in the right mode, the read or write inside the loop, and closing once after it.
Bahasa Indonesia
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.
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.
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.
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".
Variabel lokal adalah kotak baru dan kosong pada setiap panggilan; hanya variabel global (atau parameter BYREF) yang menyimpan nilai antar panggilanVariabel 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.
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:
Setiap bagian jawaban modul memiliki poinnya sendiri, jadi tulis semuanya meskipun satu bagian diragukan
Header, sebagaimana dijelaskan dalam soal: PROCEDURE Name(Param : TYPE) atau FUNCTION Name(Param : TYPE) RETURNS TYPE, dengan BYREF di mana rutin harus mengubah argumen.
Deklarasi lokal: DECLARE setiap variabel lokal dengan tipenya, dan inisialisasi penghitung dan total (Count ← 0).
Loop yang mengunjungi setiap elemen: FOR Index ← 1 TO 50 untuk 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: 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 — formatAB1234 — 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.
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.
Explore · Jelajahi
The call stack: push on call, pop on return · Tumpukan panggilan: push saat dipanggil, pop saat dikembalikan
Calling a subroutine pushes a new frame on top; returning pops it and hands a value back to the caller. The call that is running is always the frame on top. · 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.
Writing efficient pseudocode · Menulis pseudocode yang efisien
English
Three features that make pseudocode easier to understand — the answer to a "state three features" question — are meaningful identifiers (Total, not t), indentation of the statements inside each construct, and comments (// ...) that explain the purpose; keywords in capitals, one statement per line and blank lines between sections are also accepted. Efficient pseudocode goes further:
move invariants out of loops — if a value (an invariant 不变量) does not change with the loop counter, compute it once before the loop.
exit a loop early when the answer is found (stop a linear search 线性查找 as soon as the target appears).
avoid redundant work — store a result and reuse it instead of recomputing.
choose the right data structure — an array beats many separate variables when the items belong together.
replace deep nested IFs with CASE when testing one value against many.
comment the intent, not the mechanics (// validate the postcode, not // loop 6 times).
use meaningful names (numberOfPupils, not n) and initialise variables before use.
Bahasa Indonesia
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 berubah keluar dari loop agar berjalan sekali
11.3
Testing and errors · Pengujian dan kesalahan
English
Three kinds of error, each found in a different way:
Error
What it is
Example
Found by
syntax error 语法错误
a statement that breaks the rules of the language
a missing ENDIF; OUTPT "Hi"
the translator, before the program runs
run-time error 运行时错误
the program runs, but a statement cannot be carried out
division by zero; an array index of 0 or 51; a function called with an invalid parameter; a loop that never ends, so the program "freezes"
while running: the program stops or hangs
logic error
the program runs to the end, but the output is wrong
> where >= was needed; a total never set to 0
testing with a trace table and chosen test data
An IDE 集成开发环境 helps find the last two: a breakpoint 断点 stops the program at a chosen line; single stepping 单步执行 then runs one statement at a time; and the report (or watch) window shows the value of each variable at that moment, so the line where a value goes wrong is seen directly. Test methods and test data are in topic 12.
Bahasa Indonesia
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
Definitions the examiner accepts · Definisi yang diterima oleh penguji
English
A definition question is marked against fixed wording. Learn these exactly.
Term
Definition
procedure
a subroutine that carries out a task (a sequence of steps) and does not return a value; it is called with CALL
function
a subroutine that returns a single value to the point where it was called, so it can be used in an expression
parameter
the identifier in a subroutine header that receives a value or a reference when the subroutine is called
argument
the value (or variable) supplied in the call, matched to a parameter
passing by value
a copy of the argument's value is given to the subroutine, so changes inside it do not affect the original variable
passing by reference
the address of the variable is given to the subroutine, so changes inside it change the original variable
header
the first line of a subroutine definition: its name, its parameters and, for a function, its return type
interface
what a calling program must know to use a subroutine: its name, its parameters (number, order, type) and its return type
return value
the value a function passes back to the expression that called it
local variable
declared inside a subroutine; it exists only while the subroutine runs and can be used only inside it
global variable
declared outside every subroutine; it can be used anywhere in the program
count-controlled loop
repeats a fixed number of times, controlled by a counter (FOR ... NEXT)
pre-condition loop
tests its condition before each iteration, so the body may never run (WHILE ... ENDWHILE)
post-condition loop
tests its condition after each iteration, so the body runs at least once (REPEAT ... UNTIL)
constant
a named value that cannot change while the program runs
subroutine
a self-contained block of code that performs a task and is called by name: a procedure or a function
library routine
a subroutine that has already been written and tested, and is available to be called from a program
Bahasa Indonesia
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
Exam tips · Tips ujian
English
Distinguish a procedure (no return value) from a function (returns a value); know pass by value vs by reference.
Choose the right loop: count-controlled (FOR) when the number of repeats is known, condition-controlled (WHILE/REPEAT) otherwise.
Distinguish local vs global variables and scope; prefer local variables in reusable modules.
Use the insert's exact routine names and parameter order. VAL and STR are IGCSE names and score nothing; UCASE and LCASE are real 9618 routines from the Pseudocode Guide but act on one character, so on Paper 2 a whole string takes TO_UPPER or TO_LOWER.
In a "write pseudocode" answer the header, the declarations, the loop, the condition, the update and the RETURN each carry a mark: write all six parts, even if one is uncertain.
Common mistakes
Calling a function and not using what it returns. Assign the result, or use it in the expression or output: Sorted ← BubbleSort(MyArray, 7).
Passing a length one out: 6 for a seven-element array, or the last index where the length was wanted. Decide whether the parameter is a length or an index, and check that the last element is visited.
Closing a file inside the loop that reads it. Open once, close once, after the loop.
Using the input as a filename directly. Add the extension the question gave: FileName ← Choice & ".txt".
Leaving constructs open. Every IF needs its ENDIF, every FOR its NEXT, every WHILE its ENDWHILE, and every function its RETURN; the scheme has a mark for it.
Wrong boundaries: > for "at least" (which is >=), or a FOR that starts at 0 for an array declared [1:50].
A counter or total that is never set to 0 before the loop.
In a trace table, rewriting every variable on every row, or changing a value before the statement that changes it has run.
Half a condition: IF x = 3 OR 4 — each side of OR and AND must be a complete comparison. And + does not join strings; & does.
Declaring as local a value that must survive between calls. A running total or a string built up over several calls is global or BYREF.
Bahasa Indonesia
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.
Interactive lessons on this topic · Pelajaran interaktif untuk topik ini
Work through it step by step, with instant-check exercises. · Kerjakan langkah demi langkah, dengan latihan pengecekan instan.
Pick one and the site follows you — notes, papers, videos and practice all open on it. · Pilih satu dan situs mengikuti Anda — catatan, kertas, video, dan latihan semua terbuka di sana.
Type to search notes, lessons, code, vocabulary and past-paper questions across every subject. · Ketik untuk mencari catatan, pelajaran, kode, kosakata, dan pertanyaan soal lama di setiap mata pelajaran.