Skip to content · ⁨Bỏ qua nội dung⁩
Subjects · ⁨Môn học⁩

A-Level Computer Science · ⁨Khoa học máy tính A-Level⁩

Tips · ⁨Mẹo⁩

Khoa học máy tính A-Level (9618) gồm hai nửa mang cảm giác như hai môn học khác nhau. Phần lý thuyết chạy từ biểu diễn thông tin và truyền thông qua phần cứng, bộ xử lý, phần mềm hệ thống, bảo mật, cơ sở dữ liệu và đạo đức. Phần thực hành là thuật toán, cấu trúc dữ liệu, lập trình và phát triển phần mềm, và cấp A2 bổ sung thêm đệ quy và lập trình hướng đối tượng.

Các bài thi lý thuyết được chấm khiêm khắt hơn nhiều so với dự đoán của học sinh. Có một danh mục từ vựng chuẩn xác — tên thanh ghi, chế độ địa chỉ, dạng chuẩn, sự khác biệt chính xác giữa kiểm chứng (validation) và xác minh (verification) — và việc diễn đạt lại ý thường không được điểm. Hãy học các định nghĩa theo đúng văn phong của chương trình học.

Các bài thi lập trình thưởng cho việc viết code bằng tay cho đến khi bạn có thể biên dịch nó trong đầu.

  • 1

    Information representation · ⁨Biểu diễn thông tin⁩

    Watch lesson · ⁨Xem bài học⁩
    1.1

    Number systems

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of binary magnitudes and the difference between binary prefixes and decimal prefixes Understand the difference between and use: • kibi and kilo • mebi and mega • gibi and giga • tebi and tera
    Show understanding of different number systems Use the binary, denary, hexadecimal number bases and Binary Coded Decimal (BCD) and one’s complement and two’s complement representation for binary numbers
    Convert an integer value from one number base/ representation to another
    Perform binary addition and subtraction Using positive and negative binary integers
    Show understanding of how overflow can occur
    Describe practical applications where Binary Coded Decimal (BCD) and Hexadecimal are used
    Show understanding of and be able to represent character data in its internal binary form, depending on the character set used Students are expected to be familiar with ASCII (American Standard Code for Information Interchange), extended ASCII and Unicode. Students will not be expected to memorise any particular character codes
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về các đại lượng nhị phân và sự khác biệt giữa tiền tố nhị phân và tiền tố thập phân Hiểu sự khác biệt và sử dụng: • kibi và kilo • mebi và mega • gibi và giga • tebi và tera
    Thể hiện sự hiểu biết về các hệ đếm khác nhau Sử dụng cơ số nhị phân, thập phân, thập lục phân và Thập phân Mã hóa Nhị phân (BCD) cũng như biểu diễn bù 1 và bù 2 cho số nhị phân
    Chuyển đổi giá trị nguyên từ một cơ số/biểu diễn này sang cơ số/biểu diễn khác
    Thực hiện phép cộng và trừ nhị phân Sử dụng các số nguyên nhị phân dương và âm
    Thể hiện sự hiểu biết về cách tràn (overflow) có thể xảy ra
    Mô tả các ứng dụng thực tế nơi Thập phân Mã hóa Nhị phân (BCD) và Thập lục phân được sử dụng
    Thể hiện sự hiểu biết và có thể biểu diễn dữ liệu ký tự ở dạng nhị phân nội bộ, tùy thuộc vào bộ mã ký tự đang dùng Học sinh cần quen thuộc với ASCII (Mã tiêu chuẩn Mỹ cho Trao đổi Thông tin), ASCII mở rộng và Unicode. Học sinh không yêu cầu ghi nhớ bất kỳ mã ký tự cụ thể nào

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Counting in binary: 0 to 15

    The three number systems 数制 you must use:

    • denary 十进制 (decimal, base 10) — uses digits 0–9. Place values are powers of ten.
    • binary 二进制 (base 2) — uses 0 and 1. Place values are powers of two. Every byte 字节 is 8 bits 位.
    • hexadecimal 十六进制 (base 16) — uses 0–9 then A–F for 10–15. Each hex digit 数位 stands for exactly 4 bits.
    Beads on a traditional abacus
    An abacus represents numbers by place value — the same idea behind decimal, binary and hexadecimal

    Conversions

    Denary → binary: keep dividing by 2 and record the remainders, read bottom-up. Or subtract the largest place value 位值 (power of 2) that fits.

    Example: $558_{10}$: $558 = 512 + 32 + 8 + 4 + 2 = 2^{9} + 2^{5} + 2^{3} + 2^{2} + 2^{1}$. In 12 bits: 0010 0010 1110.

    Binary → hex: group the bits into nibbles 半字节 (4 bits) from the right and convert each. 0010 0010 1110 → 2 2 E → 22E.

    Hex → binary: replace each hex digit with its 4-bit pattern. Hex → denary: multiply each digit by its place value. 22E $= 2 \times 256 + 2 \times 16 + 14 = 558$.

    Worked example. Convert denary 200 to 8-bit binary, then to hexadecimal.

    $200 = 128 + 64 + 8$, so the binary is 11001000. In nibbles, 1100 1000 $= 12$ and $8$, i.e. $\text{C}$ and $8$, so the hexadecimal is C8.

    A binary place-value chart for 200: the columns 128, 64, 32, 16, 8, 4, 2, 1 hold the bits 1,1,0,0,1,0,0,0; the two 4-bit nibbles 1100 and 1000 become the hex digits C and 8, so 200 = 11001000 = C8
    Reading 200 from its place values, then grouping the bits into nibbles to get hex C8

    How many bits?

    Exam questions fix the register width 寄存器宽度 (8, 12 or 16 bits). Pad with leading zeros to that width: $558$ in 12 bits is 0010 0010 1110, never 10 0010 1110.

    To find the minimum number of bits that can store a value, ask which place values you need:

    • an unsigned integer from $0$ to $2^{n} - 1$ needs $n$ bits: $200$ needs 8 bits (the top is $255$), $1000$ needs 10 bits (the top is $1023$), $16$ needs 5 bits (4 bits stop at $15$).
    • a signed two's-complement integer from $-2^{n-1}$ to $2^{n-1} - 1$ needs $n$ bits: $-200$ needs 9 bits, because 8 bits stop at $-128$.
    • one hexadecimal digit needs 4 bits, one BCD digit needs 4 bits, and one ASCII character needs 7 bits (8 for extended ASCII).

    Binary vs decimal prefixes

    Two prefix families look similar but differ — decimal (powers of 10) and binary (powers of 2):

    Decimal (SI) Binary (memory)
    kilo $= 10^{3}$ kibi (Ki) $= 2^{10} = 1024$
    mega $= 10^{6}$ mebi (Mi) $= 2^{20}$
    giga $= 10^{9}$ gibi (Gi) $= 2^{30}$
    tera $= 10^{12}$ tebi (Ti) $= 2^{40}$

    So a tebibyte (TiB) is slightly more than a terabyte (TB). A "1 TB" drive holds $10^{12}$ bytes, but an operating system that reports in TiB shows a smaller number.

    Explore · ⁨Khám phá⁩

    Binary, denary and hex · ⁨Nhị phân, thập phân và thập lục phân⁩

    Type a number and see it in binary, denary and hexadecimal at once — and how the place values add up. · ⁨Nhập một con số và xem nó dưới dạng nhị phân, thập phân và thập lục phân cùng lúc — cũng như cách các giá trị vị trí cộng dồn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    number system/ˈnʌmbə ˈsɪstəm/ hệ đếm
    binary/ˈbaɪnəri/ nhị phân
    denary/ˈdiːnəri/ chữ số thập phân
    digit/ˈdɪdʒɪt/ chữ số
    place value/pleɪs ˈvæljuː/ giá trị vị trí
    byte/baɪt/ byte
    bit/bɪt/ bit
    hexadecimal/ˌheksəˈdesɪml/ chữ số thập lục phân
    nibble/ˈnɪbl/ nibble
    register width/ˈredʒɪstə wɪtθ/ chiều rộng thanh ghi
    1.1

    Binary arithmetic

    Binary addition

    Add column by column from the right, carrying as in denary:

    Bit A Bit B Carry in Sum bit Carry out
    0 0 0 0 0
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 1 0 0 1
    1 1 1 1 1

    Overflow 溢出 happens when the result needs more bits than the register 寄存器 can hold — the carry-out of the leftmost column is the overflow bit.

    Worked example. Add the 8-bit unsigned integers $10110101$ and $01101100$, and comment on the result.

    $10110101 + 01101100 = 1\,00100001$. The answer needs 9 bits, so it does not fit in an 8-bit register: overflow has occurred. A full answer names the error and says why, using the word size the question gave: "Overflow: the true result ($289$) is larger than the largest value an 8-bit register can hold ($255$), so the carry out of the most significant bit is lost and the stored result ($00100001 = 33$) is wrong."

    Binary subtraction

    The usual way is two's complement 补码 addition: to do $A - B$, form the two's complement of $B$ (invert every bit and add 1), then add, and discard any final carry-out.

    To subtract $00011110$ from $01100100$ (unsigned 8-bit):

    • two's complement of $00011110$: invert → $11100001$, add 1 → $11100010$.
    • add to $01100100$: result $1\,01000110$ (9 bits) — discard the leading 1 → $01000110 = 70_{10}$. Check: $100 - 30 = 70$. ✓

    Two's complement signed integers

    In an $n$-bit two's-complement number:

    • the most significant bit 最高有效位 (MSB) is the sign bit 符号位: 0 = positive, 1 = negative.
    • to read a negative number: invert every bit, add 1, then negate.

    So $11100010$ is negative; invert → $00011101$, add 1 → $00011110 = 30$, so it is $-30$. This is a signed integer 有符号整数 (unlike an unsigned 无符号 one). The range for $n$ bits is $-2^{n-1}$ to $+2^{n-1} - 1$; for 8 bits, $-128$ ($10000000$) to $+127$ ($01111111$).

    The same bits mean different numbers depending on the agreed reading. As an unsigned integer every bit is a place value, so 8 bits run from $0$ to $255$; as a signed two's-complement integer the top bit is the sign, so the same 8 bits run from $-128$ to $+127$. The pattern $11111111$ is $255$ read one way and $-1$ read the other — nothing in the bits themselves says which.

    A table of four 8-bit patterns read twice: 00000000 is 0 either way, 01111111 is 127 unsigned and +127 signed, 10000000 is 128 unsigned but -128 signed, and 11111111 is 255 unsigned but -1 signed The same byte read as unsigned and as signed: only the agreed interpretation tells them apart An 8-bit two's-complement number line from -128 (10000000) to +127 (01111111); numbers with sign bit 1 are negative and those with sign bit 0 are positive, with -1 = 11111111 sitting just below 0 = 00000000 8-bit two's complement: the sign bit splits the range into negative ($-128$ to $-1$) and positive ($0$ to $127$)

    Worked example. What denary value does the 8-bit two's-complement number $10110100$ represent?

    The MSB is 1, so it is negative. Invert → $01001011$, add 1 → $01001100 = 76$, so the value is $-76$. Check with place values: $-128 + 32 + 16 + 4 = -76$.

    Worked example. Write $-108$ as a 12-bit two's-complement integer.

    Start from $+108$ in 12 bits: $108 = 64 + 32 + 8 + 4$, so 0000 0110 1100. Invert every bit: 1111 1001 0011. Add 1: 1111 1001 0100. Check with place values, where the top bit is worth $-2^{11} = -2048$: $-2048 + 1024 + 512 + 256 + 128 + 16 + 4 = -108$. ✓

    For 12 bits the range is $-2048$ (1000 0000 0000) to $+2047$ (0111 1111 1111). Questions that ask for the smallest and largest values want these two patterns, so learn the rule: the most negative number is a 1 followed by zeros; the most positive is a 0 followed by ones.

    An arithmetic shift 算术移位 moves every bit left or right but keeps the sign: a shift right by one place halves the value and copies the sign bit into the empty space on the left, so a negative number stays negative (1111 1001 0100 shifted right three places is 1111 1111 0010, which is $-14$: $-108 / 8 = -13.5$, and a shift right rounds down). A shift left doubles the value. Shifts belong to the assembly instruction set in topic 4, but this question is asked with the number work here.

    Overflow in signed arithmetic happens when the true result falls outside this range — spotted when the sign bit flips wrongly (two positives giving a negative, or two negatives giving a positive).

    One's complement

    Before two's complement, an older scheme called one's complement 反码 represented a negative number by simply inverting every bit of the positive — there is no "add 1" step.

    • $+30 = 00011110$, so in one's complement $-30 = 11100001$ (just the inverse).
    • Drawback: it has two zeros — $00000000$ ($+0$) and $11111111$ ($-0$) — which wastes a bit pattern and makes arithmetic awkward.

    Two's complement (invert and add 1) removes the negative zero: it has a single zero and lets addition and subtraction use the same circuit. That is why modern computers store signed integers in two's complement, not one's complement.

    Explore · ⁨Khám phá⁩

    Binary & signed integers · ⁨Nhị phân & số nguyên có dấu⁩

    byte = Σ place values · ⁨byte = tổng các giá trị vị trí⁩

    See how an 8-bit pattern maps to a number (and how it would overflow past 255). · ⁨Xem cách một mẫu hình 8 bit ánh xạ sang một số (và nó sẽ tràn vượt quá 255 như thế nào).⁩

    Explore · ⁨Khám phá⁩

    Two's complement signed bits · ⁨Các bit có dấu bù hai⁩

    The leftmost bit carries a negative place value. Flip any bit — or hit Negate (invert every bit, then add 1) — and watch the signed value change. · ⁨Bit bên trái mang giá trị vị trí âm. Đảo ngược bất kỳ bit nào — hoặc nhấn Negate (đảo ngược mọi bit, sau đó cộng 1) — và quan sát sự thay đổi của giá trị có dấu.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    register/ˈredʒɪstə/ đăng ký (register)
    unsigned/ʌnˈsaɪnd/ không dấu
    overflow/ˌəʊvəˈfləʊ/ tràn
    most significant bit/məʊst sɪɡˈnɪfɪkənt bɪt/ bit có giá trị cao nhất
    two's complement/tuːz ˈkɒmplɪmənt/ bổ hai
    signed integer/saɪnd ˈɪntɪdʒə/ số nguyên có dấu
    sign bit/saɪn bɪt/ bit dấu
    arithmetic shift/ˌærɪθˈmetɪk ʃɪft/ dịch chuyển số học
    one's complement/wʌnz ˈkɒmplɪmənt/ bổ một
    1.1

    Binary Coded Decimal (BCD)

    In BCD 二进码十进数, each denary digit is written as its own 4-bit pattern. The number $93$ is 1001 0011 in BCD — not binary 93 ($01011101$). Each nibble uses only 0–9; patterns $1010$–$1111$ are invalid.

    BCD reading: 0010 0111 0101 → 2, 7, 5 → 275.

    Use: calculators, digital clocks, and devices that show denary digits — each digit drives a 7-segment display 七段显示器. Currency code often uses BCD to avoid the rounding errors of converting fractions like 0.1 to binary.

    A "justify" answer must link the use to a property of BCD: each denary digit has its own 4 bits, so a digit can be sent straight to its display, or added digit by digit, with no conversion of the whole number; and a decimal fraction such as $0.10$ is stored exactly, which a binary fraction cannot do.

    A single-digit seven-segment LED display component, showing its seven separate bars
    A seven-segment display shows one denary digit, often driven by BCD
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    BCD/ˌbiː siː ˈdiː/ BCD
    7-segment display/ˈsevən ˈseɡmənt dɪˈspleɪ/ màn hình 7 đoạn
    1.1

    Hexadecimal — practical uses

    Hex is a compact way to write binary (1 hex digit = 4 bits):

    A byte splits into two nibbles; each nibble is one hexadecimal digit
    A byte is two nibbles; each nibble is one hex digit
    • memory addresses 内存地址 in low-level programming — 0x7FFE.
    • colour values in HTML/CSS — #FF8800.
    • MAC addresses — AC:DE:48:00:11:22.

    Hex does not change the stored data — it just makes binary easier for humans.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    memory address/ˈmeməri əˈdres/ địa chỉ bộ nhớ
    1.1

    Character codes

    Computers store text as numbers; each character has a numeric code point 码点 set by a character set 字符集.

    ASCII

    • ASCII uses 7 bits — 128 code points. Basic Latin letters, digits, punctuation, and control codes.
    • Extended ASCII uses 8 bits — 256 code points; the lower 128 match ASCII, the upper 128 vary by region.
    A small ASCII table: the character A is code 65 = 01000001, a is 97 = 01100001, the digit 0 is 48 = 00110000, and space is 32 = 00100000
    Each character is stored as a number — a few ASCII code points in denary and binary

    Unicode

    • Unicode is a universal character set covering almost every script, plus symbols and emoji.
    • common encodings 编码: UTF-8 (1–4 bytes, ASCII-compatible), UTF-16 (2 or 4 bytes), UTF-32 (fixed 4 bytes).

    Why Unicode beats ASCII

    • it represents far more characters (every script, emoji); ASCII covers only basic English.
    • files are portable with no code-page confusion, and allow multilingual text in one document.
    • trade-off: Unicode files are usually larger for English-only text.

    When a question asks for differences, give them in pairs with numbers: ASCII uses 7 bits (extended ASCII 8), so 128 (256) characters; Unicode uses up to 32 bits (UTF-8 uses 1 to 4 bytes), so more than a million code points. ASCII covers basic English only; Unicode covers every script, and its first 128 code points are the ASCII ones. In UTF-8 an English letter still takes 1 byte, so a 40-letter English file name is 40 bytes in ASCII and in UTF-8 alike, while a Chinese character takes 3 bytes.

    Explore · ⁨Khám phá⁩

    A character is stored as a number · ⁨Một ký tự được lưu trữ dưới dạng một số⁩

    Each character has a code number — 'A' is 65. Flip the bits to see that code in binary and hex, exactly how the computer holds it. · ⁨Mỗi ký tự có một mã số — 'A' là 65. Đảo ngược các bit để xem mã này trong nhị phân và thập lục phân, đúng như máy tính lưu giữ nó.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    code point/kəʊd pɔɪnt/ điểm mã
    character set/ˈkærɪktə set/ bảng ký tự
    encoding/enˈkəʊdɪŋ/ mã hóa
    1.2

    Bitmap images

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of how data for a bitmapped image are encoded Use and understand the terms: pixel, file header, image resolution, screen resolution, colour depth / bit depth
    Perform calculations to estimate the file size for a bitmap image
    Show understanding of the effects of changing elements of a bitmap image on the image quality and file size Use the terms: image resolution, colour depth / bit depth
    Show understanding of how data for a vector graphic are encoded Use the terms: drawing object, property, drawing list
    Justify the use of a bitmap image or a vector graphic for a given task
    Show understanding of how sound is represented and encoded Use the terms: sampling, sampling rate, sampling resolution, analogue and digital data
    Show understanding of the impact of changing the sampling rate and resolution Including the impact on file size and accuracy
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về cách dữ liệu của hình ảnh điểm ảnh được mã hóa Sử dụng và hiểu các thuật ngữ: pixel, header tệp, độ phân giải hình ảnh, độ phân giải màn hình, độ sâu màu / độ sâu bit
    Thực hiện tính toán để ước tính dung lượng tệp cho hình ảnh bitmap
    Thể hiện sự hiểu biết về tác động của việc thay đổi các yếu tố của hình ảnh bitmap lên chất lượng hình ảnh và dung lượng tệp Sử dụng các thuật ngữ: độ phân giải hình ảnh, độ sâu màu / độ sâu bit
    Thể hiện sự hiểu biết về cách dữ liệu của đồ họa vector được mã hóa Sử dụng các thuật ngữ: đối tượng vẽ, thuộc tính, danh sách vẽ
    Giải thích việc sử dụng hình ảnh bitmap hay đồ họa vector cho một nhiệm vụ cụ thể
    Thể hiện sự hiểu biết về cách âm thanh được biểu diễn và mã hóa Sử dụng các thuật ngữ: lấy mẫu, tần số lấy mẫu, độ phân giải lấy mẫu, dữ liệu tương tự và dữ liệu kỹ thuật số
    Thể hiện sự hiểu biết về tác động của việc thay đổi tần số lấy mẫu và độ phân giải Bao gồm tác động đến dung lượng tệp và độ chính xác

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A bitmap 位图 image (also called a bitmapped image) stores the colour of every pixel 像素 in a grid. At the start of the file a file header 文件头 records the image's metadata — its width, height and colour depth — so software knows how to read the pixel data that follows.

    • image resolution 图像分辨率: the bitmap's own size, width × height in pixels (e.g. 1920 × 1080).
    • screen resolution 屏幕分辨率: the width × height the display can show. If an image's resolution is larger than the screen it is scaled down to fit; a low-resolution image looks blocky when stretched onto a higher-resolution screen.
    • colour depth 颜色深度 (bit depth 位深度): bits per pixel. 1 bit → black/white; 8 bits → 256 colours; 24 bits → 16.7 million ("true colour").
    The same disc stored on three pixel grids, A to C, getting blockier as the pixels grow larger and fewer
    The same image stored at three resolutions, from high (A) to low (C): fewer, larger pixels mean less detail

    File size

    $$\text{size in bits} = \text{width} \times \text{height} \times \text{bit depth}.$$

    Divide by 8 for bytes, by 1024 for KiB, etc. Example: a $3000 \times 2000$ image at 24 bpp is $3000 \times 2000 \times 24 = 1.44 \times 10^{8}$ bits $\approx 17.2\ \text{MiB}$.

    A 6 by 4 grid of pixels with its width and height labelled; pixels = 6 times 4 = 24, and at 8 bits per pixel the size = 24 times 8 = 192 bits
    The same formula on small numbers: count the pixels, then multiply by the colour depth

    State the units you used. The mark scheme accepts $1\ \text{MB} = 10^{6}$ bytes (the SI prefix) or $1\ \text{MiB} = 1024 \times 1024$ bytes (the binary prefix), as long as your working shows which one; the same image is $18.0\ \text{MB}$ or $17.2\ \text{MiB}$. Add the size of the file header if the question gives one.

    A video is a sequence of bitmap images, each one a frame 帧. Before compression its size is the size of one frame $\times$ the frame rate 帧率 (frames per second) $\times$ the duration in seconds: 30 frames per second of $1920 \times 1080$ pixels at 24 bits is $30 \times 1920 \times 1080 \times 24 \approx 1.5 \times 10^{9}$ bits, about $187\ \text{MB}$, for every second. That is why video is always compressed.

    Changing settings

    • lower resolution → smaller file, less detail (looks blocky when enlarged).
    • lower colour depth → smaller file, but smooth shades show banding.
    • higher of either → larger file, better quality.
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    bitmap/ˈbɪtmæp/ bitmap
    pixel/ˈpɪksl/ pixel
    file header/faɪl ˈhedə/ tiêu đề tập tin
    colour depth/ˈkʌlə depθ/ độ sâu màu
    image resolution/ˈɪmɪdʒ ˌrezəˈluːʃn/ độ phân giải hình ảnh
    screen resolution/skriːn ˌrezəˈluːʃn/ độ phân giải màn hình
    bit depth/bɪt depθ/ độ sâu bit
    frame/freɪm/ khung
    frame rate/freɪm reɪt/ tốc độ khung hình
    1.2

    Vector graphics

    A vector graphic 矢量图形 stores the instructions to draw the image as a drawing list 绘图列表 — an ordered list of drawing objects 绘图对象 (geometric primitives 图元: lines, curves, polygons, circles). Each drawing object has properties 属性 such as colour, fill, line width and position (coordinates). To show it, the program renders 渲染 the drawing list at any resolution needed.

    A simple house drawing made from a rectangle body, triangle roof, circle window, door rectangle and a line, each labelled with its shape type and attributes
    A vector image is built from labelled geometric shapes, each with attributes

    Bitmap vs vector

    Task Better choice Why
    Photograph Bitmap Complex pixel-level detail can't be described as shapes.
    Logo, icon, sign Vector Sharp edges; scales to any size without blur.
    Engineering drawing Vector Precise geometry and scaling.
    Painting, texture Bitmap Smooth tonal detail per area.

    Vector advantage: it scales without losing quality — a vector logo stays sharp at any size, while a bitmap blurs when enlarged. Vector disadvantage: it cannot describe arbitrary pixel detail (photographs).

    A "justify" answer links the choice to the task. "The logo must appear on a business card and on a billboard, so it should be a vector graphic: it is stored as drawing objects and is re-rendered sharply at any size, whereas a bitmap would show its pixels when enlarged." For a photograph the argument runs the other way: there are no shapes to describe, so every pixel's colour must be stored.

    Side by side, both enlarged: a bitmap diagonal is a jagged staircase of pixels, while a vector diagonal stays a smooth straight line
    Enlarged, a bitmap's pixels turn jagged; a vector stays smooth at any size
    Explore · ⁨Khám phá⁩

    Computing concept lab · ⁨Phòng thí nghiệm khái niệm tin học⁩

    Classify concrete examples by the computing idea they demonstrate. · ⁨Phân loại các ví dụ cụ thể theo ý tưởng tin học mà chúng minh họa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    vector graphic/ˈvektə ˈɡræfɪk/ vектор graphic
    drawing list/ˈdrɔːɪŋ lɪst/ danh sách vẽ
    drawing objects/ˈdrɔːɪŋ ˈɒbdʒekts/ đối tượng vẽ
    primitive/ˈprɪmɪtɪv/ primitive
    properties/ˈprɒpətiz/ thuộc tính
    render/ˈrendə/ truy xuất hình ảnh
    1.2

    Sound

    A continuous wave of analogue data 模拟数据 (the sound) is converted into digital data 数字数据 by sampling 采样:

    • sampling rate 采样率 — samples per second (Hz). CD quality is $44.1\ \text{kHz}$.
    • sampling resolution 采样分辨率 (bit depth) — bits per sample's amplitude 振幅. CD quality is 16 bits.
    A smooth analogue sound wave with vertical sample bars at regular time intervals, each bar reading the wave's amplitude
    Sampling a sound wave: its amplitude is read at each time interval

    File size

    $$\text{size in bits} = \text{sampling rate} \times \text{resolution} \times \text{duration} \times \text{channels}.$$

    A 10-second stereo CD clip: $44100 \times 16 \times 10 \times 2 = 14\,112\,000$ bits $\approx 1.68\ \text{MiB}$.

    Changing settings

    • higher sampling rate → captures higher pitches, larger file.
    • higher sample resolution → finer amplitude steps, less quantisation 量化 noise, larger file.
    • lower of either → smaller file, clear quality loss.

    (The sampling rate must be at least twice the highest frequency you want to keep.)

    A sound wave crossed by evenly spaced sample lines, one dot per sample, noted as sample rate = samples per second and Nyquist at least twice the highest frequency
    Sample rate is samples per second; the Nyquist rule is why it must be at least twice the highest frequency kept
    Explore · ⁨Khám phá⁩

    Sound sampling · ⁨Lấy mẫu âm thanh⁩

    y = a sin(bt + c)

    Sampling measures a sound wave at regular intervals — a higher rate copies it more truly. · ⁨Lấy mẫu đo một sóng âm tại các khoảng thời gian đều đặn — tốc độ cao hơn sẽ sao chép chân thực hơn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    analogue data/ˈænəlɒɡ ˈdeɪtə/ dữ liệu tương tự
    digital data/ˈdɪdʒɪtl ˈdeɪtə/ dữ liệu kỹ thuật số
    sampling/ˈsæmplɪŋ/ mẫu hóa
    sampling rate/ˈsæmplɪŋ reɪt/ tốc độ lấy mẫu
    sampling resolution/ˈsæmplɪŋ ˌrezəˈluːʃn/ độ phân giải lấy mẫu
    amplitude/ˈæmplɪtjuːd/ biên
    sample resolution/ˈsæmpl ˌrezəˈluːʃn/ độ phân giải mẫu
    quantisation/ˌkwɒntaɪˈzeɪʃn/ lượng tử hóa
    1.3

    Compression

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the need for and examples of the use of compression
    Show understanding of lossy and lossless compression and justify the use of a method in a given situation
    Show understanding of how a text file, bitmap image, vector graphic and sound file can be compressed Including the use of run-length encoding (RLE)
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về nhu cầu và ví dụ về việc sử dụng nén
    Thể hiện sự hiểu biết về nén mất mát và không mất mát và giải thích việc sử dụng một phương pháp trong một tình huống cụ thể
    Thể hiện sự hiểu biết về cách nén tệp văn bản, hình ảnh bitmap, đồ họa vector và tệp âm thanh Bao gồm việc sử dụng mã hóa độ dài chuỗi (RLE)

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Compression 压缩 reduces file size, saving storage and transmission bandwidth 带宽. Two kinds:

    • lossless 无损 — the original data is recovered exactly (text, programs, ZIP/PNG).
    • lossy 有损 — some detail is dropped for much smaller files (JPEG, MP3, video).

    When to use which

    • lossless for documents, source code, medical images — anything needing exact data.
    • lossy for streaming media. Real-time video streaming uses lossy compression because it must send huge amounts of data in real time over limited bandwidth; lossless would not shrink it enough. Raw HD video is gigabytes per minute, so without compression the picture would keep freezing.

    A "justify" answer names the method, then the reason from the situation: "Lossless, because the spreadsheet must be restored exactly; a single changed value would make the accounts wrong." Or: "Lossy, because the photographs are viewed on a phone screen where the dropped detail is not visible, and the smaller files upload faster and use less storage."

    Lossless methods

    • run-length encoding 行程编码 (RLE): store "the next $n$ values are $x$" instead of repeating $x$. Great for flat areas; useless for noisy data.
    • dictionary methods 字典编码 (ZIP, PNG): replace repeated byte sequences with a short reference. Good for text and code.
    • Huffman coding 霍夫曼编码: give short codes to common symbols and long codes to rare ones, bringing the average code length near the data's entropy 熵.

    How each kind of file is compressed:

    • text file: dictionary methods and Huffman coding turn repeated words and common characters into short codes. Text must stay lossless, because one changed character changes the meaning.
    • bitmap image: RLE for runs of identical pixels (icons, diagrams, black-and-white scans); lossy JPEG for photographs, or a lower colour depth or resolution.
    • vector graphic: the drawing list is already small; remove drawing objects that are not needed, store coordinates to fewer decimal places, or apply a lossless method such as ZIP to the file.
    • sound file: lossy MP3 or AAC removes what the ear cannot hear; a lower sampling rate or resolution is also lossy; lossless formats keep every sample and shrink the file much less.
    A 16-pixel row of 6 white, 4 black and 6 white cells; the three runs are bracketed and labelled 6W, 4B, 6W, so 16 pixels are stored as the 3 runs 6W 4B 6W
    Run-length encoding on a single row: 16 pixels become 3 runs
    An 8 by 8 black-and-white grid showing the letter F, with each row's binary pattern and its shorter run-length code listed beside it
    Run-length encoding of the letter F in an $8\times8$ black-and-white grid
    Dictionary coding worked through: the source ABC ABC ABC XYZ, a dictionary in which 1 stands for ABC and 2 stands for XYZ, and the encoded stream 1 1 1 2
    Dictionary coding: each repeated sequence is stored once, and every occurrence becomes a short index
    Huffman coding worked through on the word BANANA: the letter counts A 3, N 2 and B 1, the code tree built from them, and the resulting codes A = 0, B = 10, N = 11
    Huffman coding: the commonest symbol gets the shortest code, so BANANA needs 10 bits instead of 12

    Lossy methods

    • images (JPEG): drop fine detail and colour differences the eye barely sees.
    • sound (MP3, AAC): drop pitches we hear less well, and quiet sounds hidden by louder ones.
    • video combines spatial 空间 compression (within each frame, like JPEG) with temporal 时间 compression (most frames store only the differences from the previous frame).
    A tree classifying compression into lossless (RLE, dictionary/ZIP/PNG, Huffman) and lossy (JPEG images, MP3/AAC sound, video) with examples under each branch
    Compression methods: lossless versus lossy, with common examples
    Explore · ⁨Khám phá⁩

    Run-length encoding · ⁨Mã hóa độ dài chuỗi⁩

    Watch a run of repeated symbols get squashed into a count — simple lossless compression. · ⁨Quan sát chuỗi ký hiệu lặp lại bị nén thành một con đếm — nén không mất dữ liệu đơn giản.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    compression/kəmˈpreʃn/ nén dữ liệu
    bandwidth/ˈbændwɪdθ/ băng thông
    lossless/ˈlɒsləs/ không mất mát
    lossy/ˈlɒsi/ có mất mát
    run-length encoding/rʌn leŋθ enˈkəʊdɪŋ/ mã hóa run-length
    dictionary methods/ˈdɪkʃənəri ˈmeθədz/ phương pháp từ điển
    Huffman coding/ˈhʌfmən ˈkəʊdɪŋ/ mã hóa Huffman
    entropy/ˈentrəpi/ entropy
    spatial/ˈspeɪʃl/ không gian
    temporal/ˈtempərəl/ thời gian
    Watch lesson · ⁨Xem bài học⁩
    1.3

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    bit a single binary digit, 0 or 1
    byte a group of 8 bits
    binary prefix a multiplier that is a power of 2 (kibi = 1024) rather than a power of 10 (kilo = 1000)
    two's complement a way of representing signed integers in which the most significant bit has a negative place value
    overflow the result of a calculation is too large to be represented in the number of bits available
    Binary Coded Decimal each denary digit is stored as its own 4-bit binary pattern
    character set the set of characters a computer can represent, each with its own binary code
    pixel the smallest element of a bitmap image, storing one colour value
    image resolution the number of pixels in an image, given as width by height
    screen resolution the number of pixels a display can show, given as width by height
    colour depth the number of bits used to store the colour of one pixel
    sampling rate the number of samples of the sound taken per second
    sampling resolution the number of bits used to store the amplitude of one sample
    lossless compression compression from which the original data can be recovered exactly
    lossy compression compression that permanently removes some data, so the original cannot be recovered
    run-length encoding replacing a run of repeated values with one value and a count
    1.3

    Exam tips

    • Show working for base conversions: denary → binary by place values, binary → hexadecimal in nibbles (groups of 4 bits).
    • For two's complement the MSB is negative; to negate, invert and add 1; watch for overflow when the sign bit flips wrongly.
    • Distinguish bitmap (pixels; file size $=$ width $\times$ height $\times$ colour depth) from vector (drawing commands; scales without loss).
    • Sound file size depends on sample rate $\times$ bit depth $\times$ time — more of each means better quality but a bigger file.
    • Compare lossless vs lossy compression and give a use for each.

    Common mistakes

    • Explaining an overflow with "the answer was greater than 255" or "it has 9 bits". State the word size the question gave, then say the result cannot be represented in it.
    • Making a negative number by setting the top bit to 1 and leaving the rest (sign and magnitude). Two's complement means invert every bit of the positive value, then add 1.
    • Forgetting to pad a converted number to the register width the question asks for.
    • Mixing bits and bytes in a file-size calculation. Work in bits, divide by 8 once, and say whether you used 1000 or 1024.
    • Answering "describe" in everyday words ("the picture gets worse"). Use the syllabus terms: fewer colours, banding, lower image resolution, larger pixels.
  • 2

    Communication · ⁨Truyền thông⁩

    Watch lesson · ⁨Xem bài học⁩
    2.1

    Networks: purpose and benefits

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the purpose and benefits of networking devices
    Show understanding of the characteristics of a LAN (local area network) and a WAN (wide area network)
    Explain the client-server and peer-to-peer models of networked computers Roles of the different computers within the network and subnetwork models Benefits and drawbacks of each model Justify the use of a model for a given situation
    Show understanding of thin-client and thick-client and the differences between them
    Show understanding of the bus, star, mesh and hybrid topologies Understand how packets are transmitted between two hosts for a given topology Justify the use of a topology for a given situation
    Show understanding of cloud computing Including the use of public and private clouds Benefits and drawbacks of cloud computing
    Show understanding of the differences between and implications of the use of wireless and wired networks Describe the characteristics of copper cable, fibre-optic cable, radio waves (including WiFi), microwaves, satellites
    Describe the hardware that is used to support a LAN Including switch, server, Network Interface Card (NIC), Wireless Network Interface Card (WNIC), Wireless Access Points (WAP), cables, bridge, repeater
    Describe the role and function of a router in a network
    Show understanding of Ethernet and how collisions are detected and avoided Including Carrier Sense Multiple Access/Collision Detection (CSMA/CD)
    Show understanding of bit streaming Methods of bit streaming, i.e. real-time and on-demand Importance of bit rates broadband speed on bit streaming
    Show understanding of the differences between the World Wide Web (WWW) and the internet
    Describe the hardware that is used to support the internet Including modems, PSTN (Public Switched Telephone Network), dedicated lines, cell phone network
    Explain the use of IP addresses in the transmission of data over the internet Including: • format of an IP address including IPv4 and IPv6 • use of subnetting in a network • how an IP address is associated with a device on a network • difference between a public IP address and a private IP address and the implications for security • difference between a static IP address and a dynamic IP address
    Explain how a Uniform Resource Locator (URL) is used to locate a resource on the World Wide Web (WWW) and the role of the Domain Name Service (DNS)
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về mục đích và lợi ích của các thiết bị mạng.
    Thể hiện sự hiểu biết về các đặc điểm của LAN (mạng diện rộng) và WAN (mạng diện rộng).
    Giải thích các mô hình máy tính mạng client-server và peer-to-peer. Vai trò của các máy tính khác nhau trong mô hình mạng và mạng con. Lợi ích và nhược điểm của từng mô hình. Biện giải việc sử dụng một mô hình cho một tình huống cụ thể.
    Thể hiện sự hiểu biết về thin-client và thick-client cũng như sự khác biệt giữa chúng.
    Thể hiện sự hiểu biết về các kiến trúc bus, star, mesh và hybrid. Hiểu cách các gói tin được truyền tải giữa hai host đối với một kiến trúc nhất định. Biện giải việc sử dụng một kiến trúc cho một tình huống cụ thể.
    Thể hiện sự hiểu biết về cloud computing. Bao gồm cả việc sử dụng cloud công cộng và riêng tư. Lợi ích và nhược điểm của điện toán đám mây.
    Thể hiện sự hiểu biết về sự khác biệt và hệ quả của việc sử dụng mạng không dây và có dây. Mô tả các đặc điểm của cáp đồng, cáp quang, sóng vô tuyến (bao gồm WiFi), vi sóng, vệ tinh.
    Mô tả phần cứng được sử dụng để hỗ trợ một LAN. Bao gồm switch, server, Network Interface Card (NIC), Wireless Network Interface Card (WNIC), Wireless Access Points (WAP), cáp, bridge, repeater.
    Mô tả vai trò và chức năng của một router trong mạng.
    Thể hiện sự hiểu biết về Ethernet và cách phát hiện cũng như tránh va chạm. Bao gồm cả Carrier Sense Multiple Access/Collision Detection (CSMA/CD).
    Thể hiện sự hiểu biết về bit streaming. Các phương pháp bit streaming, tức là real-time và on-demand. tầm quan trọng của tốc độ bit và băng thông trên đối với bit streaming.
    Thể hiện sự hiểu biết về sự khác biệt giữa World Wide Web (WWW) và internet.
    Mô tả phần cứng được sử dụng để hỗ trợ internet. Bao gồm modems, PSTN (Public Switched Telephone Network), đường dẫn_epsilon dedicated lines, mạng điện thoại di động.
    Giải thích việc sử dụng IP addresses trong quá trình truyền dữ liệu qua internet. Bao gồm: • định dạng của địa chỉ IP bao gồm IPv4 và IPv6 • việc sử dụng subnetting trong mạng • cách một địa chỉ IP được gán cho một thiết bị trên mạng • sự khác biệt giữa public IP address và private IP address và các hệ quả liên quan đến bảo mật • sự khác biệt giữa static IP address và dynamic IP address.
    Giải thích cách một Uniform Resource Locator (URL) được sử dụng để xác định vị trí tài nguyên trên World Wide Web (WWW) và vai trò của Domain Name Service (DNS).

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A network 网络 is a set of computing devices connected so they can communicate and share resources. Benefits:

    • sharing resources (printers, file servers, internet) — cheaper than equipping each computer.
    • sharing data — many users access the same files.
    • central management — install software, manage users and back up once on a server.
    • communication — email, video calls, messaging.
    • remote access — work from anywhere.
    Explore · ⁨Khám phá⁩

    Network route lab · ⁨Phòng thí nghiệm định tuyến mạng⁩

    Follow data from a device through network hardware and protocols. · ⁨Theo dõi dữ liệu từ một thiết bị qua phần cứng mạng và giao thức.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    network/ˈnetwɜːk/ mạng lưới
    2.1

    LAN vs WAN

    A local area network 局域网 (LAN) covers a small area — a home, office or school, usually owned by the organisation, with high data rates and low latency 延迟.

    A wide area network 广域网 (WAN) covers a large area — a city, country, or the world (the internet is the largest WAN). It uses telecom-company infrastructure — often the Public Switched Telephone Network 公共交换电话网 (PSTN), leased lines or fibre — with lower data rates and higher latency. A WAN connects LANs together.

    For "give two characteristics of a LAN": it covers a small geographical area (one site or building); the hardware is owned by the organisation, not leased from a telecom company; it connects through its own switches, cables and access points. For "two ways a WAN is different": it covers a large geographical area; it uses third-party (leased or public) infrastructure; data rates are lower and latency higher; it usually joins several LANs. A school on one site is a LAN; a company with offices in two cities needs a WAN, with a leased line or the internet between the sites. Justify the choice with the area covered and who owns the links.

    Several LAN sites spread across a large area, each joined through a central carrier WAN cloud, with one direct leased line between two distant sites
    A wide-area network links many systems across a large area
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    local area network/ˈləʊkl ˈeərɪə ˈnetwɜːk/ mạng cục bộ (LAN)
    latency/ˈleɪtənsi/ độ trễ
    wide area network/waɪd ˈeərɪə ˈnetwɜːk/ mạng diện rộng (WAN)
    Public Switched Telephone Network/ˈpʌblɪk swɪtʃt ˈtelɪfəʊn ˈnetwɜːk/ Mạng Điện thoại Công cộng Chuyển mạch (PSTN)
    2.1

    Client-server and peer-to-peer

    Client-server

    • powerful machines act as servers 服务器, providing services (files, web pages, email).
    • other machines are clients 客户端 that request services.
    • central and easy to manage, but the server is a single point of failure unless backed up.
    A desktop, laptop and tablet client send requests through the internet to one central server, which sends responses back
    In a client-server network, clients request services from a central server

    Peer-to-peer (P2P)

    • all machines are equal peers; each can be both client and server (peer-to-peer 对等网络).
    • resources are spread across the peers — no central server. Robust to one failure, but harder to keep secure and consistent.

    Choosing a model. Client-server suits a school or a business: files are stored and backed up centrally, a user logs in with one account from any machine, software and security are managed once, and the server can be a powerful machine. The drawbacks are the cost of the server and of a technician, and that the server is a single point of failure. Peer-to-peer suits a few friends sharing files or a game: no server to buy, easy to set up, and each user keeps control of their own machine. The drawbacks the scheme lists: files are spread across many machines, so they are hard to back up and a file is unavailable when its owner's machine is off; each machine must be secured separately; and a peer that serves the others slows down. An online game played through a web browser with other users is the client-server model: the browser is the client, and the game and its shared virtual world run on the company's server, which keeps every player's view consistent.

    Six peer computers in a ring, each linked directly to every other peer, with no central server; every peer is both client and server
    In a peer-to-peer network, every node is both client and server
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    server/ˈsɜːvə/ máy chủ
    client/ˈklaɪənt/ client
    peer-to-peer/pɪə tə pɪə/ giao tiếp ngang hàng (peer-to-peer)
    2.1

    Thin and thick clients

    A thin client 瘦客户端 does little processing locally and relies on a powerful server (web terminals, remote desktops). A thick client 胖客户端 has strong local processing and storage and runs full applications itself (a normal desktop PC).

    Feature Thin client Thick client
    Local processing minimal substantial
    Local storage minimal substantial
    Reliance on network high lower
    Server load high lower

    The roles: in a thin-client model the server does the processing and stores the data, and the client only sends input and shows the output. A cheap terminal is enough, and everything is backed up and updated on the server, but nothing works if the network or the server fails. In a thick-client model the client runs the software and stores files itself, so it can work with no network connection and puts less load on the server, at the cost of more powerful (and more expensive) clients that must each be updated and secured. A school computer room can run thin clients (cheap, centrally managed); a video editor needs a thick client.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    thick client/θɪk ˈklaɪənt/ khách hàng dày
    thin client/θɪn ˈklaɪənt/ khách hàng mỏng
    2.1

    Network topologies

    The topology 拓扑 is how the nodes and links are arranged.

    • bus 总线 — all devices on one shared cable. Cheap; the whole LAN fails if the bus fails; performance drops as more devices share the bandwidth 带宽.
    • star 星形 — every device connects to a central switch. One device failing does not affect others; the switch failing brings all down. Most common today.
    • mesh 网状 — every device links directly to others, with many paths. Very fault-tolerant 容错 (traffic reroutes) but needs lots of cabling.
    • hybrid — a mix (a star in each office, mesh links between offices).
    Six computers each connected by a drop cable to one shared backbone cable, with a terminator block at each end
    Bus topology: all devices share one cable with a terminator at each end
    Five computers each connected by its own dedicated cable to a central hub or switch
    Star topology: every device connects to a central hub or switch
    Six computers in a ring with a direct cable between every pair of devices
    Mesh topology: every device links directly to the others
    Three star clusters, each a switch with its own computers, all joined by one shared bus backbone with a terminator at each end
    Hybrid topology: star clusters joined by a central bus

    How packets travel in each topology

    Bus: the sending device puts the packet on the shared cable; every device sees it, and only the one whose address matches accepts it. Only one device can transmit at a time, so collisions happen (CSMA/CD, below). Star: the sender passes the packet to the central switch, which reads the destination address and forwards it only down the cable to that device; two other devices can talk at the same time. Mesh: the packet is passed from node to node along one of several possible routes until it reaches the destination; if a link fails, another route is used.

    To justify a topology: a star for a classroom or an office (a failed cable affects one device; a device is easy to add; with a switch there are no collisions); a mesh where reliability matters most (a hospital, the internet's backbone); a bus only where cost matters and few devices share it. "Draw the star topology" means: the switch in the middle, one line from the switch to each computer, and the server (and the router, if there is one) on their own lines to the switch.

    Explore · ⁨Khám phá⁩

    Compare the network topologies · ⁨So sánh các cấu trúc mạng⁩

    Tap through the four topologies. Each trades off cost, speed and how well it survives a failure — notice what breaks the whole network in each one. · ⁨Nhấn vào bốn cấu trúc. Mỗi loại đánh đổi giữa chi phí, tốc độ và khả năng chịu lỗi — hãy chú ý những gì làm hỏng toàn bộ mạng trong từng loại.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    topology/təˈpɒlədʒi/ kiến trúc mạng
    bus/bʌs/ bus
    bandwidth/ˈbændwɪdθ/ băng thông
    star/stɑː/ ngôi sao
    mesh/meʃ/ mesh
    fault-tolerant/fɒlt ˈtɒlərənt/ chống lỗi
    2.1

    Cloud computing

    Cloud computing 云计算 delivers computing services (servers, storage, software) over the internet, hosted by a third party. Benefits: scalability 可扩展性 (pay for what you need), lower cost, access from anywhere, and reliable redundant data centres. Drawbacks: needs internet, your data is held by a third party, and possible vendor lock-in.

    For the one-mark definition: cloud computing is on-demand computing services (storage, processing, software) provided over the internet by a third party. A public cloud 公有云 is owned by a provider and shared by many customers over the internet; a private cloud 私有云 is dedicated to one organisation, on its own hardware or hosted for it alone. Benefits the scheme accepts: files are accessible from any device with an internet connection; storage scales up and down as needed; the provider handles the hardware, backups and security updates; there is no local server to buy or maintain. Drawbacks: no access without an internet connection; the data is on a third party's hardware, so security and privacy depend on the provider; an ongoing subscription cost; the provider could fail or be attacked; large files may be slow to transfer. A "why does the company use a public cloud" answer says that they need no hardware of their own, pay only for what they use, and their users can reach it from anywhere.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    cloud computing/klaʊd kəmˈpjuːtɪŋ/ điện toán đám mây
    scalability/ˌskeɪləˈbɪlɪti/ khả năng mở rộng
    public cloud/ˈpʌblɪk klaʊd/ đám mây công khai
    private cloud/ˈpraɪvət klaʊd/ đám mây riêng tư
    2.1

    Wired vs wireless

    • wired (Ethernet 以太网 over twisted-pair 双绞线 or fibre-optic 光纤): higher speed, lower latency, fewer errors, more secure.
    • wireless (Wi-Fi, Bluetooth, cellular): no cables, devices can move, but slower, prone to interference and eavesdropping.

    For the same generation, wired wins on speed and reliability; wireless wins on convenience.

    Transmission media

    Medium Characteristics
    copper cable (twisted pair, coaxial) cheap and easy to install; carries an electrical signal; affected by electromagnetic interference; the signal weakens with distance, so repeaters are needed; lower bandwidth than fibre
    fibre-optic cable light pulses in a glass core; very high bandwidth; long distances without repeaters; immune to interference; hard to tap, so secure; expensive and needs skilled installation
    radio waves (including WiFi) no cable, so devices can move; a range of tens of metres, weakened by walls; a shared frequency, so interference and lower speed; can be intercepted, so needs encryption
    microwaves higher-frequency radio for point-to-point links; needs a line of sight; affected by rain and buildings; high bandwidth
    satellites reach remote areas and the whole globe; a long delay (latency), because the signal travels to orbit and back; affected by weather; expensive

    The exam asks for the comparison in both directions. Wired beats wireless on speed, reliability (no interference), security (a cable must be physically tapped) and consistency; wireless beats wired on mobility, the cost of installation, and adding a device without cabling. Allowing both lets students move around with laptops and phones while the fixed desktops keep the faster, more secure connection, and a device with no network port can still connect. Satellite instead of copper reaches places no cable can, but with more delay, weather interference and higher cost.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    ethernet/ˈiːθənet/ ethernet
    twisted-pair/ˈtwɪstɪd peə/ cặp xoắn
    fibre-optic/ˈfaɪbə ˈɒptɪk/ sợi quang
    2.1

    LAN hardware

    • network interface card 网络接口卡 (NIC) — lets a device send and receive on the network; has a unique MAC address MAC地址 (a 48-bit hardware address). A wireless device uses a wireless network interface card 无线网络接口卡 (WNIC).
    • switch 交换机 — forwards Ethernet frames only to the port for the destination MAC address.
    • hub 集线器 — a simpler device that copies traffic to all ports (now obsolete).
    • wireless access point 无线接入点 (WAP) — lets wireless clients join a wired LAN.
    • cabling — twisted-pair for short runs; fibre-optic for longer, faster runs.
    • server — a computer that provides a service to the other devices: files, printing, web pages, email storage.
    • bridge 网桥 — joins two LAN segments into one network, passing traffic between them.
    • repeater 中继器 — receives a weakened signal and retransmits it at full strength, to extend a cable's reach.

    A WNIC's functions, for a four-mark describe: it converts the data into radio signals and back; it carries the device's unique MAC address; it connects the device to a wireless access point and follows the wireless protocol (which channel and frequency to use); and it decodes the incoming signals for the device. Two devices that can physically connect thirty computers with NICs: a switch, or a hub.

    A 5-port gigabit Ethernet switch on a white background, with five numbered RJ-45 ports along the front and a power light
    A network switch: each device's cable plugs into one of its ports
    A black Ethernet patch cable on a white background, with an RJ-45 plug at each end showing the gold metal contacts and the locking clip
    An RJ-45 plug on a twisted-pair Ethernet cable
    A frame addressed to computer C arrives at a switch, which forwards it out only the port for C, leaving the cables to A, B and D unused
    A switch sends each frame only to the port for its destination
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    switch/swɪtʃ/ công tắc
    hub/hʌb/ hub
    repeater/rɪˈpiːtə/ bộ khuếch đại tín hiệu (repeater)
    network interface card/ˈnetwɜːk ˈɪntəfeɪs kɑːd/ card giao tiếp mạng
    MAC address/mæk əˈdres/ Địa chỉ MAC
    wireless network interface card/ˈwaɪələs ˈnetwɜːk ˈɪntəfeɪs kɑːd/ card giao tiếp mạng không dây
    wireless access point/ˈwaɪələs ˈækses pɔɪnt/ điểm truy cập không dây
    bridge/brɪdʒ/ cầu nối (bridge)
    2.1

    Routers

    A router 路由器 connects different networks and forwards data between them — usually at the boundary of a LAN and the internet. It does:

    • forwarding — reads each packet 数据包's destination IP address IP地址 and sends it out the right port, using a routing table 路由表.
    • network address translation 网络地址转换 (NAT) — lets many private LAN addresses share one public IP.
    • DHCP 动态主机配置协议 — hands out private IP addresses to LAN devices.
    • firewall 防火墙 — blocks unwanted incoming traffic.

    In packet switching 分组交换 a message is split into packets that are sent independently. Each router reads a packet's destination IP address, looks up the next hop in its routing table and forwards it, so the packets of one message may take different routes and are reassembled in order at the destination. A router does receive packets, forward them between networks and hand out IP addresses; it does not find the IP address for a URL (DNS does that) and it does not store web pages. A home router also contains the modem and the wireless access point, so one box connects the LAN to the internet.

    A LAN of three computers and a server joined to a switch, which connects through a router to both the internet and another LAN or WAN
    A router connects a LAN to the internet or another network
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    packet/ˈpækɪt/ packet
    router/ˈruːtə/ router
    IP address/ˌaɪ ˈpiː əˈdres/ địa chỉ IP
    routing table/ˈraʊtɪŋ ˈteɪbl/ bảng định tuyến
    network address translation/ˈnetwɜːk əˈdres trænˈsleɪʃn/ chuyển đổi địa chỉ mạng (NAT)
    DHCP/ˌdiː eɪtʃ siː ˈpiː/ DHCP
    firewall/ˈfaɪəwɔːl/ tường lửa
    packet switching/ˈpækɪt ˈswɪtʃɪŋ/ chuyển mạch gói tin
    2.1

    Ethernet and CSMA/CD

    Ethernet is the standard (protocol) for wired LANs: devices are joined by twisted-pair or fibre cable, data is sent in frames that carry the source and destination MAC addresses, and a shared medium uses CSMA/CD to deal with collisions. On shared media a collision 冲突 can happen when two devices send at once. The protocol is CSMA/CD 载波侦听多路访问/冲突检测 (Carrier Sense Multiple Access with Collision Detection):

    1. carrier sense — listen before sending; wait if the cable is busy.
    2. multiple access — many devices share the medium.
    3. collision detection — keep listening while sending; a clash is a collision.
    4. on a collision, both stop, send a brief "jam" signal, then wait a random backoff time before retrying.

    The three tasks, in the scheme's words: the device listens (senses the carrier) before transmitting; it keeps checking for a collision while it transmits; on a collision it stops, sends a jam signal, waits a random time and retransmits.

    Modern switched Ethernet uses full-duplex 全双工 point-to-point links, so collisions no longer happen.

    A flowchart of the CSMA/CD process: assemble frame, check the line is idle, send, detect collisions, send a jam signal, back off and retry up to a maximum count
    The CSMA/CD process for handling collisions on shared media
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    collision/kəˈlɪʒn/ va chạm
    CSMA/CD/ˌsiː es em ˈeɪ ˌsiː ˈdiː/ CSMA/CD
    full-duplex/fʊl ˈdjuːpleks/ song song hoàn toàn
    2.1

    Bit streaming

    Bit streaming 流式传输 sends multimedia as a continuous stream that the receiver plays as it arrives, instead of downloading the whole file first.

    • real-time (live): captured and streamed as it happens (live sport, video calls). You cannot rewind; low latency is vital.
    • on-demand: pre-recorded on a server (YouTube, Netflix). You can pause and rewind; the server can buffer 缓冲 ahead.

    Real-time streaming works as a short pipeline:

    1. capture and sample the source (a camera or microphone).
    2. encode it, using compression 压缩 to shrink the data.
    3. send it across the network as packets.
    4. the receiver buffers a little, then plays it live — dropping any packet that arrives late, because a live stream cannot wait for it.

    Lossy 有损 compression is used here: moving pictures hide small losses, and the stream must be small enough to fit the bandwidth.

    Why a video is compressed before real-time streaming: the uncompressed stream would need more bandwidth than the connection has, so frames would arrive late and the playback would stall. Compression cuts the number of bits, so the bit rate 比特率 stays below the broadband speed, the delay stays small, and less storage and cost are needed at both ends. The bit rate must be lower than the connection's speed: a higher bit rate gives better quality but needs a faster connection, and if the data arrives more slowly than it is played, the buffer empties and the video freezes. On-demand streaming can buffer more of the file ahead, so it copes with a slower connection; real-time streaming cannot.

    Data flows from the source server into a buffer that fills between a low and a high mark, and the media player reads from the buffer
    Data streams from the server into a buffer before the media player reads it
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    bit streaming/bɪt ˈstriːmɪŋ/ stream bit
    buffer/ˈbʌfə/ dung dịch đệm
    compression/kəmˈpreʃn/ nén dữ liệu
    lossy/ˈlɒsi/ có mất mát
    bit rate/bɪt reɪt/ tốc độ bit
    2.1

    The internet and the World Wide Web

    The internet 互联网 is a global network of networks using a common protocol 协议 suite (TCP/IP). The World Wide Web 万维网 (WWW) is a service that runs over it: hyperlinked documents identified by URLs, viewed in browsers via HTTP/HTTPS. Email and file transfer are other internet services that are not part of the WWW.

    Webmail uses both: the WWW, because the mailbox is a web page reached through a URL in a browser over HTTP; and the internet, because the email itself travels across the network of networks (email is a separate internet service from the web).

    The World Wide Web is one service running on top of the Internet
    The Web is one service running on top of the Internet

    Hardware that supports the internet

    • modem 调制解调器 — converts the computer's digital signal into an analogue signal for a telephone line, and back again at the other end (modulation and demodulation).
    • PSTN — the public telephone network of exchanges and lines; a dial-up or DSL connection carries internet data over it.
    • dedicated line 专线 — a leased line between an organisation and its ISP: always on, with a fixed bandwidth that is not shared, so faster and more reliable, but expensive.
    • cell phone network 蜂窝网络 — the phone sends data by radio to the nearest cell tower (base station); the towers are linked to the phone company's network, which routes the data to the internet; as the phone moves, it is handed over from one cell to the next.
    Three lanes, one per way of reaching the internet: a home computer through a modem and the public switched telephone network; an office LAN over a dedicated leased line; a smartphone by radio to a cell tower and on through the cell phone network; all three end at the ISP
    Three ways to reach the internet: a modem and the PSTN, a dedicated line, and the cell phone network
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    internet/ˈɪntənet/ internet
    protocol/ˈprəʊtəkɒl/ giao thức
    modem/ˈməʊdem/ modem
    World Wide Web/wɜːld waɪd web/ World Wide Web
    dedicated line/ˈdedɪkeɪtɪd laɪn/ đường dẫn riêng biệt
    cell phone network/sel fəʊn ˈnetwɜːk/ mạng di động
    2.1

    IP addresses

    An IP address uniquely identifies a device.

    • IPv4 — 32-bit, four denary numbers 0–255 (192.168.1.10); about $4.3 \times 10^{9}$ addresses (now exhausted).
    • IPv6 — 128-bit, eight groups of four hex digits; about $3.4 \times 10^{38}$ addresses.

    IPv4 is written as four groups of denary numbers separated by dots; each group is an 8-bit number, so it runs from 0 to 255. IPv6 is written as eight groups of four hexadecimal digits separated by colons, 2001:0db8:0000:0000:0000:ff00:0042:8329, and a run of zero groups can be shortened to ::. So 192.168.3.2 is not IPv6: it has four groups, not eight, separated by dots rather than colons, and its groups are denary, not hexadecimal. 256.0.0.A is not a valid address of either kind: an IPv4 group cannot exceed 255 and cannot be a letter, and IPv6 would need colons and eight groups.

    Subnetting

    A network can be split into subnets 子网. The IP address splits into a network part and a host part, given by a subnet mask 子网掩码 (e.g. 255.255.255.0 = first 24 bits are network). Subnetting improves management, cuts broadcast traffic, and improves security.

    The two parts of an address in a subnetwork: the network ID (the first bits, the same for every device in that subnet, given by the ones in the mask) and the host ID (the remaining bits, unique to each device). Benefits of subnetting, for "describe two benefits": less traffic on each part, because broadcasts stay inside their subnet; better security, because one department's traffic is kept from the others; easier management and fault-finding; more efficient use of the addresses. Two devices with the mask 255.255.255.0 are in different subnets when their first three groups differ.

    Six department subnets, each with its own /24 netID, all connected through one central router that also reaches the internet
    Splitting a network into subnets, one netID per department

    Public vs private addresses

    • private addresses are used within a LAN and are not routable on the internet (e.g. 192.168.0.0/16).
    • a public IP address is globally unique and routable, assigned by an ISP 互联网服务提供商.

    Devices behind NAT with private addresses are not directly reachable from the internet, giving some protection.

    The descriptions the tables want: a public address is visible on the internet and unique across it, allocated by the ISP; a private address is visible only inside the LAN, is reused by many LANs, and needs NAT to reach the internet. A static address never changes (set by hand or reserved, as a server needs); a dynamic address is allocated by DHCP each time the device connects and may change.

    Static vs dynamic

    • a static IP address is fixed; used for servers that must be found at a known address.
    • a dynamic IP address is assigned by DHCP and may change; easier for client devices and uses a limited address pool efficiently.

    Worked example. A host has IP address 192.168.10.130 with subnet mask 255.255.255.192. Which network is it on, and is 192.168.10.200 on the same one? The mask's last octet, 192, is 11000000 in binary, so the first 26 bits are the network part and the last 6 bits address the host. That makes the subnets step in blocks of $256 - 192 = 64$: .0, .64, .128, .192. The address 130 falls in the block starting at .128, so the host is on network 192.168.10.128/26, whose usable hosts run .129 to .190 (.191 is the broadcast address). 200 falls in the next block (.192), so it is on a different subnet and traffic between the two must pass through a router. Get the block size from the mask first ($256$ minus the mask octet) - guessing from the first three octets is what makes these go wrong.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    ISP/ˌaɪ es ˈpiː/ ISP
    subnets/ˈsʌbnets/ subnets
    subnet mask/ˈsʌbnet mæsk/ masks mạng con
    2.1

    URL and DNS

    A URL 统一资源定位符 (Uniform Resource Locator) locates a resource on the WWW:

    https://www.example.com/about/contact.html
    protocol     domain name        path
    
    • protocol: http, https, etc.
    • domain name 域名: a readable server address.
    • path: the resource on that server.

    The Domain Name System 域名系统 (DNS, also called the Domain Name Service) is a distributed set of servers that turns domain names into IP addresses. When you type a URL, the browser asks a DNS resolver for the IP, which queries DNS servers (root → top-level → authoritative) until it finds it; the browser then connects to that IP and requests the path. DNS saves humans from memorising IP addresses and lets a site change server without changing its name.

    For "explain how the browser uses the URL": the browser splits the URL into the protocol, the domain name and the path; it sends the domain name to a DNS server, which returns the matching IP address (a cache on the computer or at the ISP may answer first); it opens a connection to that IP address using the protocol (HTTPS on port 443); it sends a request for the path; and the web server returns the page, which the browser renders. If the DNS lookup fails, the browser reports that the server cannot be found.

    Numbered one to five: the computer asks a DNS resolver for the IP, the resolver queries another DNS server, the IP is returned to the resolver and then the computer, and the browser connects to the website server
    How DNS finds a website's IP address before the browser connects
    Explore · ⁨Khám phá⁩

    How DNS finds a website · ⁨Cách DNS tìm kiếm một trang web⁩

    Step through a DNS lookup. The network routes by IP, not by name — so before anything loads, DNS must turn the domain name into an IP address. · ⁨Quá trình tra cứu DNS. Mạng định tuyến theo địa chỉ IP, không phải theo tên — vì vậy trước khi bất cứ thứ gì tải xuống, DNS phải chuyển đổi tên miền thành địa chỉ IP.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    URL/ˌjuː ɑː ˈel/ URL
    domain name/dəˈmeɪn neɪm/ tên miền
    Domain Name System/dəˈmeɪn neɪm ˈsɪstəm/ Hệ thống Tên miền (DNS)
    2.1

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly.

    Term Definition
    LAN a network covering a small geographical area, usually one site, whose hardware is owned by the organisation
    WAN a network covering a large geographical area, joining LANs through third-party (leased or public) links
    client-server a model in which client computers request services from a central, more powerful server that provides them
    peer-to-peer a model in which every computer is equal and can act as both client and server, with no central server
    thin client a client that does little processing or storage itself and depends on the server for both
    thick client a client that does its own processing and storage and can work without the server
    mesh topology a topology in which each device is connected directly to many others, giving more than one route between two devices
    cloud computing on-demand computing services (storage, processing, software) provided over the internet by a third party
    Ethernet the standard protocol for wired LANs, sending data in frames and using CSMA/CD on a shared medium
    switch a device that forwards each frame only to the port of its destination MAC address, within a LAN
    router a device that connects networks and forwards packets between them by their destination IP address
    bit streaming sending a continuous stream of bits so that the receiver plays the media as it arrives, without downloading the whole file first
    internet the global network of networks that uses the TCP/IP protocols
    World Wide Web the collection of hyperlinked web pages, identified by URLs and accessed over the internet through a browser
    URL the address that locates a resource on the web: protocol, domain name and path
    DNS the service that translates a domain name into the IP address of the server that holds the resource
    2.1

    Exam tips

    • Distinguish LAN vs WAN and client-server vs peer-to-peer by who stores and controls the resources.
    • Match each topology (bus, star, mesh) to its advantages and drawbacks (cost, reliability, collisions).
    • Know the job of each device: a switch directs within a LAN by MAC address, a router routes between networks by IP.
    • Explain bit streaming and why buffering is needed (data arrives at a different rate from playback).
    • Distinguish IPv4 vs IPv6 and public vs private addresses; DNS turns a URL into an IP address.

    Common mistakes

    • Saying a switch works by IP address. A switch forwards by MAC address inside the LAN; the router forwards by IP address between networks.
    • Treating the internet and the World Wide Web as the same thing. The web is one service that runs over the internet; email and file transfer are others.
    • Giving "faster" as the whole comparison of wired and wireless. Say faster and more reliable and more secure, and give the wireless side (mobility, no cabling) when the question asks for a comparison.
    • Writing that a router finds the IP address for a URL. DNS does that; the router forwards packets to it.
    • Describing IPv6 with dots and denary groups. Eight groups of four hexadecimal digits, separated by colons.
    • Drawing a star topology as a ring or a chain. Every device has its own line to the switch in the middle.
  • 3

    Hardware · ⁨Phần cứng⁩

    Watch lesson · ⁨Xem bài học⁩
    3.1

    Computers and their components

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the need for input, output, primary memory and secondary (including removable) storage
    Show understanding of embedded systems Including: benefits and drawbacks of embedded systems
    Describe the principal operations of hardware devices Including: Laser printer, 3D printer, microphone, speakers, magnetic hard disk, solid state (flash) memory, optical disc reader/writer, touchscreen, virtual reality headset
    Show understanding of the use of buffers
    Explain the differences between Random Access Memory (RAM) and Read Only Memory (ROM) Including their use in a range of devices and systems
    Explain the differences between Static RAM (SRAM) and Dynamic RAM (DRAM) Including the use of SRAM and DRAM in a range of devices and systems and the reasons for using one instead of the other depending on the device and its use
    Explain the difference between Programmable ROM (PROM), Erasable Programmable ROM (EPROM) and Electrically Erasable Programmable ROM (EEPROM)
    Show an understanding of monitoring and control systems Including: • difference between monitoring and control • use of sensors (including temperature, pressure, infra-red, sound) and actuators • importance of feedback
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về nhu cầu về nhập liệu, xuất liệu, b bộ nhớ chính và b bộ nhớ phụ (bao gồm cả lưu trữ có thể tháo rời)
    Thể hiện sự hiểu biết về hệ thống nhúng Bao gồm: lợi ích và nhược điểm của hệ thống nhúng
    Mô tả các hoạt động chính của thiết bị phần cứng Bao gồm: Máy in Laser, Máy in 3D, Microphone, Loa, Ổ cứng từ tính, Bộ nhớ bán dẫn (flash), Đầu đọc/ghi đĩa quang, Màn hình cảm ứng, Tai nghe thực tế ảo
    Thể hiện sự hiểu biết về việc sử dụng bộ đệm
    Giải thích sự khác biệt giữa Bộ nhớ truy cập ngẫu nhiên (RAM) và Bộ nhớ chỉ đọc (ROM) Bao gồm việc sử dụng chúng trong nhiều thiết bị và hệ thống khác nhau
    Giải thích sự khác biệt giữa RAM tĩnh (SRAM) và RAM động (DRAM) Bao gồm việc sử dụng SRAM và DRAM trong nhiều thiết bị và hệ thống khác nhau và lý do tại sao chọn loại này thay vì loại kia tùy thuộc vào thiết bị và mục đích sử dụng
    Giải thích sự khác biệt giữa ROM lập trình được (PROM), ROM lập trình được có thể xóa (EPROM) và ROM lập trình được có thể xóa bằng điện (EEPROM)
    Thể hiện sự hiểu biết về hệ thống giám sát và hệ thống điều khiển Bao gồm: • sự khác biệt giữa giám sát và điều khiển • sử dụng cảm biến (bao gồm nhiệt độ, áp suất, hồng ngoại, âm thanh) và cơ cấu chấp hành • tầm quan trọng của phản hồi

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A general-purpose computer has four building blocks:

    • input devices 输入设备 — get data in (keyboard, mouse, microphone, scanner, sensors).
    • output devices 输出设备 — give results out (monitor, speakers, printer, actuators).
    • primary memory 主存储器 — fast memory the processor 处理器 (CPU) reaches directly (RAM and ROM). Holds the running program and its data.
    • secondary storage 辅助存储器 — slower, larger, keeps programs and data when not in use (hard disk, SSD, optical disc, USB stick).

    The syllabus asks why each is needed. Input devices are needed because the computer can only work on data and instructions that have been entered. Output devices are needed to present the results in a form people can use. Primary memory is needed because the processor can only execute instructions and use data that are held in memory it can address directly, and it must reach them fast. Secondary storage is needed because primary memory is volatile and small: programs and data must survive the power being switched off, in a larger and cheaper store, and removable storage lets data be moved between computers or kept as a backup.

    A full-size white wireless QWERTY computer keyboard on a white background
    A keyboard: a common input device for typing text and commands
    A modern wireless computer mouse on a white background, with two buttons and a scroll wheel
    A mouse: a pointing input device
    A flatbed scanner on a white background, with a photo coming out of the front after scanning
    A flatbed scanner: an input device that turns a paper page into a digital image
    A silver flat-screen computer monitor on a round stand, with a dark screen
    A monitor: a common output device that displays the screen image
    Explore · ⁨Khám phá⁩

    Tap the blocks of a computer system · ⁨Chạm vào các khối của hệ thống máy tính⁩

    Explore the four blocks plus the CPU. Data flows input → processing → output, while primary memory holds the running program and secondary storage keeps it for later. · ⁨Khám phá bốn khối cộng với CPU. Dữ liệu chạy từ đầu vào → xử lý → đầu ra, trong khi bộ nhớ chính lưu chương trình đang chạy và bộ nhớ phụ lưu lại để dùng sau.⁩

    Explore · ⁨Khám phá⁩

    Network route lab · ⁨Phòng thí nghiệm định tuyến mạng⁩

    Follow data from a device through network hardware and protocols. · ⁨Theo dõi dữ liệu từ một thiết bị qua phần cứng mạng và giao thức.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    input devices/ˈɪnpʊt dɪˈvaɪsɪz/ thiết bị đầu vào
    output devices/ˈaʊtpʊt dɪˈvaɪsɪz/ thiết bị đầu ra
    primary memory/ˈpraɪməri ˈmeməri/ bộ nhớ chính
    processor/ˈprəʊsesə/ bộ xử lý
    secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ bộ nhớ phụ
    3.1

    Embedded systems

    An embedded system 嵌入式系统 is a computer built into another device to do one fixed job (washing machine, microwave, car engine unit, thermostat).

    • benefits: optimised for one task, so it is small, uses little power and is cheap to make in volume; reliable, because it runs one fixed program with few chances to go wrong; starts quickly and needs no user set-up; easy to use through a simple interface.
    • drawbacks: limited to its one task, so it cannot be upgraded to do more; hard to update (its firmware 固件 may need special tools or cannot be changed at all); difficult to troubleshoot, and usually the whole device must be replaced when it fails; if it is connected to a network it can be a security weakness, because its software is rarely patched.

    A "describe the drawbacks" question wants each drawback as a full point: what the limitation is and what it means for the user, for example "the firmware cannot be updated, so a security fault found later cannot be fixed".

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    embedded system/emˈbedɪd ˈsɪstəm/ hệ nhúng
    firmware/ˈfɜːmweə/ firmware
    3.1

    Principal hardware devices

    Laser printer

    A laser printer 激光打印机 scans the page image onto a charged photosensitive drum 感光鼓. Toner 墨粉 sticks to the charged areas, transfers to the paper, and is melted on by a fuser. Fast, sharp, high-volume.

    A black desktop laser printer on a white background, with a printed page coming out of the top
    A laser printer: fast, sharp printing using a charged drum and toner

    How it works, in the steps the mark scheme lists:

    1. The data for the page is sent to the printer's buffer.
    2. The drum is given a uniform electrostatic charge.
    3. A laser, reflected off a rotating mirror, scans the page image onto the drum, removing the charge where it strikes, so the charge left on the drum matches the image.
    4. Toner, a charged powder, is attracted to the charged parts of the drum only.
    5. The paper is given the opposite charge and rolled against the drum, so the toner transfers onto it.
    6. The fuser 定影器, a pair of heated rollers, melts the toner into the paper. The drum is then discharged and cleaned for the next page.

    3D printer

    A 3D printer 3D打印机 builds an object layer by layer: FDM melts plastic filament through a nozzle; stereolithography cures liquid resin with a UV laser. Used for prototypes and custom medical parts.

    A black enclosed desktop FDM 3D printer with a glass front panel, a part being printed inside, on a white background
    An FDM 3D printer builds an object layer by layer by melting plastic filament

    How it works:

    1. A model of the object is designed in CAD software (or scanned).
    2. Slicing software divides the model into thin horizontal layers and produces the instructions for each one.
    3. The printer builds the object one layer at a time: an FDM printer melts plastic filament 塑料丝 and lays it down through a moving nozzle; a resin printer cures liquid resin with a laser or UV light; a powder printer fuses powder with a laser.
    4. Each layer bonds to the layer below, and the platform (or nozzle) moves by one layer's thickness.
    5. When the last layer is done, any support material is removed. Uses include prototypes, custom medical parts such as prosthetics, and spare parts printed on demand.

    Microphone and speakers

    A microphone 麦克风 turns sound into an electrical signal (a diaphragm vibrates, changing capacitor 电容器 charge or coil position); the signal is digitised by an analogue-to-digital converter 模数转换器 (ADC). A speaker does the reverse — a varying signal drives a coil in a magnetic field, moving a cone to make sound.

    A black USB desktop microphone standing on its base, on a white background
    A microphone turns sound into an electrical signal
    Cutaway of a microphone: sound waves hit a diaphragm linked to a coil around a permanent magnet, giving an output current
    Inside a microphone: sound vibrates the diaphragm and coil to produce a current
    Cutaway of a loudspeaker: current in a coil around an iron core near a permanent magnet moves a paper cone to produce sound waves
    Inside a loudspeaker: a varying current in the coil moves the cone to make sound

    How a microphone works: sound waves make a diaphragm 膜片 vibrate; in a dynamic microphone a coil attached to the diaphragm moves in a magnetic field, so a varying current is induced in it, and in a condenser microphone the diaphragm is one plate of a capacitor whose capacitance changes as it moves; the varying analogue signal is then sampled by an ADC and stored as digital data. A speaker runs the chain backwards: a digital-to-analogue converter 数模转换器 (DAC) produces a varying current, the current in the coil creates a changing magnetic field that pushes against the permanent magnet, the coil and cone move in and out, and the cone's movement makes pressure waves in the air.

    Magnetic hard disk (HDD)

    A hard disk 硬盘 stores data on spinning platters coated with magnetic material. Each platter has tracks 磁道 divided into sectors 扇区. A read/write head 读写头 floats just above and magnetises tiny regions (write) or senses them (read). Cheap per gigabyte, but slower than SSDs and has moving parts.

    An opened 3.5-inch hard disk drive: a shiny circular platter with the actuator arm and read/write head resting over it
    An opened hard disk: the actuator arm carries the read/write head over a platter
    A hard disk platter drawn as concentric track circles, one track highlighted, divided into sectors
    Tracks and sectors on a hard disk platter

    How it works: the platters spin at high speed (thousands of revolutions per minute); each surface is divided into concentric tracks and each track into sectors; read/write heads on actuator arms 磁头臂 move across the platters to the right track; to write, the head magnetises a tiny region with one of two polarities, representing 0 or 1; to read, it detects the polarity as the region passes beneath it. The delays, waiting for the arm to reach the track and for the sector to spin round, are why a hard disk is slower than an SSD.

    Solid-state (flash) memory

    A solid-state drive 固态硬盘 stores data as charge in transistors 晶体管, with no moving parts. Faster random access than HDDs, tougher, lower power, but dearer per gigabyte; each cell wears out after many writes.

    The opened circuit board of a solid-state drive on a white background: a large black flash-memory chip on the left, a smaller controller chip, many tiny components, and a flat SATA connector along the bottom edge — no platters or moving parts
    Inside an SSD: data is stored in flash memory chips, with no moving parts (compare the hard disk above)

    How it works: each cell is a floating-gate transistor 浮栅晶体管; a charge trapped on the floating gate represents a bit and stays there when the power is off; a controller chip maps each address to a cell and spreads writes across the cells, because a cell survives only a limited number of writes.

    Magnetic hard disk Solid-state drive
    Moving parts platters and heads none
    Speed slower: seek and rotation delays much faster random access
    Cost per gigabyte lower higher
    Robustness damaged by knocks; noisy; more power shock-resistant; silent; less power
    Lifetime many rewrites; wears mechanically limited write cycles per cell

    A "why a server uses hard disks rather than SSDs" question wants the left column: cheaper per gigabyte for very large capacities, a long life under constant rewriting, and easier data recovery.

    Optical disc

    A laser detects reflections from tiny pits on an optical disc 光盘 (CD, DVD, Blu-ray). The drive is an optical disc reader/writer: writing uses a stronger laser to change the surface's reflectivity.

    An external optical disc drive on a white background, its tray open with a rainbow-coloured disc loaded
    An optical disc drive: a laser reads tiny pits on a CD, DVD or Blu-ray disc

    How it works: the disc carries one long spiral track of pits 凹坑 and lands 平台 (the flat areas between them); the disc spins and a laser is focused on the track; light reflected from a land differs from light reflected at the edge of a pit, and a light sensor reads each change as a 1 and no change as a 0. Writing uses a stronger laser to change the reflectivity of a dye or alloy layer. A Blu-ray uses a blue laser with a shorter wavelength, so its pits are smaller and closer together, which is why it holds more data than a DVD.

    Touchscreen

    A touchscreen 触摸屏 senses contact. Resistive 电阻式: two conductive layers pressed together; works with anything but is less accurate. Capacitive 电容式: a finger disturbs a charge field; accurate, multi-touch, used in phones.

    People using a tablet touchscreen and a laptop
    A touchscreen senses where a finger touches the glass

    How it works: a resistive screen has two thin conductive layers separated by spacers; pressing pushes the top layer onto the bottom one, closing a circuit at that point, and the controller reads the voltage to find the coordinates. A capacitive screen has a glass layer coated with a transparent conductor that holds a charge; a finger touching it draws a tiny current, the current is measured at each corner, and the controller works out the touch position from the differences. Capacitive screens respond to a light touch and to several fingers at once, but not to a gloved finger or an ordinary stylus.

    Virtual reality headset

    A virtual reality 虚拟现实 (VR) headset has two small displays (one per eye) and motion sensors (accelerometer 加速度计, gyroscope 陀螺仪) that track head movement so the scene shifts as you look around.

    A white virtual reality headset with its head strap and front cameras, on a white background
    A virtual reality headset: two small displays and motion sensors track the head

    How it works: each eye sees its own display through a lens, and the two images differ slightly, so the brain sees depth; sensors (accelerometer, gyroscope, sometimes cameras) report where the head is and which way it points; the computer re-renders the scene from that viewpoint many times a second, so turning the head turns the view; headphones give sound that matches the direction. Used for games, for training such as flight or surgery simulators, and for viewing designs before they are built.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    microphone/ˈmaɪkrəfəʊn/ micro
    hard disk/hɑːd dɪsk/ ổ cứng
    optical disc/ˈɒptɪkl dɪsk/ đĩa quang
    laser printer/ˈleɪzə ˈprɪntə/ máy in laser
    drum/drʌm/ trống
    toner/ˈtəʊnə/ mực in
    fuser/ˈfjuːsə/ thiết bị định hình
    3D printer/ˌθriː ˈdiː ˈprɪntə/ Máy in 3D
    filament/ˈfɪləmənt/ sợi vật liệu in
    diaphragm/ˈdaɪəfræm/ phân隔膜 (điaphragm)
    capacitor/kəˈpæsɪtə/ tụ điện
    analogue-to-digital converter/ˈænəlɒɡ tə ˈdɪdʒɪtl kənˈvɜːtə/ bộ chuyển đổi tín hiệu tương tự sang số
    digital-to-analogue converter/ˈdɪdʒɪtl tʊ ˈænəlɒɡ kənˈvɜːtə/ bộ chuyển đổi tín hiệu số sang tương tự
    tracks/træks/ vòng từ
    sectors/ˈsektəz/ hình quạt
    read/write head/riːd raɪt hed/ đầu đọc/ghi
    actuator arms/ˈæktʃuːeɪtə ɑːmz/ cánh tay actuator
    solid-state drive/ˈsɒlɪd steɪt draɪv/ Ổ SSD
    transistors/trænˈzɪstəz/ transistors
    floating-gate transistor/ˈfləʊtɪŋ ɡeɪt trænˈzɪstə/ transistor cổng nổi
    pits/pɪts/ pits
    lands/lændz/ lands
    touchscreen/ˈtʌtʃskriːn/ màn hình cảm ứng
    resistive/rɪˈzɪstɪv/ điện trở
    capacitive/kəˈpæsɪtɪv/ dung kháng
    virtual reality/ˈvɜːtʃuːəl rɪˈælɪti/ thực tế ảo
    accelerometer/əkˌseləˈrɒmɪtə/ gia tốc kế
    gyroscope/ˈdʒaɪrəskəʊp/ con quay hồi chuyển
    3.1

    Buffers

    A buffer 缓冲 is memory that holds data temporarily while it moves between devices of different speeds. Example: the CPU writes a document to a printer buffer quickly, then is free to do other work while the printer prints from the buffer at its own pace. Buffers stop the fast device waiting for the slow one (also used in streaming, the keyboard, and disk access).

    "State why a 3D printer needs a buffer": the computer sends the print data much faster than the printer can build the layers, so the data is held in the buffer until the printer is ready for it, and the processor is freed to do other work. When the buffer runs low the printer sends an interrupt 中断 to ask for more (topic 4). A video stream works the same way: the buffer fills ahead of playback so a short drop in the network speed does not stop the picture.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    buffer/ˈbʌfə/ dung dịch đệm
    interrupt/ˈɪntərʌpt/ ngắt
    3.1

    RAM and ROM

    • RAM 随机存取存储器 (Random Access Memory) — volatile 易失性 (loses data without power). Holds the OS, running programs and their data; read and written constantly.
    • ROM 只读存储器 (Read-Only Memory) — non-volatile 非易失性 (keeps data without power). Usually written once; holds firmware needed at start-up (the BIOS / boot loader).
    RAM is volatile and read/write; ROM is non-volatile and read-only
    RAM is volatile and read/write; ROM is non-volatile and read-only

    ROM starts the system; RAM then holds the active work.

    RAM ROM
    Volatile? yes: contents lost when the power is off no: contents kept without power
    Read/write? read and written constantly read only in normal use
    Holds the operating system, running programs and their data the firmware and bootstrap program that start the computer
    Size large, and can usually be increased small and fixed
    Typical use the main memory of a computer or phone the start-up code of a PC; the whole program of an embedded system such as a washing machine

    More RAM lets a computer hold more programs and data at once, so it swaps less between memory and disk and runs faster; that is the answer to "explain why the computer with more RAM performs better".

    A RAM module (DIMM): a circuit-board stick with a black heat-spreader over the memory chips and a gold-edged connector that plugs into a slot on the motherboard
    A RAM module (DIMM) plugs into the motherboard as the computer's fast main memory

    The same memory split matters in a wearable device: its fixed program must remain available after power off, while its live readings change during use.

    A heart-rate monitor worn on a runner's wrist
    A wrist-worn heart-rate monitor
    Explore · ⁨Khám phá⁩

    Device and storage lab · ⁨Phòng thí nghiệm thiết bị và lưu trữ⁩

    Classify computing examples by what job they do in a system. · ⁨Phân loại các ví dụ về máy tính dựa trên công việc chúng thực hiện trong hệ thống.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    RAM/ræm/ RAM
    ROM/rɒm/ ROM
    volatile/ˈvɒlətaɪl/ thay đổi khi mất nguồn
    non-volatile/nɒn ˈvɒlətaɪl/ phi thay đổi khi mất nguồn
    3.1

    SRAM vs DRAM

    • SRAM 静态RAM (Static RAM) stores each bit in a flip-flop 触发器 of several transistors. Fast, but expensive and not dense. Used for CPU cache 高速缓存.
    • DRAM 动态RAM (Dynamic RAM) stores each bit as charge on a tiny capacitor. Cheaper and denser but slower, and must be refreshed 刷新 (rewritten) thousands of times a second. Used for main memory.

    Use SRAM for small fast memory (cache); DRAM for large main memory.

    SRAM DRAM
    Each bit stored in a flip-flop of several transistors one capacitor and one transistor
    Needs refreshing? no yes, thousands of times a second
    Speed faster slower
    Density and cost fewer bits per chip, more expensive more bits per chip, cheaper
    Power uses less power when idle uses more, because of the refresh
    Used for processor cache main memory, including in embedded systems

    "Explain why the embedded system uses DRAM": it needs a large amount of memory at low cost in a small space, and its speed requirement is modest, so the cheaper, denser DRAM is the right choice; SRAM is kept for the small cache where speed matters most.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    SRAM/ˈesræm/ SRAM
    DRAM/ˈdiːræm/ DRAM
    flip-flop/flɪp flɒp/ flip-flop
    cache/kæʃ/ cache
    refreshed/rɪˈfreʃt/ làm mới
    3.1

    PROM, EPROM and EEPROM

    ROM variants you can program after manufacture:

    • PROM (Programmable ROM) — written once (fuses burned by a programmer); cannot be changed.
    • EPROM (Erasable Programmable ROM) — erased by strong UV light through a window, then rewritten (whole chip at once).
    • EEPROM (Electrically Erasable Programmable ROM) — erased and rewritten electrically, a byte at a time, in circuit. Flash memory is a derivative optimised for block erase.
    A black EPROM chip with a circular quartz window exposing its silicon die
    An EPROM chip with a window for ultraviolet erasure
    PROM EPROM EEPROM
    Written once, by the user with a programmer many times many times
    Erased by cannot be erased ultraviolet light through a quartz window an electrical signal
    Erases nothing the whole chip at once a byte or block at a time
    Must be removed from the circuit to reprogram? not applicable yes no

    "Give two differences between EPROM and EEPROM" wants two rows of this table, each stated for both types.

    3.1

    Monitoring and control systems

    Both read sensors; the difference is what they do next.

    • monitoring 监控 — collects and reports data but takes no action (a weather station logging readings).
    • control system 控制系统 — uses sensor data to decide and act through actuators, usually in a feedback loop (a thermostat turning a boiler on/off).

    The three-mark "describe the differences" answer: a monitoring system only measures, records or displays the readings, and at most raises a warning; a control system compares each reading with a preset value 预设值 and, if it is outside the range, sends signals to actuators that change the physical process; the change is then measured again, so a control system contains feedback and a monitoring system does not. Whether a given system is one or the other is decided by that test: a bridge system that measures a vehicle's height and switches on a warning sign is monitoring, because nothing it does changes the vehicle; a system that lowers a barrier is control.

    Worked example. Describe how an automated system opens a door when a person is within 2 metres and closes it when nobody is.

    An infra-red or ultrasonic sensor measures the distance to anything in front of the door; the analogue reading is converted to digital by an ADC and sent to the processor; the processor compares the distance with the preset 2 metres; if it is less, the processor sends a signal to the actuator (a motor) to open the door; the sensor keeps measuring, and when no reading below 2 metres is received the processor signals the motor to close the door. The repeated measuring after each action is the feedback that stops the door opening and closing at the wrong times.

    Flowchart: sensors send signals through an ADC to the processor, which either reports a warning for monitoring or sends signals to actuators in a feedback loop for control
    Monitoring reports data; a control system acts through a feedback loop

    Sensors and actuators

    A sensor 传感器 turns a physical quantity into a signal: temperature (a thermistor 热敏电阻 or thermocouple), pressure (strain gauge), infra-red, sound. Analogue signals need an ADC first. An actuator 执行器 does the reverse — turns a signal into an action (a motor, valve, heater, buzzer).

    Small bead thermistors with two wire legs each, on a white background
    A thermistor: a temperature sensor whose resistance changes with heat
    A small metal stepper motor with a central shaft and coloured wires, on a dark studio background
    A small electric motor: an actuator that turns a signal into movement

    Feedback

    In a control system the actuator changes the environment, which the sensors then re-measure — a feedback 反馈 loop. Without feedback the system cannot correct itself or know when to stop (a thermostat with no temperature feedback would heat forever).

    Explore · ⁨Khám phá⁩

    The control feedback loop · ⁨Vòng phản hồi điều khiển⁩

    Tap round the loop a thermostat or autopilot repeats. A control system doesn't just read the world — it acts, then re-measures, correcting itself again and again. · ⁨Hãy xem xét vòng lặp mà một bộ điều nhiệt hoặc hệ thống lái tự động lặp lại. Một hệ thống điều khiển không chỉ đọc thế giới — nó hành động, rồi đo lại, sửa mình đi sửa mình đi.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    sensor/ˈsensə/ cảm biến
    actuator/ˈæktʃuːeɪtə/ cơ cấu tác động
    monitoring/ˈmɒnɪtərɪŋ/ giám sát
    control system/kənˈtrəʊl ˈsɪstəm/ hệ thống điều khiển
    feedback/ˈfiːdbæk/ phản hồi
    preset value/ˈpriːset ˈvæljuː/ giá trị cài đặt trước
    thermistor/ˈθɜːmɪstə/ nhiệt điện trở
    3.2

    Logic gates

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Use the following logic gate symbols: [NOT, AND, OR, NAND, NOR, XOR]
    Understand and define the functions of: NOT, AND, OR, NAND, NOR and XOR (EOR) gates All gates except the NOT gate will have two inputs only.
    Construct the truth table for each of the logic gates above
    Construct a logic circuit From: • a problem statement • a logic expression • a truth table
    Construct a truth table From: • a problem statement • a logic circuit • a logic expression
    Construct a logic expression From: • a problem statement • a logic circuit • a truth table
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Sử dụng các ký hiệu cổng logic sau: [NOT, AND, OR, NAND, NOR, XOR]
    Hiểu và định nghĩa chức năng của: các cổng NOT, AND, OR, NAND, NOR và XOR (EOR) Tất cả các cổng trừ NOT sẽ chỉ có hai đầu vào.
    Xây dựng bảng chân trị cho từng cổng logic ở trên
    Xây dựng một mạch logic Từ: • bài toán phát biểu • biểu thức logic • bảng chân trị
    Xây dựng một bảng chân trị Từ: • bài toán phát biểu • mạch logic • biểu thức logic
    Xây dựng một biểu thức logic Từ: • bài toán phát biểu • mạch logic • bảng chân trị

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    The half adder: XOR + AND add two bits

    A logic gate 逻辑门 is a small circuit that does one Boolean 布尔 operation. Inputs and outputs are 0 (false, low) or 1 (true, high). Know the symbol, function and truth table 真值表 for each gate.

    The circuit symbols for NOT, AND, OR, NAND, NOR and XOR gates in a two-by-three grid
    The symbols for the six logic gates

    NOT (inverter)

    A NOT A
    0 1
    1 0

    AND — output 1 only if all inputs are 1

    A B A AND B
    0 0 0
    0 1 0
    1 0 0
    1 1 1

    OR — output 1 if at least one input is 1

    A B A OR B
    0 0 0
    0 1 1
    1 0 1
    1 1 1

    NAND (NOT AND) — output 0 only when all inputs are 1

    A B A NAND B
    0 0 1
    0 1 1
    1 0 1
    1 1 0

    NOR (NOT OR) — output 1 only when all inputs are 0

    A B A NOR B
    0 0 1
    0 1 0
    1 0 0
    1 1 0

    XOR (Exclusive OR, also called EOR) — output 1 if the inputs are different

    A B A XOR B
    0 0 0
    0 1 1
    1 0 1
    1 1 0
    Explore · ⁨Khám phá⁩

    Logic gates · ⁨Cổng logic⁩

    Switch the inputs and pick a gate. Each gate has its own rule — the building blocks of every digital circuit. · ⁨Chuyển đổi đầu vào và chọn một cổng. Mỗi cổng có quy tắc riêng — những khối xây dựng của mọi mạch kỹ thuật số.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    logic gate/ˈlɒdʒɪk ɡeɪt/ cổng logic
    Boolean/ˈbuːlɪən/ Boolean
    truth table/truːθ ˈteɪbl/ bảng chân lý
    3.2

    Logic circuits

    A logic circuit 逻辑电路 is a network of gates that carries out a Boolean expression. You should be able to move between a problem statement, a logic expression, a truth table, and a circuit diagram.

    The paper writes expressions in words, X = (A AND NOT B) OR (B AND C), and accepts the algebraic form $X = A\overline{B} + BC$ where a dot (or nothing) is AND, a plus is OR, and a bar is NOT. Use whichever the question uses.

    From expression to circuit

    Draw one gate per operator and wire them up. For $X = (A \text{ AND } B) \text{ OR } (\text{NOT } C)$: a NOT gate on $C$, an AND gate on $A$ and $B$, then an OR gate on the two results.

    A logic circuit: an AND gate on inputs A and B, a NOT gate on input C, both feeding an OR gate that gives output X
    Gates wired together to carry out a Boolean expression

    From circuit to expression

    Work forwards from the inputs, labelling each gate's output, until you reach the final output.

    Worked example. Write the expression for the circuit below, then complete its truth table.

    A logic circuit with inputs A, B and C. B passes through a NOT gate; A and NOT B feed an AND gate whose output is labelled P; B and C feed a second AND gate whose output is labelled Q; P and Q feed an OR gate whose output is X
    Label every intermediate output: here P is A AND NOT B and Q is B AND C, so X is P OR Q

    Label the gate outputs: $P = A \text{ AND NOT } B$, $Q = B \text{ AND } C$, so $X = P \text{ OR } Q = (A \text{ AND NOT } B) \text{ OR } (B \text{ AND } C)$. Then give the truth table a column for each intermediate output, so every row can be checked one gate at a time:

    A B C NOT B P Q X
    0 0 0 1 0 0 0
    0 0 1 1 0 0 0
    0 1 0 0 0 0 0
    0 1 1 0 0 1 1
    1 0 0 1 1 0 1
    1 0 1 1 1 0 1
    1 1 0 0 0 0 0
    1 1 1 0 0 1 1

    Drawing a circuit from an expression is the same walk in reverse: start from the innermost brackets, draw one gate per operator, draw a NOT gate on the wire of any input that appears with NOT, keep the inputs on the left and the single output on the right, and label the output with its letter. Every line must end at a gate input or the output; a line that goes nowhere loses the mark.

    From circuit to truth table

    For $n$ inputs there are $2^{n}$ rows. List every input combination; for each, work out the internal gates then the output.

    From truth table to expression (sum of products)

    For each row that outputs 1, write an AND of the inputs (with NOT on any input that is 0 in that row); OR these together. Example: a table that is 1 only on $(A=0,B=1)$ and $(A=1,B=0)$ gives $\overline{A}B + A\overline{B}$, which is $A \text{ XOR } B$.

    From a problem statement

    Turn the English into a Boolean expression first: "A and B" → A AND B; "A or B or both" → A OR B; "exactly one of A and B" → A XOR B; "neither A nor B" → A NOR B; "not both" → A NAND B.

    Worked example. A machine's alarm $X$ sounds when the guard is open ($A=1$) and either the motor is running ($B=1$) or the temperature is high ($C=1$). Write the Boolean expression, and give the rows where $X=1$. Turn the English into logic one clause at a time: "either B or C" is $B + C$, and "A and that" is $X = A\cdot(B + C)$. For the rows, $X=1$ needs $A=1$ and at least one of $B$, $C$ equal to 1 - so $(A,B,C) = (1,0,1)$, $(1,1,0)$ and $(1,1,1)$, three rows out of eight. Notice $A=0$ can never sound the alarm, whatever $B$ and $C$ do. Bracket the OR before ANDing it: $X = A\cdot B + C$ is a different circuit altogether, one that would sound the alarm on a high temperature even with the guard closed.

    Explore · ⁨Khám phá⁩

    Half adder · ⁨Toán tử cộng bán phần⁩

    Wire XOR and AND to the same two inputs: XOR gives the sum bit, AND gives the carry. Click A and B. · ⁨Dây XOR và AND nối với cùng hai đầu vào: XOR cho bit tổng, AND cho bit nhớ. Nhấp vào A và B.⁩

    Explore · ⁨Khám phá⁩

    Logic circuits · ⁨Mạch logic⁩

    gates combine into circuits · ⁨các cổng kết hợp thành mạch⁩

    Each gate has a fixed rule; chaining them builds every circuit — start with one gate. · ⁨Mỗi cổng có quy tắc cố định; nối chuỗi chúng lại xây dựng nên mọi mạch — hãy bắt đầu từ một cổng.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    logic circuit/ˈlɒdʒɪk ˈsɜːkɪt/ mạch logic
    3.2

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    embedded system a computer system with a dedicated function built into a larger device
    buffer an area of memory that temporarily stores data while it is transferred between devices working at different speeds
    RAM volatile memory that can be read from and written to, holding the programs and data in use
    ROM non-volatile memory whose contents cannot be changed in normal use, holding the start-up instructions
    SRAM static RAM that stores each bit in a flip-flop and needs no refreshing
    DRAM dynamic RAM that stores each bit as a charge on a capacitor and must be refreshed continually
    monitoring system a system that uses sensors to measure and report on a physical process without changing it
    control system a system that uses sensor readings to decide on and carry out actions, through actuators, that change a physical process
    sensor a device that measures a physical quantity and converts it into a signal for the computer
    actuator a device that converts a signal from the computer into a physical action
    feedback the output of a control system being measured and fed back as input so that the system can correct itself
    logic gate an electronic circuit that performs a Boolean operation on one or more binary inputs to give one binary output
    truth table a table listing every combination of inputs to a logic circuit with the output for each
    3.2

    Exam tips

    • Distinguish RAM (volatile, read/write) from ROM (non-volatile, holds the bootstrap); SRAM (cache, faster) from DRAM (main memory, needs refreshing).
    • For a logic circuit, build the Boolean expression gate by gate, then a truth table covering every input combination.
    • Learn the symbol, expression and truth table for each gate (AND, OR, NOT, NAND, NOR, XOR).
    • Explain a buffer (a temporary store bridging two different speeds) and the role of an interrupt.

    Common mistakes

    • Naming the device instead of describing its operation. "It uses a laser" earns nothing; the steps (charge the drum, laser removes charge, toner attracted, transferred, fused) earn the marks.
    • Saying a monitoring system "controls" something. If nothing changes the physical process, it is monitoring; add the actuator and the feedback and it becomes control.
    • Writing that RAM "stores files permanently" or that ROM "stores the user's data". RAM is volatile working memory; ROM holds the fixed start-up instructions.
    • A truth table with fewer than $2^{n}$ rows, or rows in a random order. Count in binary from 000 to 111 so no combination is missed.
    • Drawing two lines from one output of a gate to be safe, or leaving a wire that ends nowhere. Draw exactly the connections the expression needs.
  • 4

    Processor Fundamentals · ⁨Nguyên lý xử lý⁩

    Watch lesson · ⁨Xem bài học⁩
    4.1

    Von Neumann architecture · ⁨Kiến trúc Von Neumann⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the basic Von Neumann model for a computer system and the stored program concept
    Show understanding of the purpose and role of registers, including the difference between general purpose and special purpose registers Special purpose registers including: • Program Counter (PC) • Memory Data Register (MDR) • Memory Address Register (MAR) • The Accumulator (ACC) • Index Register (IX) • Current Instruction Register (CIR) • Status Register
    Show understanding of the purpose and roles of the Arithmetic and Logic Unit (ALU), Control Unit (CU) and system clock, Immediate Access Store (IAS)
    Show understanding of how data are transferred between various components of the computer system using the address bus, data bus and control bus
    Show understanding of how factors contribute to the performance of the computer system Including: • processor type and number of cores • the bus width • clock speed • cache memory
    Understand how different ports provide connection to peripheral devices Including connection to: • Universal Serial Bus (USB) • High Definition Multimedia Interface (HDMI) • Video Graphics Array (VGA)
    Describe the stages of the Fetch-Execute (F-E) cycle Describe and use 'register transfer' notation to describe the F-E cycle
    Show understanding of the purpose of interrupts Including: • possible causes of interrupts • applications of interrupts • use of an Interrupt Service Routine (ISR) • when interrupts are detected during the fetch-execute cycle • how interrupts are handled
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về mô hình Von Neumann cơ bản cho hệ thống máy tính và khái niệm chương trình lưu trữ
    Thể hiện sự hiểu biết về mục đích và vai trò của b bộ đếm (registers), bao gồm sự khác biệt giữa b bộ đếm mục đích chung và b bộ đếm mục đích đặc biệt B bộ đếm mục đích đặc biệt bao gồm: • B bộ đếm chương trình (PC) • B bộ đếm dữ liệu bộ nhớ (MDR) • B bộ đếm địa chỉ bộ nhớ (MAR) • B bộ tích lũy (ACC) • B bộ đếm chỉ mục (IX) • B bộ đếm lệnh hiện tại (CIR) • B bộ đếm trạng thái
    Thể hiện sự hiểu biết về mục đích và vai trò của Đơn vị số học và Logic (ALU), Đơn vị điều khiển (CU) và đồng hồ hệ thống, Bộ nhớ truy cập ngay (IAS)
    Thể hiện sự hiểu biết về cách dữ liệu được truyền tải giữa các thành phần khác nhau của hệ thống máy tính sử dụng 总线 địa chỉ (address bus), 总线 dữ liệu (data bus) và 总线 điều khiển (control bus)
    Thể hiện sự hiểu biết về các yếu tố đóng góp vào hiệu suất của hệ thống máy tính Bao gồm: • loại bộ xử lý và số lượng lõi • chiều rộng总线 • tốc độ xung nhịp • b bộ nhớ đệm (cache memory)
    Hiểu cách các cổng kết nối (ports) khác nhau cung cấp kết nối với thiết bị ngoại vi Bao gồm kết nối với: • Bus Serial phổ quát (USB) • Giao diện đa phương tiện độ phân giải cao (HDMI) • Mảng đồ họa video (VGA)
    Mô tả các giai đoạn của chu kỳ Lấy - Thực thi (F-E) Mô tả và sử dụng ký hiệu 'truyền b bộ đếm' để mô tả chu kỳ F-E
    Thể hiện sự hiểu biết về mục đích của ngắt Bao gồm: • các nguyên nhân có thể gây ra ngắt • ứng dụng của ngắt • sử dụng Thuật toán dịch vụ ngắt (ISR) • thời điểm ngắt được phát hiện trong chu kỳ lấy-thực thi • cách ngắt được xử lý

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English
    The fetch-decode-execute cycle

    The Von Neumann architecture 冯·诺依曼体系结构 underlies almost every general-purpose computer:

    • a single memory — the Immediate Access Store 立即存取存储器 (IAS) — holds both program instructions and data (the stored program 存储程序 concept).
    • a processor 处理器 (CPU) fetches instructions from memory and runs them one at a time.
    • instructions run in order unless a branch changes the flow.

    The stored-program idea is what makes a computer flexible: change the program and you change what it does, with no rewiring.

    Tiếng Việt
    Chu kỳ lấy - giải mã - thực thi

    Kiến trúc Von Neumann· nằm ở nền tảng của hầu hết mọi máy tính đa năng:

    • một bộ nhớ duy nhất — Bộ nhớ Truy cập Ngay (IAS) — chứa cả chỉ thị chương trình và dữ liệu (khái niệm chương trình được lưu trữ).
    • một bộ xử lý (CPU) lấy chỉ thị từ bộ nhớ và thực thi chúng lần lượt từng cái một.
    • các chỉ thị chạy theo thứ tự trừ khi một nhánh rẽ thay đổi luồng chảy.

    Ý tưởng chương trình được lưu trữ là điều làm cho máy tính linh hoạt: thay đổi chương trình thì bạn thay đổi những gì nó làm, mà không cần đi lại dây dẫn.

    Explore · ⁨Khám phá⁩

    Tap the parts of a Von Neumann computer · ⁨Chạm vào các bộ phận của máy tính Von Neumann⁩

    Explore each block. The CPU (control unit, ALU, registers) talks to a single main memory over the buses — and that one shared memory for instructions AND data is the Von Neumann idea. · ⁨Khám phá từng khối. CPU (đơn vị điều khiển, ALU, thanh ghi) giao tiếp với một bộ nhớ chính duy nhất qua các总线 — và bộ nhớ chung duy nhất cho cả lệnh VÀ dữ liệu này chính là ý tưởng của Von Neumann.⁩

    4.1

    The CPU's main parts · ⁨Các bộ phận chính của CPU⁩

    English

    All of these parts sit inside one small chip. The diagram later in this section shows how they connect; the photo below shows the real thing.

    Arithmetic and Logic Unit (ALU)

    The ALU 算术逻辑单元 does the arithmetic (add, subtract, …) and logic (AND, OR, comparisons). It takes operands from registers 寄存器 and puts results back in a register.

    Control Unit (CU)

    The control unit 控制单元 decodes each instruction and sends the control signals to carry it out — opening data paths, telling the ALU what to do, and controlling memory reads and writes.

    System clock

    The clock sends a steady stream of pulses that keep the CPU in step. Each instruction takes a fixed number of cycles, and the clock speed 时钟频率 (e.g. 3.8 GHz) is one factor in performance.

    "Explain how the CU and the system clock work together": the clock emits pulses at a fixed frequency; the control unit uses each pulse to move the fetch-execute cycle on by one step, sending its control signals in time with the pulses, so every part of the processor changes state together. A faster clock means more steps per second, up to the point where the circuits cannot settle between pulses.

    Registers

    Registers are tiny, very fast stores inside the CPU. The special purpose registers 专用寄存器 each have a fixed job in the cycle:

    • Program Counter 程序计数器 (PC) — the address of the next instruction.
    • Memory Address Register 内存地址寄存器 (MAR) — the address being read or written.
    • Memory Data Register 内存数据寄存器 (MDR) — the data going to or from memory.
    • Current Instruction Register 当前指令寄存器 (CIR) — the instruction being decoded.
    • Accumulator 累加器 (ACC) — the value the ALU is working on.
    • Status Register 状态寄存器 — holds flags 标志 (carry, zero, negative, overflow) used by branches. Each flag is one bit, set or cleared by the ALU after an operation: the zero flag after a comparison that matched, the carry flag when an addition overflowed the register, the negative flag when a result is negative. A conditional jump reads the flags to decide whether to branch, and an overflow flag can raise an interrupt.
    • Index Register 变址寄存器 — an offset added to an address in indexed addressing; incrementing it steps through an array one element at a time.

    The "complete the table describing the role of each register" question wants one precise sentence per register in these terms: the PC holds the address of the next instruction to be fetched; the MAR holds the address of the location being read from or written to; the MDR holds the data or instruction just read from, or about to be written to, that location; the CIR holds the instruction currently being decoded and executed; the ACC holds the result of the last arithmetic or logic operation.

    General-purpose registers 通用寄存器 are used by the programmer for temporary values during a calculation. Movements of data between registers and memory are written in register transfer 寄存器传送 notation — e.g. MAR ← [PC] ("copy the contents of PC into MAR").

    Tiếng Việt

    Tất cả các bộ phận này đều nằm trong một con chip nhỏ. Sơ đồ ở phần sau sẽ chỉ ra cách chúng kết nối; bức ảnh bên dưới cho thấy mặt thật.

    Mặt dưới của một chip CPU Intel trên nền trắng, hình vuông phẳng phủ đầy lưới hàng trăm chấm tiếp xúc vàng nhỏ nhấn lên ổ cắm bo mạch chủ
    CPU hiện đại: toàn bộ bộ xử lý là một con chip nhỏ (ở đây nhìn từ dưới lên, hiển thị các tiếp điểm)
    Ổ cắm CPU hình vuông trên bo mạch chủ, với lưới các chân pin nhỏ li ti và đòn bẩy giữ bằng kim loại, bao quanh bởi các đường dẫn mạch
    Ổ cắm CPU phù hợp trên bo mạch chủ: các tiếp điểm của chip nhấn lên các chân pin này

    Bộarit và Logic (ALU)

    ALU thực hiện phép tính cộng, trừ, … và các phép logic (AND, OR, so sánh). Nó nhận toán hạng từ các thanh ghi và đặt kết quả trở lại vào thanh ghi.

    Bộ điều khiển (CU)

    Bộ điều khiển giải mã mỗi chỉ thị và gửi tín hiệu điều khiển để thực thi nó — mở các đường dẫn dữ liệu, bảo ALU biết phải làm gì, và kiểm soát việc đọc/ghi bộ nhớ.

    Đồng hồ hệ thống

    Đồng hồ gửi một dòng xung liên tục giúp CPU đồng bộ hóa. Mỗi chỉ thị mất một số chu kỳ cố định, và tốc độ xung nhịp (ví dụ: 3.8 GHz) là một yếu tố ảnh hưởng đến hiệu suất.

    "Giải thích CU và đồng hồ hệ thống hoạt động phối hợp như thế nào": đồng hồ phát xung ở tần số cố định; bộ điều khiển sử dụng mỗi xung để đẩy chu kỳ lấy-thực thi tiến thêm một bước, gửi tín hiệu điều khiển đồng bộ với các xung, để mọi bộ phận của bộ xử lý thay đổi trạng thái cùng lúc. Đồng hồ nhanh hơn có nghĩa là nhiều bước hơn mỗi giây, cho đến khi các mạch không kịp ổn định giữa các xung.

    Thanh ghi

    Thanh ghi là các ngân hàng lưu trữ nhỏ bé nhưng cực nhanh bên trong CPU. Các thanh ghi mục đích đặc biệt mỗi cái có một nhiệm vụ cố định trong chu trình:

    • Bộ đếm chương trình (PC) — địa chỉ của chỉ thị tiếp theo.
    • Thanh ghi Địa chỉ Bộ nhớ (MAR) — địa chỉ đang được đọc hoặc ghi.
    • Thanh ghi Dữ liệu Bộ nhớ (MDR) — dữ liệu đang đi vào hoặc ra khỏi bộ nhớ.
    • Thanh Ghi Chỉ Thị Hiện Tại (CIR) — chỉ thị đang được giải mã.
    • Thanh ghi Tích lũy (ACC) — giá trị mà ALU đang xử lý.
    • Thanh ghi Trạng thái — chứa các cờ (cARRY, ZERO, NEGATIVE, OVERFLOW) được dùng bởi các nhánh rẽ. Mỗi cờ là một bit, được set hoặc cleared bởi ALU sau mỗi phép toán: cờ zero sau phép so sánh khớp, cờ carry khi phép cộng vượt quá giới hạn thanh ghi, cờ negative khi kết quả mang dấu âm. Nhánh rẽ có điều kiện đọc các cờ để quyết định rẽ, và cờ overflow có thể kích hoạt tín hiệu ngắt.
    • Thanh ghi Chỉ số — độ lệch được cộng vào địa chỉ trong phương pháp chỉ số hóa; tăng nó lên giúp duyệt qua mảng từng phần tử một.

    Câu hỏi "hoàn thành bảng mô tả vai trò của từng thanh ghi" yêu cầu một câu chính xác cho mỗi thanh ghi theo các thuật ngữ này: PC chứa địa chỉ của chỉ thị tiếp theo sẽ được lấy; MAR chứa địa chỉ của vị trí đang được đọc từ hoặc ghi vào; MDR chứa dữ liệu hoặc chỉ thị vừa được đọc từ, hoặc sắp được ghi vào, vị trí đó; CIR chứa chỉ thị đang được giải mã và thực thi hiện tại; ACC chứa kết quả của phép toán số học hoặc logic cuối cùng.

    Thanh ghi đa năng được lập trình viên sử dụng để lưu giá trị tạm thời trong quá trình tính toán. Việc di chuyển dữ liệu giữa thanh ghi và bộ nhớ được viết theo ký hiệu chuyển đổi thanh ghi — ví dụ: MAR ← [PC] ("sao chép nội dung PC vào MAR").

    Sơ đồ khối của CPU Von Neumann hiển thị PC, MAR, MDR, CIR, ACC, thanh ghi trạng thái, đơn vị điều khiển, ALU và đồng hồ hệ thống, được liên kết với bộ nhớ chính và thiết bị đầu vào/đầu ra qua các总线 địa chỉ, dữ liệu và điều khiển
    CPU Von Neumann: các thanh ghi, đơn vị điều khiển và ALU được liên kết bởi các总线
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    Von Neumann architecture/vɒn ˈnɔɪmən ˈɑːkɪtektʃə/ Kiến trúc Von Neumann
    Immediate Access Store/ɪˈmiːdɪət ˈækses stɔː/ Bộ nhớ truy cập tức thì
    stored program/stɔːd ˈprəʊɡræm/ chương trình được lưu trữ
    processor/ˈprəʊsesə/ bộ xử lý
    arithmetic and logic unit/ˌærɪθˈmetɪk ənd ˈlɒdʒɪk ˈjuːnɪt/ bộ xử lý số học và logic
    ALU/ˌeɪ el ˈjuː/ ALU
    operand/ˈɒpərænd/ toán hạng
    bit/bɪt/ bit
    4.1

    Buses · ⁨Các总线⁩

    English

    Three internal buses 总线 (sets of parallel wires) connect the parts:

    • address bus 地址总线 — carries the memory address. One-way (CPU → memory).
    • data bus 数据总线 — carries the data. Two-way.
    • control bus 控制总线 — carries control signals (read, write, interrupt). Two-way.

    An $n$-bit address bus can reach $2^{n}$ memory locations. The data-bus width sets how many bits move per access (often the word size).

    Tiếng Việt

    Ba 总线 bên trong (tập hợp dây song song) kết nối các thành phần:

    • 总线 địa chỉ — truyền địa chỉ bộ nhớ. Một chiều (CPU → bộ nhớ).
    • 总线 dữ liệu — truyền dữ liệu. Hai chiều.
    • 总线 điều khiển — truyền tín hiệu điều khiển (đọc, ghi, ngắt). Hai chiều.

    Một 总线 địa chỉ $n$-bit có thể truy cập $2^{n}$ vị trí bộ nhớ. Chiều rộng 总线 dữ liệu quyết định số bit được di chuyển mỗi lần truy cập (thường là kích thước từ).

    CPU, bộ nhớ và thiết bị đầu vào/đầu ra đều truy cập 总线 địa chỉ (một chiều), 总线 dữ liệu và 总线 điều khiển bên trong总线 hệ thống
    Ba总线 hệ thống kết nối CPU, bộ nhớ và thiết bị đầu vào/đầu ra
    Bo mạch chủ nhìn từ trên xuống: chân cắm CPU, khe bộ nhớ và khe mở rộng được nối bằng các đường dẫn in dày đặc
    Bo mạch chủ: CPU, bộ nhớ và I/O đều nằm trên cùng một tập总线 — các đường dẫn in chạy giữa chúng
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    buses/ˈbʌsɪz/ bus
    address bus/əˈdres bʌs/ bus địa chỉ
    data bus/ˈdeɪtə bʌs/ bus dữ liệu
    word size/wɜːd saɪz/ kích thước từ
    number of cores/ˈnʌmbə ɒv kɔːz/ số nhân
    cores/kɔːz/ lõi xử lý
    amount of RAM/əˈmaʊnt ɒv ræm/ lượng RAM
    4.1

    What affects performance · ⁨Những yếu tố ảnh hưởng đến hiệu suất⁩

    English
    • clock speed — more cycles per second.
    • number of cores 核心 — a multi-core CPU runs several threads at once.
    • word size 字长 — a 64-bit CPU handles 64-bit chunks per cycle and can address far more memory than a 32-bit one.
    • amount of RAM 随机存取存储器 — more RAM holds more of the working set; too little forces the OS to page 页 to disk.
    • cache memory 高速缓存 size — more cache cuts average memory access time.
    • secondary storage 辅助存储器 type — an SSD loads programs far faster than an HDD.
    • bus width and speed — wider/faster buses move data more quickly.

    Match the specs to the workload: a quad-core beats a dual-core on parallel work, but higher per-core speed wins on single-threaded work.

    Each factor is a two-mark answer with a reason attached:

    • More cores: each core can fetch and execute its own instruction at the same time, so several programs, or the threads of one program, run in parallel. But a program must be written to use more than one core, so doubling the cores does not double the speed.
    • Higher clock speed: more fetch-execute cycles per second, so more instructions per second; the limit is the heat produced.
    • Wider bus: a wider data bus moves more bits in each transfer, so fewer transfers are needed for the same data; a wider address bus can address more memory locations.
    • Cache memory: a small, fast memory inside or next to the processor that keeps the instructions and data used most recently or most often. Reading them from cache is much faster than from RAM, so the processor spends less time waiting.

    "Explain why the new computer performs better" is answered by comparing the two specifications line by line: a higher clock speed executes more instructions per second, more cores run more tasks at once, more cache means fewer slow accesses to RAM, and more RAM means fewer transfers to disk.

    Tiếng Việt
    • Tốc độ xung nhịp — nhiều chu kỳ hơn mỗi giây.
    • Số nhân — CPU đa nhân chạy nhiều luồng cùng lúc.
    • Kích thước từ — CPU 64-bit xử lý các khối 64-bit mỗi chu kỳ và có thể truy cập bộ nhớ lớn hơn nhiều so với CPU 32-bit.
    • Dung lượng RAM — nhiều RAM hơn lưu trữ được nhiều dữ liệu hoạt động hơn; thiếu RAM sẽ buộc OS phải pheap vào đĩa.
    • Dung lượng bộ nhớ đệm — bộ nhớ đệm lớn hơn rút ngắn thời gian truy cập bộ nhớ trung bình.
    • Loại lưu trữ thứ cấp — SSD tải chương trình nhanh hơn rất nhiều so với HDD.
    • Chiều rộng và tốc độ总线 —总线 rộng/nhanh hơn di chuyển dữ liệu nhanh hơn.

    Gắn thông số kỹ thuật với tác vụ: CPU bốn nhân vượt trội hơn CPU hai nhân trong công việc song song, nhưng tốc độ cao hơn trên mỗi nhân sẽ thắng thế trong công việc đơn luồng.

    Mỗi yếu tố là câu trả lời điểm hai kèm theo lý do:

    • Nhiều nhân hơn: mỗi nhân có thể lấy và thực thi lệnh riêng của nó cùng lúc, nên nhiều chương trình hoặc các luồng của một chương trình chạy song song. Tuy nhiên, một chương trình phải được viết để sử dụng nhiều hơn một nhân, nên việc tăng gấp đôi số nhân không làm tăng gấp đôi tốc độ.
    • Tốc độ xung nhịp cao hơn: nhiều chu kỳ lấy-thực hiện hơn mỗi giây, nên nhiều lệnh hơn mỗi giây; giới hạn là nhiệt lượng sinh ra.
    • 总线 rộng hơn: 总线 dữ liệu rộng hơn di chuyển nhiều bit hơn trong mỗi lần truyền, nên ít lần truyền hơn là cần thiết cho cùng một lượng dữ liệu; 总线 địa chỉ rộng hơn có thể truy cập nhiều vị trí bộ nhớ hơn.
    • Bộ nhớ đệm: bộ nhớ nhỏ, nhanh nằm bên trong hoặc cạnh bộ xử lý giữ các lệnh và dữ liệu đã dùng gần đây nhất hoặc thường xuyên nhất. Đọc chúng từ bộ nhớ đệm nhanh hơn nhiều so với từ RAM, nên bộ xử lý dành ít thời gian chờ đợi hơn.

    "Giải thích tại sao máy tính mới hoạt động tốt hơn" được trả lời bằng cách so sánh từng dòng hai thông số kỹ thuật: tốc độ xung nhịp cao hơn thực thi nhiều lệnh hơn mỗi giây, nhiều nhân hơn chạy nhiều tác vụ cùng lúc, bộ nhớ đệm lớn hơn nghĩa là ít lần truy cập RAM chậm hơn, và nhiều RAM hơn nghĩa là ít lần truyền vào đĩa hơn.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    RAM/ræm/ RAM
    page/peɪdʒ/ trang
    cache memory/kæʃ ˈmeməri/ bộ nhớ đệm
    cache/kæʃ/ cache
    secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ bộ nhớ phụ
    port/pɔːt/ cổng
    peripheral/pəˈrɪfərəl/ ngoại vi
    register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ ký hiệu di chuyển thanh ghi
    interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ routine phục vụ ngắt
    interrupt register/ˈɪntərʌpt ˈredʒɪstə/ thanh ghi ngắt
    stack/stæk/ stack
    assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ ngôn ngữ assembly
    machine code/məˈʃiːn kəʊd/ mã máy
    mnemonics/nɪˈmɒnɪks/ mnemonics
    4.1

    Ports · ⁨Cổng kết nối⁩

    English

    A port 端口 is a physical socket for connecting a peripheral 外围设备:

    • USB (Universal Serial Bus) — general-purpose (keyboards, drives, phones).
    • HDMI (High Definition Multimedia Interface) — digital video and audio to a screen.
    • VGA (Video Graphics Array) — older analogue video output to a monitor.
    • Ethernet (RJ-45) — wired LAN. Audio jacks — headphones/microphone.

    Different ports use different signals, so an HDMI cable will not fit a USB socket. USB-C is unusual in carrying video, data and power.

    "Explain how the computer connects to the monitor through HDMI": the HDMI port sends the video and the audio as one digital signal down a single cable, so no conversion to analogue is needed and the picture is not degraded; the cable carries high-definition resolutions and the monitor's own port decodes the signal. A USB device is plug-and-play: when it is connected the computer detects it, identifies it, loads or installs the driver it needs, and can supply it with power, all without a restart.

    Tiếng Việt

    Một cổng kết nối là ổ cắm vật lý để kết nối thiết bị ngoại vi:

    • USB (Bus Serial Đa năng) — đa năng (bàn phím, ổ đĩa, điện thoại).
    • HDMI (Giao diện Đa phương tiện Độ phân giải Cao) — video và âm số hóa đến màn hình.
    • VGA (Mảng Đồ họa Video) — tín hiệu video tương tự cũ ra màn hình.
    • Ethernet (RJ-45) — mạng LAN có dây. Jack âm thanh — tai nghe/micro.

    Các cổng kết nối khác nhau sử dụng tín hiệu khác nhau, nên cáp HDMI sẽ không vừa với ổ cắm USB. USB-C đặc biệt ở chỗ truyền cả video, dữ liệu và nguồn điện.

    "Giải thích cách máy tính kết nối với màn hình qua HDMI": Cổng HDMI gửi video và âm thanh dưới dạng một tín hiệu số duy nhất qua một cáp, nên không cần chuyển đổi sang tín hiệu tương tự và hình ảnh không bị giảm chất lượng; cáp mang độ phân giải cao và cổng của màn hình giải mã tín hiệu đó. Thiết bị USB là cắm và chạy: khi được kết nối, máy tính phát hiện nó, nhận dạng, tải hoặc cài đặt driver cần thiết, và cung cấp nguồn điện cho nó, tất cả mà không cần khởi động lại.

    4.1

    Fetch-Execute cycle · ⁨Chu kỳ Lấy - Thực thi⁩

    English

    The CPU repeats the fetch-execute cycle 取指-执行周期, one run per machine instruction.

    Fetch

    1. the PC's address is copied to the MAR.
    2. the PC is incremented to point to the next instruction.
    3. a read signal goes over the control bus.
    4. memory puts the instruction on the data bus.
    5. it is copied into the MDR, then into the CIR.

    The exam asks for these steps in register transfer notation 寄存器传送记法, where [X] means the contents of register X and [[MAR]] means the contents of the memory location whose address is in the MAR:

    The order matters: the PC is incremented straight after its address has been copied, so that a jump executed later can still overwrite it. During execution the same notation describes each instruction; for LDD 200, for example, MAR ← 200, MDR ← [[MAR]], ACC ← [MDR].

    Decode

    The CU decodes the instruction in the CIR — what operation, and which operands or addresses.

    Execute

    The CU carries it out: arithmetic/logic goes to the ALU (result to the ACC); a load/store moves data between memory and a register; a branch changes the PC. Then the cycle repeats.

    Tiếng Việt

    CPU lặp lại chu kỳ lấy-thực hiện, mỗi lần chạy ứng với một lệnh máy.

    Lấy

    1. địa chỉ của PC được sao chép vào MAR.
    2. PC được tăng lên để trỏ đến lệnh tiếp theo.
    3. tín hiệu đọc đi qua 总线 điều khiển.
    4. bộ nhớ đưa lệnh lên 总线 dữ liệu.
    5. nó được sao chép vào MDR, sau đó vào CIR.

    Đề thi yêu cầu các bước này viết theo ký hiệu chuyển đổi thanh ghi, nơi [X] có nghĩa là nội dung của thanh ghi X và [[MAR]] có nghĩa là nội dung của vị trí bộ nhớ có địa chỉ nằm trong MAR:

    MAR ← [PC]          the address of the next instruction goes to the MAR
    PC  ← [PC] + 1      the PC now points to the following instruction
    MDR ← [[MAR]]       the instruction at that address is read into the MDR
    CIR ← [MDR]         the instruction is copied into the CIR for decoding
    

    Thứ tự quan trọng: PC được tăng ngay sau khi địa chỉ của nó được sao chép, để đảm bảo rằng một lệnh nhảy được thực thi sau vẫn có thể ghi đè lên nó. Trong quá trình thực thi, ký hiệu tương tự mô tả từng lệnh; ví dụ, đối với LDD 200, ta có MAR ← 200, MDR ← [[MAR]], ACC ← [MDR].

    Các chuyển đổi thanh ghi trong quá trình lấy theo thứ tự: 1 địa chỉ của PC đi vào MAR; 2 MAR gửi địa chỉ đến bộ nhớ; 3 lệnh quay trở lại MDR; 4 MDR sao chép nó vào CIR; đồng thời PC được tăng lên
    Các chuyển đổi thanh ghi trong quá trình lấy: PC → MAR → bộ nhớ → MDR → CIR, với PC được tăng lên

    Giải mã

    CU giải mã lệnh trong CIR — thao tác nào, và các toán tử hay địa chỉ nào.

    Thực thi

    CU thực hiện nó: phép tính số học/logic được gửi đến ALU (kết quả về ACC); lệnh tải/lưu di chuyển dữ liệu giữa bộ nhớ và thanh ghi; lệnh nhảy thay đổi PC. Sau đó chu kỳ lặp lại.

    Sơ đồ quy trình của chu kỳ lấy-thực thi từ START: giai đoạn lấy (PC đến MAR, tăng PC, tín hiệu đọc, bộ nhớ vào bus dữ liệu vào MDR vào CIR), giai đoạn giải mã, giai đoạn thực thi, sau đó kiểm tra ngắt để quay lại START
    Chu kỳ lấy-thực thi, với việc kiểm tra ngắt mỗi lần
    Explore · ⁨Khám phá⁩

    The fetch-execute cycle · ⁨Chu kỳ lấy lệnh-thực thi⁩

    Tap round the loop the CPU repeats billions of times a second. Watch how fetch uses the PC/MAR/MDR/CIR registers, then decode and execute act on what was fetched. · ⁨Chạm vòng quanh loop mà CPU lặp lại hàng tỷ lần mỗi giây. Xem cách lấy lệnh sử dụng các thanh ghi PC/MAR/MDR/CIR, sau đó giải mã và thực thi tác động lên những gì đã được lấy.⁩

    Explore · ⁨Khám phá⁩

    The fetch–execute cycle · ⁨Chu kỳ lấy — thực thi⁩

    Step through how the CPU runs one instruction — fetch it from memory, decode it, then execute it, over and over. · ⁨Từng bước CPU chạy một lệnh — lấy nó từ bộ nhớ, giải mã nó, sau đó thực thi nó, lặp đi lặp lại.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ chu kỳ lấy – thực thi
    special purpose registers/ˈspeʃl ˈpɜːpəs ˈredʒɪstəz/ thanh ghi chuyên dụng
    Program Counter/ˈprəʊɡræm ˈkaʊntə/ Đếm chương trình (PC)
    Memory Address Register/ˈmeməri əˈdres ˈredʒɪstə/ Thanh ghi Địa chỉ Bộ nhớ (MAR)
    Memory Data Register/ˈmeməri ˈdeɪtə ˈredʒɪstə/ Thanh ghi Dữ liệu Bộ nhớ (MDR)
    Current Instruction Register/ˈkʌrənt ɪnˈstrʌkʃn ˈredʒɪstə/ Thanh ghi Lệnh Hiện tại (CIR)
    accumulator/əˈkjuːmjʊleɪtə/ bộ cộng gộp
    Status Register/ˈsteɪtəs ˈredʒɪstə/ Thanh ghi Trạng thái (PSW)
    flags/flæɡz/ cờ
    4.1

    Interrupts · ⁨Ngắt⁩

    English

    An interrupt 中断 is a signal that pauses the normal cycle so the CPU can handle an urgent event (a key press, a packet arriving, a hardware fault, division by zero, the OS timer).

    Handling one:

    1. finish the current instruction.
    2. save the state (PC and registers).
    3. load the address of the interrupt service routine 中断服务程序 (ISR) into the PC and run it.
    4. the ISR handles the event.
    5. restore the saved state and carry on.

    Interrupts let the system respond promptly without the CPU constantly checking devices, and are how the OS multitasks.

    "Explain how an interrupt from an input device is detected and handled in the F-E cycle" is a four-mark answer with these points: the device sends an interrupt signal that sets the interrupt flag in the interrupt register 中断寄存器; the processor checks that register at the end of every fetch-execute cycle, after the current instruction has finished executing; if a flag is set and the interrupt has a higher priority than the current task, the contents of the PC and the other registers are saved onto the stack 栈; the address of the interrupt service routine is loaded into the PC and the routine runs; when it finishes, the saved values are restored from the stack and the interrupted program continues from where it stopped.

    Causes worth naming: a hardware interrupt from a device (a key pressed, a printer buffer empty, a network packet arriving), a software interrupt from a fault (division by zero, an illegal instruction, arithmetic overflow), a timer interrupt from the operating system marking the end of a time slice, and a power failure warning.

    Tiếng Việt

    Một ngắt là tín hiệu tạm dừng chu kỳ bình thường để CPU xử lý một sự kiện cấp thiết (nhấn phím, gói tin đến, lỗi phần cứng, chia cho không, bộ đếm hệ điều hành).

    Xử lý một ngắt:

    1. hoàn thành lệnh hiện tại.
    2. lưu trạng thái (PC và các thanh ghi).
    3. nạp địa chỉ của chương trình phục vụ ngắt (ISR) vào PC và chạy nó.
    4. ISR xử lý sự kiện.
    5. phục hồi trạng thái đã lưu và tiếp tục.

    Ngắt giúp hệ thống phản hồi nhanh mà không cần CPU liên tục kiểm tra các thiết bị, và là cách hệ điều hành đa nhiệm hóa.

    "Giải thích cách phát hiện và xử lý một ngắt từ thiết bị đầu vào trong chu kỳ F-E" là câu trả lời điểm 4 với các ý sau: thiết bị gửi tín hiệu ngắt đặt cờ ngắt trong đăng ký ngắt; bộ xử lý kiểm tra đăng ký này ở cuối mỗi chu kỳ lấy-thực thi, sau khi lệnh hiện tại đã hoàn thành thực thi; nếu có cờ được đặt và ngắt có mức ưu tiên cao hơn tác vụ hiện tại, nội dung của PC và các thanh ghi khác được lưu lên ngăn xếp; địa chỉ của chương trình phục vụ ngắt được nạp vào PC và chương trình chạy; khi nó kết thúc, các giá trị đã lưu được phục hồi từ ngăn xếp và chương trình bị gián đoạn tiếp tục từ nơi nó đã dừng.

    Các nguyên nhân đáng kể tên: ngắt phần cứng từ thiết bị (nhấn phím, bộ đệm máy in trống, gói tin mạng đến), ngắt phần mềm từ lỗi (chia cho không, lệnh bất hợp lệ, tràn số học), ngắt bộ đếm từ hệ điều hành đánh dấu hết thời lượng, và cảnh báo mất điện.

    Sơ đồ quy trình xử lý ngắt: chương trình đang chạy bị gián đoạn, CPU hoàn thành lệnh hiện tại, lưu trạng thái (PC và thanh ghi) lên ngăn xếp, chạy chương trình phục vụ ngắt, phục hồi trạng thái và tiếp tục
    Cách một ngắt tích hợp vào chu kỳ lấy-thực thi
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    interrupt/ˈɪntərʌpt/ ngắt
    4.2

    Assembly language and machine code · ⁨Ngôn ngữ assembly và mã máy⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the relationship between assembly language and machine code
    Describe the different stages of the assembly process for a two-pass assembler Apply the two-pass assembler process to a given simple assembly language program
    Trace a given simple assembly language program
    Show understanding that a set of instructions are grouped Including the following groups: • Data movement • Input and output of data • Arithmetic operations • Unconditional and conditional instructions • Compare instructions
    Show understanding of and be able to use different modes of addressing Including immediate, direct, indirect, indexed, relative
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về mối quan hệ giữa ngôn ngữ assembly và mã máy
    Mô tả các giai đoạn khác nhau của quy trình liên kết cho trình liên kết hai lượt Áp dụng quy trình trình liên kết hai lượt vào một chương trình ngôn ngữIOException đơn giản được cho
    Theo dõi một chương trình ngôn ngữIOException đơn giản được cho
    Thể hiện sự hiểu biết rằng một tập lệnh được nhóm lại Bao gồm các nhóm sau: • Di chuyển dữ liệu • Nhập và xuất dữ liệu • Phép toán số học • Lệnh không điều kiện và có điều kiện • Lệnh so sánh
    Thể hiện sự hiểu biết và có khả năng sử dụng các chế độ địa chỉ khác nhau Bao gồm ngay, trực tiếp, gián tiếp, lưu trữ theo chỉ mục, tương đối

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    The CPU actually runs machine code 机器码 — bit patterns, specific to one architecture. Assembly language 汇编语言 is a readable form, with one instruction per machine instruction, written using mnemonics 助记符 like LDD, ADD, JMP. An assembler 汇编器 translates it to machine code.

    Two-pass assembler

    A two-pass assembler reads the source twice:

    • pass 1 builds a symbol table 符号表: each time a label 标签 (like LOOP:) appears, record its address; no code yet.
    • pass 2 generates code: translate each instruction, and when one refers to a label (like JMP LOOP), look up its address in the symbol table.

    Two passes handle forward references 前向引用 (a jump to a label defined later).

    Worked example. Apply the two-pass process to this program, whose first instruction is stored at address 100.

    Pass 1 reads each line, counts the address it will occupy, and records every label in the symbol table: LOOP = 101 (the DEC line) and COUNT = 105 (the data line). No code is produced. Pass 2 reads the program again and translates each line into machine code, replacing each mnemonic by its opcode 操作码 and each symbolic address by the number from the symbol table: LDD COUNT becomes the opcode for LDD with operand 操作数 105, and JPN LOOP becomes the opcode for JPN with operand 101. The jump back to LOOP could have been resolved in one pass, but a jump forward to a label not yet seen could not, which is why the assembler makes two.

    Example instruction set

    Cambridge uses a small generic set, printed in the paper's reference table, with one general-purpose register, the accumulator (ACC), and an index register (IX). An operand written #n is a denary number, Bn a binary number and &n a hexadecimal number; <address> is a location number or a label.

    Group Instruction What it does
    Data movement LDM #n load the number n into ACC (immediate)
    LDD <address> load the contents of the address into ACC (direct)
    LDI <address> the address holds another address; load the contents of that one into ACC (indirect)
    LDX <address> add IX to the address and load the contents of the result into ACC (indexed)
    LDR #n load the number n into IX
    MOV <register> copy ACC into the named register (IX)
    STO <address> store the contents of ACC at the address
    Input and output IN read a key press and put its ASCII code in ACC
    OUT output the character whose ASCII code is in ACC
    Arithmetic ADD <address> / ADD #n add the contents of the address, or the number, to ACC
    SUB <address> / SUB #n subtract from ACC
    INC <register> / DEC <register> add 1 to, or subtract 1 from, ACC or IX
    Compare CMP <address> / CMP #n compare ACC with the contents of the address, or with n, and set the flag
    CMI <address> compare ACC with the contents of the address held at the address (indirect)
    Jump JMP <address> jump to the address unconditionally
    JPE <address> / JPN <address> jump if the last compare was equal / not equal
    Bit manipulation AND, OR, XOR with #n, Bn, &n or <address> bitwise operation on ACC
    LSL #n / LSR #n shift ACC logically n places left or right
    END end the program

    The "assembly language instructions are grouped" question wants the group names, and an instruction from each: data movement, input and output, arithmetic, unconditional and conditional jumps, compare, and bit manipulation.

    Tiếng Việt

    CPU thực tế chạy mã máy — các mẫu bit, đặc thù cho một kiến trúc. Ngôn ngữ assembly là dạng dễ đọc, với một lệnh cho mỗi lệnh máy, được viết bằng biểu tượng như LDD, ADD, JMP. Một trình biên dịch assembly dịch nó sang mã máy.

    Một trình biên dịch assembler dịch các ký hiệu assembly thành các mẫu bit mã máy
    Trình biên dịch assembly biến biểu tượng thành các mẫu bit mã máy

    Trình biên dịch assembly hai lượt

    Trình biên dịch assembly hai lượt đọc nguồn hai lần:

    • lượt 1 xây dựng bảng ký hiệu: mỗi lần một nhãn (như LOOP:) xuất hiện, ghi nhận địa chỉ của nó; chưa có mã code nào.
    • lượt 2 tạo mã: dịch từng lệnh, và khi một lệnh tham chiếu đến một nhãn (như JMP LOOP), tra cứu địa chỉ của nó trong bảng ký hiệu.

    Hai lượt xử lý các tham chiếu tới trước (lệnh nhảy đến một nhãn được định nghĩa sau).

    Ví dụ đã làm. Áp dụng quy trình hai lượt cho chương trình này, với lệnh đầu tiên được lưu tại địa chỉ 100.

            LDD  COUNT
    LOOP:   DEC  ACC
            CMP  #0
            JPN  LOOP
            END
    COUNT:  5
    

    Lượt 1 đọc từng dòng, đếm địa chỉ sẽ chiếm giữ, và ghi nhận mọi nhãn trong bảng ký hiệu: LOOP = 101 (dòng DEC) và COUNT = 105 (dòng dữ liệu). Không có mã code nào được tạo ra. Lượt 2 đọc lại chương trình và dịch từng dòng thành mã máy, thay thế mỗi biểu tượng bằng opcode của nó và mỗi địa chỉ ký hiệu bằng số từ bảng ký hiệu: LDD COUNT trở thành opcode cho LDD với toán tử 105, và JPN LOOP trở thành opcode cho JPN với toán tử 101. Lệnh nhảy ngược lại LOOP có thể được giải quyết trong một lượt, nhưng một lệnh nhảy tiến đến một nhãn chưa thấy trước đó thì không, đó là lý do trình biên dịch thực hiện hai lượt.

    Ví dụ về tập lệnh

    Cambridge sử dụng một tập hợp nhỏ chung, được in trong bảng tham chiếu của đề bài, với một thanh ghi đa năng, bộ cộng tích lũy (ACC), và một thanh chỉ mục (IX). Một toán hạng viết #n là số thập phân, Bn là số nhị phân và &n là số thập lục phân; <address> là số vị trí hoặc nhãn.

    Nhóm Lệnh Chức năng
    Di chuyển dữ liệu LDM #n nạp số n vào ACC (ngay lập tức)
    LDD <address> nạp nội dung của địa chỉ vào ACC (trực tiếp)
    LDI <address> địa chỉ chứa một địa chỉ khác; nạp nội dung của địa chỉ đó vào ACC (gián tiếp)
    LDX <address> thêm IX vào địa chỉ và nạp nội dung của kết quả vào ACC (chỉ mục)
    LDR #n nạp số n vào IX
    MOV <register> sao chép ACC vào thanh ghi được chỉ định (IX)
    STO <address> lưu nội dung của ACC tại địa chỉ
    Nhập và xuất IN đọc một lần nhấn phím và đưa mã ASCII của nó vào ACC
    OUT xuất ký tự có mã ASCII nằm trong ACC
    Số học ADD <address> / ADD #n thêm nội dung của địa chỉ, hoặc số, vào ACC
    SUB <address> / SUB #n trừ khỏi ACC
    INC <register> / DEC <register> thêm 1 vào, hoặc trừ 1 khỏi, ACC hoặc IX
    So sánh CMP <address> / CMP #n so sánh ACC với nội dung của địa chỉ, hoặc với n, và đặt cờ
    CMI <address> so sánh ACC với nội dung của địa chỉ được lưu tại địa chỉ (gián tiếp)
    Nhảy JMP <address> nhảy đến địa chỉ không điều kiện
    JPE <address> / JPN <address> nhảy nếu phép so sánh cuối cùng bằng / không bằng
    Thao tác bit AND, OR, XOR với #n, Bn, &n hoặc <address> thao tác bit trên ACC
    LSL #n / LSR #n dịch chuyển ACC theo logic n vị trí sang trái hoặc phải
    END kết thúc chương trình

    Câu hỏi "câu lệnh ngôn ngữ assembly được nhóm lại" yêu cầu tên các nhóm và một câu lệnh từ mỗi nhóm: di chuyển dữ liệu, nhập xuất, số học, nhảy vô điều kiện và có điều kiện, so sánh, và thao tác bit.

    Explore · ⁨Khám phá⁩

    How a two-pass assembler works · ⁨Cách hoạt động của trình biên dịch assembly hai lượt⁩

    Step through it. The assembler reads your code twice: pass 1 just finds where every label lives, so pass 2 can fill in the addresses — that is how a jump to a label defined later still works. · ⁨Hãy xem xét từng bước. Trình biên dịch đọc mã nguồn của bạn hai lần: lượt 1 chỉ xác định vị trí của mọi nhãn, để lượt 2 có thể điền đầy đủ các địa chỉ — đó là cách một lệnh nhảy đến một nhãn được định nghĩa sau vẫn hoạt động.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    register/ˈredʒɪstə/ đăng ký (register)
    control unit/kənˈtrəʊl ˈjuːnɪt/ đơn vị điều khiển
    clock speed/klɒk spiːd/ tốc độ xung nhịp
    assembler/əˈsemblə/ assembler
    symbol table/ˈsɪmbl ˈteɪbl/ bảng ký hiệu
    label/ˈleɪbl/ nhãn dán
    forward references/ˈfɔːwəd ˈrefrənsɪz/ tham chiếu tới trước
    opcode/ˈɒpkəʊd/ opcode
    4.2

    Addressing modes · ⁨Các chế độ trỏ địa chỉ⁩

    English

    The addressing mode 寻址方式 (the modes of addressing) says how the CPU finds the operand:

    • immediate addressing 立即寻址 — the operand is the value in the instruction. LDM #10 loads 10.
    • direct addressing 直接寻址 — the instruction holds an address; the operand is the value there. LDD 200.
    • indirect addressing 间接寻址 — the instruction holds an address that holds another address, which is the data. LDI 200.
    • indexed addressing 变址寻址 — effective address is address + index register; used for arrays. LDX 100 with IR = 5 reads address 105.

    (Relative addressing 相对寻址 gives the address as an offset from the PC — used for jumps.)

    Worked example. Memory holds: location 200 = 250, location 250 = 99, location 105 = 7. The index register holds 5. What is in the accumulator after each of LDM #200, LDD 200, LDI 200 and LDX 100? Follow how far each mode has to look. LDM #200 is immediate - the operand is the number written in the instruction, so the accumulator holds 200. LDD 200 is direct - go to location 200 and take what is there: 250. LDI 200 is indirect - location 200 holds 250, which is another address, so go on to location 250: 99. LDX 100 is indexed - add the index register to the address, $100 + 5 = 105$, and read location 105: 7. Count the hops to keep them apart: immediate 0, direct 1, indirect 2, indexed 1 (once the index has been added).

    Tiếng Việt

    Chế độ trỏ địa chỉ (các chế độ truy cập) cho biết CPU tìm toán hạng như thế nào:

    • trỏ địa chỉ ngay lập tức — toán hạng là giá trị trong câu lệnh. LDM #10 nạp 10.
    • trỏ địa chỉ trực tiếp — câu lệnh chứa một địa chỉ; toán hạng là giá trị tại đó. LDD 200.
    • trỏ địa chỉ gián tiếp — câu lệnh chứa một địa chỉ chứa một địa chỉ khác, đó là dữ liệu. LDI 200.
    • địa chỉ hóa chỉ mục — địa chỉ hiệu dụng là address + index register; dùng cho mảng. LDX 100 với IR = 5 đọc địa chỉ 105.

    (Trỏ địa chỉ tương đối đưa ra địa chỉ dưới dạng độ lệch từ PC — dùng cho các lệnh nhảy.)

    Bốn chế độ trỏ địa chỉ tiếp cận toán hạng của chúng. Ngay lập tức: LDM #10 trả về 10 trực tiếp. Trực tiếp: LDD 200 đọc vị trí bộ nhớ 200 (=42). Gián tiếp: LDI 200 đọc vị trí 200 (=250) sau đó đọc vị trí 250 (=99). Theo chỉ số: LDX 100 với thanh ghi chỉ số 5 đọc vị trí 105 (=7)
    Mỗi chế độ trỏ địa chỉ tiếp cận toán hạng của nó như thế nào — ngay lập tức, trực tiếp, gián tiếp và theo chỉ số

    Ví dụ đã giải. Bộ nhớ chứa: vị trí 200 = 250, vị trí 250 = 99, vị trí 105 = 7. Thanh chỉ mục chứa 5. Có gì trong bộ cộng tích lũy sau mỗi lệnh LDM #200, LDD 200, LDI 200 và LDX 100? Theo dõi khoảng cách mỗi chế độ phải tìm kiếm. LDM #200 là ngay lập tức - toán hạng là con số được viết trong lệnh, vì vậy bộ cộng tích lũy chứa 200. LDD 200 là trực tiếp - đi đến vị trí 200 và lấy cái gì ở đó: 250. LDI 200 là gián tiếp - vị trí 200 chứa 250, đây là một địa chỉ khác, nên tiếp tục đến vị trí 250: 99. LDX 100 là chỉ mục - thêm thanh chỉ mục vào địa chỉ, $100 + 5 = 105$, và đọc vị trí 105: 7. Đếm số bước nhảy để phân biệt chúng: ngay lập tức 0, trực tiếp 1, gián tiếp 2, chỉ mục 1 (sau khi đã thêm chỉ mục).

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    Index Register/ˈɪndeks ˈredʒɪstə/ Thanh ghi Chỉ mục (IX)
    indexed addressing/ˈɪndekst əˈdresɪŋ/ trỏ theo chỉ mục
    general-purpose registers/ˈdʒenərəl ˈpɜːpəs ˈredʒɪstəz/ thanh ghi đa năng
    register transfer/ˈredʒɪstə ˈtrænsfɜː/ di chuyển thanh ghi
    control bus/kənˈtrəʊl bʌs/ bus điều khiển
    addressing mode/əˈdresɪŋ məʊd/ chế độ trỏ
    immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ trỏ ngay
    direct addressing/daɪˈrekt əˈdresɪŋ/ trỏ trực tiếp
    indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ trỏ gián tiếp
    relative addressing/ˈrelətɪv əˈdresɪŋ/ trỏ tương đối
    logical shift/ˈlɒdʒɪkl ʃɪft/ dịch chuyển logic
    cyclic shift/ˈsaɪklɪk ʃɪft/ dịch chuyển tuần hoàn
    4.2

    Tracing an assembly program · ⁨Theo dõi một chương trình assembly⁩

    English

    To trace it: make a table with columns for the PC, ACC, index register, each variable and any flags. Step through the instructions, updating the table after each; follow branches when they change the PC; stop at END. A common pattern is a loop over an array using indexed addressing.

    Worked example. Trace this program. Address 200 holds 5 and address 201 holds 0.

    Write one row for each instruction executed, filling in only the columns that change:

    Instruction ACC 200 201 Output
    start 5 0
    LDD 200 5
    CMP #0
    JPE 108 not taken
    OUT character with code 5
    DEC ACC 4
    STO 200 4
    LDD 201 0
    JMP 100
    LDD 200 4

    and so on, until LDD 200 loads 0, the compare sets the equal flag, JPE 108 is taken and the program ends. Three things the examiner checks: a CMP changes no register, only a flag; a jump not taken still counts as executed; and OUT outputs a character, so it goes in the output column, not the ACC column. "State the effect of changing LDD 10 to LDM #10": the ACC would hold the number 10 instead of the contents of address 10.

    Tiếng Việt

    Để theo dõi nó: tạo bảng với các cột cho PC, ACC, thanh ghi chỉ số, từng biến số và bất kỳ cờ nào. Thực hiện lần lượt các câu lệnh, cập nhật bảng sau mỗi bước; theo dõi các nhánh khi chúng thay đổi PC; dừng lại ở END. Một mẫu phổ biến là vòng lặp qua một mảng sử dụng trỏ địa chỉ theo chỉ số.

    Ví dụ đã giải. Theo dõi chương trình này. Địa chỉ 200 chứa 5 và địa chỉ 201 chứa 0.

    100   LDD  200
    101   CMP  #0
    102   JPE  108
    103   OUT
    104   DEC  ACC
    105   STO  200
    106   LDD  201
    107   JMP  100
    108   END
    

    Viết một hàng cho mỗi câu lệnh được thực thi, điền vào chỉ các cột thay đổi:

    Câu lệnh ACC 200 201 Kết quả đầu ra
    bắt đầu 5 0
    LDD 200 5
    CMP #0
    JPE 108 không được thực hiện
    OUT ký tự với mã 5
    DEC ACC 4
    STO 200 4
    LDD 201 0
    JMP 100
    LDD 200 4

    và cứ thế cho đến khi LDD 200 nạp 0, phép so sánh đặt cờ bằng, JPE 108 được thực hiện và chương trình kết thúc. Ba thứ mà giám khảo kiểm tra: một CMP không thay đổi thanh ghi nào, chỉ là cờ; một lệnh nhảy không được thực hiện vẫn tính là đã thực thi; và OUT xuất ra một ký tự, vì vậy nó nằm trong cột kết quả đầu ra, không phải cột ACC. "Nêu ảnh hưởng của việc thay đổi LDD 10 thành LDM #10": ACC sẽ chứa số 10 thay vì nội dung của địa chỉ 10.

    4.3

    Binary shifts · ⁨Dịch chuyển nhị phân⁩

    Syllabus · ⁨Chương trình⁩
    Candidates should be able to: Notes and guidance
    Show understanding of and perform binary shifts Logical, arithmetic and cyclic Left shift, right shift
    Show understanding of how bit manipulation can be used to monitor/control a device Carry out bit manipulation operations Test and set a bit (using bit masking)
    Instruction Label | Opcode | Operand Explanation
    AND #n / Bn / &n Bitwise AND operation of the contents of ACC with the operand
    AND
    Bitwise AND operation of the contents of ACC with the contents of
    XOR #n / Bn / &n Bitwise XOR operation of the contents of ACC with the operand
    XOR
    Bitwise XOR operation of the contents of ACC with the contents of
    OR #n / Bn / &n Bitwise OR operation of the contents of ACC with the operand
    OR
    Bitwise OR operation of the contents of ACC with the contents of
    LSL #n Bits in ACC are shifted logically n places to the left. Zeros are introduced on the right hand end
    LSR #n Bits in ACC are shifted logically n places to the right. Zeros are introduced on the left hand end
    Labels an instruction
    Gives a symbolic address
    All questions will assume there is only one general purpose register available (Accumulator) ACC denotes Accumulator IX denotes Index Register
    can be an absolute or symbolic address # denotes a denary number, e.g. #123 B denotes a binary number, e.g. B01001010 & denotes a hexadecimal number, e.g. &4A

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    A logical shift 逻辑移位 moves all the bits left or right by some places, filling new positions with 0.

    • left shift by 1 (LSL #1) — bits move left, a 0 enters on the right; for an unsigned number this is × 2.
    • right shift by 1 (LSR #1) — bits move right, a 0 enters on the left; for an unsigned number this is integer ÷ 2.

    Shifting by $n$ places multiplies or divides by $2^{n}$. Example: 00001011 (11) LSL #1 → 00010110 (22).

    Bits shifted off the end are lost, so the multiplication is only correct while they were zeros. LSL #2 on the two's-complement integer 11001010 gives 00101000: the two 1s that fell off the left are gone, the sign bit has changed, and the result is no longer four times the original.

    An arithmetic right shift keeps the sign bit so a negative signed number stays negative. A cyclic shift 循环移位 (rotate) feeds the bit that drops off one end back in at the other end, so no bits are lost.

    "Show the result of an arithmetic right shift of 3 places on 10011110": copy the sign bit into each vacated place, 11110011. The same shift on 01011100 gives 00001011. A cyclic left shift of 1 on 10000110 gives 00001101: the leading 1 reappears on the right.

    The difference between the two right shifts is a single bit. Take 11110000, which is 240 read as unsigned and $-16$ read as signed. LSR #1 brings in a 0 and gives 01111000 $= 120$, which is the correct half of 240. ASR #1 copies the sign bit instead and gives 11111000 $= -8$, which is the correct half of $-16$. Neither is wrong — each halves the value under one reading.

    Bit manipulation for monitoring/control

    Embedded devices often use one bit 位 of a register per signal (e.g. bit $n$ = LED $n$). Using a mask 掩码 — bit masking — you can:

    • set bit $n$: R = R OR a mask with bit $n$ set.
    • clear bit $n$: R = R AND a mask with bit $n$ clear and the rest set.
    • toggle bit $n$: R = R XOR a mask with bit $n$ set.
    • test bit $n$: R AND the mask, then check if the result is non-zero.

    Bit manipulation is fast, uses little memory, and lets one byte hold up to 8 on/off states.

    In the exam's instruction set these are AND, OR and XOR with a mask written as a denary, binary or hexadecimal operand. With the ACC holding 10101100:

    Instruction Mask Result in ACC Effect
    AND B00001111 00001111 00001100 keeps only the low four bits (clears the others)
    OR #1 00000001 10101101 sets the least significant bit, leaving the rest unchanged
    XOR &FF 11111111 01010011 inverts every bit
    AND B00001000 then CMP #0 00001000 00001000 tests bit 3: the compare is not equal, so bit 3 was set
    LSL #2 10110000 shifts left two places, losing the top two bits
    LSR #3 00010101 shifts right three places, zeros entering on the left

    "Write the instruction that sets the least significant bit to 1 and leaves the others unchanged": OR #1, or OR B00000001. To clear a bit use AND with a mask that has a 0 in that place and 1s elsewhere; to test a bit, AND with a mask that has a 1 only in that place, then compare the result with zero. In a monitoring device, one bit of a register per sensor lets a single AND check whether a particular sensor is on, and one OR switches an actuator's control bit on without disturbing the others.

    Tiếng Việt

    Dịch chuyển logic di chuyển tất cả các bit sang trái hoặc phải một số vị trí, lấp đầy các vị trí mới bằng 0.

    • dịch chuyển trái 1 (LSL #1) — các bit di chuyển sang trái, một 0 đi vào bên phải; đối với số không dấu thì đây là × 2.
    • dịch chuyển phải 1 (LSR #1) — các bit di chuyển sang phải, một 0 đi vào bên trái; đối với số không dấu thì đây là số nguyên ÷ 2.

    Dịch chuyển $n$ vị trí nhân hoặc chia cho $2^{n}$. Ví dụ: 00001011 (11) LSL #1 → 00010110 (22).

    Các bit bị đẩy ra khỏi cuối sẽ bị mất, nên phép nhân chỉ chính xác trong khi chúng vẫn là số không. LSL #2 trên số nguyên hai bù 11001010 cho kết quả 00101000: hai 1s bị rơi bên trái đã mất, bit dấu đã thay đổi, và kết quả không còn gấp bốn lần giá trị ban đầu nữa.

    Dịch chuyển phải số học giữ nguyên bit dấu để số có dấu âm vẫn giữ âm. Dịch chuyển tuần hoàn (xoay) đưa bit bị rơi ra khỏi một đầu quay trở lại ở đầu kia, vì vậy không có bit nào bị mất.

    "Hiển thị kết quả của dịch chuyển phải số học 3 vị trí trên 10011110": sao chép bit dấu vào mỗi vị trí trống, 11110011. Cùng một phép dịch chuyển trên 01011100 cho 00001011. Dịch chuyển trái tuần hoàn 1 trên 10000110 cho 00001101: số 1 đứng đầu xuất hiện lại ở phía bên phải.

    Ba phép dịch chuyển 8-bit: LSL #1 biến 00001011 thành 00010110 (times 2, một 0 đi vào bên phải); LSR #1 biến nó thành 00000101 (chia số nguyên cho 2, một 0 đi vào bên trái); ASR #1 biến 10110100 thành 11011010, sao chép bit dấu
    Trái logic ($\times 2$), phải logic ($\div 2$) và phải số học (giữ bit dấu)

    Sự khác biệt giữa hai phép dịch chuyển phải là một bit duy nhất. Lấy 11110000, là 240 đọc dưới dạng không dấu và $-16$ đọc dưới dạng có dấu. LSR #1 đưa vào một 0 và cho 01111000 $= 120$, đó là nửa đúng của 240. ASR #1 sao chép bit dấu thay vào đó và cho 11111000 $= -8$, đó là nửa đúng của $-16$. Không cái nào sai — mỗi cái đều chia đôi giá trị theo một cách đọc.

    Byte 11110000 dịch chuyển phải hai lần: LSR đưa một 0 vào bên trái tạo 01111000 là 120, trong khi ASR sao chép bit dấu tạo 11111000 là trừ 8; hai kết quả chỉ khác nhau ở bit đi vào
    Dịch chuyển phải logic và dịch chuyển phải số học trên cùng một byte: chỉ có bit đi vào bên trái khác nhau

    Thao tác bit để giám sát/điều khiển

    Các thiết bị nhúng thường sử dụng một bit của thanh ghi cho mỗi tín hiệu (ví dụ: bit $n$ = LED $n$). Sử dụng mặt nạ — che mask bit — bạn có thể:

    • bật bit $n$: R = R OR mặt nạ với bit $n$ được bật.
    • tắt bit $n$: R = R AND mặt nạ với bit $n$ tắt và phần còn lại bật.
    • lộn ngược bit $n$: R = R XOR mặt nạ với bit $n$ được bật.
    • kiểm tra bit $n$: R AND mặt nạ, sau đó kiểm tra xem kết quả có khác không.
    Che mask bit trên byte 01001000: bật bit 2 bằng OR 00000100 để nhận 01001100; tắt bit 6 bằng AND 10111111 để nhận 00001000; lộn ngược bit 3 bằng XOR 00001000 để nhận 01000000
    Bật bit bằng OR, tắt nó bằng AND, lộn ngược nó bằng XOR — mỗi phép toán đều sử dụng một mặt nạ

    Thao tác bit nhanh, tốn ít bộ nhớ, và cho phép một byte chứa tối đa 8 trạng thái bật/tắt.

    Trong tập lệnh của bài thi, đây là AND, OR và XOR với mặt nạ được viết dưới dạng số thập phân, nhị phân hoặc thập lục phân. Với ACC đang giữ 10101100:

    Lệnh Mặt nạ Kết quả trong ACC Tác động
    AND B00001111 00001111 00001100 giữ chỉ bốn bit thấp nhất (tắt các bit khác)
    OR #1 00000001 10101101 bật bit quan trọng nhất, để nguyên phần còn lại
    XOR &FF 11111111 01010011 đảo ngược mọi bit
    AND B00001000 sau đó CMP #0 00001000 00001000 kiểm tra bit 3: phép so sánh không bằng nhau, nên bit 3 đã được bật
    LSL #2 10110000 dịch chuyển sang trái hai vị trí, mất hai bit đầu
    LSR #3 00010101 dịch chuyển sang phải ba vị trí, zeros điền vào bên trái

    "Viết lệnh để bật bit quan trọng nhất thành 1 và để nguyên các bit khác": OR #1, hoặc OR B00000001. Để tắt một bit, hãy dùng AND với mặt nạ có 0 ở vị trí đó và 1 ở các vị trí khác; để kiểm tra một bit, hãy AND với mặt nạ chỉ có 1 ở vị trí đó, sau đó so sánh kết quả với 0. Trong thiết bị giám sát, một bit của thanh ghi cho mỗi cảm biến cho phép một đơn vị AND kiểm tra xem cảm biến cụ thể nào đang bật, và một OR bật bit điều khiển cơ cấu chấp hành mà không làm xáo trộn các bit khác.

    Explore · ⁨Khám phá⁩

    Shift and mask the bits of a byte · ⁨D产业发展 và che masking các bit của một byte⁩

    Pick an operator and watch each result bit. A left shift (<<) moves every bit up one place (×2); a right shift (>>) moves them down (÷2); AND with a mask clears the bits you don't want. · ⁨Chọn một toán tử và xem từng bit kết quả. D产业发展 (<<) moves every bit up one place (×2); a right shift (>>) di chuyển chúng xuống (÷2); AND với mask xóa các bit bạn không muốn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    mask/mæsk/ mặt nạ
    4.3

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    stored program concept the program instructions and the data are both held in main memory, and instructions are fetched and executed one at a time
    register a small, very fast storage location inside the processor with a specific purpose
    Program Counter the register holding the address of the next instruction to be fetched
    Memory Address Register the register holding the address of the memory location being read from or written to
    Memory Data Register the register holding the data or instruction just read from, or about to be written to, memory
    Current Instruction Register the register holding the instruction currently being decoded and executed
    Accumulator the general-purpose register holding the result of the last arithmetic or logic operation
    cache memory small, fast memory close to the processor holding frequently used instructions and data
    interrupt a signal from a device or program that causes the processor to pause the current task and run an interrupt service routine
    assembly language a low-level language in which each mnemonic instruction corresponds to one machine-code instruction
    immediate addressing the operand is the value written in the instruction
    direct addressing the operand is the contents of the address written in the instruction
    indirect addressing the address in the instruction holds the address of the operand
    indexed addressing the operand's address is the address in the instruction plus the contents of the index register
    relative addressing the operand's address is given as an offset from the address of the current instruction
    logical shift every bit moves the given number of places and zeros fill the vacated places
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    khái niệm chương trình lưu trữ các lệnh chương trình và dữ liệu đều được lưu trong bộ nhớ chính, và các lệnh được lấy và thực thi từng cái một
    thanh ghi một vị trí lưu trữ nhỏ, rất nhanh bên trong bộ xử lý với mục đích cụ thể
    Bộ đếm Chương trình thanh ghi chứa địa chỉ của lệnh tiếp theo cần được lấy
    Bộ ghi Địa chỉ Bộ nhớ thanh ghi chứa địa chỉ của vị trí bộ nhớ đang đọc từ hoặc ghi vào
    Bộ ghi Dữ liệu Bộ nhớ thanh ghi chứa dữ liệu hoặc lệnh vừa được đọc từ, hoặc sắp được ghi vào, bộ nhớ
    Bộ ghi Lệnh Hiện tại thanh ghi chứa lệnh đang được giải mã và thực thi
    Bộ tích lũy thanh ghi đa năng chứa kết quả của phép toán số học hoặc logic cuối cùng
    bộ nhớ đệm bộ nhớ nhỏ, nhanh gần bộ xử lý chứa các lệnh và dữ liệu thường xuyên được sử dụng
    ngắt tín hiệu từ thiết bị hoặc chương trình khiến bộ xử lý tạm dừng tác vụ hiện tại và chạy thủ tục xử lý ngắt
    ngôn ngữ assembly ngôn ngữ cấp thấp mà mỗi lệnh ký hiệu tương ứng với một lệnh mã máy
    địa chỉ ngay lập tức toán tử là giá trị được viết trong lệnh
    địa chỉ trực tiếp toán tử là nội dung của địa chỉ được viết trong lệnh
    địa chỉ gián tiếp địa chỉ trong lệnh chứa địa chỉ của toán tử
    địa chỉ chỉ mục địa chỉ của toán tử là địa chỉ trong lệnh cộng với nội dung của thanh ghi chỉ mục
    địa chỉ tương đối địa chỉ của toán tử được đưa ra như một độ lệch từ địa chỉ của lệnh hiện tại
    dịch chuyển logic mọi bit di chuyển số vị trí cho trước và zeros điền vào các vị trí trống
    4.3

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Learn the fetch-execute cycle in register-transfer terms (PC, MAR, MDR, CIR, ACC) and what increments the PC.
    • Name each register's job; the address bus is one-way, the data bus is two-way.
    • Distinguish the addressing modes (immediate, direct, indirect, indexed) — a frequent question.
    • Explain how clock speed, number of cores, cache size and word length affect performance.
    • For a binary shift, state whether it is logical or arithmetic; a left shift multiplies by 2, a right shift divides by 2.

    Common mistakes

    • Saying the PC holds the current instruction, or the MDR holds an address. The PC holds the address of the next instruction; the MDR holds data or an instruction, never an address.
    • Leaving the increment of the PC out of the fetch, or putting it after the execute. It happens as soon as the address has been copied to the MAR.
    • Reading LDD 10 as "load 10". LDD 10 loads the contents of address 10; LDM #10 loads the number 10.
    • Putting a value in the ACC column for CMP or OUT. A compare sets a flag only; an output goes to the output column.
    • Saying an interrupt is handled "immediately". The processor finishes the current instruction and checks for interrupts at the end of the cycle.
    • Using a logical right shift on a negative two's-complement number. Only an arithmetic shift keeps the sign bit.
    Tiếng Việt
    • Học chu kỳ lấy-thực thi theo thuật toán truyền thanh ghi (PC, MAR, MDR, CIR, ACC) và thứ gì tăng PC.
    • Tên công việc của mỗi thanh ghi; bus địa chỉ chỉ một chiều, bus dữ liệu hai chiều.
    • Phân biệt các chế độ địa chỉ (ngay lập tức, trực tiếp, gián tiếp, chỉ mục) — câu hỏi thường gặp.
    • Giải thích cách tốc độ xung nhịp, số nhân, kích thước bộ nhớ đệm và độ dài từ ảnh hưởng đến hiệu suất.
    • Đối với dịch chuyển nhị phân, xác định nó là logic hay số học; dịch chuyển sang trái nhân với 2, dịch chuyển sang phải chia cho 2.

    Lỗi thường gặp

    • Nói rằng PC chứa lệnh hiện tại, hoặc MDR chứa địa chỉ. PC chứa địa chỉ của lệnh tiếp theo; MDR chứa dữ liệu hoặc lệnh, không bao giờ chứa địa chỉ.
    • Bỏ qua sự gia tăng của PC trong bước lấy, hoặc đặt nó sau bước thực thi. Nó xảy ra ngay khi địa chỉ đã được sao chép sang MAR.
    • Đọc LDD 10 là "tải 10". LDD 10 tải nội dung của địa chỉ 10; LDM #10 tải số 10.
    • Đặt một giá trị vào cột ACC cho CMP hoặc OUT. Phép so sánh chỉ đặt cờ; đầu ra sẽ đi đến cột đầu ra.
    • Nói rằng một ngắt được xử lý "ngay lập tức". Bộ xử lý hoàn thành lệnh hiện tại và kiểm tra ngắt vào cuối chu kỳ.
    • Sử dụng dịch chuyển logic sang phải trên số bù hai âm. Chỉ có dịch chuyển số học mới giữ nguyên bit dấu.
  • 5

    System Software · ⁨Hệ điều hành⁩

    Watch lesson · ⁨Xem bài học⁩
    5.1

    Operating systems · ⁨Hệ điều hành⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Explain why a computer system requires an Operating System (OS)
    Explain the key management tasks carried out by the Operating System Including memory management, file management, security management, hardware management (input/output/peripherals), process management
    Show understanding of the need for typical utility software provided with an Operating System Including disk formatter, virus checker, defragmentation software, disk contents analysis / disk repair software, file compression, back-up software
    Show understanding of program libraries Including: • software under development is often constructed using existing code from program libraries • the benefits to the developer of software constructed using library files, including Dynamic Link Library (DLL) files
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Giải thích tại sao một hệ thống máy tính cần Hệ điều hành (OS)
    Giải thích các nhiệm vụ quản lý chính do Hệ điều hành thực hiện Bao gồm quản lý bộ nhớ, quản lý tệp, quản lý bảo mật, quản lý phần cứng (nhập/lấy/ngoại vi), quản lý tiến trình
    Thể hiện sự hiểu biết về nhu cầu đối với các phần mềm tiện ích tiêu chuẩn đi kèm với Hệ điều hành Bao gồm trình định dạng đĩa, trình kiểm tra virus, phần mềm giải nén, phân tích nội dung đĩa / phần mềm sửa chữa đĩa, nén tệp, phần mềm sao lưu
    Thể hiện sự hiểu biết về thư viện chương trình Bao gồm: • phần mềm đang phát triển thường được xây dựng bằng cách sử dụng mã hiện có từ thư viện chương trình • lợi ích dành cho nhà phát triển khi phần mềm được xây dựng bằng các tệp thư viện, bao gồm cả Thư viện liên kết động (DLL)

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Why a computer needs an OS

    Hardware on its own can only fetch and run instructions — it knows nothing about files, programs, networks or users. The operating system 操作系统 (OS) is the software layer that:

    • manages the hardware (processor 处理器, memory, I/O, storage) for the running programs.
    • provides services (file system, network, user accounts) through a clear interface, so programs need not talk to the hardware directly.
    • provides a user interface (command line, GUI, touch).
    • lets several programs share the hardware safely — each gets fair CPU time and is kept out of the others' memory.

    Without an OS, every program would need its own drivers, and only one program could safely run at a time.

    "Describe the purpose of an OS" — the five-mark list. The OS (1) provides an interface between the user and the hardware; (2) hides the complexity of the hardware from the user and from application programs; (3) manages the hardware resources — processor time, memory, storage and input/output devices — and shares them between programs; (4) loads application software into memory and runs it, giving every program the same platform to run on; (5) lets several programs run at once (multitasking 多任务处理) while keeping them, and the users' data, secure. Give five different points; "it runs the computer" or "it manages resources" alone earns nothing.

    Key management tasks

    The syllabus names five. Each point below is one thing the OS actually does, which is what a "describe" question wants.

    • memory management 内存管理 — allocates memory to each program when it is loaded, keeps every program's memory separate (memory protection 内存保护) so one cannot overwrite another, frees the memory when a program ends, and swaps pages between RAM 随机存取存储器 and secondary storage 辅助存储器 (the disk) (virtual memory 虚拟内存 / paging 分页) so more programs can be open than physical memory allows.
    • process management 进程管理 — a running program is a process 进程. The OS creates and ends processes, decides which process gets the CPU next (scheduling 调度) and for how long (a time slice 时间片), switches between them, resolves conflicts when two want the same resource, and can kill one that stops responding.
    • hardware management (input/output and peripherals) — talks to each device through its device driver 设备驱动, queues and buffers data going to slow devices such as a printer, responds to interrupts 中断 from devices, and shares one device between several programs.
    • file management — creates, names, copies, moves and deletes files and folders, keeps the directory 目录 structure and a record of where each file is stored on the disk, allocates disk space to files, and enforces access rights 访问权限 (read / write / execute) for each user.
    • security management — user accounts and passwords (authentication 身份验证), access rights, encryption of stored data, a firewall, automatic security updates, and a log of who did what.

    How memory and process management support multitasking (a four-mark favourite). Memory management loads several programs into memory at the same time, each in its own protected area, and keeps track of which addresses belong to which; process management shares the processor between them — each process runs for a time slice, the OS saves its state and switches to the next, and the switching is so fast that all the programs appear to run together. Interrupts let the OS take the processor back from a process whenever a device needs attention.

    Interrupts. A hardware interrupt 硬件中断 comes from a device: a key pressed, a mouse click, a printer out of paper, a disk finishing a transfer, a power failure. A software interrupt 软件中断 comes from a program: division by zero, an invalid instruction, an attempt to use memory it does not own, or a request for an OS service. The OS's interrupt handler 中断处理程序 saves the state of the running process, deals with the interrupt, then restores the process (topic 4 covers the fetch–execute detail).

    Utility software

    Utility programs 实用程序 are system software that maintain, repair or optimise the computer rather than doing a user's task; the examiner accepts "performs a specific maintenance task that improves performance or security". Most OSes bundle these:

    • disk formatter — prepares a new disk (or wipes an old one) for use: sets up its file system and partitions, deleting any existing data.
    • virus checker (antivirus 杀毒软件) — scans files and memory, compares code against a database of known virus signatures 签名 and watches for suspicious behaviour, then quarantines or deletes what it finds; runs on a schedule and on every download, and needs updating as new viruses appear.
    • defragmentation software (disk defragmenter 碎片整理) — a hard disk stores a file in whatever free blocks it finds, so after many saves and deletes a file is scattered (fragmented 碎片化) across the platter and the read/write head must jump between the pieces. The defragmenter moves the pieces of each file next to each other and gathers the free space into one region, so files load faster and new files are not fragmented. Not needed on an SSD, which has no moving head.
    • disk contents analysis / disk repair software — shows what is using the disk space (large, duplicate or temporary files) so they can be removed; finds and repairs bad sectors, lost clusters and file-system errors.
    • file compression (compression 压缩) — shrinks files so they need less storage and transfer faster; archiving bundles many files into one.
    • back-up software (backup 备份) — copies files to another medium (external disk, network, cloud) on a schedule so data can be restored after loss, corruption or a ransomware attack; a full copy is followed by incremental backups 增量备份 of only what changed.
    • a firewall 防火墙 (filters network traffic by rules) and encryption tools, for security; a system monitor and automatic updates.

    Bundling these with the OS saves the user installing each one.

    Which utility does what. Performance: defragmentation (faster file access), disk repair (a disk with errors is slow or fails), disk contents analysis (free space by deleting junk), compression (more fits on the disk). Security: virus checker, firewall, encryption, and backup (the only recovery from ransomware). A "draw one line" question pairs each utility with exactly one purpose — learn the pairs above and use the syllabus names.

    Worked example. Explain how defragmentation can improve the performance of a computer (3 marks).

    Over time a file is stored in blocks scattered across the hard disk, so reading it needs many movements of the read/write head. The defragmenter rearranges the blocks so each file is stored contiguously and the free space is together. Files are then read with fewer head movements, so they load faster, and new files can be written into one continuous space.

    Tiếng Việt

    Tại sao máy tính cần hệ điều hành

    Phần cứng nếu độc lập chỉ có thể lấy và chạy các lệnh — nó không biết gì về tệp, chương trình, mạng hoặc người dùng. Hệ điều hành (OS) là lớp phần mềm mà:

    • quản lý phần cứng (bộ xử lý, bộ nhớ, I/O, lưu trữ) cho các chương trình đang chạy.
    • cung cấp dịch vụ (hệ thống tập tin, mạng, tài khoản người dùng) thông qua một giao diện rõ ràng, giúp các chương trình không cần tương tác trực tiếp với phần cứng.
    • cung cấp giao diện người dùng (dòng lệnh, giao diện đồ họa, cảm ứng).
    • cho phép nhiều chương trình chia sẻ phần cứng an toàn — mỗi chương trình nhận được thời gian CPU công bằng và được cách ly khỏi bộ nhớ của chương trình khác.

    Không có hệ điều hành, mỗi chương trình sẽ cần trình điều khiển riêng, và chỉ có thể chạy an toàn một chương trình tại một thời điểm.

    "Mô tả mục đích của hệ điều hành" — danh sách năm điểm. Hệ điều hành (1) cung cấp giao diện giữa người dùng và phần cứng; (2) che giấu độ phức tạp của phần cứng khỏi người dùng và các chương trình ứng dụng; (3) quản lý tài nguyên phần cứng — thời gian xử lý, bộ nhớ, lưu trữ và thiết bị đầu vào/đầu ra — và chia sẻ chúng giữa các chương trình; (4) tải phần mềm ứng dụng vào bộ nhớ và thực thi, mang lại cho mọi chương trình cùng một nền tảng để chạy; (5) cho phép nhiều chương trình chạy đồng thời (đa nhiệm) trong khi giữ cho chúng và dữ liệu của người dùng an toàn. Đưa ra năm điểm khác nhau; "nó chạy máy tính" hoặc "nó quản lý tài nguyên" đơn lẻ sẽ không được điểm.

    Hệ điều hành trên máy tính để bàn hiển thị trên màn hình
    Hệ điều hành máy tính để bàn quản lý màn hình, tập tin và chương trình cho người dùng
    Một điện thoại thông minh cầm bằng một tay, hiển thị màn hình chính Android với các biểu tượng ứng dụng
    Điện thoại cũng cần có nó: đây là hệ điều hành di động, Android

    Các tác vụ quản lý chính

    Chương trình học liệt kê năm việc này. Mỗi ý dưới đây là một thứ mà hệ điều hành thực sự làm, đó chính là những gì câu hỏi "mô tả" yêu cầu.

    • quản lý bộ nhớ — phân bổ bộ nhớ cho mỗi chương trình khi nó được tải, giữ cho bộ nhớ của mỗi chương trình tách biệt (bảo vệ bộ nhớ) để một chương trình không thể ghi đè lên chương trình khác, giải phóng bộ nhớ khi chương trình kết thúc, và hoán đổi trang giữa RAM và lưu trữ phụ (đĩa) (bộ nhớ ảo / phân trang) để có thể mở nhiều chương trình hơn dung lượng bộ nhớ vật lý cho phép.
    • quản lý tiến trình — một chương trình đang chạy là một tiến trình. Hệ điều hành tạo và kết thúc tiến trình, quyết định tiến trình nào sẽ nhận CPU tiếp theo (lập lịch) và trong bao lâu (một thời slice), chuyển đổi giữa chúng, giải quyết xung đột khi hai tiến trình muốn sử dụng cùng một tài nguyên, và có thể终止 một tiến trình không còn phản hồi.
    • quản lý phần cứng (đầu vào/đầu ra và thiết bị ngoại vi) — giao tiếp với từng thiết bị thông qua trình điều khiển thiết bị, xếp hàng và đệm dữ liệu gửi đến các thiết bị chậm như máy in, phản hồi ngắt từ thiết bị, và chia sẻ một thiết bị giữa nhiều chương trình.
    • quản lý tập tin — tạo, đặt tên, sao chép, di chuyển và xóa tập tin và thư mục, duy trì cấu trúc thư mục và bản ghi vị trí lưu trữ của từng tập tin trên đĩa, phân bổ không gian đĩa cho tập tin, và áp đặt quyền truy cập (đọc / ghi / thực thi) cho từng người dùng.
    • quản lý bảo mật — tài khoản người dùng và mật khẩu (xác thực), quyền truy cập, mã hóa dữ liệu đã lưu trữ, tường lửa, bản cập nhật bảo mật tự động, và nhật ký về ai đã làm gì.
    Sơ đồ Hub với hệ điều hành ở trung tâm được nối bằng các nan hoa đến bộ nhớ, quản lý tiến trình, tệp, thiết bị và bảo mật cũng như giao diện người dùng
    Những công việc chính mà hệ điều hành quản lý
    Bản đồ bộ nhớ có hệ điều hành và ba ứng dụng, mỗi ứng dụng nằm trong khối riêng biệt, phân tách bởi địa chỉ biên; truy cập bên trong một khối được phép nhưng truy cập vượt qua biên sẽ bị chặn
    Bảo vệ bộ nhớ giữ cho mỗi ứng dụng nằm trong khối bộ nhớ riêng của nó

    Cách quản lý bộ nhớ và tiến trình hỗ trợ đa nhiệm (một câu hỏi phổ biến bốn điểm). Quản lý bộ nhớ tải nhiều chương trình vào bộ nhớ cùng lúc, mỗi chương trình trong khu vực được bảo vệ riêng, và theo dõi xem địa chỉ nào thuộc về chương trình nào; quản lý tiến trình chia sẻ bộ xử lý giữa chúng — mỗi tiến trình chạy trong một thời slice, hệ điều hành lưu trạng thái của nó và chuyển sang tiến trình tiếp theo, và việc chuyển đổi diễn ra nhanh đến mức tất cả các chương trình dường như đang chạy song song. Ngắt cho phép hệ điều hành thu lại bộ xử lý từ một tiến trình bất cứ khi nào thiết bị cần chú ý.

    Ngắt. Một ngắt phần cứng đến từ thiết bị: nhấn phím, click chuột, hết giấy máy in, hoàn thành truyền dữ liệu đĩa, mất điện. Một ngắt phần mềm đến từ chương trình: chia cho số không, lệnh hợp lệ, cố gắng sử dụng bộ nhớ không thuộc sở hữu, hoặc yêu cầu dịch vụ của hệ điều hành. Bộ xử lý ngắt của hệ điều hành lưu trạng thái của tiến trình đang chạy, xử lý ngắt, sau đó khôi phục tiến trình (chủ đề 4 bao gồm chi tiết fetch–execute).

    Phần mềm tiện ích

    Các chương trình tiện ích là phần mềm hệ thống duy trì, sửa chữa hoặc tối ưu hóa máy tính thay vì thực hiện tác vụ của người dùng; giám khảo chấp nhận "thực hiện một tác vụ bảo trì cụ thể cải thiện hiệu suất hoặc bảo mật". Hầu hết các hệ điều hành đều đóng gói những công cụ này:

    Các chương trình tiện ích phổ biến: phần mềm diệt virus, sao lưu, nén tệp và sắp xếp lại đĩa cứng
    Các chương trình tiện ích: diệt virus, sao lưu, nén và sắp xếp lại ổ đĩa
    • định dạng ổ đĩa — chuẩn bị một ổ đĩa mới (hoặc xóa hoàn toàn một ổ đĩa cũ) để sử dụng: thiết lập hệ thống tập tin và phân vùng của nó, xóa bất kỳ dữ liệu nào đã tồn tại.
    • trình kiểm tra virus (diệt virus) — quét tập tin và bộ nhớ, so sánh mã đối với cơ sở dữ liệu các kí hiệu virus đã biết và theo dõi hành vi đáng ngờ, sau đó cô lập hoặc xóa những gì tìm thấy; chạy theo lịch trình và mỗi lần tải xuống, và cần được cập nhật khi xuất hiện virus mới.
    • phần mềm phân mảnh (defragmentation software) (định dạng lại ổ cứng) — một ổ cứng lưu trữ tệp trong bất kỳ khối trống nào nó tìm thấy, vì vậy sau nhiều lần lưu và xóa, một tệp sẽ bị phân tán (fragmented) khắp đĩa và đầu đọc/ghi phải di chuyển giữa các mảnh. Phần mềm định dạng lại di chuyển các mảnh của mỗi tệp sát nhau và gom không gian trống thành một vùng, giúp tệp tải nhanh hơn và tệp mới không bị phân mảnh. Không cần thiết trên SSD, vốn không có đầu cơ khí di chuyển.
    • phần mềm phân tích/sửa chữa nội dung ổ cứng — hiển thị những gì đang chiếm dung lượng ổ cứng (tệp lớn, trùng lặp hoặc tạm thời) để có thể xóa; phát hiện và sửa lỗi sector xấu, cluster mất và lỗi hệ thống tệp.
    • nén tệp (file compression) (nén) — thu nhỏ tệp để tiết kiệm bộ nhớ và truyền tải nhanh hơn; đóng gói (archiving) gộp nhiều tệp vào một tệp duy nhất.
    • phần mềm sao lưu (back-up software) (backup) — sao chép tệp sang phương tiện khác (ổ ngoài, mạng, đám mây) theo lịch trình để dữ liệu có thể được khôi phục sau khi mất, hư hỏng hoặc tấn công ransomware; bản sao đầy đủ được tiếp theo bởi sao lưu tăng dần (incremental backups) chỉ chứa phần thay đổi.
    • firewall (lọc lưu lượng mạng theo quy tắc) và công cụ mã hóa, nhằm bảo mật; cùng với công cụ giám sát hệ thống và cập nhật tự động.

    Việc đóng gói các công cụ này với hệ điều hành giúp người dùng không cần cài đặt từng cái riêng lẻ.

    Mỗi công cụ làm gì. Hiệu suất: phân mảnh (truy cập tệp nhanh hơn), sửa ổ cứng (ổ có lỗi sẽ chậm hoặc hỏng), phân tích nội dung ổ (giải phóng không gian bằng cách xóa rác), nén (lưu được nhiều hơn vào ổ). Bảo mật: kiểm tra virus, firewall, mã hóa và backup (chỉ có backup là cách khôi phục từ ransomware). Câu hỏi "vẽ một đường nối" ghép mỗi công cụ với đúng một mục đích — hãy học các cặp trên và sử dụng tên gọi trong chương trình.

    Ví dụ minh họa. Giải thích cách phân mảnh có thể cải thiện hiệu suất máy tính (3 điểm).

    Theo thời gian, một tệp được lưu trong các khối phân tán khắp ổ cứng, nên việc đọc nó đòi hỏi nhiều lần di chuyển của đầu đọc/ghi. Công cụ định dạng lại sắp xếp lại các khối sao cho mỗi tệp được lưu liền kề (contiguously) và không gian trống được gom lại. Tệp sau đó được đọc với ít lần di chuyển đầu hơn, nên tải nhanh hơn, và tệp mới có thể được ghi vào một không gian liên tục.

    Explore · ⁨Khám phá⁩

    Where the operating system sits · ⁨Vị trí của hệ điều hành⁩

    Tap each layer. The OS is the middle layer — it sits between your applications and the hardware, sharing the machine safely so programs never touch the hardware directly. · ⁨Chạm vào mỗi lớp. OS là lớp giữa — nó nằm giữa ứng dụng của bạn và phần cứng, chia sẻ máy an toàn để chương trình không bao giờ chạm trực tiếp vào phần cứng.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    operating system/ˈɒpəreɪtɪŋ ˈsɪstəm/ hệ điều hành
    processor/ˈprəʊsesə/ bộ xử lý
    multitasking/ˈmʌltitæskɪŋ/ đa nhiệm vụ
    memory management/ˈmeməri ˈmænɪdʒmənt/ quản lý bộ nhớ
    memory protection/ˈmeməri prəˈtekʃn/ bảo vệ bộ nhớ
    RAM/ræm/ RAM
    secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ bộ nhớ phụ
    virtual memory/ˈvɜːtʃuːəl ˈmeməri/ bộ nhớ ảo
    paging/ˈpeɪdʒɪŋ/ paging
    process management/ˈprəʊses ˈmænɪdʒmənt/ quản lý tiến trình
    process/ˈprəʊses/ quá trình (process)
    scheduling/ˈʃedjuːlɪŋ/ lập lịch
    time slice/taɪm slaɪs/ lát cắt thời gian
    device driver/dɪˈvaɪs ˈdraɪvə/ trình điều khiển thiết bị
    interrupts/ˈɪntərʌpts/ ngắt
    directory/daɪˈrektəri/ thư mục
    access rights/ˈækses raɪts/ quyền truy cập
    authentication/ɔːˌθentɪˈkeɪʃn/ xác thực
    firewall/ˈfaɪəwɔːl/ tường lửa
    hardware interrupt/ˈhɑːdweə ˈɪntərʌpt/ ngắt phần cứng
    software interrupt/ˈsɒftweə ˈɪntərʌpt/ ngắt phần mềm
    interrupt handler/ˈɪntərʌpt ˈhændlə/ xử lý ngắt
    utility program/juːˈtɪlɪti ˈprəʊɡræm/ chương trình tiện ích
    antivirus/ˌæntɪˈvaɪrəs/ phần mềm diệt virus
    backup/ˈbækʌp/ bản sao lưu
    compression/kəmˈpreʃn/ nén dữ liệu
    disk defragmenter/dɪsk ˌdiːˈfræɡmentə/ tạo lại ổ đĩa
    signatures/ˈsɪɡnɪtʃəz/ chữ ký
    fragmented/fræɡˈmentɪd/ fragmented
    incremental backups/ˌɪŋkrɪˈmentl ˈbækʌps/ sao lưu tăng dần
    program library/ˈprəʊɡræm ˈlaɪbrəri/ thư viện chương trình
    5.1

    Program libraries · ⁨Thư viện chương trình⁩

    English

    A program library 程序库 is pre-written code (subroutines 子程序, classes, modules) that programs reuse instead of writing it themselves — e.g. a maths library, a network library, a graphics library.

    Benefits: saves time (off-the-shelf code), reliable (well-tested, widely used), and standardised (consistent behaviour).

    The examiner's benefit list, for the developer. The library routines 库例程 are already written and tested, so development is faster and cheaper; they are reliable and, being used by many programs, largely error-free; the developer needs no expertise in that area (graphics, compression, encryption, path-finding); the program is easier to maintain because common code lives in one place; and a whole team can use the same routines, giving consistent results. Drawbacks: a routine may not do exactly what you need and you cannot change it; your program depends on the library being available, correct and secure — a bug or a security hole in the library is a bug in your program; and you must learn how to call it.

    • a static library 静态库 is copied into the executable at compile time (stands alone, but larger and needs rebuilding to update).
    • a dynamic library 动态库 (DLL, Dynamic Link Library; .so) is loaded at run time (smaller executables, shared by many programs, updated once for all).

    Dynamic Link Library (DLL) files. A DLL is a library that is loaded into memory only when a program calls it, at run time, and stays as a separate file rather than being copied into the executable. Benefits: the executable is smaller; several running programs share one copy of the DLL in memory; a DLL can be updated (bug fix, new device) without recompiling the programs that use it; and memory is used only while the routine is needed. Drawbacks: the program will not run if the DLL is missing, moved or the wrong version; an updated DLL can break a program that relied on the old behaviour; and a fake DLL put in its place runs with the program's rights.

    Worked example. A team writing the software for a restaurant robot uses a program library that includes a routine to find the shortest path between tables. Explain two benefits and one drawback to the team.

    Benefits: the routine is already written and tested, so the team saves time and can trust the result; the team need not understand path-finding algorithms themselves and can spend the time on the robot's own features. Drawback: the routine may not handle the restaurant's exact needs (moving chairs, one-way aisles) and the team cannot alter it, so they may have to work around its limits.

    Tiếng Việt

    Một thư viện chương trình là đoạn mã đã được viết sẵn (subroutines, classes, modules) mà các chương trình tái sử dụng thay vì tự viết lại — ví dụ: thư viện toán học, thư viện mạng, thư viện đồ họa.

    Một chương trình mới đang phát triển tái sử dụng các thủ tục có sẵn từ thư viện toán học, thư viện đồ họa và thư viện mạng
    Một chương trình mới tái sử dụng các thủ tục có sẵn từ thư viện

    Lợi ích: tiết kiệm thời gian (mã có sẵn), đáng tin cậy (đã được kiểm tra kỹ, được sử dụng rộng rãi), và chuẩn hóa (hành vi nhất quán).

    Danh sách lợi ích dành cho nhà phát triển. Các thủ tục thư viện đã được viết và kiểm tra sẵn, nên quá trình phát triển diễn ra nhanh hơn và rẻ hơn; chúng đáng tin cậy và, do được nhiều chương trình sử dụng, hầu như không có lỗi; nhà phát triển không cần chuyên môn sâu về lĩnh vực đó (đồ họa, nén, mã hóa, tìm đường); chương trình dễ bảo trì hơn vì mã chung nằm ở một nơi; và cả nhóm có thể sử dụng cùng các thủ tục, mang lại kết quả nhất quán. Nhược điểm: một thủ tục có thể không làm chính xác những gì bạn cần và bạn không thể thay đổi nó; chương trình của bạn phụ thuộc vào việc thư viện luôn có sẵn, chính xác và an toàn — một lỗi hoặc lỗ hổng bảo mật trong thư viện cũng là lỗi trong chương trình của bạn; và bạn phải học cách gọi nó.

    • một thư viện tĩnh (static library) được sao chép vào file thực thi tại thời điểm biên dịch (tự chạy độc lập, nhưng lớn hơn và cần biên dịch lại để cập nhật).
    • một thư viện động (dynamic library) (DLL, Dynamic Link Library; .so) được tải vào bộ nhớ tại thời điểm chạy (file thực thi nhỏ hơn, được chia sẻ bởi nhiều chương trình, chỉ cần cập nhật một lần cho tất cả).
    Thư viện tĩnh được sao chép vào file thực thi tại thời điểm biên dịch, tạo ra một chương trình tự chạy độc lập lớn hơn; thư viện động (.dll hoặc .so) giữ nguyên tách biệt, được tải vào bộ nhớ tại thời điểm chạy, và được chia sẻ bởi nhiều chương trình
    Tĩnh: thư viện được sao chép vào file thực thi. Động: một file thư viện được chia sẻ được tải vào bộ nhớ tại thời điểm chạy

    Tệp Dynamic Link Library (DLL). Một DLL là thư viện được tải vào bộ nhớ chỉ khi một chương trình gọi nó, tại thời điểm chạy, và vẫn giữ dưới dạng file riêng biệt chứ không được sao chép vào file thực thi. Lợi ích: file thực thi nhỏ hơn; nhiều chương trình đang chạy chia sẻ một bản sao DLL trong bộ nhớ; DLL có thể được cập nhật (sửa lỗi, thêm thiết bị) mà không cần biên dịch lại các chương trình sử dụng nó; và bộ nhớ chỉ được sử dụng khi thủ tục cần thiết. Nhược điểm: chương trình sẽ không chạy nếu thiếu DLL, bị di chuyển hoặc sai phiên bản; một DLL được cập nhật có thể làm hỏng chương trình dựa trên hành vi cũ; và một DLL giả mạo được thay thế sẽ chạy với quyền hạn của chương trình đó.

    Ví dụ minh họa. Một nhóm đang viết phần mềm cho robot nhà hàng sử dụng một thư viện chương trình bao gồm thủ tục tìm đường đi ngắn nhất giữa các bàn. Hãy giải thích hai lợi ích và một nhược điểm đối với nhóm.

    Lợi ích: thủ tục đã được viết và kiểm tra sẵn, nên nhóm tiết kiệm thời gian và có thể tin tưởng vào kết quả; nhóm không cần hiểu thuật toán tìm đường mà bản thân họ có thể dành thời gian cho các tính năng riêng của robot. Nhược điểm: thủ tục có thể không xử lý chính xác nhu cầu của nhà hàng (di chuyển ghế, lối đi một chiều) và nhóm không thể thay đổi nó, nên họ có thể phải tìm cách khắc phục các giới hạn của nó.

    Explore · ⁨Khám phá⁩

    Computing concept lab · ⁨Phòng thí nghiệm khái niệm tin học⁩

    Classify concrete examples by the computing idea they demonstrate. · ⁨Phân loại các ví dụ cụ thể theo ý tưởng tin học mà chúng minh họa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    subroutines/ˈsʌbruːtiːnz/ subroutine
    library routines/ˈlaɪbrəri ruːˈtiːnz/ routine thư viện
    static library/ˈstætɪk ˈlaɪbrəri/ thư viện tĩnh
    executable/ɪɡˈzekjʊtəbl/ tập tin thực thi
    dynamic library/daɪˈnæmɪk ˈlaɪbrəri/ thư viện động
    translator/trænˈsleɪtə/ trình dịch
    machine code/məˈʃiːn kəʊd/ mã máy
    5.2

    Language translators · ⁨Bộ dịch ngôn ngữ⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the need for: • assembler software for the translation of an assembly language program • a compiler for the translation of a high-level language program • an interpreter for translation and execution of a high-level language program
    Explain the benefits and drawbacks of using either a compiler or interpreter and justify the use of each
    Show awareness that high-level language programs may be partially compiled and partially interpreted, such as Java (console mode)
    Describe features found in a typical Integrated Development Environment (IDE) Including: • for coding, including context-sensitive prompts • for initial error detection, including dynamic syntax checks • for presentation, including prettyprint, expand and collapse code blocks • for debugging, including single stepping, breakpoints, i.e. variables, expressions, report window
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về nhu cầu: • phần mềm trình biên dịch assembly để dịch một chương trình ngôn ngữ Assembly • một trình biên dịch để dịch một chương trình ngôn ngữ bậc cao • một trình giải thích để dịch và thực thi một chương trình ngôn ngữ bậc cao
    Giải thích những ưu điểm và nhược điểm của việc sử dụng trình biên dịch hoặc trình giải thích và biện minh cho việc sử dụng từng loại
    Thể hiện nhận thức rằng các chương trình ngôn ngữ bậc cao có thể được biên dịch một phần và giải thích một phần, chẳng hạn như Java (chế độ console)
    Mô tả các tính năng thường thấy trong một môi trường phát triển tích hợp (IDE) Bao gồm: • cho việc lập trình, bao gồm các yêu cầu hỗ trợ ngữ cảnh • cho việc phát hiện lỗi ban đầu, bao gồm kiểm tra cú pháp động • cho việc trình bày, bao gồm căn chỉnh đẹp, mở rộng và thu gọn khối code • cho việc gỡ lỗi, bao gồm bước đơn, điểm dừng, tức là biến, biểu thức, cửa sổ báo cáo

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    You write source code; the computer runs machine code 机器码. A translator 翻译器 converts between them.

    Assembler

    An assembler 汇编器 translates assembly language 汇编语言 into machine code: each mnemonic instruction (LDD, ADD, JMP) becomes exactly one machine-code instruction, and symbolic addresses and labels are replaced by real addresses. It is needed because the processor executes only machine code, and assembly is used where the programmer needs direct control of the hardware (embedded systems, device drivers).

    Compiler

    A compiler 编译器 translates a high-level program into machine code once, before it runs.

    • it reports all errors at compile time; once clean, it produces a stand-alone executable 可执行文件 that runs without the compiler installed and can be run many times.
    • generally faster at run time (no translation while running), but tied to one CPU/OS — recompile for each platform.

    The two-mark description: a compiler translates the whole high-level program into machine code (object code 目标代码) before it is run, produces an executable file, and reports all the syntax errors together as a list at the end of translation. It does not run the program.

    Interpreter

    An interpreter 解释器 translates and runs a high-level program one line at a time, producing no executable.

    • it reports an error when it reaches that line, then stops; you can fix it and continue — good for development.
    • the interpreter must be installed to run the program; generally slower (each run re-translates), but easy to port across platforms.

    The two-mark description: an interpreter translates one statement of the high-level program at a time and executes it immediately before moving to the next; no executable file is produced; it stops at the first error it meets and reports it. Both the source code and the interpreter must be present every time the program runs.

    Choosing between them

    Use a compiler when: Use an interpreter when:
    run-time speed matters you want fast edit–run cycles
    distributing to users without dev tools writing cross-platform scripts
    the program runs many times the program is small or run once
    teaching beginners

    Benefits and drawbacks, as the mark scheme lists them.

    compiler interpreter
    execution speed fast — already machine code slower — translated on every run
    what the user needs only the executable; no translator, and the source code stays private the source code and the interpreter
    finding errors all errors listed at once, after the whole program is translated each error reported at the line where it occurs, as you develop
    changing the code recompile the whole program after every change edit and run again immediately
    portability machine code runs on one platform only; recompile for each the same source runs wherever an interpreter exists

    Worked example. A developer uses an interpreter while writing a program and a compiler when it is finished. Explain how each is used (4 marks).

    During development the interpreter runs the partly written program at once, without waiting for a complete translation; when it meets an error it reports the line, so the developer fixes it and runs again immediately — a fast edit–run cycle that is easier for debugging. When the program is finished, the compiler translates the whole program into an executable that runs faster, needs no translator on the user's computer, and does not reveal the source code, so it can be sold to the public.

    Hybrid: Java

    Java is compiled into bytecode 字节码 (a platform-independent intermediate form), which a virtual machine 虚拟机 (the JVM) then interprets — or uses just-in-time compilation 即时编译 to turn hot parts into native code. So errors are caught early, the bytecode runs anywhere with a JVM ("write once, run anywhere"), and long-running programs reach near-native speed. C# and Python use similar designs.

    The syllabus phrase is "partially compiled and partially interpreted": the compiler stage catches syntax errors and produces compact, portable 可移植的 bytecode; the interpreting stage lets that one bytecode file run on any machine that has a virtual machine, at the cost of some speed. Java in console mode (a text program run from the command line) is the syllabus's example.

    Worked example. Java source is compiled to bytecode, which a JVM then interprets. Why use both, instead of compiling straight to machine code? A compiler produces machine code for one processor and operating system, so a program compiled on one machine will not run on another. Java's compiler instead targets a virtual machine, so the bytecode it produces is identical everywhere; each platform then supplies its own JVM to interpret that bytecode into its own native instructions. One compiled file therefore runs anywhere a JVM exists - "write once, run anywhere". The price is speed: interpreting bytecode is slower than running native code, which is why a real JVM also uses JIT compilation to turn frequently-run bytecode into native code while the program runs. Name both sides - the marks are for portability bought at the cost of speed.

    Tiếng Việt

    Bạn viết mã nguồn; máy tính chạy mã máy. Một bộ dịch chuyển đổi giữa chúng.

    Assembler

    Một trình biên dịch assembly chuyển đổi ngôn ngữ assembly thành mã máy: mỗi câu lệnh mnemonic (LDD, ADD, JMP) trở thành đúng một câu lệnh mã máy, và các địa chỉ ký hiệu cùng nhãn được thay thế bằng địa chỉ thực. Điều này cần thiết vì bộ xử lý chỉ thi hành mã máy, và assembly thường được sử dụng khi lập trình viên cần kiểm soát trực tiếp phần cứng (hệ thống nhúng, trình điều khiển thiết bị).

    Trình biên dịch

    Một trình biên dịch chuyển đổi chương trình mức cao thành mã máy một lần duy nhất, trước khi chạy.

    • nó báo cáo tất cả các lỗi ở thời điểm biên dịch; sau khi không còn lỗi, nó tạo ra một file thực thi độc lập có thể chạy mà không cần cài đặt trình biên dịch và có thể chạy nhiều lần.
    • thường nhanh hơn trong quá trình chạy (không cần dịch trong lúc thực thi), nhưng bị giới hạn cho một CPU/Hệ điều hành cụ thể — phải biên dịch lại cho từng nền tảng.

    Mô tả hai điểm: một trình biên dịch chuyển đổi toàn bộ chương trình mức cao thành mã máy (mã đối tượng) trước khi chạy, tạo ra file thực thi, và báo cáo tất cả các lỗi cú pháp cùng nhau dưới dạng danh sách ở cuối quá trình dịch. Nó không chạy chương trình.

    Trình giải thích

    Một trình giải thích dịch và chạy một chương trình mức cao dòng theo dòng, không tạo ra file thực thi.

    • nó báo cáo lỗi khi đến đúng dòng đó, rồi dừng lại; bạn có thể sửa lỗi và tiếp tục — rất tốt cho việc phát triển.
    • trình giải thích phải được cài đặt để chạy chương trình; thường chậm hơn (mỗi lần chạy đều phải dịch lại), nhưng dễ dàng di chuyển sang các nền tảng khác.

    Mô tả hai điểm: một trình giải thích dịch một câu lệnh của chương trình mức cao mỗi lần và thi hành ngay lập tức trước khi chuyển sang câu tiếp theo; không tạo ra file thực thi; nó dừng lại tại lỗi đầu tiên gặp phải và báo cáo lỗi đó. Cả mã nguồn và trình giải thích đều phải có mặt mỗi khi chương trình chạy.

    Trình biên dịch dịch mã nguồn một lần thành file thực thi sau đó chạy nhiều lần mà không cần công cụ dịch; trình giải thích dịch và chạy mã nguồn dòng theo dòng, ở mỗi lần chạy
    Trình biên dịch dịch một lần thành chương trình độc lập; trình giải thích dịch dòng theo dòng, ở mỗi lần chạy

    Lựa chọn giữa chúng

    Sử dụng trình biên dịch khi: Sử dụng trình giải thích khi:
    tốc độ chạy quan trọng bạn muốn chu kỳ chỉnh sửa – chạy nhanh
    phân phối cho người dùng không có công cụ phát triển viết script đa nền tảng
    chương trình chạy nhiều lần chương trình nhỏ hoặc chỉ chạy một lần
    giảng dạy người mới bắt đầu

    Ưu điểm và nhược điểm, như bảng điểm quy định.

    Trình biên dịch Trình giải thích
    tốc độ thực thi nhanh — đã là mã máy chậm — được dịch ở mỗi lần chạy
    những gì người dùng cần chỉ cần file thực thi; không cần công cụ dịch, và mã nguồn giữ bí mật mã nguồn và trình giải thích
    tìm kiếm lỗi tất cả lỗi được liệt kê cùng lúc, sau khi toàn bộ chương trình được dịch từng lỗi được báo cáo tại dòng xảy ra, trong quá trình phát triển
    thay đổi mã biên dịch lại toàn bộ chương trình sau mỗi lần thay đổi chỉnh sửa và chạy lại ngay lập tức
    khả năng di chuyển mã máy chỉ chạy trên một nền tảng; phải biên dịch lại cho từng nền tảng cùng một mã nguồn có thể chạy bất cứ nơi nào có trình giải thích

    Ví dụ minh họa. Một nhà phát triển sử dụng trình giải thích trong khi viết chương trình và trình biên dịch khi hoàn tất. Giải thích cách sử dụng từng loại (4 điểm).

    Trong quá trình phát triển, trình giải thích chạy chương trình đang viết dở ngay lập tức, không chờ bản dịch hoàn chỉnh; khi gặp lỗi, nó báo cáo dòng code, giúp nhà phát triển sửa lỗi và chạy lại ngay — chu kỳ chỉnh sửa – chạy nhanh này giúp việc debug dễ dàng hơn. Khi chương trình hoàn tất, trình biên dịch chuyển đổi toàn bộ chương trình thành file thực thi chạy nhanh hơn, không cần công cụ dịch trên máy tính người dùng, và không tiết lộ mã nguồn, nên có thể bán cho công chúng.

    Kết hợp: Java

    Java được biên dịch thành bytecode (dạng trung gian độc lập với nền tảng), sau đó một máy ảo (JVM) sẽ giải thích — hoặc sử dụng biên dịch tức thì (just-in-time) để biến các đoạn code nóng thành mã gốc. Do đó, lỗi được bắt sớm, bytecode chạy được trên mọi nền tảng có JVM ("viết một lần, chạy mọi nơi"), và các chương trình chạy lâu đạt tốc độ gần như mã gốc. C# và Python cũng sử dụng thiết kế tương tự.

    Cụm từ trong chương trình học là "được biên dịch một phần và giải thích một phần": giai đoạn biên dịch bắt lỗi cú pháp và tạo ra bytecode di động gọn nhẹ; giai đoạn giải thích cho phép file bytecode đó chạy trên mọi máy tính có máy ảo, với giá là giảm bớt tốc độ. Java ở chế độ console (chương trình văn bản chạy từ dòng lệnh) là ví dụ tiêu biểu trong chương trình học.

    Mã nguồn Java được biên dịch một lần thành bytecode độc lập nền tảng (.class), sau đó JVM trên Windows, macOS hay Linux sẽ giải thích hoặc biên dịch JIT thành mã gốc
    Java biên dịch sang bytecode di động mà mọi JVM đều chạy được — viết một lần, chạy mọi nơi

    Ví dụ minh họa. Mã nguồn Java được biên dịch thành bytecode, sau đó JVM giải thích. Tại sao lại dùng cả hai thay vì biên dịch thẳng sang mã máy? Trình biên dịch tạo ra mã máy cho một bộ xử lý và hệ điều hành cụ thể, nên một chương trình được biên dịch trên một máy sẽ không chạy được trên máy khác. Trình biên dịch của Java lại nhắm vào một máy ảo, do đó bytecode nó tạo ra giống hệt nhau trên mọi nơi; mỗi nền tảng sau đó cung cấp JVM riêng để giải thích bytecode đó thành các lệnh gốc của chính nó. Vì vậy, một file đã biên dịch có thể chạy ở bất cứ đâu có JVM — "viết một lần, chạy mọi nơi". Giá phải trả là tốc độ: giải thích bytecode chậm hơn chạy mã gốc, đó là lý do JVM thực tế cũng sử dụng biên dịch JIT để biến bytecode thường xuyên chạy thành mã gốc trong khi chương trình đang thực thi. Hãy nêu cả hai mặt — điểm số được trao cho khả năng di động vì đánh đổi tốc độ."

    Explore · ⁨Khám phá⁩

    The compiler route: source to running program · ⁨Quá trình biên dịch: từ nguồn đến chương trình đang chạy⁩

    Step through how a compiler works — translating the whole program once, before it runs. Contrast it with an interpreter, which translates and runs one line at a time. · ⁨Trình bày cách trình biên dịch hoạt động — dịch toàn bộ chương trình một lần trước khi chạy. So sánh với trình giải thích, người dịch và chạy từng dòng một.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    assembler/əˈsemblə/ assembler
    assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ ngôn ngữ assembly
    compiler/kəmˈpaɪlə/ compiler
    object code/ˈɒbdʒekt kəʊd/ mã đối tượng
    interpreter/ɪnˈtɜːprɪtə/ interpreter
    bytecode/ˈbaɪtkəʊd/ bytecode
    virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ máy ảo
    just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ compilation tức thì (JIT)
    portable/ˈpɔːtəbl/ di động
    integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ môi trường phát triển tích hợp (IDE)
    5.2

    Integrated Development Environment (IDE) · ⁨Môi trường phát triển tích hợp (IDE)⁩

    English

    An integrated development environment 集成开发环境 (IDE) brings the tools to write, test and debug code into one application:

    The syllabus groups the features into four kinds. Learn which feature belongs to which, because questions ask you to sort them and to describe one from each group.

    • For coding: context-sensitive prompts 上下文相关提示 — as you type, the IDE pops up the identifiers, keywords or parameters that fit at that point in the code; auto-complete 自动补全 finishes the name for you; automatic indentation and bracket matching keep the layout right as you type.
    • For initial error detection: dynamic syntax checks 动态语法检查 — the editor checks the syntax as you type and underlines or highlights a mistake immediately, before the program is translated; after translation, error messages with line numbers.
    • For presentation: prettyprint 代码美化 — keywords, identifiers, strings and comments shown in different colours or fonts (syntax highlighting 语法高亮) with consistent indentation, so the structure is visible at a glance; expand and collapse code blocks — hide the body of a loop, an IF or a subroutine so you see the outline.
    • For debugging: breakpoints 断点 — the program pauses when it reaches a marked line; single stepping 单步执行 — from the pause, run one line at a time; a window that shows the current values of variables and expressions as they change; and a report window 报告窗口 that lists errors, warnings and output.

    Other features: translator integration (compile or run with one key, errors shown inline), a debugger 调试器 that drives the debugging features above, version control 版本控制 integration (git), project management, a help system, refactoring 重构 tools (safe renaming) and unit test 单元测试 integration.

    An IDE speeds development by putting writing → running → debugging → fixing behind one interface. Common IDEs: Visual Studio, PyCharm, Eclipse, VS Code.

    Worked example. A function Calculate() returns an unexpected value when the program runs. Describe how the debugging features of a typical IDE help find the cause (4 marks).

    Set a breakpoint on the first line of Calculate(), so the program pauses there instead of running through. Then single-step through the function one line at a time. After each step read the values of the variables and of any expression you have asked the IDE to watch, and compare them with the values you expected; the first line after which a value is wrong is where the logic error is. The report window shows any run-time error message and the output produced so far.

    Worked example. Put each feature in its syllabus group: prettyprint, context-sensitive prompt, dynamic syntax check, breakpoint, expand/collapse code blocks, report window.

    Coding: context-sensitive prompt. Initial error detection: dynamic syntax check. Presentation: prettyprint, expand/collapse code blocks. Debugging: breakpoint, report window.

    Tiếng Việt

    Một môi trường phát triển tích hợp (IDE) tập hợp các công cụ để viết, kiểm tra và gỡ lỗi mã nguồn vào một ứng dụng duy nhất:

    Một IDE thu gom trình soạn thảo mã, nút Chạy và bộ gỡ lỗi vào trong một chương trình
    Một IDE bao gồm trình soạn thảo, nút Chạy và bộ gỡ lỗi

    Chương trình học nhóm các tính năng này thành bốn loại. Hãy học cách phân loại từng tính năng, vì các câu hỏi sẽ yêu cầu bạn sắp xếp chúng và mô tả một tính năng từ mỗi nhóm.

    • Dành cho việc lập trình: gợi ý có ngữ cảnh — khi bạn gõ, IDE sẽ hiện lên các định danh, từ khóa hoặc tham số phù hợp tại vị trí đó trong mã; tự động điền đầy đủ hoàn thành tên thay cho bạn; tự động thụt lề và đối xứng ngoặc giữ cho bố cục chính xác khi bạn gõ.
    • Dành cho phát hiện lỗi ban đầu: kiểm tra cú pháp động — trình soạn thảo kiểm tra cú pháp khi bạn gõ và gạch dưới hoặc làm nổi bật ngay một lỗi, trước khi chương trình được dịch; sau khi dịch, hiển thị thông báo lỗi kèm số dòng.
    • Dành cho trình bày: hiển thị đẹp mã nguồn — các từ khóa, định danh, chuỗi và bình luận được hiển thị bằng màu sắc hoặc phông chữ khác nhau (làm nổi bật cú pháp) với độ thụt lề nhất quán, giúp cấu trúc rõ ràng ngay lập tức; mở rộng và thu gọn khối mã — ẩn phần thân của vòng lặp, lệnh IF hoặc hàm con để bạn chỉ thấy dàn ý.
    • Dành cho gỡ lỗi: ngâm điểm dừng — chương trình tạm dừng khi đạt đến dòng đã đánh dấu; bước từng dòng — từ trạng thái tạm dừng, chạy từng dòng một; cửa sổ hiển thị giá trị hiện tại của biến và biểu thức khi chúng thay đổi; và cửa sổ báo cáo liệt kê các lỗi, cảnh báo và kết quả đầu ra.

    Các tính năng khác: tích hợp trình dịch (biên dịch hoặc chạy bằng một phím tắt, lỗi hiển thị trực tiếp), bộ gỡ lỗi điều khiển các tính năng gỡ lỗi nêu trên, tích hợp kiểm soát phiên bản (git), quản lý dự án, hệ thống trợ giúp, công cụ tái cấu trúc (đổi tên an toàn) và tích hợp kiểm thử đơn vị.

    Cửa sổ IDE được chú thích bằng các nhãn đánh số: từ khóa màu (hiển thị đẹp mã nguồn), khối mã đã thu gọn, hộp gợi ý tự động đề xuất tên, đường gợn sóng từ kiểm tra cú pháp động, chấm điểm dừng ở lề, mũi tên trên dòng hiện tại trong chế độ bước từng dòng, bảng biến và cửa sổ báo cáo
    Các tính năng của IDE mang tên theo chương trình học, nằm ở vị trí mà bạn thường thấy trên màn hình

    IDE tăng tốc quá trình phát triển bằng cách đặt quy trình viết → chạy → gỡ lỗi → sửa chữa sau cùng một giao diện. Các IDE phổ biến: Visual Studio, PyCharm, Eclipse, VS Code.

    Luồng làm việc của trình gỡ lỗi: đặt điểm dừng, chạy chương trình, khi nó đạt đến điểm dừng thì tạm dừng để bạn kiểm tra các biến, sau đó bước từng dòng hoặc tiếp tục
    Bộ gỡ lỗi: thiết lập điểm dừng, chạy, sau đó tạm dừng để kiểm tra biến và bước qua mã nguồn từng dòng

    Ví dụ minh họa. Một hàm Calculate() trả về một giá trị bất ngờ khi chương trình chạy. Mô tả cách các tính năng gỡ lỗi của một IDE điển hình giúp tìm ra nguyên nhân (4 điểm).

    Đặt điểm dừng ở dòng đầu tiên của Calculate(), để chương trình tạm dừng tại đó thay vì chạy xuyên qua. Sau đó bước từng dòng qua hàm đó một dòng một. Sau mỗi bước, đọc giá trị của các biến và của bất kỳ biểu thức nào bạn đã yêu cầu IDE giám sát, và so sánh chúng với giá trị bạn mong đợi; dòng đầu tiên sau đó mà giá trị không đúng là nơi chứa lỗi logic. Cửa sổ báo cáo hiển thị mọi thông báo lỗi thời gian thực và kết quả đầu ra tạo ra cho đến lúc đó.

    Ví dụ minh họa. Đặt mỗi tính năng vào đúng nhóm chương trình học của nó: hiển thị đẹp mã nguồn, gợi ý có ngữ cảnh, kiểm tra cú pháp động, điểm dừng, mở rộng/thu gọn khối mã, cửa sổ báo cáo.

    Lập trình: gợi ý có ngữ cảnh. Phát hiện lỗi ban đầu: kiểm tra cú pháp động. Trình bày: hiển thị đẹp mã nguồn, mở rộng/thu gọn khối mã. Gỡ lỗi: điểm dừng, cửa sổ báo cáo.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    debugger/ˈdiːbʌɡə/ trình gỡ lỗi
    context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ lời nhắc phụ thuộc ngữ cảnh
    auto-complete/ˈɔːtəʊ kəmˈpliːt/ tự động hoàn thành
    dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ kiểm tra cú pháp động
    5.2

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    operating system software that manages the computer's hardware and resources and provides an interface between the user, the application programs and the hardware
    utility software system software that performs a specific task to maintain, optimise or protect the computer, such as a virus checker or a defragmenter
    program library a collection of pre-written, tested routines (subroutines, classes, modules) that a program can use instead of writing its own
    Dynamic Link Library (DLL) a program library whose routines are loaded into memory only when the program calls them, at run time, and are shared between programs
    assembler a translator that converts an assembly language program into machine code, one instruction for each instruction
    compiler a translator that converts the whole of a high-level language program into machine code before it is run, producing an executable file
    interpreter a translator that translates and executes a high-level language program one statement at a time
    integrated development environment a single application that provides the tools for writing, translating, running and debugging a program
    context-sensitive prompt a pop-up that suggests identifiers, keywords or parameters that fit at the current point in the code
    dynamic syntax check checking the syntax of the code as it is typed and flagging an error before the program is translated
    prettyprint displaying code with keywords, identifiers and comments in different colours or fonts and with consistent indentation
    breakpoint a marked line at which the running program pauses so that variables can be inspected
    single stepping running a paused program one statement at a time under the programmer's control
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    hệ điều hành phần mềm quản lý phần cứng và tài nguyên của máy tính, đồng thời cung cấp giao diện giữa người dùng, các chương trình ứng dụng và phần cứng
    phần mềm tiện ích phần mềm hệ thống thực hiện một tác vụ cụ thể để bảo trì, tối ưu hóa hoặc bảo vệ máy tính, chẳng hạn như trình quét virus hoặc trình giải nén tập tin
    thư viện chương trình một tập hợp các routine (hàm con, lớp, module) đã được viết sẵn và kiểm tra, mà một chương trình có thể sử dụng thay vì phải tự viết riêng
    Dynamic Link Library (DLL) một thư viện chương trình mà các routine của nó chỉ được tải vào bộ nhớ khi chương trình gọi chúng, tại thời gian chạy, và được chia sẻ giữa các chương trình
    trình biên dịch assemblies trình dịch chuyển đổi một chương trình ngôn ngữ assembly thành mã máy, một lệnh cho mỗi lệnh
    trình biên dịch trình dịch chuyển đổi toàn bộ một chương trình ngôn ngữ cấp cao thành mã máy trước khi chạy, tạo ra một tệp có thể thực thi
    trình diễn giải trình dịch dịch và thực thi một chương trình ngôn ngữ cấp cao từng câu lệnh một
    môi trường phát triển tích hợp một ứng dụng duy nhất cung cấp các công cụ để viết, dịch, chạy và gỡ lỗi một chương trình
    gợi ý có ngữ cảnh một hộp thoại nổi lên đề xuất các định danh, từ khóa hoặc tham số phù hợp tại vị trí hiện tại trong mã
    kiểm tra cú pháp động kiểm tra cú pháp của mã khi đang được gõ và báo hiệu lỗi trước khi chương trình được dịch
    hiển thị đẹp mã nguồn hiển thị mã nguồn với các từ khóa, định danh và bình luận bằng màu sắc hoặc phông chữ khác nhau cùng với độ thụt lề nhất quán
    điểm dừng một dòng đã được đánh dấu mà tại đó chương trình đang chạy tạm dừng để bạn có thể kiểm tra các biến
    Bước đơn chạy một chương trình đã tạm dừng từng câu lệnh một dưới sự kiểm soát của lập trình viên
    5.2

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • List the OS's jobs by their syllabus names (memory, process, hardware, file and security management) and say what each does — "manages resources" alone is too vague.
    • Compare compiler vs interpreter vs assembler: what each translates, when it translates it, and how errors are reported.
    • Explain what an IDE provides using the syllabus groups: coding, initial error detection, presentation, debugging.
    • A "benefit to the developer" answer names the developer's saving: time, cost, expertise, reliability or maintenance. A "drawback" names a dependence: availability, version, fit, security.
    • For "describe the operation of" a translator, give three things: what is translated (whole program or one statement), when (before running or while running), and how errors are reported (all at once or at the first error).

    Common mistakes

    • Writing "the OS controls the computer" or "manages resources" with no example task. Each mark is one named task with what it does.
    • Saying an interpreter "compiles line by line". An interpreter translates and executes each statement; it never produces an executable.
    • Saying a compiler runs the program. It only translates; the executable runs later, without the compiler.
    • Putting a DLL "inside" the executable. That is a static library; a DLL stays a separate file loaded at run time.
    • Saying defragmentation "deletes" or "compresses" files, or is needed on an SSD. It only moves blocks so each file is stored contiguously.
    • Filing prettyprint or collapsing blocks under "debugging". They are presentation features; debugging is breakpoints, single stepping, watching variables and the report window.
    Tiếng Việt
    • Liệt kê các nhiệm vụ của hệ điều hành theo tên chương trình (quản lý bộ nhớ, tiến trình, phần cứng, tệp tin và bảo mật) và mô tả chi tiết từng cái làm gì — chỉ nói "quản lý tài nguyên" là quá chung chung.
    • So sánh trình biên dịch vs trình giải thích vs trìnhIOException: mỗi cái dịch mã sang thứ gì, khi nào thực hiện việc dịch, và cách báo cáo lỗi như thế nào.
    • Giải thích một môi trường phát triển tích hợp (IDE) cung cấp những gì dựa trên các nhóm chương trình: viết code, phát hiện lỗi ban đầu, định dạng hiển thị, gỡ lỗi.
    • Một câu trả lời về "lợi ích cho nhà phát triển" phải nêu ra sự tiết kiệm của họ: thời gian, chi phí, chuyên môn, độ tin cậy hoặc công việc bảo trì. Một "nhược điểm" phải nêu ra sự phụ thuộc: khả năng truy cập, phiên bản, sự phù hợp, hoặc bảo mật.
    • Đối với câu hỏi "mô tả hoạt động của" một trình dịch, hãy đưa ra ba yếu tố: cái gì được dịch (toàn bộ chương trình hay từng câu lệnh), khi nào (trước khi chạy hay trong lúc chạy), và cách báo cáo lỗi (tất cả cùng lúc hay chỉ ở lỗi đầu tiên).

    Lỗi thường gặp

    • Việc viết "hệ điều khiển máy tính" hoặc "quản lý tài nguyên" mà không có ví dụ cụ thể sẽ bị mất điểm. Mỗi điểm số ứng với một nhiệm vụ được đặt tên rõ ràng và mô tả chức năng của nó.
    • Nói rằng trình giải thích "biên dịch từng dòng" là sai. Trình giải thích vừa dịch mã vừa thực thi từng câu lệnh; nó không bao giờ tạo ra một tệp thực thi.
    • Nói rằng trình biên dịch chạy chương trình là sai. Nó chỉ thực hiện việc dịch mã; tệp thực thi được chạy sau đó, mà không cần có mặt trình biên dịch nữa.
    • Đặt một DLL "bên trong" tệp thực thi là sai. Đó là thư viện tĩnh; một DLL luôn là một tệp riêng biệt được tải vào bộ nhớ khi chương trình chạy.
    • Nói rằng việc phân mảnh lại "xóa" hoặc "nén" tệp, hoặc cho rằng nó cần thiết trên ổ SSD là sai. Nó chỉ di chuyển các khối dữ liệu sao cho mỗi tệp được lưu trữ liên tiếp nhau.
    • Phân loại các tính năng "định dạng đẹp" (prettyprint) hoặc thu gọn khối code vào mục "gỡ lỗi" là sai. Chúng là tính năng định dạng hiển thị; còn gỡ lỗi bao gồm breakpoints, bước đi đơn lẻ (single stepping), theo dõi biến và cửa sổ báo cáo.
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    prettyprint/ˈpretɪprɪnt/ trình định dạng đẹp
    syntax highlighting/ˈsɪntæks ˈhaɪlaɪtɪŋ/ nhấn màu cú pháp
    breakpoints/ˈbreɪkpɔɪnts/ điểm dừng
    single stepping/ˈsɪŋɡl ˈstepɪŋ/ bước đơn
    report window/rɪˈpɔːt ˈwɪndəʊ/ cửa sổ báo cáo
    version control/ˈvɜːʃn kənˈtrəʊl/ kiểm soát phiên bản
    refactoring/rɪˈfæktərɪŋ/ tái cấu trúc
    unit test/ˈjuːnɪt test/ kiểm thử đơn vị
  • 6

    Security, privacy and data integrity · ⁨Bảo mật, quyền riêng tư và toàn vẹn dữ liệu⁩

    Watch lesson · ⁨Xem bài học⁩
    6.1

    Security, privacy and integrity — three different ideas

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Explain the difference between the terms security, privacy and integrity of data
    Show appreciation of the need for both the security of data and the security of the computer system
    Describe security measures designed to protect computer systems, ranging from the stand-alone PC to a network of computers Including user accounts, passwords, authentication techniques such as digital signatures and biometrics, firewall, anti-virus software, anti-spyware, encryption
    Show understanding of the threats to computer and data security posed by networks and the internet Including malware (virus, spyware), hackers, phishing, pharming
    Describe methods that can be used to restrict the risks posed by threats
    Describe security methods designed to protect the security of data Including encryption, access rights
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Giải thích sự khác biệt giữa các thuật ngữ an ninh, quyền riêng tư và tính toàn vẹn của dữ liệu
    Thể hiện sự đánh giá đúng đắn về nhu cầu vừa an ninh dữ liệu vừa an ninh hệ thống máy tính
    Mô tả các biện pháp an ninh nhằm bảo vệ hệ thống máy tính, từ PC độc lập đến mạng máy tính Bao gồm tài khoản người dùng, mật khẩu, kỹ thuật xác thực như chữ ký kỹ thuật số và sinh trắc học, tường lửa, phần mềm diệt virus, phần mềm chống spyware, mã hóa
    Thể hiện sự hiểu biết về các nguy cơ đối với an ninh máy tính và dữ liệu do mạng và internet gây ra Bao gồm malware (virus, spyware), cracker, gian lận qua email, gian lận qua trang web
    Mô tả các phương pháp có thể được sử dụng để hạn chế rủi ro do các mối đe dọa gây ra
    Mô tả các phương pháp an ninh nhằm bảo vệ an ninh dữ liệu Bao gồm mã hóa, quyền truy cập

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    These sound alike but mean different things:

    • security 安全 — protecting data from unauthorised 未授权 access, change or destruction.
    • privacy 隐私 — an individual's right to control who sees their personal data, with consent and a clear purpose.
    • integrity 完整性 — the data being accurate and complete — not corrupted or accidentally changed.

    A file can be secure (only the right people can open it) but lack integrity (a typo corrupted it); or accurate but not private (anyone can read it). All three are needed.

    The differences the scheme wants, one sentence each: security is keeping the data safe from loss and from unauthorised access; privacy is keeping the data confidential, so that only those with the right to see it can; integrity is the data being correct, consistent and complete. So "the difference between security and privacy": security is about protecting the data from being accessed, changed or lost by people who should not; privacy is about the individual's right to decide who may see their personal data. "The difference between security and integrity": security protects the data from unauthorised access; integrity is about the data being accurate and up to date, which validation and verification protect.

    Explore · ⁨Khám phá⁩

    Risk and responsibility lab · ⁨Phòng thí nghiệm rủi ro và trách nhiệm⁩

    Sort examples by the rule, risk or protection involved. · ⁨Sắp xếp các ví dụ theo quy tắc, rủi ro hoặc bảo vệ liên quan.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    security/sɪˈkjʊərɪti/ bảo mật
    privacy/ˈprɪvəsi/ quyền riêng tư
    integrity/ɪnˈteɡrɪti/ tính toàn vẹn
    unauthorised/ʌnˈɔːθəraɪzd/ không được ủy quyền
    6.1

    Why security matters

    Two things to protect: the data itself (keep it confidential, intact and available) and the computer system (a compromised system can attack others, steal credentials, or be held to ransom).

    "Why does the school need to keep both secure?" Data: it is personal and confidential, so it must not be read, changed or deleted by an unauthorised person, and its loss would stop the school working. System: an intruder who reaches the computer system can install malware, use it to attack other systems, damage the hardware or software, or lock it with ransomware; a secure system is the first line of defence for the data on it.

    6.1

    Threats from networks and the internet

    Threats fall into three groups.

    A man-in-the-middle attacker sits between Alice and Bob, reading or altering messages
    A man-in-the-middle attacker sits between the two parties
    1. Malware 恶意软件 (malicious software) — harmful programs:
    • virus 病毒 — self-copying code that attaches to other programs and spreads when they run.
    • worm 蠕虫 — self-copying code that spreads over networks 网络 with no user action.
    • Trojan horse 木马 — looks useful but hides malicious code.
    • spyware 间谍软件 — secretly collects information (keystrokes, passwords).
    • ransomware 勒索软件 — encrypts your files and demands payment.
    • adware 广告软件 — pushes unwanted adverts.

    2. Tricking people (social attacks):

    • phishing 网络钓鱼 — fake emails/sites that trick users into giving credentials.
    • pharming 域名欺骗 — redirects a user to a fake site even when they type the correct address.
    • social engineering 社会工程 — tricking people into giving up information.

    The scheme's descriptions of the four named threats: a virus is malicious software that replicates (copies itself), attaches itself to other files and deletes or corrupts data; spyware is malicious software that records the user's key presses and actions and sends them to a third party, to obtain passwords and personal data; a phishing email pretends to come from a legitimate organisation and contains a link to a fake website where the user is asked for personal or bank details; pharming is malicious code installed on the user's computer or on a web server that redirects the user to a fake website even though they typed the correct address. Similarities of spyware and a virus: both are malware, both are installed without the user's knowledge, both can send data to a third party or damage the system; the difference is that a virus replicates itself while spyware records and transmits information. Phishing and pharming both lead the user to a fake website that collects their data; phishing needs the user to click a link in an email, pharming works through code on the computer or the DNS server and needs no email.

    3. Attacks on the network:

    • hacking 黑客入侵 by hackers 黑客 — unauthorised access, often via weak passwords or software flaws.
    • denial of service 拒绝服务 (DoS/DDoS) — floods a server so real users cannot reach it.
    • eavesdropping 窃听 — capturing data in transit (a risk on open Wi-Fi).
    • man-in-the-middle 中间人攻击 — an attacker secretly relays or alters messages between two parties.

    Worked example. Identify and describe two threats to the data on a school network, and give a different prevention method for each.

    Threat 1, malware: a virus copied onto a computer from an email attachment or a download replicates itself and corrupts or deletes files; prevention: anti-virus software that scans files and is kept up to date. Threat 2, hacking: an unauthorised person gains access to the network, for example by guessing a weak password, and reads or changes the data; prevention: a firewall that blocks unauthorised connections, or strong passwords with two-factor authentication. A third pair, phishing: an email leads a user to a fake site that collects their login; prevention: training users to check the sender and the URL, and filtering email. The measure must match the threat: encryption does not stop a virus, and anti-virus software does not stop phishing.

    Malware grouped by behaviour: self-spreading types are the virus (attaches to programs) and worm (spreads over networks); hidden or disguised types are the Trojan (looks useful), spyware, ransomware and adware
    Malware by behaviour: self-spreading (virus, worm) versus hidden/disguised (Trojan, spyware, ransomware, adware)
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    malware/ˈmælweə/ malware (mã độc)
    ransomware/ˈrænsəmweə/ ransomware (phần mềm tống tiền)
    networks/ˈnetwɜːks/ mạng máy tính
    man-in-the-middle/mæn ɪnðə ˈmɪdl/ người đứng giữa
    virus/ˈvaɪrəs/ virus
    worm/wɜːm/ worm
    Trojan horse/ˈtrəʊdʒn hɔːs/ ngựa Trojan
    spyware/ˈspaɪweə/ phần mềm gián điệp
    adware/ˈædweə/ phần mềm quảng cáo
    phishing/ˈfɪʃɪŋ/ phishing
    pharming/ˈfɑːmɪŋ/ pharming (định hướng giả)
    social engineering/ˈsəʊʃl ˌendʒɪˈnɪərɪŋ/ kỹ thuật xã hội
    hacking/ˈhækɪŋ/ crack mã
    hackers/ˈhækəz/ kẻ hack
    denial of service/dɪˈnaɪəl ɒv ˈsɜːvɪs/ denial of service (từ chối dịch vụ)
    eavesdropping/ˈiːvzdrɒpɪŋ/ nghe lén
    6.1

    Security measures

    Measures protect both the security of data (against loss, theft or corruption) and the security of the computer system (its hardware, software and network).

    A standalone PC

    • a strong password; antivirus kept up to date; prompt software updates; backup 备份 to separate media; full-disk encryption 加密; a locked screen.

    A networked PC

    All the above, plus a firewall 防火墙, per-user permissions (admin rights only for admins), central management of user accounts 用户账户, and audit logs 审计日志 (who logged in, what they touched).

    How the measures work, in the wording the scheme awards:

    • firewall: examines every incoming and outgoing transmission and compares it with set criteria (a whitelist or blacklist of addresses, ports and protocols); blocks any that do not meet the criteria; can prevent access to certain sites and warn of unauthorised access attempts.
    • encryption: the data is scrambled (encoded) with a key into ciphertext, so an intercepted copy cannot be understood without the key; the receiver uses a key to decrypt it. It protects data in transmission and in storage, but it does not stop the data being intercepted or deleted.
    • passwords and user accounts: only a user who knows the password can log in; a strong password (long, mixed characters, changed regularly) cannot be guessed; accounts lock after repeated failures; each account carries its own access rights.
    • anti-virus and anti-spyware software: scans files and programs against a database of known malware signatures, checks behaviour, quarantines or deletes what it finds, and must be updated so that new malware is recognised.
    • access rights: each user (or group) is given permissions for each file or table, such as read-only or read and write, so a user cannot see or change data that is not theirs; a database can also present each user with a view containing only the fields they need.
    • biometrics: the device captures an image of the face, fingerprint or iris, converts it to digital data, compares it with the stored data for that user and allows access only on a match; it cannot be forgotten, lent or guessed like a password.
    • backups: a copy of the data on separate media, kept off-site, so that lost or corrupted data can be restored.

    To restrict the risks of malware, in three marks: install anti-malware software and keep it updated; use a firewall; do not open attachments or download files from unknown sources; keep the operating system and applications patched; and train users.

    A box diagram with the user's computer on the trusted side, then the firewall, then the internet on the untrusted side, connected by double-headed arrows
    A firewall sits between the user's computer and the internet

    Across the internet

    • VPN 虚拟专用网 — encrypts traffic between the user and the corporate gateway.
    • HTTPS / TLS — encrypt web traffic.
    • digital signatures 数字签名 — prove who sent a message and that it was not altered in transit.
    • intrusion detection — watches traffic for known attack patterns.

    How a digital signature authenticates a document (five marks): the sender puts the message through a hash function to produce a digest; the sender encrypts the digest with their private key, and that encrypted digest is the digital signature; the message and the signature are sent together; the receiver decrypts the signature with the sender's public key to recover the digest; the receiver hashes the received message and compares the two digests; if they match, the message came from the sender (only they hold the private key) and was not altered in transmission. A signature proves who sent the message and that it is intact; it does not hide the contents, which is what encryption of the message is for.

    Two lanes: the sender hashes the message into a digest and encrypts the digest with their private key to make the signature, and sends message and signature; the receiver decrypts the signature with the sender's public key to get digest A, hashes the received message to get digest B, and compares them
    A digital signature: a hash of the message, encrypted with the sender's private key, checked by the receiver against a fresh hash
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    firewall/ˈfaɪəwɔːl/ tường lửa
    encryption/enˈkrɪpʃn/ mã hóa
    backup/ˈbækʌp/ bản sao lưu
    user accounts/ˈjuːzə əˈkaʊnts/ tài khoản người dùng
    audit logs/ˈɔːdɪt lɒɡz/ nhật ký kiểm toán
    VPN/ˌviː piː ˈen/ VPN
    digital signatures/ˈdɪdʒɪtl ˈsɪɡnɪtʃəz/ chữ ký số
    6.1

    Matching measures to threats

    • interception in transit → encrypt the data (HTTPS, VPN). Intercepted ciphertext is useless without the key.
    • unauthorised access → strong authentication 身份验证 (long passwords; two-factor authentication 双因素认证 with a phone code or key); user authorisation 授权; lock-out after failed logins.
    • malware → anti-virus software and anti-spyware 反间谍软件 with real-time scanning; patching; avoid untrusted downloads.
    • phishing → user training; email filtering; check the URL before entering credentials.
    • internal threats → the least-privilege 最小权限 principle (give each user only what they need); auditing.
    • DDoS → rate limiting and traffic filtering.

    For confidential data crossing the internet, the scheme's method is encryption: the data is encoded with a key into ciphertext, so that an unauthorised person who intercepts it cannot read it, and only the intended receiver, who has the key, can decode it. For a program file sent by email for testing, the same answer applies (encrypt the file, or send it over an encrypted connection), together with a password on the file itself.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    two-factor authentication/tuː ˈfæktə ɔːˌθentɪˈkeɪʃn/ xác thực hai yếu tố
    authentication/ɔːˌθentɪˈkeɪʃn/ xác thực
    anti-spyware/ˈænti ˈspaɪweə/ phần mềm chống spyware
    authorisation/ˌɔːθəraɪˈzeɪʃn/ giấy phép
    least-privilege/liːst ˈprɪvɪlɪdʒ/ ít đặc quyền nhất
    6.1

    Protecting the data itself

    • encryption — turn plaintext 明文 into ciphertext 密文 with a key. Symmetric encryption 对称加密 (AES) uses one shared key; asymmetric encryption 非对称加密 (RSA) uses a public key 公钥 and a private key 私钥. Protects data at rest and in transit.
    • access control 访问控制 — file permissions (read/write/execute) and access rights 访问权限, enforced by the OS.
    • authentication — authentication techniques verify the user: something you know (password), have (token, phone), or are (biometrics 生物识别 — fingerprint, face, iris); strongest combined.
    • backups — keep copies (some off-site) so loss or corruption is recoverable.
    • physical security — locked server rooms, cable locks.

    Access rights in a database, described for three marks: each user is given an account with a username and password; the database administrator assigns each account permissions for each table, such as read-only, read and write, or no access; users see only the tables and fields they are allowed to, so a customer cannot open the staff table and a clerk can read but not change the prices. The DBMS enforces this with its access rights and with views, and it can encrypt the stored data as well.

    Symmetric encryption uses one shared key to both encrypt and decrypt the message; asymmetric encryption encrypts with the receiver's public key and decrypts with their private key
    Symmetric uses one shared key; asymmetric uses a public key to encrypt and a private key to decrypt
    A grey RSA SecurID key-fob security token with an LCD screen showing a six-digit code
    A security token shows a changing code for two-factor authentication ("something you have")
    A small USB fingerprint reader with an optical sensor pad
    A fingerprint reader checks "something you are" — a feature of the person, not a password
    Explore · ⁨Khám phá⁩

    Encrypt with a Caesar cipher · ⁨Mã hóa bằng cipher Caesar⁩

    Change the shift — that is the key. Each letter slides that many places along the alphabet to make the ciphertext, and the same key slides it back. That shared key is symmetric encryption in miniature. · ⁨Thay đổi độ lệch — đó chính là khóa. Mỗi chữ cái trượt số vị trí đó dọc theo bảng chữ cái để tạo văn bản mã, và cùng khóa đó trượt ngược lại. Khóa chung này là mã hóa đối xứng thu nhỏ.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    ciphertext/ˈsaɪfətekst/ văn bản mã hóa
    access rights/ˈækses raɪts/ quyền truy cập
    biometrics/ˌbaɪəʊˈmetrɪks/ biometrics (sinh trắc học)
    private key/ˈpraɪvət kiː/ khóa riêng tư
    public key/ˈpʌblɪk kiː/ khóa công khai
    plaintext/ˈpleɪntekst/ văn bản rõ
    Symmetric encryption/sɪˈmetrɪk enˈkrɪpʃn/ Mã hóa đối xứng
    asymmetric encryption/ˌeɪsɪˈmetrɪk enˈkrɪpʃn/ mã hóa bất đối xứng
    access control/ˈækses kənˈtrəʊl/ kiểm soát truy cập
    6.2

    Data integrity

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Describe how data validation and data verification help protect the integrity of data
    Describe and use methods of data validation Including range check, format check, length check, presence check, existence check, limit check, check digit
    Describe and use methods of data verification during data entry and data transfer During data entry including visual check, double entry During data transfer including parity check (byte and block), checksum
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Mô tả cách xác thực dữ liệu và kiểm chứng dữ liệu giúp bảo vệ tính toàn vẹn của dữ liệu
    Mô tả và sử dụng các phương pháp xác thực dữ liệu Bao gồm kiểm tra phạm vi, kiểm tra định dạng, kiểm tra độ dài, kiểm tra sự tồn tại, kiểm tra sự hiện diện, kiểm tra giới hạn, số kiểm tra
    Mô tả và sử dụng các phương pháp kiểm chứng dữ liệu trong quá trình nhập dữ liệu và truyền dữ liệu Trong quá trình nhập bao gồm kiểm tra trực quan, nhập đôi Trong quá trình truyền bao gồm kiểm tra chẵn lẻ (byte và khối), tổng kiểm tra

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Data has integrity when it is accurate and complete. Two techniques: data validation (catch bad data before storing) and data verification (confirm data was entered or transferred correctly).

    Validation — does the data make sense?

    Validation 验证 checks data against sensible rules, automatically:

    • range check — within limits (a month is 1–12).
    • limit check — on the correct side of a single limit (e.g. age ≥ 18).
    • existence check — the referenced item exists (e.g. a product code is in the table).
    • length check — the right number of characters.
    • type / character check — the right kind of data (a phone field allows only digits).
    • format check — matches a pattern (an email must contain @).
    • presence check — required fields are not empty.
    • check digit 校验位 — an extra digit computed from the others (ISBN, card numbers) that spots transcription errors.

    Worked example. In a simple check-digit scheme the check digit is the remainder when the sum of the digits is divided by $10$, appended to the number. The number $4162$ has digit sum $13$, so it is stored as $41623$. A user types $14623$: the first two digits are swapped, but the sum is still $13$, so the check digit still matches and the error is not caught. A user who types $41523$ is caught, because $4 + 1 + 5 + 2 = 12$ gives check digit $2$. A scheme that catches swapped digits weights each position differently, as the ISBN-13 check does (weights $1, 3, 1, 3, \ldots$, then the digit that makes the total a multiple of $10$). A check digit is validation: it tests the number against a rule at the moment it is entered.

    • lookup check and consistency check (e.g. delivery date ≥ order date).

    Validation catches data that is wrongly formatted, but not data that is the right format yet factually wrong ("Bob" for "Bib").

    Worked example. Identify the validation check each piece of pseudocode performs.

    Pseudocode Check
    IF x < 0 OR x > 10 THEN OUTPUT "Invalid" range check: the value must lie between two limits
    IF x = "" THEN OUTPUT "Invalid" presence check: the field must not be empty
    IF NOT(x = "Red" OR x = "Yellow" OR x = "Blue") THEN OUTPUT "Invalid" lookup (existence) check: the value must be one of a list
    IF LENGTH(x) <> 6 THEN OUTPUT "Invalid" length check: the right number of characters
    IF MID(x, 1, 1) < "A" OR MID(x, 1, 1) > "Z" THEN OUTPUT "Invalid" format check: a particular character must be a letter

    To validate a car registration number that must be one letter, three digits and two letters: a format check tests each position against its pattern, and a length check confirms six characters. To validate a date of birth: a format check (DD/MM/YYYY), a range check (the month is $1$ to $12$, the year is not in the future) and a presence check (it is not left blank). A mark between $0$ and the maximum for the test needs a type check (an integer) and a range check, with the upper limit read from the test's own record: that is how validation protects integrity, by refusing data that could not be correct.

    Verification — was the data entered or transferred correctly?

    Verification 核对 checks the data was not changed in moving from one place to another.

    During entry: double entry (type it twice and compare, as for a new password) or visual check.

    In the scheme's words, double entry is entering the data twice, by the same person or by two people, and having the computer compare the two versions and report any difference; a visual check is the person comparing what is on the screen with the original source document and correcting any difference before saving. Both protect integrity by making sure the stored data matches the source. Even after validation and verification the data can still be wrong: it can be sensible and match the source, yet the source itself was wrong, or the user typed a different but valid value from the one intended.

    During transfer (bits can flip):

    • parity check 奇偶校验 — an extra bit makes the number of 1s even (even parity) or odd. The receiver re-counts. Catches single-bit errors.
    • checksum 校验和 — the sender sends a summary value of the data; the receiver recomputes it and compares.
    • cyclic redundancy check 循环冗余校验 (CRC) — a stronger checksum using polynomial division, catching many more error types.

    A parity block check 奇偶块校验 goes further and locates the error. Arrange the bytes in a grid: give each byte a row parity bit, then compute one extra parity byte whose bits are the column parity of the bytes above. A single flipped bit now fails one row and one column – their intersection pinpoints exactly which bit changed, so it can even be corrected.

    Worked example. Four bytes are sent with even parity, followed by a parity byte. Find the bit that was corrupted.

    A grid of four received bytes and a parity byte under even parity, with the parity bit in the first column; the third byte's row has five 1s and the fourth column has three 1s, both odd, and the bit at their crossing is marked as the one that was flipped
    A parity block check: the row that fails and the column that fails cross at the flipped bit

    Count the 1s in each row and each column. Every row and column should have an even number; byte 3 has five and column 4 has three. The bit where that row and that column cross is the one that changed, so it is reset from 1 to 0. A parity check on its own detects an error in a byte but cannot say which bit; two errors in the same byte cancel and pass unnoticed. A checksum, explained for three marks: the sender puts the block of data through an algorithm that produces a checksum value; the data and the checksum are sent together; the receiver runs the same algorithm on the data it received; if the two checksums match, the data is accepted, and if not, it is rejected and sent again.

    The same seven data bits shown twice: a 0 parity bit gives four 1s for even parity, a 1 parity bit gives five 1s for odd parity
    The parity bit is set to make the number of 1s even or odd
    The sender computes a checksum and sends it with the data block; the receiver recomputes the checksum and compares, plus a worked example of the byte-sum-mod-256 calculation
    Working out a checksum for a block of data

    Verification only proves what arrived matches what was sent — not that the data is correct, and not against deliberate tampering. Validation asks "is this sensible?"; verification asks "was this copied correctly?" — use both.

    The table questions sort the methods by when they are used: during data entry, double entry and a visual check; during data transfer, a parity check (byte or block) and a checksum. Transferring video files from a camera to a server uses a checksum: the camera computes it, the server recomputes it, a mismatch means retransmit.

    Side by side: validation asks "is this data sensible?" and checks rules like range, type and format before storing (catching nonsense data); verification asks "was it copied correctly?" and uses double entry, parity and checksums (catching copying errors)
    Validation checks the data makes sense; verification checks it was copied without change

    Worked example. A user types their date of birth as 31/02/2009, and types their email address twice. Which check catches which error, and what is the difference? Validation asks "is this data sensible?" - the computer tests it against a rule, and a format or range check rejects 31/02/2009 because February never has 31 days. Verification asks "was this data entered correctly?" - typing the email twice is double entry, and comparing the two copies catches a typing slip. The limit is what makes this a favourite question: validation can never tell you the data is right, only that it is possible - 01/02/2009 passes every validation rule even if the user was actually born on a different day. Say what each check can and cannot catch.

    Explore · ⁨Khám phá⁩

    Computing concept lab · ⁨Phòng thí nghiệm khái niệm tin học⁩

    Classify concrete examples by the computing idea they demonstrate. · ⁨Phân loại các ví dụ cụ thể theo ý tưởng tin học mà chúng minh họa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    validation/ˌvælɪˈdeɪʃn/ xác minh tính hợp lệ
    verification/ˌverɪfɪˈkeɪʃn/ xác minh
    check digit/tʃek ˈdɪdʒɪt/ chữ số kiểm tra
    parity check/ˈpærɪti tʃek/ kiểm tra chẵn lẻ
    checksum/ˈtʃeksəm/ checksum
    cyclic redundancy check/ˈsaɪklɪk rɪˈdʌndənsi tʃek/ kiểm tra dư thừa chu kỳ
    parity block check/ˈpærɪti blɒk tʃek/ kiểm tra khối chẵn lẻ
    Watch lesson · ⁨Xem bài học⁩
    6.2

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly.

    Term Definition
    data security keeping data safe from loss and from unauthorised access, change or deletion
    data privacy keeping data confidential, so that it is seen only by those who have the right to see it
    data integrity the data being accurate, consistent and complete
    malware malicious software that is installed without the user's knowledge to damage a system or steal data
    virus malware that replicates itself, attaches to other files and corrupts or deletes data
    spyware malware that records the user's key presses or actions and sends them to a third party
    phishing an email pretending to be from a legitimate organisation that leads the user to a fake website to collect personal data
    pharming malicious code that redirects the user to a fake website even when the correct address is entered
    firewall hardware or software that examines all traffic entering or leaving a system against set criteria and blocks what does not meet them
    encryption scrambling data with a key into ciphertext, so that it cannot be understood without the key to decrypt it
    digital signature a hash of a message encrypted with the sender's private key, used to prove who sent it and that it was not altered
    data validation an automatic check that entered data is reasonable and follows set rules
    data verification a check that data has been entered or transferred correctly, by comparing it with the source or with a recomputed value
    check digit an extra digit calculated from the other digits of a number and appended to it, so that an error in the number can be detected
    parity check an extra bit added to a byte so that the number of 1s is even (or odd), which the receiver recounts
    checksum a value calculated from a block of data by an algorithm and sent with it, recalculated by the receiver and compared
    6.2

    Exam tips

    • Keep the three ideas separate: security (keeping data safe), privacy (who may see it), integrity (keeping it correct).
    • Match each threat (malware, hacking, phishing, interception) to a measure (firewall, encryption, authentication, access rights).
    • Encryption protects confidentiality, not integrity — use a checksum, parity or check digit for integrity.
    • Distinguish a virus, worm and Trojan and how each spreads.

    Common mistakes

    • Giving the same measure for two threats, or a measure that does not fit the threat. Each threat in the table needs a different prevention that actually stops it.
    • Naming a measure without saying how it works. "Firewall" scores when it is followed by "compares traffic with set criteria and blocks what fails".
    • Calling validation a check that the data is correct. Validation checks that data is reasonable; verification checks that it matches the source. Neither proves it is true.
    • Saying a digital signature encrypts the message. It encrypts a hash of the message with the private key; the receiver decrypts it with the public key and compares hashes.
    • Describing a check digit as verification, or a parity check as validation. The check digit is a validation rule on entry; parity and checksums verify a transfer.
    • Writing that a virus "sends data to a third party" and spyware "replicates". The replicating one is the virus; the recording one is spyware.
  • 7

    Ethics and Ownership · ⁨Đạo đức và sở hữu⁩

    Watch lesson · ⁨Xem bài học⁩
    7.1

    Ethics for computing professionals · ⁨Đạo đức đối với chuyên gia công nghệ thông tin⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the need for and purpose of ethics as a computing professional Understand the importance of joining a professional ethical body including BCS (British Computer Society), IEEE (Institute of Electrical and Electronic Engineers)
    Show understanding of the need to act ethically and the impact of acting ethically or unethically for a given situation
    Show understanding of the need for copyright legislation
    Show understanding of the different types of software licencing and justify the use of a licence for a given situation Licences to include free Software Foundation, the Open Source Initiative, shareware and commercial software
    Show understanding of Artificial Intelligence (AI) Understand the impact of AI including social, economic and environmental issues
    Understand the applications of AI
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về nhu cầu và mục đích của đạo đức trong vai trò là một chuyên gia tin học Hiểu rõ tầm quan trọng của việc tham gia các tổ chức đạo đức nghề nghiệp, bao gồm BCS (Hiệp hội Tin học Anh), IEEE (Viện Kỹ sư Điện tử)
    Thể hiện sự hiểu biết về nhu cầu hành xử có đạo đức và tác động của việc hành xử có hay không có đạo đức đối với một tình huống cụ thể
    Thể hiện sự hiểu biết về các quy định về bản quyền
    Thể hiện sự hiểu biết về các loại giấy phép phần mềm khác nhau và giải thích được lý do sử dụng giấy phép cho một tình huống cụ thể Bao gồm các giấy phép: Quỹ Phần mềm Tự do, Tổ chức Nguồn mở, partware và phần mềm thương mại
    Thể hiện sự hiểu biết về Trí tuệ nhân tạo (AI) Hiểu rõ tác động của AI, bao gồm các vấn đề xã hội, kinh tế và môi trường
    Hiểu rõ các ứng dụng của AI

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    A computing professional is someone whose work — software, systems, networks, data — affects other people. Because the work is technical, others often cannot judge whether it was done well or honestly. So the profession follows shared ethics 伦理 (principles for good behaviour).

    Why ethics matters

    • trust — users and employers trust professionals to act in their interest. Without that trust, software loses credibility.
    • impact — software runs medical devices, banking, vehicles. Careless or dishonest work can hurt people.

    Professional bodies (BCS, ACM, IEEE) publish codes of ethics for members.

    Typical principles

    • public interest first — protect the safety and welfare of those affected.
    • honesty and competence — be honest about your skills; don't claim expertise you lack.
    • confidentiality 保密性 — protect clients' and employers' private information.
    • avoid conflicts of interest 利益冲突 — don't take work where your interest clashes with the client's.
    • keep your skills current; respect intellectual property 知识产权 and privacy 隐私; treat colleagues fairly.

    Joining a professional body

    The syllabus names two: the BCS (British Computer Society) and the IEEE (Institute of Electrical and Electronics Engineers). Both publish a code of conduct 行为准则 that members agree to follow. The benefits of joining, in the scheme's words: a set of ethical guidelines to follow, so decisions are not left to personal judgement; training, conferences and publications that keep the member up to date; advice and support, including legal help, when a problem arises; and recognised professional status, so employers and clients trust the member's work. The consequences of not joining: no guidance on ethical decisions, so the programmer may act unethically without realising; less credibility with employers and customers, so it is harder to win work; no support in a dispute; and being out of date with developments and law. The purpose of a code of conduct (two marks): to create a safe, respectful and professional working environment, and to make sure every employee understands what is expected and the consequences of their actions.

    Worked example. Explain why a programmer needs to act ethically towards colleagues and towards the public.

    Colleagues: treat them fairly and without discrimination; respect their work, their ideas and their confidential information; be honest about mistakes and give credit where it is due; support their development rather than undermine it. The public: protect their personal data and privacy; produce software that is safe, reliable and properly tested, because faults can cause harm; be honest about what the software can do; take on only work within your competence; obey the law and consider the wider effects on society and the environment. Each side earns marks for a reason and its consequence, not for the word "fair" alone.

    Acting ethically vs unethically

    Acting ethically protects users, strengthens reputation, reduces legal risk, and builds trust. Acting unethically (skipping testing, hiding bugs, misusing data) can harm real users, lead to dismissal or legal action, damage reputation, and erode trust in technology generally.

    When you face a borderline decision: identify whose interests are affected, check the code of ethics and the law, weigh the consequences, ask a trusted senior, and choose the option that protects users above short-term convenience.

    Worked example. Your team's new AI hiring tool sorts CVs ten times faster, but you notice it rejects more older applicants. Shipping it pleases your manager, but it treats one group unfairly. The ethical choice is to hold it back until the bias is fixed — public interest and fairness come before short-term convenience.

    Ethics also applies to users. A student who connects a personal computer to the school network should respect other people's privacy and data, not use social media inappropriately or bully others, not download or share copyrighted material, not introduce malware or try to access systems they are not allowed to, and use the network for the purpose it was provided. A "give three ethical considerations" answer lists three of these.

    Tiếng Việt

    Một chuyên gia công nghệ thông tin là người mà công việc của họ — phần mềm, hệ thống, mạng, dữ liệu — ảnh hưởng đến người khác. Vì công việc mang tính kỹ thuật, người khác thường không thể phán đoán xem nó có được thực hiện tốt hay trung thực hay không. Do đó, nghề nghiệp tuân theo đạo đức chung (các nguyên tắc cho hành vi tốt).

    Tại sao đạo đức quan trọng

    • niềm tin — người dùng và nhà tuyển dụng tin tưởng các chuyên gia hành động vì lợi ích của họ. Nếu không có niềm tin đó, phần mềm sẽ mất uy tín.
    • tác động — phần mềm chạy thiết bị y tế, ngân hàng, phương tiện giao thông. Công việc cẩu thả hoặc thiếu trung thực có thể gây hại cho con người.

    Các tổ chức chuyên môn (BCS, ACM, IEEE) ban hành bộ quy tắc đạo đức cho thành viên.

    Tường màn hình CCTV trong phòng điều khiển
    CCTV gây ra lo ngại về quyền riêng tư — một trong những vấn đề đạo đức mà chuyên gia công nghệ thông tin phải cân nhắc
    Đống thiết bị điện tử bị vứt bỏ
    Thiết bị điện tử bị vứt bỏ (rác thải điện tử) là một chi phí môi trường ngày càng tăng của việc tính toán
    Sơ đồ trung tâm với sức khỏe cộng đồng ở giữa, liên kết đến các mối quan tâm về an toàn và sức khỏe, lợi ích công cộng, lợi ích cho công chúng và những lo ngại của công chúng
    Phát triển phần mềm ảnh hưởng đến sức khỏe cộng đồng theo nhiều cách

    Nguyên tắc điển hình

    • lợi ích công cộng lên hàng đầu — bảo vệ an toàn và phúc lợi của những người bị ảnh hưởng.
    • sự trung thực và năng lực — trung thực về kỹ năng của bạn; không tự nhận là chuyên gia khi bạn chưa có đủ trình độ.
    • tính bí mật — bảo vệ thông tin riêng tư của khách hàng và chủ sở hữu.
    • tránh xung đột lợi ích — không nhận công việc mà ở đó lợi ích của bạn xung đột với lợi ích của khách hàng.
    • giữ cho kỹ năng luôn cập nhật; tôn trọng sở hữu trí tuệ và quyền riêng tư; đối xử công bằng với đồng nghiệp.

    Gia nhập tổ chức nghề nghiệp

    Chương trình nêu tên hai tổ chức: BCS (Hi hội Tin học Anh Quốc) và IEEE (Viện Kỹ sư Điện tử và Điện khí). Cả hai đều xuất bản một mã đạo đức mà các thành viên cam kết tuân thủ. Lợi ích của việc gia nhập, theo lời của bộ quy định: một bộ hướng dẫn đạo đức để tuân theo, giúp các quyết định không phụ thuộc vào phán đoán cá nhân; đào tạo, hội nghị và ấn phẩm giúp thành viên nắm bắt được các tiến bộ mới nhất; tư vấn và hỗ trợ, bao gồm cả sự giúp đỡ pháp lý, khi có vấn đề xảy ra; và địa vị nghề nghiệp được công nhận, giúp chủ sở hữu và khách hàng tin tưởng vào công việc của thành viên. Hệ quả của việc không gia nhập: không có hướng dẫn nào cho các quyết định đạo đức, nên lập trình viên có thể hành xử phi đạo đức mà không nhận ra; mất uy tín trước chủ sở hữu và khách hàng, khiến việc giành được công việc trở nên khó khăn hơn; không có sự hỗ trợ trong các tranh chấp; và bị tụt hậu so với các tiến bộ và luật pháp mới. Mục đích của mã đạo đức (hai điểm): tạo ra một môi trường làm việc an toàn, tôn trọng và chuyên nghiệp, và đảm bảo rằng mỗi nhân viên đều hiểu rõ những gì mong đợi từ họ cũng như hệ quả của các hành động của mình.

    Ví dụ minh họa. Giải thích tại sao một lập trình viên cần phải hành xử đạo đức với đồng nghiệp và với công chúng.

    Đồng nghiệp: đối xử công bằng và không phân biệt đối xử; tôn trọng công việc, ý tưởng và thông tin bí mật của họ; trung thực về những sai lầm và ghi nhận công lao đúng mức; hỗ trợ sự phát triển của họ thay vì phá hoại nó. Công chúng: bảo vệ dữ liệu cá nhân và quyền riêng tư của họ; sản xuất phần mềm an toàn, đáng tin cậy và đã được kiểm tra kỹ lưỡng, vì các lỗi có thể gây ra thiệt hại; trung thực về những gì phần mềm có thể làm; chỉ nhận những công việc nằm trong phạm vi năng lực của mình; tuân thủ luật pháp và xem xét tác động rộng lớn đến xã hội và môi trường. Mỗi bên nhận điểm cho một lý do và hệ quả tương ứng, chứ không chỉ vì từ "công bằng" đơn thuần.

    Hành xử đạo đức so với phi đạo đức

    Hành xử đạo đức bảo vệ người dùng, củng cố danh tiếng, giảm thiểu rủi ro pháp lý và xây dựng niềm tin. Hành xử phi đạo đức (bỏ qua kiểm thử, che giấu lỗi, lạm dụng dữ liệu) có thể gây hại cho người dùng thực tế, dẫn đến sa thải hoặc hành động pháp lý, làm hỏng danh tiếng và xói mòn niềm tin vào công nghệ nói chung.

    Khi bạn phải đưa ra một quyết định mang tính ranh giới: xác định xem ai là bên chịu ảnh hưởng, kiểm tra mã đạo đức và luật pháp, cân nhắc các hệ quả, hỏi ý kiến một cấp trên tin cậy, và chọn phương án bảo vệ người dùng trên hết so với sự tiện lợi ngắn hạn.

    Ví dụ minh họa. Công cụ tuyển dụng AI mới của đội bạn sắp xếp hồ sơ nhanh gấp mười lần, nhưng bạn nhận thấy nó loại bỏ nhiều ứng viên lớn tuổi hơn. Việc phát hành công cụ này làm hài lòng sếp, nhưng nó đối xử không công bằng với một nhóm người. Lựa chọn đạo đức là giữ lại công cụ cho đến khi lỗi thiên kiến được khắc phục — lợi ích công cộng và sự công bằng đặt lên trên sự tiện lợi ngắn hạn.

    Đạo đức cũng áp dụng cho người dùng. Một học sinh kết nối máy tính cá nhân vào mạng trường học nên tôn trọng quyền riêng tư và dữ liệu của người khác, không sử dụng mạng xã hội không phù hợp hoặc bắt nạt người khác, không tải xuống hoặc chia sẻ tài liệu có bản quyền, không đưa mã độc hoặc cố truy cập các hệ thống mà họ không được phép, và sử dụng mạng đúng mục đích đã cung cấp. Câu trả lời yêu cầu "liệt kê ba cân nhắc đạo đức" sẽ liệt kê ba trong số những điều này.

    Explore · ⁨Khám phá⁩

    Risk and responsibility lab · ⁨Phòng thí nghiệm rủi ro và trách nhiệm⁩

    Sort examples by the rule, risk or protection involved. · ⁨Sắp xếp các ví dụ theo quy tắc, rủi ro hoặc bảo vệ liên quan.⁩

    7.1

    Copyright · ⁨Bản quyền⁩

    English

    Copyright 版权 is the legal right of the creator of an original work to control how it is copied, distributed, modified and performed. It applies automatically (no registration) to source code, software, documents, images, audio and video.

    Without copyright, anyone could copy software freely, the developer would not be paid, and plagiarism would be legal. With copyright, developers can earn from their work (encouraging more software), users know who made it, and re-use happens on the developer's terms through licensing. Copyright lasts a long time (often 70 years after the creator's death). General ideas and algorithms are not covered by copyright but may be covered by a patent 专利.

    Why a programmer should copyright a program, in the scheme's words: to be identified as the owner and author (formal recognition of ownership); so that there are legal consequences if anyone copies or steals it; to restrict competitors from selling the same work; and to be able to earn money by licensing it. Copyright applies to the program as written; a different program that does the same job does not infringe it.

    Tiếng Việt

    Bản quyền là quyền pháp lý của người sáng tác một tác phẩm gốc để kiểm soát cách tác phẩm đó được sao chép, phân phối, chỉnh sửa và biểu diễn. Nó áp dụng tự động (không cần đăng ký) đối với mã nguồn, phần mềm, tài liệu, hình ảnh, âm thanh và video.

    Không có bản quyền, bất kỳ ai cũng có thể sao chép phần mềm tự do, nhà phát triển sẽ không được trả tiền, và việc đạo văn sẽ hợp pháp. Có bản quyền, các nhà phát triển có thể kiếm tiền từ tác phẩm của họ (khuyến khích thêm phần mềm), người dùng biết ai là người tạo ra nó, và việc tái sử dụng diễn ra theo điều kiện của nhà phát triển thông qua giấy phép. Bản quyền kéo dài rất lâu (thường là 70 năm sau khi người sáng tác qua đời). Các ý tưởng chung và thuật toán không được bảo vệ bởi bản quyền nhưng có thể được bảo vệ bởi một bằng sáng chế.

    Tại sao một lập trình viên nên đăng ký bản quyền cho chương trình, theo lời của bộ quy định: để được xác định là chủ sở hữu và tác giả (sự công nhận chính thức về quyền sở hữu); để có hệ quả pháp lý nếu bất kỳ ai sao chép hoặc đánh cắp nó; để hạn chế các đối thủ cạnh tranh bán cùng một sản phẩm; và để có thể kiếm tiền bằng cách cấp giấy phép. Bản quyền áp dụng đối với chương trình dưới dạng viết; một chương trình khác làm cùng một công việc nhưng khác biệt sẽ không xâm phạm bản quyền.

    Bản quyền được bảo vệ tự động không cần đăng ký và kéo dài khoảng 70 năm sau khi người sáng tác qua đời, bao gồm mã, hình ảnh và tài liệu; bằng sáng chế phải được nộp đơn và kéo dài khoảng 20 năm, bao gồm các phát minh và thuật toán
    Bản quyền được bảo vệ tự động và kéo dài; bằng sáng chế phải được nộp đơn và kéo dài khoảng 20 năm
    Explore · ⁨Khám phá⁩

    Risk and responsibility lab · ⁨Phòng thí nghiệm rủi ro và trách nhiệm⁩

    Sort examples by the rule, risk or protection involved. · ⁨Sắp xếp các ví dụ theo quy tắc, rủi ro hoặc bảo vệ liên quan.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    copyright/ˈkɒpɪraɪt/ bản quyền
    patent/ˈpeɪtənt/ sáng chế
    software licence/ˈsɒftweə ˈlaɪsəns/ giấy phép phần mềm
    proprietary/prəˈpraɪətəri/ sở hữu độc quyền
    open-source/ˈəʊpən sɔːs/ mã nguồn mở
    7.1

    Software licences · ⁨Giấy phép phần mềm⁩

    English

    A software licence 软件许可证 is a contract granting permission to use software on the owner's terms; choosing and applying one is called software licencing.

    Commercial (proprietary)

    • commercial software is sold: you buy a licence; the software is used only within its terms.
    • the source code is not given (a proprietary 专有 product); you cannot modify or redistribute it.
    • examples: Microsoft Office, Adobe Photoshop, most games.

    Used when the developer wants revenue per user and to keep control of the code.

    Open-source

    • the source code is public; users can read, modify and redistribute it (open-source 开源).
    • permissive licences (MIT, BSD) allow almost any use; copyleft 著佐权 licences (GPL) require that modified versions are released under the same licence ("share-alike").
    • the Free Software Foundation (FSF) and the Open Source Initiative (OSI) promote and approve open-source licences.

    The syllabus names both, and they are marked as distinct answers. Free Software (the FSF's term) means free as in freedom, not price: the user may run the program for any purpose, study and change it (so the source code must be available), redistribute copies, and distribute modified versions; a fee may still be charged for a copy. Open Source (the OSI's definition) requires that the source code is available, that the program may be modified and redistributed, and that the licence does not discriminate against any person or field of use. "Identify two licence types that let other people edit and redistribute the program" is answered with these two.

    • examples: Linux, Python, Apache.

    Used when the developer wants the software widely used and improved by the community.

    Freeware and shareware

    • freeware 免费软件 — free of charge, no source code, may be redistributed but not modified (Acrobat Reader, WhatsApp).
    • shareware 共享软件 — free for a trial period, then you pay to keep using it; no source code.

    The scheme's descriptions: shareware is distributed free for a trial (a limited time or limited features) and the user pays to continue using the full version; commercial software is sold for a fee, the source code is not supplied, the licence protects the developer's intellectual property, and the fee usually buys support and updates. Benefits of shareware to the programmer: users can try the program before buying, so they are more likely to purchase; it spreads widely at almost no advertising cost; and those who keep it pay. Benefits of a commercial licence: the developer earns a fee for every copy; the code and its rights stay protected; and the income funds support, updates and further development.

    Type Cost Source Redistribute Modify
    Commercial Paid No No No
    Open-source Free Yes Yes Often, with conditions
    Freeware Free No Yes No
    Shareware Free trial, then paid No Sometimes No

    To justify a licence choice, link it to the developer's goal (revenue, reach, community), the user's needs (cost, customising), and the use case.

    Worked example. A programmer has written a game to sell to the public. Identify the most appropriate licence and justify it.

    A commercial licence: the game is sold for a fee, so the programmer earns money from every copy; the source code is not released, so nobody can copy the game or change it and sell it as their own; the licence protects the intellectual property; and buyers receive updates and support. Open source would not fit, because the source code would be available, so the game could be copied, changed and redistributed without payment.

    Worked example. A program helps shoppers by reading product labels aloud. Explain why an open source licence might not be appropriate.

    The source code would be accessible, so it could be changed; a changed version might output the wrong product information, so shoppers could buy the wrong item; and the programmer would lose control over the quality and safety of what is distributed under the program's name. Going the other way, programs are released as open source so that other developers can improve and extend them, so that they are adopted widely at no cost, and so that users can adapt them to their own needs.

    Tiếng Việt

    Một giấy phép phần mềm là hợp đồng cấp phép sử dụng phần mềm theo các điều khoản của chủ sở hữu; việc lựa chọn và áp dụng một loại giấy phép nào đó được gọi là cấp phép phần mềm.

    Thương mại (sở hữu độc quyền)

    • phần mềm thương mại được bán: bạn mua một giấy phép; phần mềm chỉ được sử dụng trong phạm vi các điều khoản của nó.
    • mã nguồn không được cung cấp (sản phẩm thương mại); bạn không thể chỉnh sửa hoặc phân phối lại.
    • ví dụ: Microsoft Office, Adobe Photoshop, hầu hết các trò chơi.

    Được sử dụng khi nhà phát triển muốn tạo doanh thu cho mỗi người dùng và giữ quyền kiểm soát đối với mã nguồn.

    Mã nguồn mở

    • mã nguồn là công khai; người dùng có thể đọc, chỉnh sửa và phân phối lại (mã nguồn mở).
    • giấy phép thoả mãn (MIT, BSD) cho phép gần như mọi cách sử dụng; giấy phép copyleft (GPL) yêu cầu rằng các phiên bản đã chỉnh sửa phải được phát hành dưới cùng một loại giấy phép ("chia sẻ tương tự").
    • Quỹ Phần mềm Tự do (FSF) và Sáng kiến Nguồn mở (OSI) thúc đẩy và phê duyệt các giấy phép mã nguồn mở.

    Chương trình học nêu tên cả hai và đánh dấu chúng là các câu trả lời riêng biệt. Phần mềm Tự do (thuật ngữ của FSF) có nghĩa là tự do theo nghĩa của sự tự do, không phải giá tiền: người dùng có thể chạy chương trình vì bất kỳ mục đích nào, nghiên cứu và thay đổi nó (vì vậy mã nguồn phải có sẵn), phân phối lại bản sao, và phân phối các phiên bản đã chỉnh sửa; một khoản phí vẫn có thể được thu cho một bản sao. Nguồn mở (định nghĩa của OSI) yêu cầu rằng mã nguồn có sẵn, chương trình có thể được chỉnh sửa và phân phối lại, và giấy phép không phân biệt đối xử với bất kỳ cá nhân hay lĩnh vực sử dụng nào. "Xác định hai loại giấy phép cho phép người khác chỉnh sửa và phân phối lại chương trình" được trả lời bằng hai loại này.

    • ví dụ: Linux, Python, Apache.

    Được sử dụng khi nhà phát triển muốn phần mềm được sử dụng rộng rãi và cải thiện bởi cộng đồng.

    Freeware và shareware

    • freeware — miễn phí, không có mã nguồn, có thể phân phối lại nhưng không được chỉnh sửa (Acrobat Reader, WhatsApp).
    • shareware — miễn phí trong thời gian dùng thử, sau đó bạn phải trả tiền để tiếp tục sử dụng; không có mã nguồn.

    Các mô tả trong sơ đồ: shareware được phân phối miễn phí dùng thử (một khoảng thời gian giới hạn hoặc tính năng giới hạn) và người dùng trả tiền để tiếp tục sử dụng phiên bản đầy đủ; phần mềm thương mại được bán với mức phí, mã nguồn không được cung cấp, giấy phép bảo vệ tài sản trí tuệ của nhà phát triển, và mức phí thường mua lấy hỗ trợ và bản cập nhật. Lợi ích của shareware đối với lập trình viên: người dùng có thể thử chương trình trước khi mua, vì vậy họ có khả năng mua hàng cao hơn; nó lan truyền rộng rãi với chi phí quảng cáo gần như bằng không; và những người giữ lại thì trả tiền. Lợi ích của giấy phép thương mại: nhà phát triển kiếm được phí cho mỗi bản sao; mã code và quyền sở hữu được bảo vệ; và thu nhập tài trợ cho hỗ trợ, bản cập nhật và phát triển thêm.

    Loại Chi phí Mã nguồn Phân phối lại Chỉnh sửa
    Thương mại Có phí Không Không Không
    Nguồn mở Miễn phí Có Có Thường, có điều kiện
    Freeware Miễn phí Không Có Không
    Shareware Dùng thử miễn phí, sau đó trả phí Không Đôi khi Không
    Cây quyết định để chọn giấy phép: nếu bạn muốn bán hoặc giữ quyền kiểm soát, hãy chọn thương mại; nếu không, nếu bạn chia sẻ mã nguồn, hãy chọn nguồn mở; nếu không, nếu nó miễn phí mãi mãi, hãy chọn freeware, ngược lại là shareware (dùng thử miễn phí rồi trả phí)
    Chọn giấy phép từ mục tiêu của nhà phát triển

    Để biện minh cho việc chọn giấy phép, hãy liên kết nó với mục tiêu của nhà phát triển (doanh thu, phạm vi tiếp cận, cộng đồng), nhu cầu của người dùng (chi phí, tùy chỉnh) và trường hợp sử dụng.

    Ví dụ minh họa. Một lập trình viên đã viết một trò chơi để bán cho công chúng. Xác định giấy phép phù hợp nhất và biện minh cho nó.

    Giấy phép thương mại: trò chơi được bán với mức phí, vì vậy lập trình viên kiếm được tiền từ mỗi bản sao; mã nguồn không được phát hành, vì vậy không ai có thể sao chép trò chơi hoặc thay đổi nó và bán nó dưới danh tính của mình; giấy phép bảo vệ tài sản trí tuệ; và người mua nhận được bản cập nhật và hỗ trợ. Nguồn mở sẽ không phù hợp, vì mã nguồn sẽ có sẵn, nên trò chơi có thể bị sao chép, thay đổi và phân phối lại mà không cần thanh toán.

    Ví dụ minh họa. Một chương trình giúp người mua sắm bằng cách đọc to nhãn sản phẩm. Giải thích tại sao giấy phép nguồn mở có thể không phù hợp.

    Mã nguồn sẽ có thể truy cập được, nên có thể bị thay đổi; một phiên bản đã thay đổi có thể xuất thông tin sản phẩm sai, khiến người mua sắm mua nhầm mặt hàng; và lập trình viên sẽ mất quyền kiểm soát đối với chất lượng và an toàn của những gì được phân phối dưới tên chương trình. Ngược lại, các chương trình được phát hành dưới dạng nguồn mở để các nhà phát triển khác có thể cải tiến và mở rộng chúng, để chúng được áp dụng rộng rãi mà không tốn kém, và để người dùng có thể tùy chỉnh chúng theo nhu cầu của riêng mình.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    copyleft/ˈkɒpɪleft/ copyleft
    freeware/ˈfriːweə/ freeware
    shareware/ˈʃeəweə/ phần mềm chia sẻ
    artificial intelligence/ˌɑːtɪˈfɪʃl ɪnˈtelɪdʒəns/ trí tuệ nhân tạo
    machine learning/məˈʃiːn ˈlɜːnɪŋ/ học máy
    Deep learning/diːp ˈlɜːnɪŋ/ Học sâu
    neural networks/ˈnjuːrəl ˈnetwɜːks/ mạng nơ-ron
    speech recognition/spiːtʃ ˌrekəɡˈnɪʃn/ nhận dạng giọng nói
    image recognition/ˈɪmɪdʒ ˌrekəɡˈnɪʃn/ nhận dạng hình ảnh
    machine translation/məˈʃiːn trænˈsleɪʃn/ dịch máy
    recommendation systems/ˌrekəmenˈdeɪʃn ˈsɪstəmz/ hệ thống đề xuất
    autonomous vehicles/ɔːˈtɒnəməs ˈvɪəklz/ xe tự lái
    optical character recognition/ˈɒptɪkl ˈkærɪktə ˌrekəɡˈnɪʃn/ nhận dạng ký tự quang học
    text-to-speech/tekst tə spiːtʃ/ chuyển đổi văn bản thành giọng nói
    7.1

    Artificial Intelligence (AI) · ⁨Trí tuệ nhân tạo (AI)⁩

    English

    Artificial intelligence 人工智能 builds systems that do tasks once thought to need human intelligence — recognising speech and images, translating, playing games, driving.

    Most modern AI uses machine learning 机器学习 — algorithms that improve at a task by learning patterns from large amounts of data, instead of being programmed step by step. Deep learning 深度学习, using neural networks 神经网络 with many layers, is the leading approach today.

    Everyday examples

    AI tasks split into two kinds — understanding input, and producing output or decisions.

    Understanding input:

    • speech recognition 语音识别 — spoken words to text (voice assistants).
    • image recognition 图像识别 — finding objects, faces or text in images.

    Producing output or decisions:

    • machine translation 机器翻译 — automatic translation between languages.
    • recommendation systems 推荐系统 — suggesting products, videos or music.
    • autonomous vehicles 自动驾驶汽车 and robots.

    A common exam scenario: a program reads a label with a camera, translates it, and reads it aloud — using optical character recognition 光学字符识别 to find the words, machine translation to convert them, and text-to-speech 文本转语音 for the audio.

    A four-mark "explain how AI is used" answer follows the pipeline step by step: image recognition (OCR) analyses the pixels of the photograph to locate the characters; the patterns of pixels are converted into individual characters and words; machine translation converts the words into the user's language; and text-to-speech produces the spoken output. Each step is a mark.

    Benefits

    • accessibility — speech/image AI helps users with impairments; translation helps non-native speakers.
    • productivity — automating repetitive tasks frees people for creative work.
    • decision support — AI spots patterns in huge datasets (medical diagnosis, fraud detection).
    • always available, and personalised to each user.

    Impacts: social, economic, environmental

    The syllabus asks for the impact of AI under three headings, and a question names one of them. Give the impact and its consequence.

    • Social: benefits — a label-reading program helps people with a visual impairment, people who cannot read the language, and people with reading difficulties; facial recognition at an airport speeds up identity checks and can stop wanted people entering. Harms — facial recognition can misidentify people and tracks everyone without consent, so privacy is lost; students who use AI to do their homework may not develop reasoning and problem-solving skills, may rely on it instead of learning, and may lose the collaboration and face-to-face communication that working together brings.
    • Economic: an AI fault-diagnosis module in a repair garage diagnoses faults faster and more accurately, so more vehicles are repaired per day and costs fall; but fewer skilled mechanics may be needed, so jobs are lost, and the module must be bought and maintained. More generally, AI raises productivity and creates new jobs in some fields while removing routine jobs in others.
    • Environmental: training and running large models uses a great deal of electricity and water for cooling in data centres, and the hardware becomes e-waste; on the other side, AI is used to cut energy use in buildings, optimise transport and monitor the environment.
    • Ethical (the classroom question): an AI that marks work or watches students must be fair to every student, must not leak their data, must be explainable when it makes a decision about them, and must not replace the judgement of a teacher where that matters.

    Concerns

    • bias 偏见 — unfair patterns in the training data become unfair AI decisions (hiring, lending).
    • job displacement — AI may replace some roles.
    • privacy — training often uses large amounts of personal data.
    • transparency — large models are "black boxes", hard to explain.
    • accountability — when AI is wrong, who is responsible: developer, user, or operator?
    • misuse — deepfakes, misinformation, surveillance.

    Professionals must understand the limits of the AI they build, inform users, and reduce harm.

    Tiếng Việt

    Trí tuệ nhân tạo xây dựng các hệ thống thực hiện các nhiệm vụ từng được cho là cần trí tuệ con người — nhận diện giọng nói và hình ảnh, dịch thuật, chơi game, lái xe.

    Hầu hết AI hiện đại sử dụng học máy — các thuật toán cải thiện ở một nhiệm vụ bằng cách học các mẫu từ lượng lớn dữ liệu, thay vì được lập trình từng bước. Học sâu, sử dụng mạng nơ-ron với nhiều lớp, là phương pháp dẫn đầu hiện nay.

    Ví dụ hàng ngày

    Nhiệm vụ AI chia thành hai loại — hiểu đầu vào, và tạo ra đầu ra hoặc quyết định.

    Hiểu đầu vào:

    • nhận diện giọng nói — chuyển lời nói thành văn bản (trợ lý giọng nói).
    • nhận diện hình ảnh — tìm kiếm các vật thể, khuôn mặt hoặc văn bản trong hình ảnh.

    Tạo ra đầu ra hoặc quyết định:

    • dịch máy — dịch tự động giữa các ngôn ngữ.
    • hệ thống đề xuất — gợi ý sản phẩm, video hoặc âm nhạc.
    • xe tự lái và robot.

    Một tình huống thi phổ biến: một chương trình đọc nhãn bằng camera, dịch nó, và đọc to lên — sử dụng nhận diện ký tự quang học để tìm từ, dịch máy để chuyển đổi chúng, và chuyển văn bản thành giọng nói cho âm thanh.

    Đọc to một nhãn nước ngoài: hình ảnh camera đi đến OCR để tìm từ, sau đó đến dịch máy, rồi đến chuyển văn bản thành giọng nói cho âm thanh
    Một tình huống phổ biến: OCR → dịch máy → văn bản thành giọng đọc to một nhãn nước ngoài

    Câu trả lời "giải thích cách AI được sử dụng" trị giá bốn điểm tuân theo quy trình từng bước: nhận diện hình ảnh (OCR) phân tích các pixel của bức ảnh để định vị các ký tự; các mẫu pixel được chuyển đổi thành các ký tự và từ riêng lẻ; dịch máy chuyển các từ sang ngôn ngữ của người dùng; và văn bản thành giọng đọc tạo ra đầu ra bằng lời nói. Mỗi bước tương ứng với một điểm số.

    Lợi ích

    • sự tiếp cận — AI giọng nói/hình ảnh hỗ trợ người dùng có khiếm khuyết; dịch thuật giúp những người không phải là người bản xứ.
    • hiệu suất làm việc — tự động hóa các tác vụ lặp lại giải phóng con người cho công việc sáng tạo.
    • hỗ trợ ra quyết định — AI phát hiện các mẫu trong tập dữ liệu khổng lồ (chẩn đoán y khoa, phát hiện gian lận).
    • luôn sẵn sàng, và được cá nhân hóa cho từng người dùng.

    Tác động: xã hội, kinh tế, môi trường

    Chương trình học yêu cầu nêu tác động của AI dưới ba tiêu đề, và một câu hỏi chỉ tên một trong số đó. Nêu tác động và hệ quả của nó.

    • Xã hội: lợi ích — chương trình đọc nhãn giúp người khiếm thị, người không đọc được ngôn ngữ đó, và người gặp khó khăn trong việc đọc; nhận diện khuôn mặt tại sân bay tăng tốc kiểm tra danh tính và có thể ngăn chặn những người bị truy nã xâm nhập. Hại — nhận diện khuôn mặt có thể nhận diện sai người và theo dõi tất cả mọi người mà không có sự đồng ý, nên quyền riêng tư bị mất; học sinh sử dụng AI để làm bài về nhà có thể không phát triển kỹ năng suy luận và giải quyết vấn đề, có thể phụ thuộc vào nó thay vì học tập, và có thể mất đi sự hợp tác và giao tiếp trực tiếp mà làm việc cùng nhau mang lại.
    • Kinh tế: mô-đun chẩn đoán lỗi trong một gara sửa chữa chẩn đoán lỗi nhanh hơn và chính xác hơn, nên nhiều xe hơn được sửa chữa mỗi ngày và chi phí giảm xuống; nhưng ít thợ cơ khí lành nghề hơn có thể cần thiết, nên mất việc làm, và mô-đun này phải được mua và bảo trì. Nhìn chung, AI nâng cao hiệu suất làm việc và tạo ra các công việc mới trong một số lĩnh vực trong khi loại bỏ các công việc thường xuyên ở những lĩnh vực khác.
    • Môi trường: huấn luyện và vận hành các mô hình lớn tiêu thụ rất nhiều điện năng và nước làm mát trong các trung tâm dữ liệu, và phần cứng trở thành rác thải điện tử; mặt khác, AI được sử dụng để cắt giảm tiêu thụ năng lượng trong các tòa nhà, tối ưu hóa giao thông và giám sát môi trường.
    • Đạo đức (câu hỏi trong lớp học): một AI chấm bài hoặc giám sát học sinh phải công bằng với mọi học sinh, không được rò rỉ dữ liệu của họ, phải giải thích được khi đưa ra quyết định về họ, và không được thay thế phán xét của giáo viên nơi điều đó quan trọng.

    Lo ngại

    • thiên kiến — các mẫu bất công trong dữ liệu huấn luyện dẫn đến các quyết định bất công của AI (tuyển dụng, cho vay).
    • thay thế việc làm — AI có thể thay thế một số vai trò.
    • quyền riêng tư — quá trình huấn luyện thường sử dụng lượng lớn dữ liệu cá nhân.
    • sự minh bạch — các mô hình lớn là "hộp đen", khó giải thích.
    • trách nhiệm giải trình — khi AI sai, ai là người chịu trách nhiệm: nhà phát triển, người dùng, hay người vận hành?
    • lạm dụng — deepfake, tin giả, giám sát.
    Dữ liệu huấn luyện thiên kiến khiến mô hình học được thiên kiến, sau đó tạo ra các quyết định bất công như trong tuyển dụng hoặc cho vay
    Cách thiên kiến xâm nhập vào AI: dữ liệu thiên kiến → mô hình thiên kiến → quyết định bất công

    Các chuyên gia phải hiểu rõ giới hạn của AI mà họ xây dựng, thông báo cho người dùng, và giảm thiểu thiệt hại.

    Explore · ⁨Khám phá⁩

    Computing concept lab · ⁨Phòng thí nghiệm khái niệm tin học⁩

    Classify concrete examples by the computing idea they demonstrate. · ⁨Phân loại các ví dụ cụ thể theo ý tưởng tin học mà chúng minh họa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    ethics/ˈeθɪks/ đạo đức
    privacy/ˈprɪvəsi/ quyền riêng tư
    confidentiality/ˌkɒnfɪˌdenʃiˈæləti/ tính bí mật
    conflicts of interest/ˈkɒnflɪkts ɒv ˈɪntrest/ xung đột lợi ích
    intellectual property/ˌɪntəˈlektʃuːəl ˈprɒpəti/ sở hữu trí tuệ
    code of conduct/kəʊd ɒv ˈkɒndʌkt/ bộ quy tắc ứng xử
    bias/ˈbaɪəs/ sự thiên lệch
    7.1

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly.

    Term Definition
    ethics the moral principles that govern how a person behaves, in a profession the standards set out in its code of conduct
    code of conduct the rules an organisation or professional body sets for how its members must behave
    copyright the legal right of the creator of an original work to control how it is copied, distributed and modified
    software licence the legal agreement that states how a piece of software may be used, copied and distributed
    commercial software software sold for a fee, without source code, under a licence that protects the developer's intellectual property
    free software (FSF) software whose users are free to run, study, change and redistribute it, so its source code is available
    open source (OSI) software whose source code is available and which may be modified and redistributed under its licence
    shareware software distributed free for a trial period or with limited features, after which the user pays to continue
    freeware software that is free of charge to use and copy, but whose source code is not released and may not be modified
    artificial intelligence computer systems that perform tasks which normally need human intelligence, such as recognising images and speech
    machine learning a form of AI in which a system improves at a task by learning patterns from data rather than by explicit programming
    Tiếng Việt

    Một câu hỏi định nghĩa được chấm dựa trên từ ngữ cố định. Hãy học những câu này đúng chính xác.

    Thuật ngữ Định nghĩa
    đạo đức các nguyên tắc đạo đức điều chỉnh cách một người hành xử, trong nghề nghiệp là các tiêu chuẩn được nêu trong bộ luật đạo đức nghề nghiệp
    bộ luật đạo đức nghề nghiệp các quy tắc do tổ chức hoặc cơ quan nghề nghiệp đặt ra về cách thức hành xử của các thành viên
    bản quyền quyền pháp lý của người sáng tác tác phẩm gốc để kiểm soát cách tác phẩm đó được sao chép, phân phối và chỉnh sửa
    giấy phép phần mềm thỏa thuận pháp lý nêu rõ cách một phần mềm có thể được sử dụng, sao chép và phân phối
    phần mềm thương mại phần mềm bán với giá, không có mã nguồn, dưới giấy phép bảo vệ sở hữu trí tuệ của nhà phát triển
    phần mềm miễn phí (FSF) phần mềm mà người dùng được tự do chạy, nghiên cứu, thay đổi và phân phối lại, do đó mã nguồn của nó có sẵn
    mã nguồn mở (OSI) phần mềm có mã nguồn có sẵn và có thể được chỉnh sửa và phân phối lại theo giấy phép của nó
    shareware phần mềm được phân phối miễn phí trong thời gian dùng thử hoặc với các tính năng giới hạn, sau đó người dùng phải trả tiền để tiếp tục sử dụng
    freeware phần mềm miễn phí hoàn toàn để sử dụng và sao chép, nhưng mã nguồn không được công bố và không được chỉnh sửa
    trí tuệ nhân tạo các hệ thống máy tính thực hiện các tác vụ vốn đòi hỏi trí tuệ con người, chẳng hạn như nhận diện hình ảnh và giọng nói
    học máy một dạng AI mà trong đó hệ thống cải thiện khả năng trong một tác vụ bằng cách học các mẫu từ dữ liệu thay vì bằng cách lập trình rõ ràng
    7.1

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Answer ethics questions against a professional code of conduct (public interest, competence, honesty), not personal opinion.
    • Distinguish copyright (protects the expression) from a patent (protects an invention).
    • Compare software licences: proprietary, open-source, freeware, shareware and FOSS.

    Common mistakes

    • Giving a personal opinion ("it is wrong") instead of a reason with a consequence ("faulty software could harm users, so it must be tested").
    • Treating free software and freeware as the same thing. Free software is about the freedom to study and change the code; freeware is merely free of charge.
    • Saying open source means free of charge. It means the source code is available and may be modified and redistributed; a fee may still be charged.
    • Writing that copyright must be registered. It applies automatically to the work as written.
    • Naming an impact without its consequence. "Job losses" scores when it is tied to why: the AI does the diagnosis, so fewer mechanics are needed.
    • Describing what AI is instead of how it is used. The marks are for the steps: recognise, convert, translate, speak.
    Tiếng Việt
    • Trả lời các câu hỏi về đạo đức dựa trên bộ luật đạo đức nghề nghiệp (lợi ích công cộng, năng lực, sự trung thực), không phải quan điểm cá nhân.
    • Phân biệt bản quyền (bảo vệ biểu đạt) và bằng sáng chế (bảo vệ phát minh).
    • So sánh các giấy phép phần mềm: độc quyền, mã nguồn mở, freeware, shareware và FOSS.

    Lỗi thường gặp

    • Đưa ra quan điểm cá nhân ("điều đó sai") thay vì đưa ra lý do kèm hệ quả ("phần mềm lỗi có thể gây hại cho người dùng, vì vậy nó phải được kiểm tra").
    • Coi phần mềm miễn phí (free software) và freeware là giống nhau. Phần mềm miễn phí liên quan đến sự tự do nghiên cứu và thay đổi mã; freeware chỉ đơn thuần là miễn phí về chi phí.
    • Nói rằng mã nguồn mở có nghĩa là miễn phí. Nó có nghĩa là mã nguồn có sẵn và có thể được chỉnh sửa và phân phối lại; vẫn có thể thu phí.
    • Viết rằng bản quyền phải được đăng ký. Bản quyền áp dụng tự động đối với tác phẩm ngay khi được viết ra.
    • Đặt tên cho một tác động mà không nêu hậu quả. "Mất việc làm" chỉ được điểm khi nó liên quan đến nguyên nhân: AI thực hiện chẩn đoán, nên ít cơ khí hơn cần thiết.
    • Mô tả AI là gì thay vì mô tả cách sử dụng nó. Điểm số thuộc về các bước: nhận diện, chuyển đổi, dịch thuật, phát âm.
  • 8

    Databases · ⁨Cơ sở dữ liệu⁩

    Watch lesson · ⁨Xem bài học⁩
    8.1

    File-based storage and its limits

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the limitations of using a file-based approach for the storage and retrieval of data
    Describe the features of a relational database that address the limitations of a file-based approach
    Show understanding of and use the terminology associated with a relational database model Including entity, table, record, field, tuple, attribute, primary key, candidate key, secondary key, foreign key, relationship (one-to-many, one-to-one, many-to-many), referential integrity, indexing
    Use an entity-relationship (E-R) diagram to document a database design
    Show understanding of the normalisation process First Normal Form (1NF), Second Normal Form (2NF) and Third Normal Form (3NF)
    Explain why a given set of database tables are, or are not, in 3NF
    Produce a normalised database design for a description of a database, a given set of data, or a given set of tables
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về những hạn chế khi sử dụng phương pháp dựa trên tập tin để lưu trữ và truy xuất dữ liệu
    Mô tả các đặc điểm của cơ sở dữ liệu quan hệ giúp khắc phục những hạn chế của phương pháp dựa trên tập tin
    Thể hiện sự hiểu biết và sử dụng đúng thuật ngữ liên quan đến mô hình cơ sở dữ liệu quan hệ Bao gồm: thực thể, bảng, dòng ghi, trường, tuple, thuộc tính, khóa chính, khóa ứng viên, khóa phụ, khóa ngoại, mối quan hệ (một-nhiều, một-một, nhiều-nhiều), toàn vẹn tham chiếu, lập chỉ mục
    Sử dụng sơ đồ thực thể - mối quan hệ (E-R) để tài liệu hóa thiết kế cơ sở dữ liệu
    Thể hiện sự hiểu biết về quá trình chuẩn hóa Dạng chuẩn hóa thứ nhất (1NF), Dạng chuẩn hóa thứ hai (2NF) và Dạng chuẩn hóa thứ ba (3NF)
    Giải thích tại sao một bộ bảng dữ liệu đã cho đang ở hoặc không ở dạng 3NF
    Xây dựng thiết kế cơ sở dữ liệu đã chuẩn hóa dựa trên mô tả cơ sở dữ liệu, một bộ dữ liệu đã cho hoặc một bộ bảng đã cho

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Before databases, programs stored data in flat files 平面文件 — usually one file per program. This is fine for small data but breaks down at scale.

    A hand searching a card-index filing cabinet
    File-based storage keeps data in separate files, like papers in a filing cabinet — hard to search and easy to duplicate

    Limitations

    • data redundancy 数据冗余 — the same data (a customer's address) is held in several files, one per program, so storage is wasted and every copy must be updated.
    • data inconsistency 数据不一致 — when one copy is updated and another is not, the files disagree and nobody knows which is right.
    • data dependence — each program is written for the exact layout of its files; change a field's length or add a field and every program that reads the file must be rewritten.
    • no shared access — a file is locked while one program uses it, so users cannot work on the data at the same time.
    • weak integrity 完整性 — no central rules stop an invalid value or a link to a customer who does not exist; weak security — access is per file, not per field; and queries across files need a new program each time.
    The Payroll and Sales programs each link to their own separate data file, so the Staff Number field is stored twice
    The file-based approach: each program keeps its own files

    A relational database 关系数据库 fixes these by storing data in tables managed by one piece of software (the DBMS) that all programs use.

    One DBMS holding tables design, validation rules, access rights and the data, with a single shared database, used by both the payroll and sales applications
    The database approach: one DBMS serves all the programs

    Why a relational database is better — the three-mark answer. Each item of data is stored once, in one table, and tables are linked by keys, so there is no redundancy and no inconsistency; the data is independent of the programs, which ask the DBMS for what they need and are unaffected when the structure changes; and the DBMS enforces integrity rules, controls access per user and per field, allows many users at once, and answers any query without a new program being written.

    Worked example. A repair shop stores its customers, devices and repair jobs using a file-based approach, one file per program. Give three problems this causes, and describe how a relational database would remove them.

    The customer's name and phone number are stored in the repairs file and the invoices file (redundancy); when a customer changes number, one file is updated and the other is not (inconsistency); and when the shop wants a new report — repairs per technician — a new program has to be written to read the files (no ad-hoc queries). In a relational database the customer is stored once in a CUSTOMER table and referred to by CustomerID from the REPAIR table, so a change is made once and is seen everywhere; the report is a single SQL query.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    flat files/flæt faɪlz/ tệp phẳng
    data redundancy/ˈdeɪtə rɪˈdʌndənsi/ sự dư thừa dữ liệu
    data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ sự không nhất quán dữ liệu
    integrity/ɪnˈteɡrɪti/ tính toàn vẹn
    relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ cơ sở dữ liệu quan hệ
    8.1

    Relational model — terms

    • table 表 (relation) — a grid of rows and columns; one table per type of entity 实体 (e.g. CUSTOMER).
    • record 记录 (row, also called a tuple 元组) — one row; one instance of the entity.
    • field 字段 (column, also called an attribute 属性) — one column; one piece of information about each record.
    • primary key 主键 — a field (or fields) that uniquely identifies each record; never null or duplicated.
    • foreign key 外键 — a field whose value matches the primary key of another table, linking the two.
    • composite key 复合键 — a primary key made of two or more fields together.
    • candidate key 候选键 — any field(s) that could be the primary key.
    • secondary key 次键 — a non-primary field that is indexed for fast searching.
    • indexing 索引 — building an index on a field so look-ups and joins run faster.
    • referential integrity 参照完整性 — every foreign-key value must match an existing primary key (no orphan records).

    A table is written in shorthand with the primary key underlined and foreign keys noted:

    CUSTOMER(CustomerID, Name, Phone)
    ORDER(OrderID, CustomerID, OrderDate)   -- CustomerID is FK → CUSTOMER
    
    Two tables linked by a foreign key: the CUSTOMER table has primary key CustomerID; the ORDER table has its own primary key OrderID plus a CustomerID foreign key whose value matches a CustomerID in CUSTOMER
    A foreign key links two tables: ORDER.CustomerID matches the primary key CUSTOMER.CustomerID

    Worked example. State what is meant by entity, primary key and referential integrity in a relational database, and complete the term ↔ description table for tuple and attribute.

    An entity is something about which data is stored — a person, object or event — which becomes one table. A primary key is the attribute (or combination of attributes) that uniquely identifies each record in a table. Referential integrity means that every foreign-key value must match the value of a primary key in the table it refers to, so a record cannot refer to one that does not exist. A tuple is one row of a table (one record); an attribute is one column (one field). Learn the pairs: table/relation, record/tuple, field/attribute.

    Explore · ⁨Khám phá⁩

    Read a relational table with SELECT · ⁨Đọc bảng quan hệ với lệnh SELECT⁩

    A relational table is just rows (records) and columns (fields). WHERE keeps the rows that match a condition; SELECT then keeps only the columns you asked for. · ⁨Bảng quan hệ chỉ có các hàng (bản ghi) và cột (trường). WHERE giữ lại các hàng khớp với điều kiện; SELECT sau đó chỉ giữ lại các cột bạn đã yêu cầu.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    field/fiːld/ trường
    table/ˈteɪbl/ bảng
    entity/ˈentɪti/ thực thể
    record/ˈrekɔːd/ bản ghi
    tuple/ˈtuːpl/ hàng (tuple)
    attribute/ˈætrɪbjuːt/ thuộc tính
    primary key/ˈpraɪməri kiː/ khóa chính
    foreign key/ˈfɒrən kiː/ khóa ngoại
    composite key/ˈkɒmpəzɪt kiː/ khóa tổng hợp
    candidate key/ˈkændɪdeɪt kiː/ khóa ứng viên
    secondary key/ˈsekəndəri kiː/ khóa phụ
    indexing/ˈɪndeksɪŋ/ lập chỉ mục
    referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ toàn vẹn tham chiếu
    8.1

    Entity-relationship (E-R) diagrams

    An entity-relationship diagram 实体关系图 shows the structure: each entity is a rectangle, each relationship a line, with the cardinality 基数 marked at each end:

    • one-to-one (1:1).
    • one-to-many 一对多 (1:M) — each Customer has many Orders; each Order has one Customer.
    • many-to-many (M:N) — Students take many Courses, and Courses have many Students.
    An E-R diagram with a STUDENT entity and a CLASS entity joined by a relationship line, crow's-foot many at the student end and one bar at the class end
    An E-R diagram: one class has many students
    Crow's-foot line-end symbols for one, many, one and only one, zero or one, one or many, and zero or many
    Crow's-foot symbols for the cardinality of a relationship

    A many-to-many relationship cannot be stored directly. Break it into two one-to-many relationships through a link table 连接表 holding the two foreign keys:

    ENROLMENT(StudentID, CourseID, EnrolmentDate)
    
    A many-to-many relationship between STUDENT and COURSE stored as two one-to-many relationships through an ENROLMENT link table holding StudentID and CourseID
    A link table resolves a many-to-many relationship into two one-to-many relationships

    Drawing the E-R diagram for a given set of tables. Each table becomes an entity. A relationship exists wherever one table holds a foreign key to another; it runs from the table holding the foreign key (the many end) to the table whose primary key it is (the one end). A table with two foreign keys and no other identity is usually a link table resolving a many-to-many relationship. Label each line with the relationship type.

    An E-R diagram for a repair-shop database with four entities: CUSTOMER one-to-many DEVICE, DEVICE one-to-many REPAIR and TECHNICIAN one-to-many REPAIR, with crow's-foot notation and the primary and foreign keys shown
    Drawing the diagram from the tables: every foreign key is a one-to-many relationship, with the "many" at the table that holds it

    Worked example. A repair shop has the tables CUSTOMER(CustomerID, Name, Phone), DEVICE(DeviceID, CustomerID, Type, Model), TECHNICIAN(TechnicianID, Name) and REPAIR(RepairID, DeviceID, TechnicianID, RepairDate, Cost). Identify the relationships and their types.

    DEVICE holds CustomerID, so CUSTOMER–DEVICE is one-to-many (one customer, many devices). REPAIR holds DeviceID, so DEVICE–REPAIR is one-to-many; it also holds TechnicianID, so TECHNICIAN–REPAIR is one-to-many. There is no direct CUSTOMER–REPAIR line: the link runs through DEVICE. Three lines, three crow's feet, all at the REPAIR or DEVICE ends.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ biểu đồ thực thể - mối liên hệ
    cardinality/ˌkɑːdɪˈnælɪti/ cardinality
    one-to-many/wʌn tə ˈmeni/ một-nhiều
    link table/lɪŋk ˈteɪbl/ bảng liên kết
    8.1

    Normalisation

    Normalisation 规范化 organises tables to cut redundancy and inconsistency, going through normal forms 范式 in order.

    • First normal form (1NF) — every field holds a single (atomic 原子) value, with no repeating groups, and a primary key.
    • Second normal form (2NF) — in 1NF, and every non-key field depends on the whole primary key (only matters for a composite key).
    • Third normal form (3NF) — in 2NF, and every non-key field depends only on the primary key, not on another non-key field (no transitive dependency 传递依赖).

    A 3NF design stores each fact once, so insert/update/delete anomalies disappear. The trade-off is more tables and more joins. Aim for 3NF.

    To produce a 3NF design: find the entities and their attributes; choose a primary key for each; split repeating/non-atomic fields (1NF); split fields depending on part of a composite key (2NF); split fields depending transitively on the key (3NF); add foreign keys for the relationships.

    Normalisation: one table where the customer name and phone repeat on every order is split into a separate ORDER table and CUSTOMER table, so each fact is stored once
    Normalisation removes redundancy by splitting repeated data into its own table

    Worked example. The table ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity) has the composite primary key (OrderID, ProductID). Normalise it to 3NF. Test each non-key field against the key. Quantity depends on both OrderID and ProductID, which is fine. But CustomerID depends on OrderID alone - only part of the composite key. That is a partial dependency, so the table is not in 2NF. Split it into ORDER_LINE(OrderID, ProductID, Quantity) and ORDER(OrderID, CustomerID, CustomerName). Now test 3NF: in that new ORDER table, CustomerName depends on CustomerID, which is not the key - a transitive dependency. Split again: ORDER(OrderID, CustomerID) and CUSTOMER(CustomerID, CustomerName). Name the dependency that breaks each form (partial breaks 2NF, transitive breaks 3NF); "it has repeated data" describes the symptom and earns nothing.

    The three questions to ask of any table. Is every cell a single value, with no repeating group? If not, it is not in 1NF. If the key is composite, does every non-key field depend on the whole key? If some field depends on part of it, there is a partial dependency 部分依赖 and the table is not in 2NF. Does every non-key field depend on the key alone? If a field depends on another non-key field, there is a transitive dependency and the table is not in 3NF. An "explain why the table is not in 3NF" answer names the dependency and the fields involved.

    Normalising a car-rental table in three steps: the repeating group of cars is removed for 1NF, the car details that depend on CarReg alone are moved to a CAR table for 2NF, and the customer details that depend on CustomerID are moved to a CUSTOMER table for 3NF
    1NF removes the repeating group, 2NF the partial dependency, 3NF the transitive dependency

    Worked example. A car-rental shop records each rental as RENTAL(RentalID, RentalDate, CustomerID, CustomerName, CustomerPhone, CarReg, CarModel, DailyRate, Days), where one rental can include several cars. Explain why the table is not normalised and produce a 3NF design.

    Not in 1NF: the car fields CarReg, CarModel, DailyRate, Days form a repeating group — one rental has several cars. Move them to RENTAL_CAR(RentalID, CarReg, CarModel, DailyRate, Days) with the composite key (RentalID, CarReg). Not in 2NF: in RENTAL_CAR, CarModel and DailyRate depend on CarReg alone — a partial dependency. Move them to CAR(CarReg, CarModel, DailyRate), leaving RENTAL_CAR(RentalID, CarReg, Days). Not in 3NF: in RENTAL, CustomerName and CustomerPhone depend on CustomerID, a non-key field — a transitive dependency. Move them to CUSTOMER(CustomerID, CustomerName, CustomerPhone), leaving RENTAL(RentalID, RentalDate, CustomerID). The 3NF design is four tables — CUSTOMER, RENTAL, RENTAL_CAR, CAR — with CustomerID, RentalID and CarReg as foreign keys; underline every primary key.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    normalisation/ˌnɔːməlaɪˈzeɪʃn/ chuẩn hóa
    normal forms/ˈnɔːml fɔːmz/ các dạng chuẩn
    atomic/əˈtɒmɪk/ nguyên tử
    transitive dependency/ˈtrænsɪtɪv dɪˈpendənsi/ phụ thuộc vào tham số
    partial dependency/ˈpɑːʃl dɪˈpendənsi/ phụ thuộc một phần
    8.2

    Database Management System (DBMS)

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the features provided by a Database Management System (DBMS) that address the issues of a file based approach Including: • data management, including maintaining a data dictionary • data modelling • logical schema • data integrity • data security, including backup procedures and the use of access rights to individuals / groups of users
    Show understanding of how software tools found within a DBMS are used in practice Including the use and purpose of: • developer interface • query processor
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về các tính năng do Hệ quản trị Cơ sở dữ liệu (DBMS) cung cấp nhằm giải quyết các vấn đề của phương pháp dựa trên tập tin Bao gồm: • quản lý dữ liệu, bao gồm duy trì từ điển dữ liệu • mô hình hóa dữ liệu • sơ đồ logic • toàn vẹn dữ liệu • an ninh dữ liệu, bao gồm thủ tục sao lưu và việc sử dụng quyền truy cập cho từng cá nhân / nhóm người dùng
    Thể hiện sự hiểu biết về cách các công cụ phần mềm bên trong DBMS được sử dụng trong thực tế Bao gồm việc sử dụng và mục đích của: • giao diện nhà phát triển • bộ xử lý truy vấn

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A DBMS 数据库管理系统 manages the database centrally. Features that fix the file-based limits:

    • data dictionary 数据字典 — a description of every table, field, type and key; programs query it instead of hard-coding the structure.
    • redundancy/consistency control — each fact stored once.
    • concurrent access 并发访问 control — locks and transactions let many users work at once.
    • backup 备份 and recovery; security and per-user permissions.
    • integrity rules — keys, unique and range constraints, enforced centrally.
    • transactions 事务 — a group of operations that all succeed or all fail.
    • views 视图 — virtual tables that show each user "their" slice of the data.
    • data management 数据管理 and data modelling 数据建模 — control how data is stored and define its structure as a logical schema 逻辑模式 (the logical design, independent of physical storage).
    • data integrity 数据完整性 and data security 数据安全 — enforce correctness and control access centrally.
    • a query processor 查询处理器 runs queries; a developer interface 开发者接口 gives tools and APIs for building applications.

    Its tools include a data-dictionary editor, a query builder, a forms builder, a report generator, user management, and an SQL editor.

    What the data dictionary holds (a "give three items" question): the names of the tables; the names of the fields in each table; each field's data type and length; the primary and foreign keys and the relationships between tables; validation rules; indexes; and who may access each table. It is metadata — data about the data — and the DBMS uses it to check every query and every change.

    How the DBMS keeps the data secure (a "describe two methods" question): authentication 身份验证 — a username and password, or a biometric, before any access; access rights — each user or group is allowed to read, write or delete only certain tables or fields, often through a view; encryption of the stored data and of data sent to it, so a copied file is unreadable; backups taken regularly, so the data can be restored after loss; and a transaction log that records who changed what.

    The two software tools. The developer interface is what a programmer uses to build the database and the applications on it: create tables and set keys and validation, write queries and SQL, and design forms and reports, without knowing how the data is physically stored. The query processor takes a query (SQL from a program, or a query built in the interface), checks it against the data dictionary, works out the most efficient way to run it, retrieves the data and returns the results.

    Logical schema. The DBMS keeps the logical design (which tables and fields exist and how they relate) separate from the physical storage (files, indexes, disk blocks). Programs work with the logical schema, so the physical storage can be reorganised without changing a single program — this is the data independence the file-based approach lacked.

    A hard disk drive with its cover removed, showing the stacked mirror-like platters and the read/write head arm resting over them
    The physical storage the logical schema hides: a hard disk's spinning platters and read/write head
    Explore · ⁨Khám phá⁩

    Database service lab · ⁨Phòng thí nghiệm dịch vụ cơ sở dữ liệu⁩

    Watch how a DBMS turns a query into safe shared data access. · ⁨Xem cách DBMS chuyển đổi câu truy vấn thành quyền truy cập dữ liệu chia sẻ an toàn.⁩

    Explore · ⁨Khám phá⁩

    Database service lab · ⁨Phòng thí nghiệm dịch vụ cơ sở dữ liệu⁩

    Watch how a DBMS turns a query into safe shared data access. · ⁨Xem cách DBMS chuyển đổi câu truy vấn thành quyền truy cập dữ liệu chia sẻ an toàn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    DBMS/ˌdiː biː em ˈes/ Hệ quản trị cơ sở dữ liệu
    data dictionary/ˈdeɪtə ˈdɪkʃənəri/ từ điển dữ liệu
    concurrent access/kənˈkʌrənt ˈækses/ truy cập đồng thời
    transactions/trænˈsækʃnz/ giao dịch
    backup/ˈbækʌp/ bản sao lưu
    views/vjuːz/ lượt xem
    data management/ˈdeɪtə ˈmænɪdʒmənt/ quản lý dữ liệu
    data modelling/ˈdeɪtə ˈmɒdəlɪŋ/ mô hình hóa dữ liệu
    logical schema/ˈlɒdʒɪkl ˈskiːmə/ sơ đồ logic
    data integrity/ˈdeɪtə ɪnˈteɡrɪti/ toàn vẹn dữ liệu
    data security/ˈdeɪtə sɪˈkjʊərɪti/ an ninh dữ liệu
    query processor/ˈkwɪərɪ ˈprəʊsesə/ bộ xử lý truy vấn
    developer interface/dɪˈveləpə ˈɪntəfeɪs/ giao diện nhà phát triển
    authentication/ɔːˌθentɪˈkeɪʃn/ xác thực
    8.3

    DDL and DML

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding that the DBMS carries out all creation/modification of the database structure using its Data Definition Language (DDL)
    Show understanding that the DBMS carries out all queries and maintenance of data using its DML
    Show understanding that the industry standard for both DDL and DML is Structured Query Language (SQL) Understand a given SQL statement
    Understand given SQL (DDL) statements and be able to write simple SQL (DDL) statements using a sub-set of statements Create a database (CREATE DATABASE) Create a table definition (CREATE TABLE), including the creation of attributes with appropriate data types: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME change a table definition (ALTER TABLE) add a primary key to a table (PRIMARY KEY (field)) add a foreign key to a table (FOREIGN KEY (field) REFERENCES Table (Field))
    Write an SQL script to query or modify data (DML) which are stored in (at most two) database tables Queries including SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG
    Data maintenance including INSERT INTO, DELETE FROM, UPDATE
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết rằng DBMS thực hiện toàn bộ việc tạo/sửa đổi cấu trúc cơ sở dữ liệu thông qua Ngôn ngữ Định nghĩa Dữ liệu (DDL) của nó
    Thể hiện sự hiểu biết rằng DBMS thực hiện tất cả các truy vấn và bảo trì dữ liệu thông qua Ngôn ngữ Thao tác Dữ liệu (DML) của nó
    Thể hiện sự hiểu biết rằng tiêu chuẩn ngành cho cả DDL và DML là Ngôn ngữ Truy vấn Có cấu trúc (SQL) Hiểu một câu lệnh SQL đã cho
    Hiểu các câu lệnh SQL (DDL) đã cho và có khả năng viết các câu lệnh SQL (DDL) đơn giản bằng cách sử dụng một tập con các câu lệnh Tạo cơ sở dữ liệu (CREATE DATABASE) Tạo định nghĩa bảng (CREATE TABLE), bao gồm tạo các thuộc tính với kiểu dữ liệu phù hợp: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME Sửa đổi định nghĩa bảng (ALTER TABLE) Thêm khóa chính vào bảng (PRIMARY KEY (field)) Thêm khóa ngoại vào bảng (FOREIGN KEY (field) REFERENCES Table (Field))
    Viết một script SQL để truy vấn hoặc sửa đổi dữ liệu (DML) được lưu trữ trong (tối đa hai) bảng cơ sở dữ liệu Các truy vấn bao gồm SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG
    Bảo trì dữ liệu bao gồm INSERT INTO, DELETE FROM, UPDATE

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    SQL 结构化查询语言 (Structured Query Language) has two halves:

    SQL splits into DDL (builds the structure) and DML (works with the data)
    DDL builds the database structure; DML works with the data
    • Data Definition Language 数据定义语言 (DDL) — creates or changes the structure (tables, keys, constraints).
    • Data Manipulation Language 数据操纵语言 (DML) — works with the data (insert, update, delete, query 查询).

    DDL basics

    CREATE TABLE CUSTOMER (
      CustomerID INTEGER PRIMARY KEY,
      Name VARCHAR(50) NOT NULL,
      Phone VARCHAR(20)
    );
    

    Add a foreign key:

    CREATE TABLE ORDER (
      OrderID INTEGER PRIMARY KEY,
      CustomerID INTEGER,
      OrderDate DATE,
      FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
    );
    

    Modify and drop:

    ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
    DROP TABLE CUSTOMER;
    

    Common types: INTEGER, REAL, VARCHAR(n), CHAR(n) (also CHARACTER(n)), DATE, TIME, BOOLEAN, DECIMAL(p, s).

    DML basics

    Query with SELECT:

    A SELECT query returns just the rows that match its condition
    A SELECT query returns only the rows that match its condition
    SELECT Name, Phone
    FROM CUSTOMER
    WHERE City = 'London'
    ORDER BY Name ASC;
    

    SELECT lists fields, FROM names the table, WHERE filters rows, ORDER BY sorts.

    A join 连接 combines two tables using a foreign-key relationship:

    SELECT C.Name, O.OrderDate
    FROM CUSTOMER C INNER JOIN ORDER O
      ON C.CustomerID = O.CustomerID
    WHERE O.OrderDate >= '2024-01-01';
    
    An SQL query annotated line by line: SELECT names the fields and a COUNT column, FROM names the first table with an alias, INNER JOIN ON links the second table through the foreign key, WHERE keeps matching rows, GROUP BY makes one row per customer, ORDER BY sorts the result
    The parts of a query, in the order they must be written

    Aggregate functions 聚合函数 (COUNT, SUM, AVG, MIN, MAX) are often used with GROUP BY:

    SELECT CustomerID, COUNT(*) AS NumOrders
    FROM ORDER
    GROUP BY CustomerID;
    

    Insert, update, delete:

    INSERT INTO CUSTOMER (CustomerID, Name, Phone)
    VALUES (101, 'Ada Lovelace', '020-1234-5678');
    
    UPDATE CUSTOMER SET Phone = '020-9999-0000' WHERE CustomerID = 101;
    
    DELETE FROM CUSTOMER WHERE CustomerID = 101;
    

    Always put a WHERE clause on UPDATE and DELETE, or the change hits every row.

    Tips for exam SQL

    • use the exact table and field names from the question.
    • quote strings with single quotes ('Smith'); don't quote numbers.
    • comparisons: =, <, >, <=, >=, <>.
    • LIKE 'A%' matches anything starting with A (% = any string, _ = one character); IN (1,2,3); BETWEEN 10 AND 20.
    • combine conditions with AND / OR / NOT, and end each statement with a semicolon.

    The DDL pattern the exam wants. Every CREATE TABLE names each field with its type, marks the primary key, and declares each foreign key with the table it references; a composite key is declared on its own line:

    CREATE TABLE RENTAL_CAR (
      RentalID INTEGER,
      CarReg VARCHAR(8),
      Days INTEGER,
      PRIMARY KEY (RentalID, CarReg),
      FOREIGN KEY (RentalID) REFERENCES RENTAL(RentalID),
      FOREIGN KEY (CarReg) REFERENCES CAR(CarReg)
    );
    

    Worked example. Using CUSTOMER(CustomerID, Name, Phone) and DEVICE(DeviceID, CustomerID, Type, Model), write SQL scripts to: (a) list the name and phone number of every customer who owns a device of type 'tablet', in alphabetical order of name; (b) count the devices of each type; (c) record that customer 17 now has the phone number '0771 234 5678'; (d) add a new device, ID 305, a 'laptop' of model 'X1' belonging to customer 17.

    (a)

    SELECT CUSTOMER.Name, CUSTOMER.Phone
    FROM CUSTOMER INNER JOIN DEVICE
      ON CUSTOMER.CustomerID = DEVICE.CustomerID
    WHERE DEVICE.Type = 'tablet'
    ORDER BY CUSTOMER.Name ASC;
    

    (b)

    SELECT Type, COUNT(DeviceID) AS NumberOfDevices
    FROM DEVICE
    GROUP BY Type;
    

    (c) UPDATE CUSTOMER SET Phone = '0771 234 5678' WHERE CustomerID = 17; (d) INSERT INTO DEVICE (DeviceID, CustomerID, Type, Model) VALUES (305, 17, 'laptop', 'X1');

    Marks are given per clause — the fields, the tables, the join condition, the WHERE, the ORDER BY — so a script with one wrong clause still scores the rest. Write Table.Field whenever two tables are involved.

    Worked example. Explain what this script does: SELECT T.Name, SUM(R.Cost) AS Total FROM TECHNICIAN T INNER JOIN REPAIR R ON T.TechnicianID = R.TechnicianID GROUP BY T.Name;

    It outputs each technician's name with the total cost of the repairs that technician has carried out, one row per technician: the two tables are joined on TechnicianID, the rows are grouped by name, and the costs in each group are added. When asked what a script does, describe the result, not the syntax.

    Explore · ⁨Khám phá⁩

    Stitch two tables with INNER JOIN · ⁨Nối hai bảng với INNER JOIN⁩

    A join matches rows where the foreign key equals the primary key — here Orders.CustomerID = Customer.CustomerID — and combines each matching pair into one wider row. · ⁨Phép nối khớp các dòng mà khóa ngoại bằng khóa chính — ở đây Orders.CustomerID = Customer.CustomerID — và gộp mỗi cặp khớp thành một dòng rộng hơn.⁩

    Explore · ⁨Khám phá⁩

    SELECT … WHERE

    Step through a query: WHERE keeps the rows that match, then SELECT picks the columns you asked for. · ⁨Từng bước một truy vấn: WHERE giữ lại các hàng khớp, sau đó SELECT chọn các cột bạn yêu cầu.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    query/ˈkwɪərɪ/ truy vấn
    SQL/ˌes kjuː ˈel/ SQL
    join/dʒɔɪn/ join
    Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ Ngôn ngữ Định nghĩa Dữ liệu
    Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ Ngôn ngữ Thao tác Dữ liệu
    aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ hàm tổng hợp
    Watch lesson · ⁨Xem bài học⁩
    8.3

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    entity something about which data is stored — a person, object or event — which becomes a table in a relational database
    attribute one item of data about an entity (a column of the table)
    tuple one row of a table: one instance of the entity
    primary key an attribute, or combination of attributes, that uniquely identifies each record in a table
    foreign key an attribute in one table whose value matches a primary key in another table, used to link the two
    candidate key any attribute (or combination) that could be chosen as the primary key
    secondary key a non-primary attribute that is indexed so the table can be searched or sorted on it quickly
    composite key a primary key made of two or more attributes together
    referential integrity every foreign-key value must match an existing primary-key value in the table it refers to
    first normal form a table in which every attribute is atomic, there are no repeating groups, and there is a primary key
    second normal form in 1NF, and every non-key attribute depends on the whole of the primary key (no partial dependency)
    third normal form in 2NF, and no non-key attribute depends on another non-key attribute (no transitive dependency)
    data dictionary the metadata a DBMS keeps about the structure of the database: tables, fields, types, keys, relationships, validation
    DDL / DML the language used to define or change the structure of a database / the language used to query and maintain the data in it
    8.3

    Exam tips

    • Define the terms exactly: entity, attribute, primary key, foreign key, and the relationship types (1:1, 1:many, many:many).
    • Give a reason at each normal form: 1NF (no repeating groups), 2NF (no partial dependency), 3NF (no non-key dependency) — and name the fields involved.
    • Explain what a DBMS provides (data independence, security, integrity, concurrent access, a data dictionary, a developer interface, a query processor).
    • Distinguish DDL (define the structure) from DML (query and change the data), and write SQL clause by clause: SELECT, FROM, INNER JOIN … ON, WHERE, GROUP BY, ORDER BY.
    • To draw an E-R diagram from tables, find each foreign key first: every foreign key is one one-to-many relationship, with the "many" at the table that holds it.

    Common mistakes

    • Drawing a many-to-many relationship directly. It must be split into two one-to-many relationships through a link table holding both foreign keys.
    • Explaining "not in 3NF" by "the data is repeated". Name the dependency (partial or transitive) and the fields involved.
    • Double quotes round strings in SQL, or quotes round numbers. Strings take 'single quotes'; numbers take none.
    • Leaving out the ON condition after INNER JOIN. Without it the two tables are not linked.
    • Putting an ordinary field next to COUNT or SUM in a SELECT without a GROUP BY.
    • UPDATE or DELETE without a WHERE. It changes or removes every row in the table.
  • 9

    Algorithm Design and Problem-solving · ⁨Thiết kế thuật toán và giải quyết vấn đề⁩

    Watch lesson · ⁨Xem bài học⁩
    9.1

    Computational thinking · ⁨Tư duy tính toán⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show an understanding of abstraction Need for and benefits of using abstraction Describe the purpose of abstraction Produce an abstract model of a system by only including essential details
    Describe and use decomposition Break down problems into sub-problems leading to the concept of a program module (procedure / function)
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về trừu tượng hóa Nhu cầu và lợi ích của việc sử dụng trừu tượng hóa Mô tả mục đích của trừu tượng hóa Xây dựng một mô hình trừu tượng của hệ thống chỉ bằng cách bao gồm các chi tiết thiết yếu
    Mô tả và sử dụng phân rã Chia nhỏ các vấn đề thành các vấn đề con dẫn đến khái niệm về một mô-đun chương trình (hàm / thủ tục)

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Computational thinking 计算思维 is the set of mental tools for analysing a problem and designing a solution a computer can run. Two key ones are abstraction and decomposition.

    Abstraction

    Abstraction 抽象 means keeping the essential features of a problem and ignoring the irrelevant detail, giving a simpler model.

    Examples:

    • a train-network map keeps the stations and lines but drops the geography.
    • a class in object-oriented programming keeps only the attributes and methods the system needs.
    • a function hides a piece of work behind a name.

    A full model of any real problem would be too big to reason about, so abstraction is essential.

    The examiner asks for the purpose of abstraction and for its benefits. Purpose: to produce a simpler model of a problem that contains only the details needed to solve it. Benefits: the problem is easier to understand and to program; the program is smaller and faster to write and test; the same model can be reused for similar problems. When you are asked to produce an abstract model of a system, list only the data and actions the task needs. For a school timetable that means the classes, rooms, teachers and periods; it does not mean the colour of the rooms or the age of the teachers.

    Decomposition

    Decomposition 分解 means breaking a large problem into smaller sub-problems, each easier to solve and tackled one at a time.

    1. find the main parts of the task.
    2. break each into smaller sub-tasks.
    3. continue until each is small enough to design directly.
    4. solve the small tasks and combine them.

    For stock control: "manage stock" → "record sales", "record deliveries", "produce reports" → ("record sales") "look up product", "decrease stock count", "save the transaction". Decomposition makes big problems manageable, lets a team divide the work, and gives modular code — each module becomes a procedure 过程 or function.

    "Explain why decomposition is used" is a three-mark question with a fixed shape. Give three separate benefits: each sub-problem 子问题 is small enough to design, code and test on its own; different programmers can work on different modules 模块 at the same time; a module that already exists (or a library routine) can be reused, and a fault is easier to find because it lies inside one module. A structure chart (topic 12) is the diagram of a decomposition: the program at the top, its modules beneath, and the data passed between them.

    Tiếng Việt

    Tư duy tính toán là tập hợp các công cụ tư duy để phân tích một vấn đề và thiết kế một giải pháp mà máy tính có thể thực thi. Hai yếu tố cốt lõi là trừu tượng hóa và phân rã.

    Một phần puzzle chưa hoàn chỉnh
    Tư duy tính toán chia nhỏ một vấn đề lớn thành các phần nhỏ hơn, dễ giải quyết hơn — giống như việc giải một bài puzzle

    Trừu tượng hóa

    Trừu tượng hóa có nghĩa là giữ lại các đặc điểm thiết yếu của một vấn đề và bỏ qua các chi tiết không liên quan, tạo ra một mô hình đơn giản hơn.

    Ví dụ:

    • bản đồ mạng lưới tàu hỏa giữ lại các ga và tuyến đường nhưng bỏ qua địa lý.
    • một class trong lập trình hướng đối tượng chỉ giữ lại các thuộc tính và phương thức mà hệ thống cần.
    • một hàm ẩn đi một phần công việc dưới một cái tên.

    Một mô hình đầy đủ của bất kỳ vấn đề thực tế nào sẽ quá lớn để suy luận, nên trừu tượng hóa là cần thiết.

    Người ra đề yêu cầu giải thích mục đích của sự trừu tượng và các lợi ích của nó. Mục đích: tạo ra một mô hình đơn giản hơn cho vấn đề, chỉ chứa những chi tiết cần thiết để giải quyết nó. Lợi ích: vấn đề dễ hiểu và dễ lập trình hơn; chương trình nhỏ gọn hơn, nhanh chóng viết và kiểm thử hơn; cùng một mô hình có thể tái sử dụng cho các vấn đề tương tự. Khi được yêu cầu tạo mô hình trừu tượng cho một hệ thống, chỉ liệt kê dữ liệu và hành động mà tác vụ cần. Ví dụ với bảng thời khóa biểu trường học, điều đó có nghĩa là các lớp học, phòng học, giáo viên và tiết học; không phải màu sắc phòng học hay độ tuổi của giáo viên.

    Trừu tượng biến bản đồ địa lý thực tế lộn xộn (một tuyến đường ngoằn ngoèo với các tòa nhà rải rác) thành một bản đồ tàu điện ngầm sạch sẽ — các vòng tròn ga đều đặn trên một đường thẳng, giữ lại các ga và tuyến, nhưng loại bỏ địa lý thực tế
    Trừu tượng giữ lại những yếu tố cốt lõi (các ga và tuyến) và loại bỏ chi tiết không liên quan (bản đồ địa lý)

    Phân rã (Decomposition)

    Phân rã có nghĩa là chia một vấn đề lớn thành các vấn đề con nhỏ hơn, mỗi vấn đề con dễ giải quyết hơn và được giải quyết từng bước một.

    1. xác định các phần chính của tác vụ.
    2. chia mỗi phần thành các tác vụ con nhỏ hơn.
    3. tiếp tục cho đến khi mỗi phần đủ nhỏ để thiết kế trực tiếp.
    4. giải quyết các tác vụ nhỏ và kết hợp chúng lại.

    Đối với quản lý tồn kho: "quản lý tồn kho" → "ghi nhận bán hàng", "ghi nhận giao hàng", "tạo báo cáo" → ("ghi nhận bán hàng") "tra cứu sản phẩm", "giảm số lượng tồn kho", "lưu giao dịch". Phân rã giúp các vấn đề lớn trở nên khả thi, cho phép nhóm chia sẻ công việc và tạo ra mã code theo mô-đun — mỗi mô-đun trở thành một thủ tục hoặc hàm.

    Câu hỏi "Giải thích tại sao phân rã được sử dụng" là câu hỏi 3 điểm với cấu trúc cố định. Hãy đưa ra ba lợi ích riêng biệt: mỗi vấn đề con đủ nhỏ để thiết kế, viết code và kiểm thử độc lập; các lập trình viên khác nhau có thể làm việc trên các mô-đun khác nhau cùng lúc; một mô-đun đã tồn tại (hoặc thủ tục thư viện) có thể tái sử dụng, và lỗi dễ tìm thấy hơn vì nó nằm bên trong một mô-đun cụ thể. Biểu đồ cấu trúc (chủ đề 12) là sơ đồ của sự phân rã: chương trình ở trên cùng, các mô-đun của nó bên dưới, và dữ liệu truyền giữa chúng.

    Một cây với "Manage stock" ở phía trên nhánh ra các module "Record sales", "Record deliveries" và "Produce reports", và "Record sales" tách ra các tác vụ con "Look up product", "Decrease stock count" và "Save the transaction"
    Phân rã một chương trình thành các module và sub-modules
    Explore · ⁨Khám phá⁩

    Solving a problem the computational way · ⁨Giải quyết một vấn đề theo cách tính toán⁩

    Step through the four cornerstones in the order you'd use them — break the problem down, spot what repeats, strip it to essentials, then write the steps. · ⁨Tiến hành qua bốn trụ cột theo thứ tự bạn sẽ sử dụng chúng — phân rã vấn đề, nhận diện sự lặp lại, loại bỏ chi tiết không cần thiết, sau đó viết các bước.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ tư duy tính toán
    abstraction/əbˈstrækʃn/ trừu tượng hóa
    decomposition/ˌdiːkɒmpəˈzɪʃn/ decomposition
    sub-problem/sʌb ˈprɒbləm/ vấn đề con
    procedure/prəˈsiːdʒə/ thủ tục
    modules/ˈmɒdjuːlz/ module
    algorithm/ˈælɡərɪθəm/ thuật toán
    sequence/ˈsiːkwəns/ dãy (sequence)
    unambiguous/ʌnæmˈbɪɡjuːəs/ không mơ hồ
    deterministic/dɪˌtɜːmɪˈnɪstɪk/ quy định trước
    9.2

    Algorithms · ⁨Thuật toán⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding that an algorithm is a solution to a problem expressed as a sequence of defined steps
    Use suitable identifier names for the representation of data used by a problem and represent these using an identifier table
    Write pseudocode that contains input, process and output
    Write pseudocode using the three basic constructs of sequence, selection and iteration (repetition)
    Document a simple algorithm using a structured English description, a flowchart or pseudocode
    Write pseudocode from: • a structured English description • a flowchart
    Draw a flowchart from: • a structured English description • pseudocode
    Describe and use the process of stepwise refinement to express an algorithm to a level of detail from which the task may be programmed
    Use logic statements to define parts of an algorithm solution
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết rằng một thuật toán là lời giải cho một vấn đề được biểu diễn dưới dạng một chuỗi các bước xác định
    Sử dụng tên định danh phù hợp để biểu diễn dữ liệu được sử dụng bởi một vấn đề và biểu diễn chúng bằng một bảng định danh
    Viết giả mã chứa đầu vào, xử lý và đầu ra
    Viết giả mã sử dụng ba kiến trúc cơ bản của trình tự, lựa chọn và lặp lại (vùng lặp)
    Tài liệu hóa một thuật toán đơn giản bằng mô tả tiếng Anh có cấu trúc, sơ đồ khối hoặc giả mã
    Viết giả mã từ: • mô tả tiếng Anh có cấu trúc • sơ đồ khối
    Vẽ sơ đồ khối từ: • mô tả tiếng Anh có cấu trúc • giả mã
    Mô tả và sử dụng quá trình tinh chỉnh từng bước để biểu diễn một thuật toán ở mức độ chi tiết mà từ đó có thể lập trình được nhiệm vụ
    Sử dụng các mệnh đề logic để xác định các phần của lời giải thuật toán

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English
    Bubble sort, pass by pass

    An algorithm 算法 is a solution expressed as a sequence of defined steps. Each step is unambiguous 无歧义 (one meaning), deterministic 确定性 (same input → same output), finite (the steps end), and effective (each can be done). An algorithm says what to do, independent of the programming language used to implement it.

    Tiếng Việt
    Thuật toán sắp xếp nổi bọt, qua từng lượt

    Một thuật toán là một phương pháp giải quyết được diễn đạt dưới dạng chuỗi các bước xác định. Mỗi bước không mơ hồ (có một ý nghĩa), xác định (cùng đầu vào → cùng đầu ra), hữu hạn (các bước kết thúc), và hiệu quả (mỗi bước đều có thể thực hiện). Một thuật toán nói cần làm gì, độc lập với ngôn ngữ lập trình được dùng để triển khai nó.

    Explore · ⁨Khám phá⁩

    Selection: follow the IF / ELSE branches · ⁨Lựa chọn: đi theo các nhánh IF / ELSE⁩

    Drag the score and watch which branch runs. Selection tests each condition in turn and takes the FIRST one that is true — that is how IF … ELSE IF … ELSE works. · ⁨Kéo điểm số và xem nhánh nào được thực thi. Sự lựa chọn kiểm tra từng điều kiện một và chọn NHÁNH ĐẦU TIÊN đúng — đó là cách hoạt động của IF … ELSE IF … ELSE.⁩

    Watch lesson · ⁨Xem bài học⁩
    9.2

    Identifier table · ⁨Bảng ký hiệu⁩

    English

    When you start an algorithm, list every piece of data in an identifier table 标识符表 — its identifier 标识符 (the variable 变量 name), data type 数据类型, and description. The exam's table has exactly these three columns:

    Identifier Data type Description
    Category STRING the product category
    SaleDate DATE when the item was sold
    ItemCost REAL cost of the item
    InStock BOOLEAN TRUE if in stock
    Sales ARRAY[1:30] OF REAL the last 30 daily sales totals

    Use descriptive names (ItemCost, not x): an identifier starts with a letter, contains no spaces, and is written the same way every time it appears. Common types are INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, plus arrays. The table forces you to name every piece of data before writing code, and a "complete the identifier table" question gives one mark for each correct data type or description, so write the type exactly as the pseudocode guide does.

    Tiếng Việt

    Khi bắt đầu một thuật toán, hãy liệt kê mọi piece dữ liệu vào một bảng ký hiệu — bao gồm ký hiệu (tên biến), kiểu dữ liệu, và mô tả. Bảng kiểm tra sẽ có đúng ba cột này:

    Ký hiệu Kiểu dữ liệu Mô tả
    Category STRING danh mục sản phẩm
    SaleDate DATE thời điểm mặt hàng được bán
    ItemCost REAL giá thành của mặt hàng
    InStock BOOLEAN TRUE nếu còn trong kho
    Sales ARRAY[1:30] OF REAL tổng doanh số hàng ngày trong 30 lần gần nhất

    Sử dụng tên mô tả (ItemCost, không phải x): một ký hiệu bắt đầu bằng chữ cái, không chứa khoảng trắng, và được viết giống hệt nhau mỗi lần xuất hiện. Các kiểu phổ biến là INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, cộng thêm mảng. Bảng buộc bạn phải đặt tên cho mọi piece dữ liệu trước khi viết code, và câu hỏi "hoàn thành bảng ký hiệu" sẽ cho 1 điểm cho mỗi kiểu dữ liệu hoặc mô tả đúng, vì vậy hãy viết kiểu chính xác như hướng dẫn pseudocode yêu cầu.

    Bảng định danh liệt kê từng biến với tên, kiểu dữ liệu và mô tả, ví dụ ItemCost là REAL cho chi phí của mặt hàng
    Bảng ký danh đặt tên cho mọi mảnh dữ liệu trước khi bạn viết code
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    identifier table/aɪˈdentɪfaɪə ˈteɪbl/ bảng định danh
    identifier/aɪˈdentɪfaɪə/ định danh
    Boolean/ˈbuːlɪən/ Boolean
    pseudocode/ˈsuːdəʊkəʊd/ pseudocode (giả mã)
    9.2

    Pseudocode — the three basic constructs · ⁨Pseudocode — Ba kiến trúc cơ bản⁩

    English

    Pseudocode 伪代码 is a structured, language-neutral way to describe algorithms.

    1. Sequence

    Steps run one after another (sequence 顺序):

    2. Selection

    A choice of which steps run, based on a condition (selection 选择):

    For more options, use CASE OF ... ENDCASE.

    3. Iteration

    Repeating a block (iteration 迭代, a loop 循环):

    A WHILE loop tests the condition before each pass (may run zero times); a REPEAT...UNTIL loop tests after each pass (always runs at least once).

    Choosing the loop is itself a mark: FOR when you know how many times (a count-controlled loop 计数循环); WHILE when the loop might not run at all (a pre-condition loop 前测循环); REPEAT ... UNTIL when it must run at least once, as in validating an input (a post-condition loop 后测循环). A "describe the iteration construct" answer names the construct, says where the condition is tested, and gives the consequence (zero times or at least once).

    Common operations

    • assignment 赋值: x ← 5 (an arrow; = is for comparison).
    • input/output: INPUT variable, OUTPUT expression.
    • comparisons =, <>, <, >, <=, >=; logic AND, OR, NOT.
    • arithmetic + - * /, plus DIV (integer division) and MOD (remainder).
    • strings: LENGTH, LEFT, RIGHT, MID, and & for concatenation 拼接 (joining).

    The pseudocode the exam expects

    Every pseudocode answer is marked against Cambridge's published pseudocode guide. Write these forms exactly:

    Construct Pseudocode
    Variable DECLARE Total : INTEGER
    Array DECLARE Marks : ARRAY[1:30] OF REAL
    Constant CONSTANT MaxTries = 3
    Assignment Total ← Total + Value
    Input / output INPUT Name
    OUTPUT "Hello ", Name
    Selection CASE OF Choice
    1 : OUTPUT "Add"
    OTHERWISE OUTPUT "Error"
    ENDCASE
    FOR loop FOR i ← 1 TO 10 STEP 2 ... NEXT i
    WHILE loop WHILE Total < 100 DO ... ENDWHILE
    REPEAT loop REPEAT ... UNTIL Mark >= 0
    Integer arithmetic 17 DIV 5 = 3
    17 MOD 5 = 2
    Strings LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
    MID(S, 2, 4), UCASE(S), LCASE(S)
    Conversions INT(3.7) = 3, NUM_TO_STR(12)
    STR_TO_NUM("4.5"), ASC('A') = 65, CHR(66) = 'B'
    Random RAND(100)
    INT(RAND(100)) + 1

    RAND(100) gives a real number from 0 up to (but not including) 100. INT(RAND(100)) + 1 gives an integer from 1 to 100.

    Two habits earn marks on every question: declare every variable you use, with the type from your identifier table, and initialise 初始化 every counter 计数器 and total (Count ← 0, Total ← 0) before the loop that changes it.

    Input → Process → Output

    Every program follows this shape:

    Listing the inputs and outputs first makes the algorithm cleaner.

    Worked example. Write pseudocode that inputs 100 integers and outputs how many of them, and the total of those, that lie between 10 and 20 inclusive.

    Identifier table: Count : INTEGER (loop counter), Value : INTEGER (the integer just input), InRange : INTEGER (how many were in range), Total : INTEGER (their sum).

    If the question then asks you to "identify two constructs and state how each is used", answer in the same shape: iteration, the FOR loop, repeats the input 100 times; selection, the IF statement, adds a value only when it is in range.

    Worked example. A program picks a secret integer from 1 to 100. The user guesses until they are right; after each wrong guess the program says "Too low" or "Too high", and at the end it outputs how many guesses were made.

    Identifier table: Secret : INTEGER (the number to guess), Guess : INTEGER (the user's input), Tries : INTEGER (how many guesses so far).

    A REPEAT ... UNTIL loop is the right choice because the user must guess at least once. The marks are for: the random number in the right range, a loop that ends on a correct guess, the counter that starts at zero and increases inside the loop, the two messages under the right conditions, and the final output.

    Worked example. Output two different random integers, each between $-10$ and $10$ inclusive.

    There are 21 possible values, so INT(RAND(21)) gives 0 to 20 and subtracting 10 shifts it to the range $-10$ to $10$. The second number must be generated again until it differs from the first:

    Tiếng Việt

    Pseudocode là cách mô tả thuật toán mang tính cấu trúc, trung lập với ngôn ngữ.

    Ba cấu trúc cơ bản dưới dạng sơ đồ luồng nhỏ: trình tự chạy bước A rồi B rồi C; lựa chọn kiểm tra điều kiện và thực hiện X hoặc Y; lặp lại thực thi thân vòng lặp khi điều kiện còn đúng, quay trở lại
    Ba khối xây dựng cơ bản của bất kỳ thuật toán nào: tuần tự, chọn lọc và lặp

    1. Tuần tự

    Các bước chạy lần lượt theo thứ tự (tuần tự):

    INPUT Name
    INPUT Age
    OUTPUT "Hello", Name
    

    2. Chọn lọc

    Lựa chọn các bước nào sẽ chạy, dựa trên một điều kiện (chọn lọc):

    IF Age >= 18 THEN
        OUTPUT "Adult"
    ELSE
        OUTPUT "Minor"
    ENDIF
    

    Để có nhiều tùy chọn hơn, hãy dùng CASE OF ... ENDCASE.

    3. Lặp

    Lặp lại một khối lệnh (lặp, một vòng lặp):

    FOR i ← 1 TO 10
        OUTPUT i
    NEXT i
    

    Vòng lặp WHILE kiểm tra điều kiện trước mỗi lượt chạy (có thể chạy 0 lần); vòng lặp REPEAT...UNTIL kiểm tra sau mỗi lượt chạy (luôn chạy ít nhất một lần).

    WHILE Total < 100 DO
        INPUT Value
        Total ← Total + Value
    ENDWHILE
    
    REPEAT
        INPUT Mark
    UNTIL Mark >= 0 AND Mark <= 100
    
    Hai sơ đồ luồng đặt cạnh nhau. WHILE kiểm tra điều kiện trước, nên thân có thể không bao giờ chạy: hình thoi nằm trên thân và nhánh Không thoát khỏi vòng lặp. REPEAT UNTIL thực thi thân trước và kiểm tra sau đó, nên thân luôn chạy ít nhất một lần: thân nằm trên hình thoi và nhánh Không quay trở về thân
    Vòng lặp WHILE kiểm tra trước khi thân lệnh chạy; vòng lặp REPEAT ... UNTIL kiểm tra sau khi thân lệnh chạy, nên thân lệnh luôn chạy ít nhất một lần

    Việc chọn loại vòng lặp chính là điểm số: FOR khi bạn biết số lần lặp (một vòng lặp kiểm soát đếm; WHILE khi vòng lặp có thể không chạy chút nào (một vòng lặp tiền điều kiện); REPEAT ... UNTIL khi nó phải chạy ít nhất một lần, như trong việc xác thực đầu vào (một vòng lặp hậu điều kiện). Câu trả lời "mô tả cấu trúc lặp" cần nêu tên cấu trúc, chỉ ra nơi điều kiện được kiểm tra, và đưa ra hệ quả (không chạy lần nào hoặc chạy ít nhất một lần).

    Các phép toán thường gặp

    • gán: x ← 5 (một mũi tên; = dùng để so sánh).
    • nhập/xuất: INPUT variable, OUTPUT expression.
    • so sánh =, <>, <, >, <=, >=; logic AND, OR, NOT.
    • phép toán số học + - * /, cộng DIV (phép chia lấy phần nguyên) và MOD (phần dư).
    • chuỗi: LENGTH, LEFT, RIGHT, MID, và & để nối (ghép nối).

    Mã giả mà đề thi yêu cầu

    Mọi câu trả lời伪代码都会被剑桥出版的伪代码指南评分。请严格写出以下格式:

    结构 伪代码
    变量 DECLARE Total : INTEGER
    数组 DECLARE Marks : ARRAY[1:30] OF REAL
    常量 CONSTANT MaxTries = 3
    赋值 Total ← Total + Value
    输入 / 输出 INPUT Name
    OUTPUT "Hello ", Name
    选择 CASE OF Choice
    1 : OUTPUT "Add"
    OTHERWISE OUTPUT "Error"
    ENDCASE
    FOR 循环 FOR i ← 1 TO 10 STEP 2 ... NEXT i
    Vòng lặp WHILE WHILE Total < 100 DO ... ENDWHILE
    REPEAT 循环 REPEAT ... UNTIL Mark >= 0
    整数运算 17 DIV 5 = 3
    17 MOD 5 = 2
    Chuỗi ký tự LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
    MID(S, 2, 4), UCASE(S), LCASE(S)
    Chuyển đổi INT(3.7) = 3, NUM_TO_STR(12)
    STR_TO_NUM("4.5"), ASC('A') = 65, CHR(66) = 'B'
    随机数 RAND(100)
    INT(RAND(100)) + 1

    RAND(100) trả về một số thực từ 0 đến (nhưng không bao gồm) 100. INT(RAND(100)) + 1 trả về một số nguyên từ 1 đến 100.

    两种习惯会在每道题中获得分数:声明你使用的每一个变量,并附带标识符表中的类型;在改变该变量的循环之前初始化每一个计数器和总和(Count ← 0, Total ← 0)。

    输入 → 处理 → 输出

    每个程序都遵循这种结构:

    INPUT Length
    INPUT Width
    Area ← Length * Width
    OUTPUT "Area = ", Area
    

    首先列出输入和输出会使算法更清晰。

    Ví dụ giải. Viết mã giả nhập 100 số nguyên và xuất ra số lượng cũng như tổng của những số nằm giữa 10 và 20 bao gồm cả hai giá trị biên.

    标识符表:Count : INTEGER(循环计数器),Value : INTEGER(刚输入的整数),InRange : INTEGER(在范围内的数量),Total : INTEGER(它们的总和)。

    DECLARE Count, Value, InRange, Total : INTEGER
    InRange ← 0
    Total ← 0
    FOR Count ← 1 TO 100
        INPUT Value
        IF Value >= 10 AND Value <= 20 THEN
            InRange ← InRange + 1
            Total ← Total + Value
        ENDIF
    NEXT Count
    OUTPUT InRange, Total
    

    Nếu câu hỏi sau đó yêu cầu bạn "xác định hai cấu trúc và phát biểu cách mỗi cấu trúc được sử dụng", hãy trả lời theo cùng định dạng: lặp lại, vòng lặp FOR, lặp lại việc nhập liệu 100 lần; lựa chọn, câu lệnh IF, cộng giá trị chỉ khi nó nằm trong phạm vi.

    例题。 一个程序从1到100中随机选取一个秘密整数。用户猜测直到猜对为止;每次猜错后,程序显示“太低”或“太高”,最后它输出总共猜了多少次。

    标识符表:Secret : INTEGER(要猜的数),Guess : INTEGER(用户的输入),Tries : INTEGER(到目前为止猜的次数)。

    DECLARE Secret, Guess, Tries : INTEGER
    Secret ← INT(RAND(100)) + 1
    Tries ← 0
    REPEAT
        INPUT Guess
        Tries ← Tries + 1
        IF Guess < Secret THEN
            OUTPUT "Too low"
        ELSE
            IF Guess > Secret THEN
                OUTPUT "Too high"
            ENDIF
        ENDIF
    UNTIL Guess = Secret
    OUTPUT "You took ", Tries, " guesses"
    

    使用REPEAT ... UNTIL循环是正确选择,因为用户至少需要猜一次。得分点包括:正确范围内的随机数、以猜对为结束条件的循环、从0开始并在循环内递增的计数器、在正确条件下显示的两条消息,以及最终输出。

    猜数游戏流程图:开始,然后设置Secret为1到100之间的随机整数,Tries设为0,接着输入猜测,Tries加1,测试猜测是否等于Secret(Yes导致输出Tries并停止),否则测试猜测是否较小(Yes输出Too low,No输出Too high),两个输出分支都返回到输入
    与流程图相同的猜数游戏:两个菱形决策框是两个IF语句,返回箭头是REPEAT ... UNTIL循环

    例题。 输出两个不同的随机整数,每个都在$-10$到$10$之间(包含两端)。

    共有21种可能值,因此INT(RAND(21))给出0到20,减去10将其平移到$-10$到$10$范围。第二个数必须重新生成,直到它与第一个不同:

    DECLARE First, Second : INTEGER
    First ← INT(RAND(21)) - 10
    REPEAT
        Second ← INT(RAND(21)) - 10
    UNTIL Second <> First
    OUTPUT First, Second
    
    每个程序遵循输入、处理、输出的结构,用面积计算示例展示:输入长和宽,通过相乘进行处理,输出面积
    每个程序都遵循输入、处理、输出的结构
    Explore · ⁨Khám phá⁩

    IF … ELSE selection · ⁨IF … ELSE chọn lọc⁩

    Change the value and watch which branch runs — how a program makes a decision. · ⁨Thay đổi giá trị và quan sát nhánh nào chạy — cách chương trình đưa ra quyết định.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    variable/ˈveərɪəbl/ biến
    data type/ˈdeɪtə taɪp/ kiểu dữ liệu
    flowchart/ˈfləʊtʃɑːt/ sơ đồ khối
    selection/sɪˈlekʃn/ chọn lọc
    iteration/ˌɪtəˈreɪʃn/ lặp lại
    loop/luːp/ vòng lặp
    count-controlled loop/kaʊnt kənˈtrəʊld luːp/ vòng lặp điều khiển bằng đếm
    pre-condition loop/priː kənˈdɪʃn luːp/ vòng lặp tiền điều kiện
    post-condition loop/pəʊst kənˈdɪʃn luːp/ vòng lặp hậu điều kiện
    assignment/əˈsaɪnmənt/ gán (assignment)
    concatenation/kənˌkætəˈneɪʃn/ nối chuỗi (concatenation)
    initialise/ɪˈnɪʃəlaɪz/ khởi tạo
    counter/ˈkaʊntə/ chống ví dụ
    structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ tiếng Anh có cấu trúc
    stepwise refinement/ˈstepwaɪz rɪˈfaɪnmənt/ tinh chỉnh từng bước
    logic statement/ˈlɒdʒɪk ˈsteɪtmənt/ phát biểu logic
    precedence/ˈpresɪdəns/ độ ưu tiên
    De Morgan's law/də ˈmɔːɡənz lɔː/ định luật De Morgan
    9.2

    Three notations · ⁨三种表示法⁩

    English

    The same algorithm can be written three ways.

    • structured English 结构化英语 — natural language with indentation and fixed keywords; good for a high-level description.
    • flowchart 流程图 — a diagram with standard shapes:
    Shape Meaning
    Rounded rectangle Start / Stop
    Parallelogram Input / Output
    Rectangle Process
    Diamond Decision
    Arrow Flow of control
    • pseudocode — the keyword notation above; closest to code.

    You should be able to convert between any pair: each IF is a decision diamond, each loop is a back-arrow, and a sequence is stacked rectangles.

    IF ... THEN ... ELSE ... ENDIF

    Tiếng Việt

    同一个算法可以用三种方式编写。

    • 结构化英语 — 带有缩进和固定关键字的自然语言;适合高层次描述。
    • 流程图 — 带有标准形状的图表:
    形状 含义
    圆角矩形 开始 / 结束
    平行四边形 输入 / 输出
    矩形 处理
    菱形 决策
    箭头 控制流
    • 伪代码 — 上述的关键字表示法;最接近实际代码。

    你应该能够在任意两者之间进行转换:每个IF是一个菱形决策框,每个循环是一个回指箭头,序列是堆叠的矩形。

    IF ... THEN ... ELSE ... ENDIF

    求平均数的流程图:圆角的开始和结束终止符,输入/输出平行四边形,处理矩形,以及一个“count < n?”的菱形决策框,其Yes分支循环回去读取下一个值 *使用标准形状对一列数字求平均值的流程图

    9.2

    Stepwise refinement · ⁨逐步细化⁩

    English

    Stepwise refinement 逐步求精 starts with a high-level outline and expands each step until it is small enough to code. For an average of $n$ numbers:

    Level 1:

    Level 2:

    Each refinement keeps the previous structure and adds detail.

    A six-mark "apply stepwise refinement" question gives you a high-level outline and wants each step expanded into the concrete statements a programmer could code. Keep the steps in the same order, name the data each step reads or produces, and stop when every line is a single input, assignment, output, loop or condition. For example, "validate the password" becomes: input the password; check its length is at least 8; check it contains at least one digit; output "accepted" if both checks pass, otherwise output "rejected".

    Tiếng Việt

    逐步细化从一个高层次大纲开始,并展开每一步直到它足够小以便编码。对于$n$个数的平均值:

    第1层:

    Read in the numbers
    Compute the average
    Output the average
    

    第2层:

    INPUT n
    total ← 0
    FOR i ← 1 TO n
        INPUT value
        total ← total + value
    NEXT i
    average ← total / n
    OUTPUT average
    

    每次细化都保留之前的结构并增加细节。

    一道六分的“应用逐步细化”题目会给你一个高层大纲,并希望你将每一步展开为程序员可以编码的具体语句。保持步骤顺序不变,命名每个步骤读取或产生的数据,直到每一行都是单个输入、赋值、输出、循环或条件。例如,“验证密码”变为:输入密码;检查其长度至少为8;检查它至少包含一个数字;如果两个检查都通过则输出“接受”,否则输出“拒绝”。

    逐步细化:第1层大纲(读取数字,计算平均值,输出平均值)被展开为包含输入循环和除法的第2层详细伪代码
    Tinh chỉnh từng bước: mở rộng mỗi bước cấp cao thành giả mã chi tiết
    Explore · ⁨Khám phá⁩

    Stepwise refinement: outline to code · ⁨Sự tinh luyện từng bước: dàn ý sang mã⁩

    Step down the levels. You start with the whole task in one line and keep expanding each step into smaller ones — until every step is simple enough to code directly. · ⁨Đi xuống các cấp độ. Bạn bắt đầu với toàn bộ nhiệm vụ trong một dòng và tiếp tục mở rộng từng bước thành những bước nhỏ hơn — cho đến khi mỗi bước đơn giản enough để mã hóa trực tiếp.⁩

    9.2

    Logic statements · ⁨Câu lệnh logic⁩

    English

    A logic statement 逻辑语句 is a Boolean 布尔 condition that controls branching, built from comparisons (x > 10), connectives (AND, OR, NOT) and brackets. Use it as the condition of IF, WHILE or REPEAT...UNTIL:

    Precedence 优先级 (highest to lowest): NOT, then AND, then OR. Use brackets when unsure. Common mistakes:

    • a = 1 OR 2 is wrong — write a = 1 OR a = 2.
    • NOT a > 5 means NOT (a > 5), i.e. a <= 5.
    • NOT (A AND B) is the same as (NOT A) OR (NOT B) (De Morgan's law 德摩根定律) — handy for simplifying conditions.

    Turning a sentence into a logic statement is a skill the papers test directly. "A ticket is free for anyone under 5 or over 65" becomes Age < 5 OR Age > 65. "A mark is valid if it is a whole number from 0 to 100" becomes Mark >= 0 AND Mark <= 100. "The loop stops when the file is finished or ten records have been read" becomes UNTIL EOF(File) OR Count = 10. Write each comparison in full: Age > 65 and Age < 5, never Age > 65 OR < 5.

    Worked example. Write an identifier table and pseudocode to read 10 numbers and output the largest. The identifier table names each variable with its data type and purpose: Count : INTEGER (loop counter), Num : REAL (the number just read), Max : REAL (largest so far).

    The design decision carrying the marks is initialising Max: it must start lower than any possible input - or, safer still, be set to the first number read. Initialise it to 0 and the algorithm wrongly returns 0 for a list of negative numbers, a bug your trace only exposes if the test data include a negative.

    Tiếng Việt

    Một câu lệnh logic là một điều kiện Boolean điều khiển nhánh, được xây dựng từ phép so sánh (x > 10), toán tử kết hợp (AND, OR, NOT) và ngoặc. Sử dụng nó như điều kiện của IF, WHILE hoặc REPEAT...UNTIL:

    WHILE attempts < 3 AND NOT loggedIn DO
        INPUT password
        IF password = correctPassword THEN
            loggedIn ← TRUE
        ELSE
            attempts ← attempts + 1
        ENDIF
    ENDWHILE
    

    Độ ưu tiên (cao nhất đến thấp nhất): NOT, sau đó AND, rồi OR. Sử dụng ngoặc khi không chắc chắn. Lỗi thường gặp:

    • a = 1 OR 2 là sai — hãy viết a = 1 OR a = 2.
    • NOT a > 5 có nghĩa là NOT (a > 5), tức là a <= 5.
    • NOT (A AND B) giống hệt với (NOT A) OR (NOT B) (Định luật De Morgan) — hữu ích để rút gọn điều kiện.

    Biến câu văn thành câu lệnh logic là kỹ năng mà đề thi kiểm tra trực tiếp. "Vé miễn phí cho bất kỳ ai dưới 5 tuổi hoặc trên 65 tuổi" trở thành Age < 5 OR Age > 65. "Điểm số hợp lệ nếu nó là số nguyên từ 0 đến 100" trở thành Mark >= 0 AND Mark <= 100. "Vòng lặp dừng lại khi file đã đọc xong hoặc đã đọc mười bản ghi" trở thành UNTIL EOF(File) OR Count = 10. Viết đầy đủ mỗi phép so sánh: Age > 65 và Age < 5, tuyệt đối không viết Age > 65 OR < 5.

    Cây phân tích cho "attempts < 3 AND NOT loggedIn": NOT áp dụng vào loggedIn trước, sau đó AND gộp nó với attempts < 3
    Độ ưu tiên: NOT gắn vào loggedIn trước, sau đó AND kết hợp hai vế

    Ví dụ minh họa. Viết bảng định danh và giả mã để đọc 10 số và xuất ra số lớn nhất. Bảng định danh đặt tên cho từng biến kèm kiểu dữ liệu và mục đích: Count : INTEGER (bộ đếm vòng lặp), Num : REAL (số vừa được đọc), Max : REAL (số lớn nhất tính đến thời điểm đó).

    Max ← -999999
    FOR Count ← 1 TO 10
        INPUT Num
        IF Num > Max THEN
            Max ← Num
        ENDIF
    NEXT Count
    OUTPUT Max
    

    Quyết định thiết kế mang điểm số chính là khởi tạo Max: nó phải bắt đầu thấp hơn bất kỳ giá trị đầu vào nào có thể xảy ra - hoặc an toàn hơn, hãy gán cho nó số đầu tiên được đọc. Khởi tạo nó là 0 thì thuật toán sẽ trả về sai là 0 cho danh sách các số âm, một lỗi chỉ bị phát hiện qua việc theo dõi thuật toán nếu dữ liệu thử nghiệm bao gồm số âm.

    9.2

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    abstraction keeping the essential details of a problem and leaving out the details that are not needed
    decomposition breaking a problem down into smaller sub-problems, each of which can be solved separately
    algorithm a solution to a problem expressed as a sequence of defined steps
    identifier table a table listing each identifier used in an algorithm with its data type and a description of its purpose
    pseudocode a structured, language-independent way of writing the steps of an algorithm
    flowchart a diagram that shows the steps and decisions of an algorithm using standard symbols joined by arrows
    sequence statements executed one after another in the order written
    selection choosing which statements to execute according to a condition
    iteration repeating a group of statements while, or until, a condition holds
    stepwise refinement breaking each step of an outline into smaller steps, repeatedly, until each step can be coded directly
    logic statement a condition built from comparisons and the operators AND, OR and NOT that evaluates to TRUE or FALSE
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    trừu tượng hóa giữ lại các chi tiết cốt lõi của bài toán và bỏ qua các chi tiết không cần thiết
    phân tách chia nhỏ bài toán thành các bài toán con nhỏ hơn, mỗi cái có thể giải quyết riêng biệt
    thuật toán lời giải cho một bài toán được biểu diễn dưới dạng chuỗi các bước xác định
    bảng định danh bảng liệt kê từng định danh được sử dụng trong thuật toán kèm kiểu dữ liệu và mô tả mục đích của nó
    giả mã cách viết cấu trúc, độc lập với ngôn ngữ, các bước của thuật toán
    sơ đồ khối biểu đồ hiển thị các bước và quyết định của thuật toán bằng các ký hiệu tiêu chuẩn nối với nhau bằng mũi tên
    tuần tự các câu lệnh được thực thi lần lượt theo thứ tự đã viết
    chọn lọc lựa chọn câu lệnh nào sẽ được thực thi dựa trên một điều kiện
    lặp lại lặp đi lặp lại một nhóm câu lệnh trong khi hoặc cho đến khi một điều kiện còn đúng
    tinh chỉnh từng bước chia nhỏ từng bước của phác thảo thành các bước nhỏ hơn, liên tục cho đến khi mỗi bước có thể viết code trực tiếp
    câu lệnh logic điều kiện được xây dựng từ các phép so sánh và các toán tử AND, OR và NOT, đánh giá ra TRUE hoặc FALSE
    9.2

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Define an algorithm as an unambiguous, finite, deterministic sequence of steps, independent of language.
    • Use the three constructs correctly — sequence, selection, iteration — and keep an identifier table with data types.
    • Break a problem down by decomposition and abstraction, then stepwise refinement.
    • Write pseudocode that would actually run: declare variables and follow the exam's pseudocode style.

    Common mistakes

    • Using = to assign a value. Assignment is ←; = is a comparison.
    • Forgetting ENDIF, ENDWHILE, ENDCASE or NEXT. Every construct closes, and the closing word is where the mark for the construct is checked.
    • Not initialising a total or counter before the loop, so the algorithm adds to a value that never existed.
    • Using a FOR loop when the number of repetitions is unknown. Reading until a sentinel value or a correct guess needs WHILE or REPEAT ... UNTIL.
    • Writing Age > 65 OR < 5. Each side of OR and AND must be a complete comparison.
    • Answering "explain why decomposition is used" with one benefit written three ways. Three marks need three different benefits.
    Tiếng Việt
    • Định nghĩa thuật toán là một chuỗi các bước rõ ràng, hữu hạn, xác định, độc lập với ngôn ngữ.
    • Sử dụng đúng ba cấu trúc — tuần tự, chọn lọc, lặp lại — và giữ bảng định danh có kiểu dữ liệu.
    • Chia nhỏ bài toán bằng phân tách và trừu tượng hóa, sau đó tinh chỉnh từng bước.
    • Viết giả mã có thể chạy được: khai báo biến và tuân theo phong cách giả mã của đề thi.

    Lỗi thường gặp

    • Sử dụng = để gán giá trị. Gán giá trị là ←; = là phép so sánh.
    • Quên ENDIF, ENDWHILE, ENDCASE hoặc NEXT. Mỗi cấu trúc đều phải đóng, và từ đóng ở cuối chính là nơi chấm điểm cho cấu trúc đó được kiểm tra.
    • Không khởi tạo tổng hoặc bộ đếm trước vòng lặp, khiến thuật toán cộng vào một giá trị chưa bao giờ tồn tại.
    • Sử dụng vòng lặp FOR khi số lần lặp chưa biết. Đọc cho đến khi gặp giá trị dấu hiệu hoặc đoán đúng cần WHILE hoặc REPEAT ... UNTIL.
    • Viết Age > 65 OR < 5. Mỗi vế của OR và AND phải là một phép so sánh hoàn chỉnh.
    • Trả lời "giải thích vì sao sử dụng phân tách" bằng cách viết ba lợi ích theo ba cách khác nhau. Ba điểm số cần ba lợi ích khác nhau.
  • 10

    Data Types and Structures · ⁨Kiểu dữ liệu và cấu trúc dữ liệu⁩

    Watch lesson · ⁨Xem bài học⁩
    10.1

    Choosing data types · ⁨Chọn kiểu dữ liệu⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Select and use appropriate data types for a problem solution including integer, real, char, string, Boolean, date (pseudocode will use the following data types: INTEGER, REAL, CHAR, STRING, BOOLEAN, DATE, ARRAY, FILE)
    Show understanding of the purpose of a record structure to hold a set of data of different data types under one identifier Write pseudocode to define a record structure
    Write pseudocode to read data from a record structure and save data to a record structure
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Chọn và sử dụng các loại dữ liệu phù hợp cho lời giải quyết vấn đề bao gồm integer, real, char, string, Boolean, date (pseudocode sẽ sử dụng các loại dữ liệu sau: INTEGER, REAL, CHAR, STRING, BOOLEAN, DATE, ARRAY, FILE)
    Thể hiện sự hiểu biết về mục đích của cấu trúc record để lưu trữ một tập dữ liệu có các loại dữ liệu khác nhau dưới một định danh duy nhất Viết pseudocode để xác định cấu trúc record
    Viết pseudocode để đọc dữ liệu từ cấu trúc record và lưu dữ liệu vào cấu trúc record

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Every variable needs a data type 数据类型 — the kind of value it holds and the operations allowed:

    • INTEGER — a whole number (42, -7). For counts, indexes, IDs.
    • REAL — a number with a fractional part (3.14). For money, measurements.
    • STRING — characters in quotes ("Hello"). For text.
    • CHAR — a single character ('A').
    • BOOLEAN — TRUE or FALSE. For flags.
    • DATE — a calendar date.

    Pick the smallest precise type that fits: INTEGER for whole counts, BOOLEAN for flags (not the strings "yes"/"no").

    The "give the appropriate data type" tables are decided by how the value is used: the average mark of a class is REAL (it has a fractional part); an email address is STRING; the number of students is INTEGER; whether a student has paid is BOOLEAN; a date of birth is DATE; an array index is always INTEGER; a single grade letter is CHAR; a phone number is a STRING, because it starts with 0 and is never used in arithmetic. A BOOLEAN is used for a flag with only two states: whether a search has found its target, whether a member has paid, whether a seat is booked. For the identifier table, the variable name must be meaningful too: NumberOfPeople, not n.

    Tiếng Việt

    Mỗi biến cần một kiểu dữ liệu — loại giá trị nó chứa và các phép toán được phép:

    • INTEGER — số nguyên (42, -7). Dùng cho bộ đếm, chỉ mục, ID.
    • REAL — số có phần thập phân (3.14). Dùng cho tiền tệ, đo lường.
    • STRING — ký tự trong dấu ngoặc kép ("Hello"). Dùng cho văn bản.
    • CHAR — một ký tự đơn lẻ ('A').
    • BOOLEAN — TRUE hoặc FALSE. Dùng cho cờ.
    • DATE — ngày tháng lịch.

    Chọn kiểu dữ liệu nhỏ nhất nhưng đủ chính xác: INTEGER cho các số đếm nguyên, BOOLEAN cho cờ (không phải chuỗi "yes"/"no").

    Các bảng "cho kiểu dữ liệu phù hợp" phụ thuộc vào cách sử dụng giá trị: điểm trung bình lớp học là REAL (có phần thập phân); địa chỉ email là STRING; số lượng sinh viên là INTEGER; sinh viên đã thanh toán hay chưa là BOOLEAN; ngày sinh là DATE; chỉ mục mảng luôn là INTEGER; một chữ cái điểm số đơn lẻ là CHAR; số điện thoại là một STRING, vì nó bắt đầu bằng 0 và không bao giờ dùng trong toán học. Một BOOLEAN được dùng cho cờ có hai trạng thái duy nhất: liệu tìm kiếm đã tìm thấy mục tiêu hay chưa, liệu thành viên đã thanh toán hay chưa, liệu ghế đã được đặt hay chưa. Đối với bảng định danh, tên biến cũng phải có ý nghĩa: NumberOfPeople, không phải n.

    10.1

    Records · ⁨Bản ghi⁩

    English

    A record 记录 (a record structure 记录结构) holds several fields of different types under one name — useful when several values describe one thing.

    This defines the type TStockItem; declare variables of it:

    Use dot notation to reach each field 字段:

    Use a record when values always belong together (a customer, a stock item); use separate variables for unrelated values.

    Worked example. A club stores, for each student, a student ID (a string), a name, a date of birth and up to three club numbers (integers). Write pseudocode to declare the record type, an array to hold $3000$ students, and a statement that stores a name in the first element.

    The marks: TYPE with the identifier and ENDTYPE; each field declared with a suitable type; the array declared with its bounds and OF Student; the field reached with the index and a dot. A "state the error in the record declaration" question usually points at a missing ENDTYPE, a field with no type, or a field declared as a STRING that must hold arithmetic. Two conventions score marks on their own: an unused element is marked with a value that cannot be real data (an empty string, -1, an ID of 0), and it is good practice to use the same marker everywhere so that every module can recognise an unused slot; an unused club field is 0. The benefits of an array of records, for a "state three benefits": all the data for one entity is held under one identifier; the fields can have different data types; one array replaces several parallel arrays that would have to be kept in step; the whole set can be processed by one loop or passed as one parameter; and adding a field changes the type definition only. For one customer the suitable structure is a record (fields of different types under one name); for all customers it is an array of records.

    Tiếng Việt

    Một bản ghi (cấu trúc bản ghi) chứa nhiều trường với các kiểu khác nhau dưới một tên duy nhất — hữu ích khi nhiều giá trị mô tả một đối tượng.

    TYPE TStockItem
        DECLARE ItemID : INTEGER
        DECLARE Category : STRING
        DECLARE ItemCost : REAL
        DECLARE InStock : BOOLEAN
    ENDTYPE
    

    Đây là định nghĩa kiểu TStockItem; khai báo các biến của nó:

    DECLARE Item1 : TStockItem
    DECLARE Items : ARRAY[1:100] OF TStockItem
    

    Sử dụng ký hiệu chấm để truy cập từng trường:

    Item1.Category ← "Fruit"
    OUTPUT Item1.Category, " costs ", Item1.ItemCost
    

    Sử dụng một bản ghi khi các giá trị luôn đi kèm với nhau (một khách hàng, một mặt hàng tồn kho); sử dụng các biến riêng biệt cho các giá trị không liên quan.

    Ví dụ đã giải. Một câu lạc bộ lưu trữ, đối với mỗi học sinh, mã số học sinh (một chuỗi), tên, ngày sinh và tối đa ba mã câu lạc bộ (số nguyên). Viết giả mã để khai báo kiểu bản ghi, một mảng chứa $3000$ học sinh, và một lệnh lưu tên vào phần tử đầu tiên.

    TYPE Student
        DECLARE StudentID : STRING
        DECLARE Name : STRING
        DECLARE DateOfBirth : DATE
        DECLARE Club : ARRAY[1:3] OF INTEGER
    ENDTYPE
    
    DECLARE Membership : ARRAY[1:3000] OF Student
    Membership[1].Name ← "Li Wei"
    

    Các điểm: TYPE với định danh và ENDTYPE; mỗi trường được khai báo với kiểu thích hợp; mảng được khai báo với cận của nó và OF Student; trường được truy cập bằng chỉ mục và dấu chấm. Một câu hỏi "nêu lỗi trong việc khai báo bản ghi" thường chỉ ra một ENDTYPE bị thiếu, một trường không có kiểu, hoặc một trường được khai báo là STRING mà phải chứa phép tính toán học. Hai quy ước đạt điểm riêng: một phần tử không dùng được đánh dấu bằng một giá trị không thể là dữ liệu thực tế (chuỗi rỗng, -1, mã số là 0), và tốt hơn hết nên sử dụng cùng một đánh dấu ở mọi nơi để mỗi mô-đun đều nhận biết được ô trống; một trường câu lạc bộ không dùng là 0. Lợi ích của mảng bản ghi, đối với câu hỏi "nêu ba lợi ích": toàn bộ dữ liệu của một thực thể được lưu dưới một định danh; các trường có thể có các kiểu dữ liệu khác nhau; một mảng thay thế nhiều mảng song song phải được giữ đồng bộ; toàn bộ tập hợp có thể được xử lý bởi một vòng lặp hoặc truyền như một tham số duy nhất; và thêm một trường chỉ thay đổi định nghĩa kiểu. Đối với một khách hàng, cấu trúc phù hợp là bản ghi (các trường khác nhau dưới một tên); đối với tất cả khách hàng, đó là mảng bản ghi.

    Một bản ghi TStockItem được vẽ thành bốn trường chồng lên nhau dưới một tên — ItemID (INTEGER), Category (STRING), ItemCost (REAL), InStock (BOOLEAN) — truy cập bằng ký hiệu chấm như Item1.Category
    Một bản ghi chứa nhiều trường với các kiểu khác nhau dưới một tên
    Explore · ⁨Khám phá⁩

    A record groups fields under one name · ⁨Một bản ghi nhóm các trường dưới một tên duy nhất⁩

    A record bundles related fields together. Each field is a named label you reach with dot notation — Item1.Category — not by a numeric index. · ⁨Một bản ghi gom các trường liên quan lại với nhau. Mỗi trường là một nhãn có tên mà bạn truy cập bằng ký hiệu chấm — Item1.Category — chứ không phải bằng chỉ số số.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    array/əˈreɪ/ mảng (array)
    record/ˈrekɔːd/ bản ghi
    record structure/ˈrekɔːd ˈstrʌktʃə/ cấu trúc bản ghi
    field/fiːld/ trường
    element/ˈelɪmənt/ nguyên tố
    bounds/baʊndz/ bounds
    10.2

    Arrays · ⁨Mảng⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Use the technical terms associated with arrays Including index, upper bound and lower bound
    Select a suitable data structure (1D or 2D array) to use for a given task
    Write pseudocode for 1D and 2D arrays
    Write pseudocode to process array data Sort using a bubble sort Search using a linear search
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Sử dụng các thuật ngữ kỹ thuật liên quan đến mảng Bao gồm chỉ số, giới hạn trên và giới hạn dưới
    Chọn cấu trúc dữ liệu phù hợp (mảng 1 chiều hoặc mảng 2 chiều) để sử dụng cho một nhiệm vụ cụ thể
    Viết pseudocode cho mảng 1 chiều và 2 chiều
    Viết pseudocode để xử lý dữ liệu mảng Sắp xếp sử dụng bubble sort Tìm kiếm sử dụng linear search

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    An array 数组 is an ordered collection of items of the same type, under one name, reached by an index 索引.

    • element 元素 — one item in the array.
    • bounds 边界 — the lowest and highest valid indices.
    • dimension 维度 — 1-D (a list), 2-D (a table), etc.
    • lower bound 下界 and upper bound 上界 — the first and last valid index; the number of elements is upper bound minus lower bound plus one, and for a 2-D array the product of the two counts.

    So in ThisArray[n] ← 42 the array has one dimension, the index is the variable n (an INTEGER), and the element at that index receives 42. Before an array can be declared you need its data type as well as its bounds. To declare $120$ values that may include a decimal place: DECLARE Data : ARRAY[1:120] OF REAL; a $150$-row, two-column table of strings: DECLARE Data : ARRAY[1:150, 1:2] OF STRING, which has $300$ elements. The benefits of an array over separate variables, for a two-mark explain: one identifier instead of thirty; the elements can be processed by a loop with the index as the counter; the size is easy to change; and the whole set can be passed to a module as one parameter. An array can also replace a chain of selection statements: DaysInMonth[Month] looks up the answer directly instead of twelve IF clauses, which is shorter, faster to write and easier to maintain.

    1-D arrays

    Process every element with a FOR loop:

    2-D arrays (2D array)

    The first index is the row, the second the column. Use nested loops to visit every cell. Use 1-D for a single sequence, 2-D for two natural dimensions (a grid, rows × columns).

    Common operations

    A linear search 线性查找 checks each element until found:

    To find a sum, count, maximum or minimum, set a running variable then sweep through:

    A bubble sort 冒泡排序 puts an array in order: pass through it comparing each adjacent pair and swapping any that are out of order; repeat the passes until one pass makes no swaps.

    Paper 2 asks for these algorithms both as pseudocode and as steps in words, and sometimes in their "efficient" form:

    • Largest value: set Largest to the first element; for each remaining element, if it is bigger than Largest, store it in Largest; after the loop output Largest. For the position of the largest, keep a second variable that stores the index each time Largest changes.
    • Linear search returning a position: set FoundAt ← -1 before the loop (a value that can never be a valid index, so it means "not found"); loop through the array; when the element matches, store the index and leave the loop; after the loop test FoundAt.
    • Count or output the non-blank elements: compare each element with the marker for an unused element ("" or -1) and count or output only those that differ.
    • Remove an item: find its index by a linear search; move every later element one place towards the start, so the gap closes; mark the last element as unused (or decrease the count).
    • Insert into a sorted array: find the first index whose element is larger; move that element and every later one one place towards the end; store the new value in the gap.
    • Efficient bubble sort: a Swapped flag so that the passes stop as soon as a pass makes no swap, and an upper limit that falls by one each pass because the largest value has already reached the end.

    The marks are for the outer loop that repeats until no swaps, the flag set inside the IF, the three-line swap with a temporary variable, and the shrinking limit. A sort in "steps" (stepwise refinement) is: repeat until sorted; on each pass compare adjacent pairs; swap a pair that is out of order; after each pass the largest unsorted value is at the end. Two 1-D arrays of records or of parallel data are processed with one loop and one index; a 2-D array needs a nested loop, the outer over rows and the inner over columns, and a search in one row fixes the row index and loops over the column.

    Tiếng Việt

    Một mảng là một tập hợp có thứ tự các đối tượng có cùng kiểu, dưới một tên, truy cập qua một chỉ mục.

    • phần tử — một đối tượng trong mảng.
    • cận — chỉ mục hợp lệ thấp nhất và cao nhất.
    • chiều — 1-D (danh sách), 2-D (bảng), v.v.
    • cận dưới và cận trên — chỉ mục hợp lệ đầu tiên và cuối cùng; số lượng phần tử là cận trên trừ cận dưới cộng một, và đối với mảng 2-D là tích của hai số lượng đó.

    Vì vậy trong ThisArray[n] ← 42 mảng có một chiều, chỉ mục là biến n (một INTEGER), và phần tử tại chỉ mục đó nhận 42. Trước khi khai báo mảng, bạn cần biết kiểu dữ liệu cũng như các giới hạn của nó. Để khai báo $120$ giá trị có thể chứa phần thập phân: DECLARE Data : ARRAY[1:120] OF REAL; một bảng chuỗi gồm $150$ dòng, hai cột: DECLARE Data : ARRAY[1:150, 1:2] OF STRING, có $300$ phần tử. Lợi ích của mảng so với các biến riêng biệt, để giải thích cho hai điểm: thay vì ba mươi biến, chỉ dùng một định danh; các phần tử có thể được xử lý bởi vòng lặp với chỉ mục làm bộ đếm; kích thước dễ dàng thay đổi; và toàn bộ tập hợp có thể được truyền sang module như một tham số duy nhất. Mảng cũng có thể thay thế một chuỗi các câu lệnh lựa chọn: DaysInMonth[Month] tra cứu đáp án trực tiếp thay vì mười hai câu IF, điều này ngắn hơn, viết nhanh hơn và dễ bảo trì hơn.

    Mảng 1-D

    DECLARE Names : ARRAY[1:5] OF STRING
    Names[3] ← "Cara"
    OUTPUT Names[3]
    

    Xử lý từng phần tử bằng vòng lặp FOR:

    FOR i ← 1 TO 5
        OUTPUT Names[i]
    NEXT i
    
    Một hàng các ô có chỉ mục tên myList, với chỉ mục từ 0 đến 8 và cận dưới (chỉ mục đầu tiên) và cận trên (chỉ mục cuối cùng) được đánh dấu
    Mảng 1-D (danh sách) với chỉ mục và cận

    Mảng 2-D (mảng 2D)

    DECLARE Grid : ARRAY[1:3, 1:4] OF INTEGER
    Grid[2, 3] ← 99
    

    Chỉ mục đầu tiên là hàng, chỉ mục thứ hai là cột. Sử dụng vòng lặp lồng nhau để duyệt qua từng ô. Sử dụng 1-D cho một dãy đơn, 2-D cho hai chiều tự nhiên (lưới, hàng × cột).

    Lưới 3 x 4 với chỉ mục hàng và chỉ mục cột; ô tại hàng 2, cột 3 được làm nổi bật
    Mảng 2-D (bảng) với chỉ mục hàng và cột

    Các phép toán thường gặp

    Tìm kiếm tuyến tính kiểm tra từng phần tử cho đến khi tìm thấy:

    FOR i ← 1 TO n
        IF A[i] = Target THEN
            OUTPUT "Found at ", i
        ENDIF
    NEXT i
    

    Để tìm tổng, đếm, giá trị lớn nhất hoặc nhỏ nhất, thiết lập biến chạy sau đó quét qua:

    Max ← A[1]
    FOR i ← 2 TO n
        IF A[i] > Max THEN
            Max ← A[i]
        ENDIF
    NEXT i
    

    Sắp xếp bọt đặt mảng theo thứ tự: lướt qua nó so sánh từng cặp kề nhau và hoán đổi bất kỳ cặp nào không đúng thứ tự; lặp lại các lượt lướt cho đến khi một lượt lướt không hoán đổi gì.

    Giấy bài 2 yêu cầu các thuật toán này dưới dạng giả mã và dưới dạng các bước bằng lời, và đôi khi ở dạng "hiệu quả":

    • Giá trị lớn nhất: thiết lập Largest bằng phần tử đầu tiên; với mỗi phần tử còn lại, nếu nó lớn hơn Largest, lưu nó vào Largest; sau vòng lặp xuất Largest. Đối với vị trí của giá trị lớn nhất, giữ một biến thứ hai lưu chỉ mục mỗi khi Largest thay đổi.
    • Tìm kiếm tuyến tính trả về vị trí: thiết lập FoundAt ← -1 trước vòng lặp (một giá trị không thể bao giờ là chỉ mục hợp lệ, vì vậy nó có nghĩa là "không tìm thấy"); duyệt qua mảng; khi phần tử khớp, lưu chỉ mục và thoát khỏi vòng lặp; sau vòng lặp kiểm tra FoundAt.
    • Đếm hoặc xuất các phần tử khác rỗng: so sánh từng phần tử với dấu hiệu của phần tử chưa sử dụng ("" hoặc -1) và chỉ đếm hoặc xuất những phần tử khác biệt.
    • Xóa một mục: tìm chỉ mục của nó bằng tìm kiếm tuyến tính; di chuyển mọi phần tử sau đó một vị trí về phía đầu, sao cho khoảng trống đóng lại; đánh dấu phần tử cuối cùng là không dùng (hoặc giảm số lượng đếm).
    • Chèn vào mảng đã sắp xếp: tìm chỉ mục đầu tiên có phần tử lớn hơn; di chuyển phần tử đó và mọi phần tử sau đó một vị trí về phía cuối; lưu giá trị mới vào khoảng trống.
    • Sắp xếp bọt hiệu quả: một Swapped cờ để các lượt lướt dừng ngay khi một lượt lướt không hoán đổi, và cận trên giảm đi một mỗi lượt lướt vì giá trị lớn nhất đã đạt đến cuối.
    REPEAT
        Swapped ← FALSE
        FOR Index ← 1 TO Limit - 1
            IF Data[Index] > Data[Index + 1] THEN
                Temp ← Data[Index]
                Data[Index] ← Data[Index + 1]
                Data[Index + 1] ← Temp
                Swapped ← TRUE
            ENDIF
        NEXT Index
        Limit ← Limit - 1
    UNTIL Swapped = FALSE
    

    Các điểm đánh giá bao gồm vòng lặp ngoài lặp lại cho đến khi không còn hoán đổi, cờ được đặt bên trong IF, đoạn hoán đổi ba dòng với biến tạm, và giới hạn thu nhỏ. Một sắp xếp theo "bước" (tinh chỉnh từng bước) là: lặp lại cho đến khi đã sắp xếp; ở mỗi lượt so sánh các cặp kề nhau; hoán đổi một cặp bị sai thứ tự; sau mỗi lượt, giá trị chưa sắp xếp lớn nhất sẽ nằm ở cuối. Hai mảng 1-D chứa bản ghi hoặc dữ liệu song song được xử lý bằng một vòng lặp và một chỉ số; mảng 2-D cần vòng lặp lồng nhau, vòng ngoài duyệt theo hàng và vòng trong duyệt theo cột, và việc tìm kiếm trong một hàng cố định chỉ số hàng và lặp theo cột.

    Một lượt của thuật toán sắp xếp nổi bọt trên dãy 5, 2, 8, 1: so sánh 5 và 2 rồi hoán đổi để có 2, 5, 8, 1; so sánh 5 và 8 (đã đúng thứ tự); so sánh 8 và 1 rồi hoán đổi để có 2, 5, 1, 8, như vậy giá trị lớn nhất 8 tiến về cuối
    Một lượt của thuật toán sắp xếp nổi bọt: các cặp kề nhau được so sánh và hoán đổi, đẩy giá trị lớn nhất lên cuối
    Explore · ⁨Khám phá⁩

    A 2-D array · ⁨Mảng 2-D⁩

    Pick a row and column to read one element — how a grid of data is stored and indexed. · ⁨Chọn một hàng và cột để đọc một phần tử — cách dữ liệu dạng lưới được lưu trữ và chỉ mục.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    data type/ˈdeɪtə taɪp/ kiểu dữ liệu
    index/ˈɪndeks/ index
    bubble sort/ˈbʌbl sɔːt/ bubble sort
    10.3

    Files · ⁨Tập tin⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of why files are needed
    Write pseudocode to handle text files that consist of one or more lines
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết tại sao cần tệp
    Viết pseudocode để xử lý tệp văn bản bao gồm một hoặc nhiều dòng

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    A file 文件 is data stored on secondary storage 辅助存储器, kept between program runs. Variables in RAM disappear when the program ends, so to save data permanently (high scores, records, settings) the program writes to a file. Files also let programs share data and restart from a saved state.

    A text file 文本文件 holds one or more lines of readable characters; programs read and write text files line by line. Open a file before use and close it after:

    EOF tests the end of file 文件结束 before reading. To write:

    Always close every file — otherwise buffered writes may be lost and other programs may be locked out.

    Why files (two marks): the data is kept after the program ends, so it is available the next time the program runs; it can be shared with other programs; and it can hold more than fits in memory. The characteristic of a text file that lets a program work through it is that it is a sequence of lines, read one after another from the start. The three modes: READ to read from the start; WRITE to create a new file, which deletes any existing contents, so it cannot be used to add to a file; APPEND to add lines at the end of an existing file. Test EOF before every read, and open the file only once, even when several modules use it.

    Worked example. Write pseudocode for a procedure LastLines(FileName : STRING) that outputs the last three lines of a text file, in order.

    Each new line pushes the previous three along, so when the file ends the three variables hold its last three lines; a file with fewer lines outputs empty strings. To output the first five lines, count the lines read and stop the loop at five or at EOF, whichever comes first; a file that is empty is detected by EOF being TRUE immediately after opening.

    Fields in a line. A text file holds strings, so a record is written as one line with its fields joined by a separator 分隔符 character, and each number or Boolean converted with NUM_TO_STR (and read back with STR_TO_NUM, or by comparing with "TRUE"). Choose a separator that can never appear in the data: a comma or | for names and numbers, never a space when a name may contain one. If a field may contain any character, the separator can be confused with data; the fix is to put each field on its own line, or to write the field's length before it. One item per line is simple to read back but uses more lines and makes a record harder to see as a unit. Reading a file whose lines are in a known order (ascending by an ID) allows the search to stop as soon as a larger ID is read, instead of reading to the end. A save file that is created each time the game is saved needs a meaningful filename, for instance the player's name and the date and time, so that any earlier save can be restored.

    Tiếng Việt

    Một tập tin là dữ liệu được lưu trữ trên bộ nhớ phụ, được giữ lại giữa các lần chạy chương trình. Các biến trong RAM biến mất khi chương trình kết thúc, nên để lưu dữ liệu vĩnh viễn (điểm cao nhất, hồ sơ, cài đặt), chương trình phải ghi vào tập tin. Tập tin cũng cho phép các chương trình chia sẻ dữ liệu và khởi động lại từ trạng thái đã lưu.

    Các biến trong RAM bị mất khi chương trình kết thúc, nhưng một tập tin trên đĩa được giữ lại giữa các lần chạy, nên chương trình lưu vào và tải ra từ đó *Biến trong RAM biến mất khi chương trình kết thúc; một tập tin trên đĩa tồn tại giữa các lần chạy

    Một tập tin văn bản chứa một hoặc nhiều dòng ký tự có thể đọc được; chương trình đọc và ghi tập tin văn bản theo từng dòng. Mở tập tin trước khi sử dụng và đóng nó sau:

    OPENFILE "data.txt" FOR READ      // or FOR WRITE, FOR APPEND
    WHILE NOT EOF("data.txt") DO
        READFILE "data.txt", LineString
        OUTPUT LineString
    ENDWHILE
    CLOSEFILE "data.txt"
    

    EOF kiểm tra cuối tập tin trước khi đọc. Để ghi:

    OPENFILE "log.txt" FOR WRITE
    FOR i ← 1 TO 100
        WRITEFILE "log.txt", "Event " & i
    NEXT i
    CLOSEFILE "log.txt"
    

    Luôn đóng mọi tập tin — nếu không các ghi bộ đệm có thể bị mất và các chương trình khác có thể bị khóa truy cập.

    Tại sao dùng tập tin (hai điểm): dữ liệu được giữ lại sau khi chương trình kết thúc, nên có sẵn vào lần chạy tiếp theo; có thể chia sẻ với các chương trình khác; và có thể chứa nhiều hơn dung lượng bộ nhớ. Đặc tính của tập tin văn bản giúp chương trình duyệt qua nó là cấu trúc chuỗi các dòng, được đọc lần lượt từ đầu. Ba chế độ: READ để đọc từ đầu; WRITE để tạo tập tin mới, điều này xóa toàn bộ nội dung hiện có, nên không thể dùng để thêm vào tập tin; APPEND để thêm dòng vào cuối tập tin hiện có. Kiểm tra EOF trước mỗi lần đọc, và mở tập tin chỉ một lần, ngay cả khi nhiều mô-đun sử dụng nó.

    Ví dụ minh họa. Viết pseudocode cho thủ tục LastLines(FileName : STRING) xuất ra ba dòng cuối cùng của một tập tin văn bản, theo thứ tự.

    PROCEDURE LastLines(BYVAL FileName : STRING)
        DECLARE LineX, LineY, LineZ : STRING
        LineX ← ""
        LineY ← ""
        LineZ ← ""
        OPENFILE FileName FOR READ
        WHILE NOT EOF(FileName) DO
            LineX ← LineY
            LineY ← LineZ
            READFILE FileName, LineZ
        ENDWHILE
        CLOSEFILE FileName
        OUTPUT LineX
        OUTPUT LineY
        OUTPUT LineZ
    ENDPROCEDURE
    

    Mỗi dòng mới đẩy ba dòng trước đó đi, nên khi tập tin kết thúc, ba biến sẽ chứa ba dòng cuối cùng; tập tin có ít dòng hơn sẽ xuất chuỗi rỗng. Để xuất năm dòng đầu tiên, đếm số dòng đã đọc và dừng vòng lặp tại năm hoặc tại EOF, tùy cái nào xảy ra trước; tập tin trống được phát hiện khi EOF bằng TRUE ngay sau khi mở.

    Các trường trong một dòng. Một tập tin văn bản chứa chuỗi, nên một bản ghi được viết dưới dạng một dòng với các trường của nó được nối bởi một ký tự ngăn cách, và mỗi số hay giá trịBoolean được chuyển đổi bằng NUM_TO_STR (và đọc lại bằng STR_TO_NUM, hoặc bằng cách so sánh với "TRUE"). Chọn ký tự ngăn cách không bao giờ xuất hiện trong dữ liệu: dấu phẩy hoặc | cho tên và số, tuyệt đối không dùng khoảng trắng khi tên có thể chứa khoảng trắng. Nếu một trường có thể chứa bất kỳ ký tự nào, ký tự ngăn cách có thể bị nhầm lẫn với dữ liệu; giải pháp là đặt mỗi trường vào một dòng riêng biệt, hoặc ghi độ dài trường trước khi ghi nội dung. Một mục trên mỗi dòng dễ đọc lại nhưng tốn nhiều dòng hơn và khiến bản ghi khó nhận diện thành một khối. Đọc một tập tin mà các dòng có thứ tự đã biết (tăng dần theo ID) cho phép tìm kiếm dừng lại ngay khi đọc được ID lớn hơn, thay vì đọc đến tận cuối. Một tập tin lưu game được tạo mỗi lần chơi cần một tên tập tin có ý nghĩa, ví dụ tên người chơi và ngày giờ, để bất kỳ lần lưu nào trước đó đều có thể được khôi phục.

    Một dòng của tập tin văn bản, 1023,Ali,12.50,TRUE, tách tại ngăn cách dấu phẩy thành bốn trường của bản ghi mặt hàng, với phép chuyển đổi cần thiết cho mỗi trường: STR_TO_NUM cho các trường số, chuỗi giữ nguyên, và so sánh với TRUE cho giá trịBoolean *Một dòng của tập tin văn bản là một bản ghi: các trường nối bởi ngăn cách, được chuyển đổi sang kiểu tương ứng khi đọc lại

    Explore · ⁨Khám phá⁩

    Handling a file: open → use → close · ⁨Xử lý tệp tin: mở → sử dụng → đóng⁩

    Step through the lifecycle every file follows. The two easy-to-forget parts are testing EOF while reading in a loop, and always closing at the end. · ⁨Trải qua chu kỳ sống mà mọi tệp tin đều tuân theo. Hai phần dễ bị quên nhất là kiểm tra EOF khi đọc trong vòng lặp, và luôn đóng ở cuối.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    file/faɪl/ tệp
    secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ bộ nhớ phụ
    text file/tekst faɪl/ tệp văn bản
    end of file/end ɒv faɪl/ cuối tệp
    10.4

    Abstract Data Types (ADTs) · ⁨Kiểu Dữ Liệu Trừ Tượng (ADT)⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding that an ADT is a collection of data and a set of operations on those data
    Show understanding that a stack, queue and linked list are examples of ADTs Describe the key features of a stack, queue and linked list and justify their use for a given situation
    Use a stack, queue and linked list to store data Candidates will not be required to write pseudocode for these structures, but they should be able to add, edit and delete data from these structures
    Describe how a queue, stack and linked list can be implemented using arrays
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết rằng một ADT là một tập hợp dữ liệu và một tập hợp các thao tác trên dữ liệu đó
    Thể hiện sự hiểu biết rằng stack, queue và linked list là các ví dụ về ADTs Mô tả các đặc điểm chính của stack, queue và linked list và giải thích việc sử dụng chúng cho một tình huống cụ thể
    Sử dụng stack, queue và linked list để lưu trữ dữ liệu Thí sinh không yêu cầu phải viết pseudocode cho các cấu trúc này, nhưng họ cần có khả năng thêm, chỉnh sửa và xóa dữ liệu khỏi các cấu trúc này
    Mô tả cách queue, stack và linked list có thể được triển khai sử dụng arrays

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English
    Linked list: insert by rewiring pointers
    Stack vs queue: LIFO and FIFO

    An Abstract Data Type 抽象数据类型 (ADT) is a collection of data plus operations on it, defined by what it does, not how it is stored. The user works only through the operations; the implementation is hidden, so it can change without affecting code that uses the ADT. Know three: stack, queue, linked list.

    The one-mark definition: an ADT is a collection of data together with a set of operations on that data. A stack, a queue, a linked list, a binary tree and an array are all ADTs. To justify a choice: a queue when items must be handled in the order they arrived (print jobs, key presses, customers in a shop), because it is first in, first out; a stack when the most recent item must be handled first (undo, going back through web pages, reversing an order, the return addresses of nested calls), because it is last in, first out; a linked list when items are inserted and deleted in the middle of an ordered sequence often, because only pointers change and nothing has to be shifted. To compare a stack and a queue: both are linear structures of items with an order, both are implemented with an array and pointers, and both need a check for full before adding and for empty before removing; a stack has one pointer and adds and removes at the same end, a queue has two pointers and adds at one end and removes at the other.

    Stack

    A stack 栈 works in LIFO 后进先出 order (Last In, First Out). Operations: push 入栈 (add to the top), pop 出栈 (remove from the top), peek (look at the top), and tests for empty/full. Uses: undo history, function-call return addresses, expression parsing, backtracking.

    Worked example. A stack of characters holds, from the bottom, 'P', 'N', 'Z', 'X', 'Y', 'W', with the top-of-stack pointer at 'W' (memory location 202 of 200–207). The operations POP, POP, PUSH 'A', PUSH 'B', POP are performed. What is on the stack, and where does the pointer point?

    The two pops remove 'W' then 'Y'; the pushes add 'A' then 'B' in their places; the last pop removes 'B'. The stack now holds 'P', 'N', 'Z', 'X', 'A' and the pointer is at 'A', location 203. The value that has been on the stack longest is the bottom item, 'P'; at most five further pops are possible before the stack is empty, and a pop on an empty stack is an error, which is why Pop() tests for empty first. A Push() function that returns TRUE on success first tests whether the pointer is at the top of the array (full) and returns FALSE if so. The array elements need no initialising before use, because the pointer alone says which elements are in use.

    Queue

    A queue 队列 works in FIFO 先进先出 order (First In, First Out). Operations: enqueue 入队 (add to the rear), dequeue 出队 (remove from the front), and tests for empty/full. Uses: print spooling, scheduling, breadth-first search, buffering.

    To describe adding an item: check that the queue is not full; store the item at the position given by the end-of-queue pointer; increment the end pointer (and the count). To describe removing: check that the queue is not empty; read the item at the front pointer; increment the front pointer (and decrement the count). State the convention you use: if the end pointer marks the next free space, front and end pointers being equal means the queue is empty; if it marks the last item, equal pointers mean one item. In a linear queue the front pointer only ever moves forward, so cells behind it are wasted; that is what the circular queue below fixes. The two features of a queue to state: items are added at the rear and removed from the front, so the first item added is the first removed.

    Linked list

    A linked list 链表 stores data as a sequence of nodes 节点. Each node holds a value and a pointer 指针 to the next node; a head pointer marks the start, and the last node's pointer is a sentinel (e.g. NULL). Operations: insert, delete, search, and traverse 遍历 (visit each node in order). Its advantage over an array is cheap insertion/deletion (just adjust pointers); its disadvantage is slow random access (you must follow pointers from the head).

    Adding a node in order (four marks): traverse the list from the head, following the pointers, until the node before the position is found (the last node whose value is smaller); take a free node and store the new value in it; set the new node's pointer to the address the previous node pointed to; set the previous node's pointer to the new node. If the new value belongs at the front, the head pointer is changed instead. Deleting a node: find the node before it, and set that node's pointer to the address the deleted node pointed to, so the list bypasses it; the freed node returns to the free list. Compared with a 1-D array, inserting or deleting in a linked list needs no shifting of the other items, and the list can grow until memory runs out; the cost is the extra pointer stored with every item, and that reaching the $n$th item means following $n$ pointers, since there is no direct index.

    Tiếng Việt

    *Danh sách liên kết: chèn bằng cách nối lại con trỏ

    *Ngăn xếp vs Hàng đợi: LIFO và FIFO

    Một Kiểu Dữ Liệu Trừ Tượng (ADT) là sự kết hợp của dữ liệu cùng các thao tác trên nó, được xác định bởi những gì nó làm chứ không phải cách thức lưu trữ. Người dùng chỉ làm việc thông qua các thao tác; phần thực thi bị ẩn đi, nên có thể thay đổi mà không ảnh hưởng đến mã nguồn sử dụng ADT. Cần biết ba loại: ngăn xếp, hàng đợi, danh sách liên kết.

    Định nghĩa một điểm: ADT là một tập hợp dữ liệu cùng với một tập hợp các thao tác trên dữ liệu đó. Ngăn xếp, hàng đợi, danh sách liên kết, cây nhị phân và mảng đều là các ADT. Để giải thích một lựa chọn: hàng đợi khi các mục phải được xử lý theo thứ tự chúng đến (công việc in, phím bấm, khách hàng trong cửa hàng), vì nó tuân theo nguyên tắc vào trước ra trước; ngăn xếp khi mục mới nhất phải được xử lý trước (hoàn tác, quay lại qua các trang web, đảo ngược thứ tự, địa chỉ trả về của các cuộc gọi lồng nhau), vì nó tuân theo nguyên tắc vào sau ra trước; danh sách liên kết khi các mục được chèn và xóa ở giữa một dãy có thứ tự thường xuyên, vì chỉ con trỏ thay đổi và không cần dịch chuyển gì. Để so sánh ngăn xếp và hàng đợi: cả hai đều là cấu trúc tuyến tính của các mục có thứ tự, cả hai đều được triển khai bằng mảng và con trỏ, và cả hai đều cần kiểm tra trạng thái đầy trước khi thêm và trống trước khi xóa; ngăn xếp có một con trỏ và thêm/xóa ở cùng một đầu, hàng đợi có hai con trỏ và thêm ở một đầu, xóa ở đầu kia.

    Ngăn xếp

    Ngăn xếp hoạt động theo thứ tự LIFO (Vào Sau Ra Trước). Các thao tác: push (thêm vào đỉnh), pop (xóa từ đỉnh), peek (nhìn vào đỉnh), và các phép kiểm tra trạng thái trống/đầy. Ứng dụng: lịch sử hoàn tác, địa chỉ trả về của hàm, phân tích biểu thức, truy hồi.

    Ngăn xếp được lưu trữ trong mảng hiển thị ba trạng thái; con trỏ Đỉnh di chuyển lên sau khi push và xuống sau khi pop, trong khi phần đáy của ngăn xếp giữ nguyên vị trí
    Push và pop thay đổi con trỏ Đỉnh; con trỏ Đáy giữ nguyên

    Ví dụ minh họa. Một ngăn xếp ký tự chứa, từ dưới lên trên, 'P', 'N', 'Z', 'X', 'Y', 'W', với con trỏ đỉnh ngăn xếp tại 'W' (vị trí bộ nhớ 202 của 200–207). Thực hiện các thao tác POP, POP, PUSH 'A', PUSH 'B', POP. Trên ngăn xếp còn những gì, và con trỏ đang chỉ vào đâu?

    Hai lần pop loại bỏ 'W' rồi 'Y'; các lần push thêm 'A' rồi 'B' vào đúng vị trí cũ; lần pop cuối cùng loại bỏ 'B'. Ngăn xếp hiện chứa 'P', 'N', 'Z', 'X', 'A' và con trỏ nằm ở 'A', vị trí 203. Giá trị đã tồn tại trên ngăn xếp lâu nhất là mục đáy, 'P'; tối đa năm lần pop nữa là có thể thực hiện trước khi ngăn xếp trống, và việc pop trên ngăn xếp trống là lỗi, do đó Pop() kiểm tra trạng thái trống trước. Một hàm Push() trả về TRUE thành công sẽ kiểm tra xem con trỏ có nằm ở đỉnh mảng (đầy) hay không và trả về FALSE nếu đúng như vậy. Các phần tử mảng không cần khởi tạo trước khi sử dụng, vì bản thân con trỏ đã xác định phần tử nào đang được dùng.

    Một đống sách cao được xếp chồng lên nhau phẳng
    Một đống sách là một ngăn xếp bạn có thể thấy. Bạn chỉ có thể thêm hoặc lấy một cuốn sách từ đỉnh, nên cuốn cuối cùng bạn đặt lên chính là cuốn đầu tiên bạn lấy xuống — đó chính xác là LIFO

    Hàng đợi

    Hàng đợi hoạt động theo thứ tự FIFO (Vào Trước Ra Trước). Các thao tác: enqueue (thêm vào đuôi), dequeue (xóa từ đầu), và các phép kiểm tra trạng thái trống/đầy. Ứng dụng: spooling in, lập lịch, tìm kiếm theo độ rộng, đệm dữ liệu.

    Một hàng đợi tuyến tính được lưu trữ trong mảng hiển thị ở ba trạng thái; enqueue di chuyển con trỏ Rear và dequeue di chuyển con trỏ Front, để lại ô bắt đầu trống và lãng phí
    Enqueue thêm vào đuôi; dequeue xóa từ đầu

    Để mô tả việc thêm một mục: kiểm tra hàng đợi chưa đầy; lưu mục vào vị trí do con trỏ cuối hàng đợi chỉ định; tăng con trỏ cuối (và biến đếm). Để mô tả việc xóa: kiểm tra hàng đợi chưa trống; đọc mục tại con trỏ đầu; tăng con trỏ đầu (và giảm biến đếm). Nêu quy ước bạn sử dụng: nếu con trỏ cuối đánh dấu ô trống tiếp theo, thì con trỏ đầu và cuối bằng nhau có nghĩa hàng đợi trống; nếu nó đánh dấu mục cuối cùng, thì con trỏ bằng nhau có nghĩa còn một mục. Trong hàng đợi tuyến tính, con trỏ đầu chỉ bao giờ di chuyển về phía trước, nên các ô phía sau bị lãng phí; đó chính là điều mà hàng đợi vòng tròn bên dưới khắc phục. Hai đặc điểm của hàng đợi cần nêu: các mục được thêm vào đuôi và xóa từ đầu, nên mục đầu tiên được thêm sẽ là mục đầu tiên bị xóa.

    Một hàng dài rất nhiều người chờ xếp một người sau người, kéo dài dọc theo tường vào phía xa
    Một hàng người là một hàng đợi bạn có thể thấy. Bạn xếp vào đuôi và được phục vụ từ đầu, nên ai waited lâu nhất sẽ được phục vụ đầu tiên — đó chính xác là FIFO

    Danh sách liên kết

    Danh sách liên kết lưu trữ dữ liệu dưới dạng chuỗi các nút. Mỗi nút chứa một giá trị và một con trỏ trỏ đến nút tiếp theo; con trỏ đầu đánh dấu điểm bắt đầu, và con trỏ của nút cuối là sentinel (ví dụ: NULL). Các thao tác: chèn, xóa, tìm kiếm, và duyệt (thăm từng nút theo thứ tự). Ưu điểm so với mảng là chi phí thấp cho việc chèn/xóa (chỉ điều chỉnh con trỏ); nhược điểm là truy cập ngẫu nhiên chậm (bạn phải đi theo con trỏ từ nút đầu).

    Bốn nút nằm ngang, mỗi nút giữ một giá trị và một trường con trỏ tiếp theo; con trỏ đầu trỏ vào nút đầu tiên và con trỏ của nút cuối cùng là NULL
    Danh sách liên kết: mỗi nút trỏ đến nút tiếp theo

    Thêm một nút vào đúng thứ tự (bốn điểm): duyệt danh sách từ đầu, theo các con trỏ, cho đến khi tìm thấy nút ngay trước vị trí cần chèn (nút cuối cùng có giá trị nhỏ hơn); lấy một nút rỗng và lưu giá trị mới vào đó; đặt con trỏ của nút mới chỉ đến địa chỉ mà nút trước đó đang trỏ tới; đặt con trỏ của nút trước đó trỏ tới nút mới. Nếu giá trị mới nằm ở đầu, con trỏ đầu sẽ được thay đổi. Xóa một nút: tìm nút ngay trước nó, và đặt con trỏ của nút này chỉ đến địa chỉ mà nút bị xóa đang trỏ tới, để danh sách bỏ qua nó; nút được giải phóng trở lại danh sách rỗng. So với mảng 1-D, việc chèn hoặc xóa trong danh sách liên kết không cần dịch chuyển các phần tử khác, và danh sách có thể mở rộng cho đến khi hết bộ nhớ; chi phí là con trõ bổ sung được lưu kèm với mỗi phần tử, và việc truy cập $n$th mục tiêu đòi hỏi phải đi theo $n$ con trỏ, vì không có chỉ mục trực tiếp nào.

    Explore · ⁨Khám phá⁩

    A linked list: nodes joined by pointers · ⁨Danh sách liên kết: các nơ-đơ được nối với nhau bằng con trỏ.⁩

    Each node stores a value and a pointer to the next node. Inserting or deleting just re-links pointers — no items shift along, unlike an array. · ⁨Mỗi nơ-đơ lưu trữ một giá trị và một con trỏ đến nơ-đơ tiếp theo. Việc chèn hoặc xóa chỉ cần thay đổi các con trỏ — không có phần tử nào bị dịch chuyển, khác với mảng.⁩

    Explore · ⁨Khám phá⁩

    Stacks and queues · ⁨Ngăn xếp và hàng đợi⁩

    Push and pop. A stack is last-in-first-out; a queue is first-in-first-out — two key ADTs. · ⁨Push và pop. Một ngăn xếp là cuối vào đầu ra; một hàng đợi là đầu vào đầu ra — hai ADT then chốt.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    stack/stæk/ stack
    dimension/daɪˈmenʃn/ chiều (kích thước)
    lower bound/ˈləʊə baʊnd/ giới hạn dưới
    upper bound/ˈʌpə baʊnd/ giới hạn trên
    linear search/ˈlɪnɪə sɜːtʃ/ tìm kiếm tuyến tính
    push/pʊʃ/ đẩy
    separator/ˈsepəreɪtə/ ký tự ngăn cách
    Abstract Data Type/ˈæbstrækt ˈdeɪtə taɪp/ Kiểu dữ liệu trừu tượng
    linked list/lɪŋkt lɪst/ danh sách liên kết
    queue/kjuː/ queue
    LIFO/ˈlaɪfəʊ/ LIFO
    FIFO/ˈfaɪfəʊ/ FIFO.
    pop/pɒp/ pop
    enqueue/enˈkjuː/ enqueue
    dequeue/diːˈkjuː/ dequeue
    Watch lesson · ⁨Xem bài học⁩
    10.4

    Implementing ADTs using arrays · ⁨Thực hiện ADTs bằng mảng⁩

    English

    Stack using an array

    Hold items in Stack[1:MaxSize] with an integer Top (0 when empty).

    • Push(x): if Top = MaxSize the stack is full (overflow 溢出); else Top ← Top + 1; Stack[Top] ← x.
    • Pop(): if Top = 0 the stack is empty (underflow 下溢); else return Stack[Top] and Top ← Top - 1.

    Queue using a circular array

    A simple queue lets Front and Rear march off the end, wasting the start. The fix is a circular array 循环数组 — when a pointer reaches MaxSize it wraps back to 1:

    • Enqueue(x): check full; else Rear ← (Rear MOD MaxSize) + 1; Queue[Rear] ← x.
    • Dequeue(): check empty; else return Queue[Front] and Front ← (Front MOD MaxSize) + 1.

    Track a separate count to tell empty from full.

    The algorithm for the end pointer, in words: if the count equals the size, report that the queue is full and stop; otherwise add one to the end pointer; if it is now past the last index, set it to the first index; store the item there and add one to the count. The declarations that a five-mark "describe the declaration and initialisation" answer lists: the array with its size and element type; a front pointer and an end pointer, both initialised to the first index (or the front to the first index and the end to the next free space); and a count of items, initialised to $0$.

    For example, with MaxSize = 6: if Rear = 5, then (5 MOD 6) + 1 = 6, so the next item goes in cell 6; if Rear = 6, then (6 MOD 6) + 1 = 1, so the pointer wraps back to cell 1.

    Linked list using an array

    Use an array of records, each with a Next index:

    A free list 空闲列表 chains the unused slots, just as the data list chains its used ones. To insert: take a slot from FreeListHead, set the new node's value and Next, and update the previous node's Next (or Head). To delete: unlink the node and return its slot to the free list. This gives the flexibility of a linked structure with the static allocation of an array.

    Worked example. A linked list is held in a Data array and a Pointer array, with Start pointing to index 1. The list is 1 → 3 → 4 (index 1 holds D40, index 3 holds D32, index 4 holds D11, whose pointer is $\emptyset$); the free list starts at index 2 and continues 2 → 5. Insert D6 between D32 and D11.

    Take the first free node, index 2, and set FreeStart to its pointer, 5; store D6 in Data[2]; set Pointer[2] to the value Pointer[3] held, which is 4; set Pointer[3] to 2. The list reads 1 → 3 → 2 → 4 and the free list is 5 → $\emptyset$. The answer to "how can the linked list be implemented" is exactly these parts: an array (or array of records) for the data, a parallel array for the pointers holding indices, a start pointer, a free-list pointer and a null value such as $-1$ for the end.

    Worked example. A circular queue is held in an array of size 5 (indices 0 to 4) with Front = 3, Rear = 3 and one item stored. Two items are added, then two are removed. Where are the pointers, and why use a circular queue at all? Every move uses (pointer + 1) MOD size, so the pointers wrap. Adding twice moves Rear: $3 \rightarrow 4$, then $4 \rightarrow 0$ (because $(4+1) \bmod 5 = 0$), so Rear = 0 and three items are stored. Removing twice moves Front the same way: $3 \rightarrow 4$, then $4 \rightarrow 0$, leaving Front = 0 and one item. The wrap is the whole point: in a linear array queue the pointers march to the end and the freed space at the front is wasted even when the queue is empty. Remember a queue removes at the Front and adds at the Rear - a stack uses one pointer for both.

    Tiếng Việt

    Ngăn xếp dùng mảng

    Giữ các phần tử trong Stack[1:MaxSize] bằng một số nguyên Top (0 khi trống).

    • Push(x): nếu Top = MaxSize thì ngăn xếp đầy (tràn); ngược lại Top ← Top + 1; Stack[Top] ← x.
    • Pop(): nếu Top = 0 thì ngăn xếp rỗng (rỗng dưới); ngược lại trả về Stack[Top] và Top ← Top - 1.

    Hàng đợi dùng mảng vòng

    Hàng đợi đơn giản khiến Front và Rear di chuyển ra khỏi cuối, lãng phí phần đầu. Giải pháp là mảng vòng — khi một con trỏ đạt đến MaxSize nó sẽ quay lại 1:

    • Enqueue(x): kiểm tra đầy; ngược lại Rear ← (Rear MOD MaxSize) + 1; Queue[Rear] ← x.
    • Dequeue(): kiểm tra rỗng; ngược lại trả về Queue[Front] và Front ← (Front MOD MaxSize) + 1.

    Theo dõi một biến đếm riêng biệt để phân biệt trạng thái rỗng và đầy.

    Thuật toán cho con trỏ cuối, diễn giải bằng lời: nếu biến đếm bằng kích thước, thông báo hàng đợi đầy và dừng; ngược lại tăng con trỏ cuối lên 1; nếu nó vượt quá chỉ mục cuối cùng, đặt nó thành chỉ mục đầu tiên; lưu phần tử vào đó và tăng biến đếm lên 1. Các khai báo cho câu trả lời "mô tả khai báo và khởi tạo" gồm 5 điểm: mảng với kích thước và kiểu phần tử; một con trỏ đầu và một con trỏ cuối, cả hai đều khởi tạo thành chỉ mục đầu tiên (hoặc con trỏ đầu là chỉ mục đầu và con trỏ cuối là không gian trống tiếp theo); và một biến đếm số lượng phần tử, khởi tạo thành $0$.

    Ví dụ, với MaxSize = 6: nếu Rear = 5, thì (5 MOD 6) + 1 = 6, nên phần tử tiếp theo sẽ vào ô 6; nếu Rear = 6, thì (6 MOD 6) + 1 = 1, nên con trỏ quay lại ô 1.

    Hàng đợi vòng được lưu trong mảng; các ô đã điền vượt qua ô cuối quay trở lại đầu, với mũi tên cong hiển thị con trỏ quay từ chỉ mục cuối về ô 1
    Hàng đợi vòng quay các con trỏ trở lại đầu mảng

    Danh sách liên kết dùng mảng

    Sử dụng mảng bản ghi, mỗi bản ghi có một Next chỉ mục:

    TYPE TNode
        DECLARE Value : INTEGER
        DECLARE Next : INTEGER     // index of the next node, or -1 for end
    ENDTYPE
    
    DECLARE Nodes : ARRAY[1:MaxSize] OF TNode
    DECLARE Head : INTEGER         // index of first node, -1 if empty
    DECLARE FreeListHead : INTEGER // first available free node
    

    Một danh sách rỗng nối các ô chưa sử dụng, giống như cách danh sách dữ liệu nối các ô đã sử dụng. Để chèn: lấy một ô từ FreeListHead, đặt giá trị và Next của nút mới, và cập nhật Next của nút trước (hoặc Head). Để xóa: tách nút ra và trả ô của nó về danh sách rỗng. Điều này mang lại tính linh hoạt của cấu trúc liên kết với việc cấp phát tĩnh của mảng.

    Mảng Giá trị và mảng Next song song thực hiện danh sách liên kết; con trỏ Head nối các nút đã dùng và con trỏ FreeListHead nối các ô rỗng, mỗi cái kết thúc bằng Next = -1
    Danh sách liên kết được lưu trong mảng: mảng dữ liệu và mảng con trỏ

    Ví dụ đã làm. Một danh sách liên kết được lưu trong một Data mảng và một Pointer mảng, với Start trỏ tới chỉ mục 1. Danh sách là 1 → 3 → 4 (chỉ mục 1 chứa D40, chỉ mục 3 chứa D32, chỉ mục 4 chứa D11, con trỏ của nó là $\emptyset$); danh sách rỗng bắt đầu từ chỉ mục 2 và tiếp tục 2 → 5. Chèn D6 giữa D32 và D11.

    Lấy nút rỗng đầu tiên, chỉ mục 2, và đặt FreeStart thành con trỏ của nó, 5; lưu D6 vào Data[2]; đặt Pointer[2] thành giá trị Pointer[3] đang chứa, tức là 4; đặt Pointer[3] thành 2. Danh sách đọc là 1 → 3 → 2 → 4 và danh sách rỗng là 5 → $\emptyset$. Câu trả lời cho "danh sách liên kết có thể được thực hiện như thế nào" chính xác bao gồm những phần này: một mảng (hoặc mảng bản ghi) cho dữ liệu, một mảng song song cho các con trỏ chứa chỉ mục, một con trỏ bắt đầu, một con trỏ danh sách rỗng và một giá trị null như $-1$ cho phần cuối.

    Ví dụ đã làm. Một hàng đợi vòng được lưu trong mảng có kích thước 5 (các chỉ mục 0 đến 4) với Front = 3, Rear = 3 và một phần tử được lưu. Hai phần tử được thêm vào, sau đó hai phần tử được loại bỏ. Các con trỏ nằm ở đâu, và tại sao lại dùng hàng đợi vòng? Mỗi lần di chuyển đều sử dụng (pointer + 1) MOD size, nên các con trỏ quay. Thêm hai lần sẽ di chuyển Rear: $3 \rightarrow 4$, rồi $4 \rightarrow 0$ (vì $(4+1) \bmod 5 = 0$), nên Rear = 0 và ba phần tử được lưu. Xóa hai lần di chuyển Front theo cách tương tự: $3 \rightarrow 4$, rồi $4 \rightarrow 0$, để lại Front = 0 và một phần tử. Sự quay lại là mục đích cốt lõi: trong hàng đợi mảng tuyến tính, các con trỏ di chuyển ra cuối và không gian được giải phóng ở phía trước bị lãng phí ngay cả khi hàng đợi rỗng. Hãy nhớ rằng hàng đợi loại bỏ ở Đầu và thêm ở Cuối - ngăn xếp chỉ dùng một con trỏ cho cả hai chức năng.

    Explore · ⁨Khám phá⁩

    Implementing ADTs with arrays · ⁨Triển khai các ADT sử dụng mảng.⁩

    FIFO · ⁨FIFO.⁩

    A queue is first-in-first-out — enqueue at the back, dequeue from the front. · ⁨Một hàng đợi hoạt động theo nguyên tắc đầu vào - đầu ra — thêm vào phía sau, lấy ra từ phía trước.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    pointer/ˈpɔɪntə/ con trỏ
    node/nəʊd/ nút
    traverse/trəˈvɜːs/ duy travers (đi qua các phần tử)
    free list/friː lɪst/ danh sách tự do
    overflow/ˌəʊvəˈfləʊ/ tràn
    underflow/ˌʌndəˈfləʊ/ quá nhỏ (underflow)
    circular array/ˈsɜːkjʊlə əˈreɪ/ mảng vòng tròn
    10.4

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly.

    Term Definition
    record a data structure that holds a set of data items (fields) of different data types under one identifier
    array a data structure that holds a fixed number of elements of the same data type under one identifier, each accessed by an index
    index the number that identifies one element of an array
    upper bound, lower bound the largest and smallest valid index of an array
    text file a file that stores data as lines of characters, which a program reads and writes one line at a time
    abstract data type a collection of data together with a set of operations on that data
    stack a list in which items are added to and removed from the same end, the top, so the last item added is the first removed (LIFO)
    queue a list in which items are added at the rear and removed from the front, so the first item added is the first removed (FIFO)
    linked list a list in which each node holds a data item and a pointer to the next node, with a start pointer to the first node
    pointer a variable that holds the address (or index) of a node or of a position in a structure
    linear search checking each element in turn from the first until the target is found or the end is reached
    bubble sort repeated passes through the array comparing adjacent pairs and swapping those out of order, until a pass makes no swaps
    Tiếng Việt

    Một câu hỏi định nghĩa được chấm dựa trên từ ngữ cố định. Hãy học những câu này đúng chính xác.

    Thuật ngữ Định nghĩa
    bản ghi một cấu trúc dữ liệu giữ một tập hợp các mục dữ liệu (các trường) với các kiểu dữ liệu khác nhau dưới một định danh duy nhất
    mảng một cấu trúc dữ liệu giữ một số lượng phần tử cố định của cùng một kiểu dữ liệu dưới một định danh duy nhất, mỗi phần tử được truy cập bằng chỉ mục
    chỉ mục số xác định một phần tử của mảng
    cận trên, cận dưới chỉ mục hợp lệ lớn nhất và nhỏ nhất của một mảng
    tệp văn bản một tệp lưu dữ liệu dưới dạng các dòng ký tự, mà chương trình đọc và viết từng dòng một
    kiểu dữ liệu trừu tượng một tập hợp dữ liệu kèm theo một tập hợp các thao tác trên dữ liệu đó
    ngăn xếp một danh sách nơi các phần tử được thêm vào và loại bỏ từ cùng một đầu, đỉnh, nên phần tử được thêm cuối cùng sẽ là phần tử được loại bỏ đầu tiên (LIFO)
    hàng đợi một danh sách nơi các phần tử được thêm vào ở phía sau và loại bỏ từ phía trước, nên phần tử được thêm đầu tiên sẽ là phần tử được loại bỏ đầu tiên (FIFO)
    danh sách liên kết một danh sách trong đó mỗi nút chứa một mục dữ liệu và con trỏ đến nút tiếp theo, với con trỏ bắt đầu trỏ đến nút đầu tiên
    con trỏ một biến chứa địa chỉ (hoặc chỉ số) của một nút hoặc vị trí trong cấu trúc
    tìm kiếm tuyến tính kiểm tra từng phần tử lần lượt từ đầu cho đến khi tìm thấy mục tiêu hoặc đạt đến cuối danh sách
    sắp xếp nổi bọt lặp lại các lượt duyệt qua mảng để so sánh các cặp kề nhau và hoán đổi những cặp không đúng thứ tự, cho đến khi một lượt duyệt nào đó không thực hiện hoán đổi nào nữa
    10.4

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Choose the right data structure and justify it (a record for mixed fields, a 2-D array for a grid).
    • Know how to implement a stack, queue and linked list with an array and pointers (top; front/rear; next).
    • Distinguish an ADT (its behaviour) from its implementation (array plus pointers).

    Common mistakes

    • A record declaration without ENDTYPE, or fields without types. Every field is a DECLARE line with a type.
    • Reading past the end of a file, or writing with WRITE when the file must keep its contents. Test EOF before each read; use APPEND to add.
    • Writing a number to a text file without converting it. A file holds strings: NUM_TO_STR out, STR_TO_NUM back.
    • Forgetting the checks. Push and enqueue test for full first; Pop and dequeue test for empty first, and the answer says so.
    • Losing the rest of the list when inserting a node. Set the new node's pointer to the old next node before changing the previous node's pointer.
    • A linear search that never says "not found". Initialise the position to $-1$ and test it after the loop.
    Tiếng Việt
    • Chọn cấu trúc dữ liệu phù hợp và giải thích lý do (một bản ghi cho các trường hỗn hợp, một mảng 2-D cho lưới).
    • Hiểu cách triển khai ngăn xếp, hàng đợi và danh sách liên kết bằng mảng và con trỏ (đỉnh; trước/sau; tiếp theo).
    • Phân biệt ADT (hành vi của nó) với việc triển khai của nó (mảng cộng con trỏ).

    Lỗi thường gặp

    • Khai báo bản ghi thiếu ENDTYPE, hoặc các trường thiếu kiểu. Mỗi trường là một DECLARE dòng có kèm kiểu.
    • Đọc vượt quá cuối tập tin, hoặc ghi với WRITE khi tập tin cần giữ nguyên nội dung. Kiểm tra EOF trước mỗi phép đọc; dùng APPEND để thêm.
    • Ghi một số vào tập tin văn bản mà không chuyển đổi. Tập tin chứa chuỗi: NUM_TO_STR ra, STR_TO_NUM vào.
    • Bỏ qua các phép kiểm tra. Push và enqueue kiểm tra đầy trước; Pop và dequeue kiểm tra rỗng trước, và câu trả lời nêu rõ điều này.
    • Mất phần còn lại của danh sách khi chèn một nút. Đặt con trỏ của nút mới trỏ đến nút tiếp theo cũ trước khi thay đổi con trỏ của nút trước đó.
    • Một thuật toán tìm kiếm tuyến tính không bao giờ báo "không tìm thấy". Khởi tạo vị trí ở $-1$ và kiểm tra sau vòng lặp.
  • 11

    Programming · ⁨Lập trình⁩

    Watch lesson · ⁨Xem bài học⁩
    11.1

    Programming basics

    Syllabus · ⁨Chương trình⁩
    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
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Triển khai và viết pseudocode từ thiết kế đã cho được trình bày dưới dạng sơ đồ luồng chương trình hoặc tiếng Anh có cấu trúc
    Viết giả mã cho: • khai báo và khởi tạo hằng số • khai báo biến • gán giá trị cho biến • biểu thức liên quan đến các toán tử số học hoặc logic, nhập từ bàn phím và xuất ra màn hình
    Sử dụng các hàm tích hợp và thủ tục thư viện Bất kỳ hàm nào không có trong hướng dẫn pseudocode sẽ được cung cấp Các hàm thao tác chuỗi luôn được cung cấp

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Lines of source code on a dark screen
    Programming turns a design into instructions written as code
    A programmer working at a computer
    A programmer writes the code and tests it as they go

    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:

    1. find the variables 变量 and their data types 数据类型.
    2. turn input/output boxes into INPUT / OUTPUT.
    3. turn decision diamonds into IF...ELSE...ENDIF (or CASE).
    4. turn loop arrows into WHILE, REPEAT...UNTIL, or FOR.
    5. turn process boxes into assignments or calculations.
    6. check by tracing a small input.
    A mapping from flowchart symbols to pseudocode: an input/output parallelogram becomes INPUT or OUTPUT, a decision diamond becomes IF...THEN or CASE, a process box becomes an assignment x = expression, and a loop arrow becomes WHILE, FOR or REPEAT
    Each flowchart symbol becomes a pseudocode keyword

    Constants and variables

    A constant 常量 holds a value that never changes; a variable holds one that may change. Declare them with a type:

    A variable's value can change; a constant stays fixed
    A variable's value can change; a constant stays fixed
    CONSTANT Pi = 3.14159
    DECLARE Radius : REAL
    DECLARE Area : REAL
    
    Radius ← 5
    Area ← Pi * Radius * Radius
    

    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 ← FALSE
    Initial ← 'K'
    Price ← 12.99
    Count ← Count + 1
    Name ← "Li Wei"
    

    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 赋值:

    Total ← Total + 1
    Average ← Sum / Count
    

    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

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

    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.

    The string COMPUTER shown as eight numbered character boxes (positions 1 to 8), with worked results: LENGTH(s) = 8, LEFT(s, 3) = COM, MID(s, 4, 3) = PUT, RIGHT(s, 2) = ER, and UCASE/LCASE changing the letter case
    The common string routines acting on s = "COMPUTER" (positions 1–8)

    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.

    Explore · ⁨Khám phá⁩

    A variable is a labelled box · ⁨Một biến là một hộp có nhãn⁩

    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. · ⁨Mỗi phép gán lưu một giá trị vào một hộp tên; việc gán lại cùng tên sẽ ghi đè lên nó. Hãy lần lượt thực thi chương trình và xem mỗi hộp nhận giá trị hiện tại của nó.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    flowchart/ˈfləʊtʃɑːt/ sơ đồ khối
    structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ tiếng Anh có cấu trúc
    pseudocode/ˈsuːdəʊkəʊd/ pseudocode (giả mã)
    variables/ˈveərɪəblz/ biến
    data types/ˈdeɪtə taɪps/ kiểu dữ liệu
    assignment/əˈsaɪnmənt/ gán (assignment)
    constant/ˈkɒnstənt/ không đổi
    identifier/aɪˈdentɪfaɪə/ định danh
    operators/ˈɒpəreɪtəz/ toán tử
    precedence/ˈpresɪdəns/ độ ưu tiên
    library routines/ˈlaɪbrəri ruːˈtiːnz/ routine thư viện
    insert/ˈɪnsɜːt/ insert
    program library/ˈprəʊɡræm ˈlaɪbrəri/ thư viện chương trình
    concatenation/kənˌkætəˈneɪʃn/ nối chuỗi (concatenation)
    11.2

    Selection

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    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
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Sử dụng giả mã để viết: • câu lệnh ‘IF’ bao gồm cả mệnh đề ‘ELSE’ và câu lệnh IF lồng nhau • cấu trúc ‘CASE’ • vòng lặp ‘điều khiển bằng đếm’: • vòng lặp ‘điều kiện hậu’ • vòng lặp ‘điều kiện tiền’
    Giải thích tại sao một cấu trúc vòng lặp này có thể phù hợp hơn để giải quyết bài toán so với các cấu trúc khác

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Selection 选择 chooses which steps run.

    IF age >= 18 THEN
        OUTPUT "Adult"
    ELSE
        OUTPUT "Minor"
    ENDIF
    
    A flowchart: from start, a decision diamond tests age >= 18; the TRUE branch outputs Adult and the FALSE branch outputs Minor, and both rejoin at end
    An IF...ELSE tests the condition once, then runs exactly one branch

    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:

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

    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:

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

    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.

    A flowchart of a CASE OF Grade statement: the value is tested against each guard in turn (a single value, a value list, then a range); the first matching branch runs its statement, otherwise the OTHERWISE branch runs, and all branches rejoin at ENDCASE
    A CASE statement runs the branch that matches the value

    Worked example. Rewrite this with the same functionality, without using a CASE structure.

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

    Each value becomes a branch of a chain of IFs, and OTHERWISE becomes the last ELSE:

    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
    

    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.

    Explore · ⁨Khám phá⁩

    Selection (IF / ELSE) · ⁨Chọn lọc (IF / ELSE)⁩

    Change the input and see which branch runs — the essence of selection. · ⁨Thay đổi đầu vào và xem nhánh nào chạy — bản chất của việc chọn lọc.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    selection/sɪˈlekʃn/ chọn lọc
    nested/ˈnestɪd/ lồng nhau
    logic error/ˈlɒdʒɪk ˈerə/ lỗi logic
    11.2

    Iteration

    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:

    FOR i ← 1 TO 10
        OUTPUT i
    NEXT i
    

    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:

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

    Post-condition (REPEAT...UNTIL) loop

    A post-condition loop 后测循环 tests the condition after each pass, so it always runs at least once:

    REPEAT
        INPUT password
    UNTIL password = correctPassword
    

    Choosing the right loop

    Three flowchart columns. FOR: a count box (i = 1 to N) then a body box, looping back, for a set number of passes. WHILE: a test diamond above a body box, so the condition is checked before the body and the loop may run zero times. REPEAT: a body box above a test diamond, so the condition is checked after the body and the loop runs at least once
    The three loops differ in where the condition is tested — before the body (WHILE), after it (REPEAT), or a set number of times (FOR)
    • 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.

    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

    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
    CALL Start()
    

    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.

    Explore · ⁨Khám phá⁩

    Trace a loop, pass by pass · ⁨Theo dõi vòng lặp, từng bước một⁩

    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. · ⁨Bảng theo dõi ghi lại mỗi biến sau mỗi lần lặp của vòng lặp. Hãy xem bộ đếm i tăng dần trong khi tổng tích lũy đang hình thành — đúng những gì câu hỏi theo dõi đề thi yêu cầu bạn điền.⁩

    Explore · ⁨Khám phá⁩

    Tracing a loop · ⁨Theo dõi vòng lặp⁩

    Step through the loop and watch the variables change each pass — exactly what a trace table records. · ⁨Từng bước một vòng lặp và quan sát các biến thay đổi sau mỗi lượt — đúng những gì bảng truy vết ghi lại.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    array/əˈreɪ/ mảng (array)
    trace table/treɪs ˈteɪbl/ bảng theo dõi (trace table)
    iteration/ˌɪtəˈreɪʃn/ lặp lại
    count-controlled loop/kaʊnt kənˈtrəʊld luːp/ vòng lặp điều khiển bằng đếm
    pre-condition loop/priː kənˈdɪʃn luːp/ vòng lặp tiền điều kiện
    post-condition loop/pəʊst kənˈdɪʃn luːp/ vòng lặp hậu điều kiện
    dry run/draɪ rʌn/ chạy thử khô (dry run)
    11.3

    Procedures and functions

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Define and use a procedure
    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
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Định nghĩa và sử dụng thủ tục
    Giải thích vị trí thích hợp trong quá trình xây dựng thuật toán để sử dụng một thủ tục
    Sử dụng tham số Một thủ tục có thể không có, một hoặc nhiều tham số Một tham số có thể được truyền theo chỉ trỏ hoặc theo giá trị
    Định nghĩa và sử dụng hàm
    Giải thích nơi nào trong quá trình xây dựng thuật toán thì phù hợp để sử dụng một hàm Một hàm được sử dụng trong biểu thức, ví dụ: giá trị trả về thay thế cho lời gọi
    Sử dụng thuật ngữ liên quan đến thủ tục và hàm bao gồm header thủ tục/hàm, giao diện thủ tục/hàm, tham số, thực tham số, giá trị trả về
    Viết giả mã hiệu quả

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    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.

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

    Function

    A function 函数 is like a procedure but it returns a value that becomes part of an expression.

    FUNCTION Square(x : INTEGER) RETURNS INTEGER
        RETURN x * x
    ENDFUNCTION
    
    result ← Square(5) + 1     // result = 26
    

    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.

    Two panels. Procedure: call Greet(Ada) does an action and prints Hello, Ada, returning no value. Function: set y = Square(5) computes 5 times 5 = 25, returns 25, so y then holds 25
    A procedure does an action and returns nothing; a function returns a value you use in an expression

    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.
    Two memory-box diagrams. Pass by value: the caller's variable x = 5 is copied into a separate parameter box a = 5, so changing a leaves x as 5. Pass by reference: the parameter a is an arrow pointing to the caller's own x box, so changing a changes x too
    Pass by value copies the value into a new box; pass by reference lets the routine change the caller's own variable
    PROCEDURE Swap(BYREF a : INTEGER, BYREF b : INTEGER)
        DECLARE temp : INTEGER
        temp ← a
        a ← b
        b ← temp
    ENDPROCEDURE
    

    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?

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

    Three calls of the same procedure on a timeline; each call creates its own local MyString box, new and empty, which is gone when the call returns, while one global MyString box above them keeps its value between the calls
    A local variable is a new, empty box on every call; only a global variable (or a BYREF parameter) keeps a value between calls
    A large outer box labelled global scope holds the global variable Total, visible everywhere, and a smaller inner box labelled PROCEDURE Calc, local scope, holds the local variable temp, which exists only while Calc runs
    A global variable is visible everywhere; a local variable exists only inside its own procedure

    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:

    An annotated pseudocode function, CountAbove, with a callout on each part that earns a mark: the header with its parameter and return type, the local declarations, the total initialised before the loop, the FOR loop over every element, the IF condition with the right boundary, the update inside the IF, the closed constructs, and the RETURN after the loop
    Each part of a module answer carries its own mark, so write all of them even when one is uncertain
    1. 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.
    2. Local declarations: DECLARE every local variable with its type, and initialise counters and totals (Count ← 0).
    3. The loop that visits every element: FOR Index ← 1 TO 50 for an array whose size is given; WHILE NOT EOF(...) for a file.
    4. The condition, with the right comparison and boundary, on the right item: IF Score[Index] > Limit THEN.
    5. The update inside the branch: the count increased, the value stored, or the message output.
    6. 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.

    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
    

    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.

    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
    

    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 word RACECAR in seven numbered boxes; arcs pair position 1 with 7, 2 with 6 and 3 with 5, labelled position i and position Len minus i plus 1; the middle character has no pair
    A palindrome check pairs position i with position Len - i + 1 and stops at the middle
    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
    

    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.

    Explore · ⁨Khám phá⁩

    The call stack: push on call, pop on return · ⁨Ngăn gọi (call stack): đẩy vào khi gọi, rút ra khi trả về⁩

    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. · ⁨Gọi một thủ tục sẽ đẩy một khung mới lên trên; trả về sẽ xóa nó đi và gửi lại một giá trị cho người gọi. Khung đang thực thi luôn là khung nằm ở vị trí trên cùng.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    function/ˈfʌŋkʃn/ hàm
    parameters/pəˈræmɪtəz/ tham số
    procedure/prəˈsiːdʒə/ thủ tục
    structured programming/ˈstrʌktʃəd ˈprəʊɡræmɪŋ/ lập trình có cấu trúc
    subroutines/ˈsʌbruːtiːnz/ subroutine
    return value/rɪˈtɜːn ˈvæljuː/ giá trị trả về
    arguments/ˈɑːɡjuːmənts/ tham số
    pass by value/pæs baɪ ˈvæljuː/ truyền theo giá trị
    pass by reference/pæs baɪ ˈrefrəns/ truyền theo tham chiếu
    global variable/ˈɡləʊbl ˈveərɪəbl/ biến toàn cục
    local variable/ˈləʊkl ˈveərɪəbl/ biến cục bộ
    scope/skəʊp/ phạm vi
    decomposition/ˌdiːkɒmpəˈzɪʃn/ decomposition
    signature/ˈsɪɡnɪtʃə/ ký hiệu hàm
    format/ˈfɔːmæt/ format (định dạng)
    Validation/ˌvælɪˈdeɪʃn/ Kiểm tra tính hợp lệ
    11.3

    Writing efficient pseudocode

    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.
    Move work that never changes out of the loop, so it runs once instead of every pass
    Move unchanging work out of the loop so it runs once
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    invariant/ɪnˈveərɪənt/ bất biến
    linear search/ˈlɪnɪə sɜːtʃ/ tìm kiếm tuyến tính
    11.3

    Testing and errors

    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.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    run-time error/rʌn taɪm ˈerə/ lỗi thời gian chạy
    syntax error/ˈsɪntæks ˈerə/ lỗi cú pháp
    IDE/ˌaɪ diː ˈiː/ Môi trường phát triển tích hợp (IDE)
    breakpoint/ˈbreɪkpɔɪnt/ điểm dừng
    single stepping/ˈsɪŋɡl ˈstepɪŋ/ bước đơn
    11.3

    Definitions the examiner accepts

    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
    11.3

    Exam tips

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

    Software Development · ⁨Phát triển phần mềm⁩

    Watch lesson · ⁨Xem bài học⁩
    12.1

    Program development life cycle · ⁨Chu kỳ phát triển phần mềm⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the purpose of a development life cycle
    Show understanding of the need for different development life cycles depending on the program being developed Including: waterfall, iterative, rapid application development (RAD)
    Describe the principles, benefits and drawbacks of each type of life cycle
    Show understanding of the analysis, design, coding, testing and maintenance stages in the program development life cycle
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về mục đích của vòng đời phát triển
    Thể hiện sự hiểu biết về nhu cầu về các vòng đời phát triển khác nhau tùy thuộc vào chương trình đang được phát triển Bao gồm: waterfall, lặp lại, **phát triển ứng dụng nhanh chóng (RAD)
    Mô tả nguyên tắc, lợi ích và nhược điểm của từng loại vòng đời
    Thể hiện sự hiểu biết về các giai đoạn phân tích, thiết kế, viết code, kiểm thử và bảo trì trong vòng đời phát triển chương trình

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    A development life cycle 开发生命周期 is the set of stages from idea to finished, maintained software. It exists to plan, manage and control a project — to build the right product, on time, with good quality.

    Why a life cycle is needed

    The examiner's list for "the purpose of a development life cycle": it breaks a large project into stages that can be planned and managed; it makes sure the requirements are found and agreed before design and coding begin; it builds in testing and documentation rather than leaving them to the end; it lets the team track progress against milestones and manage risk; and it gives the customer defined points at which to review the work. Without one, a team codes first and discovers late that it built the wrong thing.

    Why there are different ones

    No single life cycle fits every project, so several development life cycles exist. The choice depends on the size and complexity, how clear the requirements 需求 are at the start, how much change is expected, the risk level, the team, and the deadline.

    Common models

    • Waterfall 瀑布模型 — a linear sequence (Analysis → Design → Coding → Testing → Maintenance), each stage finished before the next. Clear and well-documented; good for stable requirements, but poor at coping with mid-project change, and the customer sees nothing working until the end.
    • Iterative model 迭代模型 — repeated passes, each producing a partial version that is reviewed and refined. Catches problems earlier; good when requirements are discovered over time, but harder to estimate.
    • Rapid Application Development 快速应用开发 (RAD) — heavy use of a prototype 原型 and user feedback. Very fast first delivery; good for changing requirements, but depends on user availability and suits smaller systems.
    • Agile 敏捷 — short iterations ("sprints"), constant collaboration and testing. Flexible and adaptive, but needs a committed customer and a skilled team.

    Principles, benefits and drawbacks — as the mark scheme lists them.

    Model Principle Benefits Drawbacks
    waterfall the stages run in a fixed order, each completed and signed off before the next starts; going back means restarting the sequence simple to manage; every stage is fully documented; requirements are fixed early, so costs and dates can be estimated inflexible once a stage is finished; no working software until late; a mistake in analysis is expensive to fix later; the customer cannot see progress
    iterative a small working version is built first, then repeatedly improved through further versions until complete working software early and often; problems found in early versions; the customer's feedback shapes each version; requirements can change hard to estimate the total time and cost; repeated testing costs effort; needs the customer to be available; can drift if versions are not planned
    RAD prototypes of parts of the system are built quickly and refined with the user until accepted, often in parallel by several teams very fast delivery of a first version; the user is involved throughout, so the product fits their needs; changes are easy to absorb needs skilled developers and committed users; documentation is weak; less suited to large or safety-critical systems

    Worked example. A company must be the first to launch a website for a new games console, and the design will change as the console's features are announced. Name the most suitable life cycle and justify it.

    RAD. A prototype of the site can be built and shown to the users within days, and refined as the requirements change; the site is small enough for a prototype-driven approach, and speed of delivery is the main requirement. Waterfall would fix the requirements before any page was built and deliver nothing until the end.

    The standard stages

    Each stage has a purpose, an output and typical activities — a "describe the … stage" question wants two or three of these.

    • analysis — find out what the program must do. Activities: interviews, questionnaires and observation of the current system; a feasibility study; agreeing the requirements specification, which every later stage is checked against.
    • design — decide how it will do it. Outputs: the structure chart (modules and parameters), flowcharts or pseudocode for each module, identifier tables and data structures, screen and file layouts, and the test plan written now, from the specification, before any code exists.
    • coding (implementation 实现) — write the program in a high-level language, module by module, following the design; each module is tested as it is written.
    • testing — run the program against the test plan (normal, abnormal, extreme and boundary data) and correct the errors found; integration, alpha, beta and acceptance testing follow.
    • maintenance 维护 — after release, correct faults, adapt the program to new hardware, software or law, and improve it (see below).

    Worked example. Complete the waterfall diagram Analysis → ? → ? → ? → Maintenance and describe what happens at the design stage.

    The missing stages are Design, Coding, Testing. At the design stage the requirements are turned into a plan for the program: the problem is decomposed into modules (a structure chart), the algorithm for each module is written as pseudocode or a flowchart, the data structures and identifiers are chosen, the screens and files are laid out, and the test plan is written from the specification.

    Tiếng Việt

    Chu kỳ phát triển là tập hợp các giai đoạn từ ý tưởng đến sản phẩm phần mềm hoàn thiện và được bảo trì. Nó tồn tại để lập kế hoạch, quản lý và kiểm soát dự án — nhằm xây dựng đúng sản phẩm, đúng hạn, với chất lượng tốt.

    Một nhóm phần mềm đang hợp tác xung quanh bàn làm việc
    Phần mềm được xây dựng bởi các đội ngũ tuân theo chu kỳ phát triển để duy trì sự phối hợp

    Sơ đồ luồng với các terminators, hộp quy trình và kim cương quyết định *Sơ đồ luồng lên kế hoạch cho logic chương trình trong giai đoạn thiết kế của chu kỳ

    Tại sao cần có chu kỳ

    Danh mục của giám khảo cho "mục đích của chu kỳ phát triển": nó chia nhỏ dự án lớn thành các giai đoạn có thể lập kế hoạch và quản lý; đảm bảo yêu cầu được xác định và thống nhất trước khi thiết kế và mã hóa bắt đầu; tích hợp sẵn kiểm thử và tài liệu thay vì để lại đến cuối cùng; giúp đội ngũ theo dõi tiến độ dựa trên các cột mốc và quản lý rủi ro; đồng thời cung cấp cho khách hàng các mốc thời gian xác định để xem xét công việc. Nếu không có chu kỳ này, đội ngũ sẽ viết mã trước rồi mới nhận ra muộn rằng họ đã xây dựng sai thứ gì đó.

    Tại sao có nhiều loại khác nhau

    Không có chu kỳ nào phù hợp với mọi dự án, nên có nhiều chu kỳ phát triển khác nhau. Việc lựa chọn phụ thuộc vào quy mô và độ phức tạp, mức độ rõ ràng của yêu cầu ở giai đoạn đầu, mức độ thay đổi dự kiến, mức độ rủi ro, đội ngũ và thời hạn.

    Các mô hình phổ biến

    • Waterfall (Thác nước) — một dãy tuyến tính (Phân tích → Thiết kế → Mã hóa → Kiểm thử → Bảo trì), mỗi giai đoạn phải hoàn tất trước khi sang giai đoạn tiếp theo. Rõ ràng và có tài liệu đầy đủ; phù hợp với yêu cầu ổn định, nhưng kém linh hoạt khi có thay đổi giữa chừng, và khách hàng chỉ thấy sản phẩm hoạt động được đến tận cuối.
    • Mô hình lặp (Iterative) — các vòng lặp lặp đi lặp lại, mỗi vòng tạo ra một phiên bản từng phần để xem xét và tinh chỉnh. Phát hiện vấn đề sớm hơn; phù hợp khi yêu cầu được phát hiện dần theo thời gian, nhưng khó ước tính hơn.
    • Phát triển ứng dụng nhanh (RAD) — sử dụng mạnh mẽ bản mẫu và phản hồi của người dùng. Giao bản đầu tiên rất nhanh; phù hợp với yêu cầu thay đổi liên tục, nhưng phụ thuộc vào sự có mặt của người dùng và thích hợp cho hệ thống quy mô nhỏ.
    • Agile: các vòng lặp ngắn ("sprints"), cộng tác và kiểm thử liên tục. Linh hoạt và thích nghi cao, nhưng đòi hỏi khách hàng cam kết và đội ngũ có kỹ năng.

    Năm hộp (Phân tích, Thiết kế, Mã hóa, Kiểm thử, Bảo trì) xếp tầng xuống dưới, mỗi hộp dẫn đến hộp tiếp theo *Mô hình thác nước: mỗi giai đoạn phải hoàn tất trước khi giai đoạn sau bắt đầu

    Vòng Thiết kế-Xây dựng-Kiểm-thử-Xem xét với vòng lặp quay lại Thiết kế, và thanh phiên bản ngày càng cao qua mỗi lần lặp cho đến khi hoàn thành *Mô hình lặp: các lần lặp lại giúp tinh chỉnh chương trình

    Ba phần được xây dựng song song như các bản mẫu, sau đó tinh chỉnh với phản hồi người dùng, rồi kết hợp thành hệ thống cuối cùng *Phát triển ứng dụng nhanh: các đội làm việc trên các phần khác nhau song song

    Nguyên tắc, lợi ích và nhược điểm — theo danh sách sơ đồ chấm điểm.

    Mô hình Nguyên tắc Lợi ích Nhược điểm
    Thác nước các giai đoạn diễn ra theo thứ tự cố định, mỗi giai đoạn phải hoàn tất và được ký duyệt trước khi giai đoạn sau bắt đầu; quay lại nghĩa là phải khởi động lại toàn bộ chuỗi dễ quản lý; mọi giai đoạn đều có tài liệu đầy đủ; yêu cầu được cố định sớm, nên chi phí và thời gian có thể được ước tính thiếu linh hoạt khi một giai đoạn đã hoàn tất; không có phần mềm hoạt động cho đến tận cuối; sai sót trong phân tích sẽ tốn kém để sửa chữa về sau; khách hàng không thể thấy được tiến độ
    Lặp một phiên bản hoạt động nhỏ được xây dựng trước, sau đó cải tiến liên tục qua các phiên bản tiếp theo cho đến khi hoàn thành phần mềm hoạt động sớm và thường xuyên; vấn đề được phát hiện ở các phiên bản đầu; phản hồi của khách hàng định hình mỗi phiên bản; yêu cầu có thể thay đổi khó ước tính tổng thời gian và chi phí; kiểm thử lặp lại tốn sức lực; đòi hỏi khách hàng phải có mặt; có thể lạc hướng nếu các phiên bản không được lên kế hoạch kỹ
    RAD các bản mẫu của các phần hệ thống được xây dựng nhanh chóng và tinh chỉnh với người dùng cho đến khi được chấp nhận, thường là song song bởi nhiều đội giao bản đầu tiên cực kỳ nhanh; người dùng tham gia suốt quá trình, nên sản phẩm đáp ứng đúng nhu cầu của họ; thay đổi dễ dàng được hấp thụ đòi hỏi lập trình viên có kỹ năng và người dùng cam kết; tài liệu yếu; ít phù hợp với hệ thống lớn hoặc hệ thống quan trọng đến an toàn

    Ví dụ giải. Một công ty phải là đơn vị đầu tiên ra mắt trang web cho máy chơi game mới, và thiết kế sẽ thay đổi khi các tính năng của máy được công bố. Hãy nêu tên chu kỳ phát triển phù hợp nhất và giải thích lý do.

    RAD. Một bản mẫu của trang web có thể được xây dựng và trưng bày cho người dùng trong vài ngày, và tinh chỉnh khi yêu cầu thay đổi; trang web đủ nhỏ để áp dụng phương pháp dựa trên bản mẫu, và tốc độ giao hàng là yêu cầu chính. Mô hình Thác nước sẽ cố định yêu cầu trước khi bất kỳ trang nào được xây dựng và không giao任何东西 cho đến tận cuối.

    Các giai đoạn tiêu chuẩn

    Mỗi giai đoạn có một mục đích, một sản phẩm đầu ra và các hoạt động điển hình — câu hỏi "mô tả … giai đoạn" yêu cầu liệt kê hai hoặc ba yếu tố trong số này.

    • phân tích — xác định điều gì chương trình cần làm. Các hoạt động: phỏng vấn, khảo sát và quan sát hệ thống hiện tại; nghiên cứu khả thi; thống nhất tài liệu yêu cầu, mà mọi giai đoạn sau này đều được kiểm tra dựa trên đó.
    • thiết kế — quyết định làm thế nào để thực hiện. Kết quả đầu ra: biểu đồ cấu trúc (các mô-đun và tham số), sơ đồ khối hoặc giả mã cho từng mô-đun, bảng định danh và cấu trúc dữ liệu, bố trí màn hình và tập tin, cùng kế hoạch thử nghiệm được viết ngay lúc này, từ tài liệu yêu cầu, trước khi có bất kỳ mã nguồn nào.
    • lập trình (triển khai) — viết chương trình bằng ngôn ngữ cấp cao, theo từng mô-đun, tuân theo thiết kế; mỗi mô-đun được thử nghiệm ngay khi viết xong.
    • kiểm thử — chạy chương trình đối chiếu với kế hoạch thử nghiệm (dữ liệu bình thường, bất thường, cực đoan và biên) và sửa các lỗi tìm thấy; tiếp theo là thử nghiệm tích hợp, alpha, beta và chấp nhận.
    • bảo trì — sau khi phát hành, sửa lỗi, điều chỉnh chương trình cho phần cứng, phần mềm hoặc luật pháp mới, và cải tiến nó (xem bên dưới).

    Ví dụ minh họa. Hoàn thành sơ đồ thác nước Phân tích → ? → ? → ? → Bảo trì và mô tả những gì xảy ra ở giai đoạn Thiết kế.

    Các giai đoạn bị thiếu là Thiết kế, Lập trình, Kiểm thử. Ở giai đoạn Thiết kế, các yêu cầu được chuyển đổi thành kế hoạch cho chương trình: bài toán được phân rã thành các mô-đun (biểu đồ cấu trúc), thuật toán cho mỗi mô-đun được viết dưới dạng giả mã hoặc sơ đồ khối, các cấu trúc dữ liệu và định danh được chọn, màn hình và tập tin được bố trí, và kế hoạch thử nghiệm được viết từ tài liệu yêu cầu.

    Explore · ⁨Khám phá⁩

    The program development life cycle · ⁨Vòng đời phát triển phần mềm⁩

    Step through the stages every project passes through. Getting the requirements right in analysis matters most — a mistake caught in testing is far costlier to fix than one caught early. · ⁨Đi qua từng giai đoạn mà dự án nào cũng trải qua. Việc thu thập đúng yêu cầu trong phân tích là quan trọng nhất — một lỗi phát hiện ra trong kiểm thử sẽ tốn kém hơn nhiều để sửa chữa so với việc phát hiện sớm.⁩

    Explore · ⁨Khám phá⁩

    Software process lab · ⁨Phòng thí nghiệm quy trình phần mềm⁩

    Classify development examples by the stage or tool they belong to. · ⁨Phân loại các ví dụ phát triển theo giai đoạn hoặc công cụ chúng thuộc về.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    development life cycle/dɪˈveləpmənt laɪf ˈsaɪkl/ vòng đời phát triển
    requirements/rɪˈkwaɪəmənts/ yêu cầu
    waterfall/ˈwɔːtəfɔːl/ cascade (waterfall)
    iterative model/ˈɪtərətɪv ˈmɒdl/ mô hình lặp lại
    Rapid Application Development/ˈræpɪd ˌæplɪˈkeɪʃn dɪˈveləpmənt/ Phát triển ứng dụng nhanh
    prototype/ˈprəʊtəʊtaɪp/ bản mẫu
    Agile/ˈædʒaɪl/ Agile
    12.2

    Program design tools · ⁨Công cụ thiết kế chương trình⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Use a structure chart to decompose a problem into sub-tasks and express the parameters passed between the various modules/procedures/functions which are part of the algorithm design Describe the purpose of a structure chart Construct a structure chart for a given problem Derive equivalent pseudocode from a structure chart
    Show understanding of the purpose of state-transition diagrams to document an algorithm
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Sử dụng biểu đồ cấu trúc để phân rã một bài toán thành các tác vụ con và biểu diễn các tham số được truyền giữa các mô-đun/procedure/hàm khác nhau, là một phần của thiết kế thuật toán Mô tả mục đích của biểu đồ cấu trúc Xây dựng biểu đồ cấu trúc cho một bài toán đã cho Rút ra giả mã tương đương từ biểu đồ cấu trúc
    Thể hiện sự hiểu biết về mục đích của sơ đồ chuyển trạng thái để tài liệu hóa một thuật toán

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Structure chart

    A structure chart 结构图 shows the hierarchical decomposition 分解 of a program into modules (subroutines 子程序) and the parameters 参数 passed between them. Each module is a rectangle; lines link caller (above) to callee (below); small arrows show data going down and results coming back up. The design can then be turned into equivalent pseudocode 伪代码.

    It is a design-stage tool, and you can read the procedure signatures off it.

    The symbols the examiner asks about. A box is a module; a line links a caller (above) to the modules it calls (below), read left to right in the order they are called. A small arrow with an open circle at its tail is a data couple — a parameter passed down into a module or a value returned up; an arrow with a filled circle is a control couple, a flag (usually BOOLEAN) that tells the caller what happened. A diamond at a branch means selection: only one of the modules below it is called, depending on a condition. A curved arrow sweeping across the links means iteration: the modules under it are called repeatedly in a loop.

    Worked example. Four modules are defined as PROCEDURE Main(), PROCEDURE ReadData(BYREF Count : INTEGER), FUNCTION IsValid(Value : INTEGER) RETURNS BOOLEAN and PROCEDURE Report(Total : INTEGER, Count : INTEGER). Main calls ReadData, then calls IsValid once for each value read, then calls Report. Describe the structure chart.

    Main at the top; ReadData, IsValid and Report in a row beneath it, left to right in calling order. On the ReadData link an upward data couple Count (a BYREF parameter comes back). On the IsValid link a downward data couple Value and an upward control couple (the BOOLEAN result), with a curved iteration arrow across that link because it is called for each value. On the Report link two downward data couples, Total and Count. Reading the other way, a function is any module that returns a value — its header needs RETURNS and the returned type.

    State-transition diagram

    A state-transition diagram 状态转换图 shows the states 状态 a system can be in and the events that move it between them — good for vending machines, traffic lights, user interfaces. State-transition diagrams are used to document the behaviour of an algorithm or system. Each state is a circle; each transition is an arrow labelled with the event.

    It makes missing transitions easy to spot ("what if a second coin is inserted while awaiting selection?").

    Reading and drawing one. Each transition is labelled input | output (or condition | action): what happened, then what the system does as it changes state. A question gives a table of current state, input, output, next state and asks for the diagram, or the reverse — every row of the table is exactly one arrow. Check that every state has an arrow leaving it for every input that can occur, including the ones that leave the state unchanged (an arrow that loops back to the same state).

    Worked example. A pump controller has states pump off and pump on. In pump off, the input low level detected produces the output activate pump and moves to pump on; in pump on, normal level detected produces deactivate pump and moves to pump off. Any other input leaves the state unchanged. Draw the table.

    Current state Input Output Next state
    pump off low level detected activate pump pump on
    pump off normal level detected — pump off
    pump on normal level detected deactivate pump pump off
    pump on low level detected — pump on

    The two "no change" rows become loop arrows on the diagram; leaving them out loses the mark for completeness.

    Tiếng Việt

    Biểu đồ cấu trúc

    Một biểu đồ cấu trúc thể hiện sự phân rã theo cấp bậc của một chương trình thành các mô-đun (hàm con) và các tham số được truyền giữa chúng. Mỗi mô-đun là một hình chữ nhật; các đường nối gọi hàm (trên) đến hàm được gọi (dưới); các mũi tên nhỏ chỉ dữ liệu đi xuống và kết quả quay lên. Thiết kế sau đó có thể được chuyển thành giả mã tương đương.

                    CalculatePay
                /        |         \
           GetEmployee  CalculateBonus  CalculateTax
           Returns:     Takes: sales    Takes: gross
           employeeID   Returns: bonus  Returns: tax
    

    Đây là công cụ ở giai đoạn Thiết kế, và bạn có thể đọc các ký hiệu thủ tục trực tiếp từ biểu đồ.

    Sơ đồ cấu trúc với Convert temperature ở trên cùng và INPUT, Convert to Celsius, OUTPUT là các mô-đun bên dưới, có tham số temperature trên các đường nối
    Biểu đồ cấu trúc: các mô-đun với các tham số được truyền giữa chúng

    Các ký hiệu mà giám khảo hay hỏi. Một ô vuông là một mô-đun; một đường nối kết nối người gọi (trên) đến các mô-đun mà nó gọi (dưới), đọc từ trái sang phải theo thứ tự được gọi. Một mũi tên nhỏ có vòng tròn mở ở gốc là một cặp dữ liệu — một tham số được truyền xuống vào mô-đun hoặc giá trị được trả lên; một mũi tên có vòng tròn đặc là một cặp điều khiển, một cờ (thường là BOOLEAN) báo cho người gọi biết điều gì đã xảy ra. Một hình thoi tại nhánh có nghĩa là lựa chọn: chỉ một trong các mô-đun bên dưới nó được gọi, tùy thuộc vào điều kiện. Một mũi tên cong quét ngang qua các đường nối có nghĩa là lặp lại: các mô-đun nằm dưới nó được gọi nhiều lần trong vòng lặp.

    Sơ đồ cấu trúc hiển thị mọi ký hiệu: hộp mô-đun, đường gọi, cặp dữ liệu hình tròn mở mang item ID đi xuống, cặp điều khiển hình tròn đặc trả lại cờ in-stock đi lên, hình thoi chọn giữa Print invoice và Reject order, và mũi tên cong đánh dấu các mô-đun lặp lại cho từng đơn hàng
    Các ký hiệu biểu đồ cấu trúc: cặp dữ liệu và cặp điều khiển, hình thoi lựa chọn và mũi tên lặp lại

    Ví dụ minh họa. Bốn mô-đun được định nghĩa là PROCEDURE Main(), PROCEDURE ReadData(BYREF Count : INTEGER), FUNCTION IsValid(Value : INTEGER) RETURNS BOOLEAN và PROCEDURE Report(Total : INTEGER, Count : INTEGER). Main gọi ReadData, sau đó gọi IsValid một lần cho mỗi giá trị được đọc, rồi gọi Report. Hãy mô tả biểu đồ cấu trúc.

    Main ở trên cùng; ReadData, IsValid và Report nằm ngang phía dưới, sắp xếp từ trái sang phải theo thứ tự gọi. Trên đường nối ReadData có cặp dữ liệu đi lên Count (tham số BYREF quay trở lại). Trên đường nối IsValid có cặp dữ liệu đi xuống Value và cặp điều khiển đi lên (kết quả BOOLEAN), kèm theo mũi tên lặp lại cong trên đường nối này vì nó được gọi cho mỗi giá trị. Trên đường nối Report có hai cặp dữ liệu đi xuống,分别是 Total và Count. Đọc theo chiều ngược lại, một hàm là bất kỳ mô-đun nào trả về giá trị — phần đầu của nó cần có RETURNS và kiểu dữ liệu trả về.

    Sơ đồ chuyển trạng thái

    Một sơ đồ chuyển trạng thái hiển thị các trạng thái mà hệ thống có thể ở và các sự kiện di chuyển hệ thống giữa chúng — rất phù hợp cho máy bán hàng tự động, đèn giao thông, giao diện người dùng. Sơ đồ chuyển trạng thái được sử dụng để ghi chép hành vi của thuật toán hoặc hệ thống. Mỗi trạng thái là một hình tròn; mỗi sự chuyển đổi là một mũi tên được gắn nhãn với sự kiện.

       coin inserted               item selected
    [Idle] --------------→ [Awaiting selection] ----------→ [Dispensing]
    

    Nó giúp dễ dàng phát hiện các sự chuyển đổi bị thiếu ("nếu chèn đồng xu thứ hai trong khi đang chờ lựa chọn thì sao?").

    Sơ đồ trạng thái: Locked chuyển sang Waiting for second digit, tiếp theo là Waiting for third digit, rồi đến Unlocked, với các chuyển đổi correct-digit và wrong-digit
    Sơ đồ chuyển trạng thái cho khóa cửa với mã 259

    Đọc và vẽ sơ đồ. Mỗi sự chuyển đổi được gắn nhãn đầu vào | đầu ra (hoặc điều kiện | hành động): những gì đã xảy ra, sau đó hệ thống làm gì khi thay đổi trạng thái. Câu hỏi đưa ra bảng trạng thái hiện tại, đầu vào, đầu ra, trạng thái tiếp theo và yêu cầu vẽ sơ đồ, hoặc ngược lại — mỗi hàng của bảng chính xác là một mũi tên. Kiểm tra xem mỗi trạng thái có mũi tên ra ngoài cho mọi đầu vào có thể xảy ra, bao gồm cả những trường hợp giữ nguyên trạng thái (mũi tên vòng ngược về chính trạng thái đó).

    Ví dụ minh họa. Bộ điều khiển bơm có các trạng thái tắt bơm và bật bơm. Trong tắt bơm, đầu vào phát hiện mực nước thấp tạo ra đầu ra kích hoạt bơm và chuyển sang bật bơm; trong bật bơm, phát hiện mực nước bình thường tạo ra phiên bản tắt bơm và chuyển sang tắt bơm. Mọi đầu vào khác giữ nguyên trạng thái. Hãy vẽ bảng.

    Trạng thái hiện tại Đầu vào Đầu ra Trạng thái tiếp theo
    Tắt bơm Phát hiện mực nước thấp Kích hoạt bơm Bật bơm
    bơm tắt mức bình thường được phát hiện — bơm tắt
    bơm bật mức bình thường được phát hiện vô hiệu hóa bơm bơm tắt
    bơm bật mức thấp được phát hiện — bơm bật

    Hai hàng "không thay đổi" trở thành các mũi tên vòng lặp trên sơ đồ; nếu bỏ qua sẽ bị mất điểm vì thiếu tính toàn vẹn.

    Explore · ⁨Khám phá⁩

    Software process lab · ⁨Phòng thí nghiệm quy trình phần mềm⁩

    Classify development examples by the stage or tool they belong to. · ⁨Phân loại các ví dụ phát triển theo giai đoạn hoặc công cụ chúng thuộc về.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    structure chart/ˈstrʌktʃə tʃɑːt/ biểu đồ cấu trúc
    parameters/pəˈræmɪtəz/ tham số
    pseudocode/ˈsuːdəʊkəʊd/ pseudocode (giả mã)
    test plan/test plæn/ kế hoạch kiểm thử
    implementation/ˌɪmplɪmənˈteɪʃn/ thực thi
    boundary data/ˈbaʊndəri ˈdeɪtə/ dữ liệu biên
    acceptance testing/əkˈseptəns ˈtestɪŋ/ kiểm thử chấp nhận
    hierarchical decomposition/haɪəˈrɑːkɪkl ˌdiːkɒmpəˈzɪʃn/ phân rã theo cấu trúc phân cấp
    decomposition/ˌdiːkɒmpəˈzɪʃn/ decomposition
    subroutines/ˈsʌbruːtiːnz/ subroutine
    state-transition diagram/steɪt trænˈsɪʃn ˈdaɪəɡræm/ sơ đồ chuyển trạng thái
    states/steɪts/ nêu rõ
    syntax error/ˈsɪntæks ˈerə/ lỗi cú pháp
    run-time error/rʌn taɪm ˈerə/ lỗi thời gian chạy
    logic error/ˈlɒdʒɪk ˈerə/ lỗi logic
    dry run/draɪ rʌn/ chạy thử khô (dry run)
    trace table/treɪs ˈteɪbl/ bảng theo dõi (trace table)
    walkthrough/ˈwɔːkθruː/ đi qua chương trình
    white-box testing/waɪt bɒks ˈtestɪŋ/ kiểm thử hộp trắng
    black-box testing/blæk bɒks ˈtestɪŋ/ kiểm thử hộp đen
    integration testing/ˌɪntɪˈɡreɪʃn ˈtestɪŋ/ kiểm thử tích hợp
    alpha testing/ˈælfə ˈtestɪŋ/ kiểm thử alpha
    beta testing/ˈbiːtə ˈtestɪŋ/ kiểm thử beta
    12.3

    Errors · ⁨Lỗi⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of ways of exposing and avoiding faults in programs
    Locate and identify the different types of errors • syntax errors • logic errors • run-time errors
    Correct identified errors
    Show understanding of the methods of testing available and select appropriate data for a given method Including dry run, walkthrough, white-box, black-box, integration, alpha, beta, acceptance, stub
    Show understanding of the need for a test strategy and test plan and their likely contents
    Choose appropriate test data for a test plan Including normal, abnormal and extreme/boundary
    Show understanding of the need for continuing maintenance of a system and the differences between each type of maintenance Including perfective, adaptive, corrective
    Analyse an existing program and make amendments to enhance functionality
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về các phương pháp phát hiện và tránh lỗi trong chương trình
    Xác định và nhận diện các loại lỗi khác nhau • lỗi cú pháp • lỗi logic • lỗi khi chạy chương trình
    Sửa chữa các lỗi đã xác định
    Thể hiện sự hiểu biết về các phương pháp kiểm thử có sẵn và chọn dữ liệu phù hợp cho một phương pháp cụ thể Bao gồm chạy thử khô, walkthrough, hộp trắng, hộp đen, tích hợp, alpha, beta, chấp nhận, mô phỏng (stub)
    Thể hiện sự hiểu biết về nhu cầu đối với chiến lược kiểm thử và kế hoạch kiểm thử cũng như nội dung dự kiến của chúng
    Chọn dữ liệu kiểm thử phù hợp cho một kế hoạch kiểm thử Bao gồm bình thường, bất thường và cực đoan/biên
    Thể hiện sự hiểu biết về nhu cầu bảo trì liên tục của một hệ thống và sự khác biệt giữa từng loại hình bảo trì Bao gồm hoàn thiện, phù thích, sửa chữa
    Phân tích một chương trình hiện có và đưa ra các điều chỉnh để nâng cao chức năng

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English
    • syntax error 语法错误 — breaks the language's grammar (missing bracket, misspelled keyword). Caught at translation time; the program won't run until fixed.
    • run-time error 运行时错误 — happens while running (divide by zero, file not found, array index out of range). The program crashes or raises an exception; fix by adding checks.
    • logic error 逻辑错误 — the program runs but gives wrong results (using + for -, an off-by-one loop, conditions in the wrong order). The hardest to find; the only sign is wrong output, so use careful testing and tracing.

    Exposing and avoiding faults. Faults are exposed by testing against a test plan, by a dry run or trace table, by a walkthrough with colleagues, and by the IDE's debugger (breakpoints, single stepping, watching variables). They are avoided by designing before coding (structure chart, pseudocode), by modular code with meaningful identifiers and comments, by validation of every input, by handling exceptions rather than letting a run-time error crash the program, and by the IDE's dynamic syntax checks as you type.

    Worked example. State the type of error in each case and how it shows itself. (a) Result <- STR_TO_NUM(x) / STR_TO_NUM(y) is run with y = "0". (b) The same line is run with x = "12a". (c) A loop written as FOR i <- 1 TO 9 processes a ten-element array. (d) OUTPUT "Total: " Total is missing a comma.

    (a) Run-time error — division by zero; the program crashes when this line is executed with that data. (b) Run-time error — the string cannot be converted to a number. (c) Logic error — the program runs but the tenth element is never processed, so the output is wrong. (d) Syntax error — the statement breaks the language's rules and is reported by the translator before the program runs.

    Worked example. Correct the errors in this pseudocode, which should output the average of ten marks.

    The division should be by 10, not 9 (a logic error); the output line needs a comma or an & between the string and the value (a syntax error); and Average is never declared as REAL (a syntax or run-time error, depending on the language). Say which line and what the corrected line is: Average <- Total / 10.

    Tiếng Việt
    • lỗi cú pháp — vi phạm ngữ pháp của ngôn ngữ (thiếu dấu ngoặc, viết sai từ khóa). Bị bắt khi dịch mã; chương trình không thể chạy cho đến khi được sửa.
    • lỗi thời gian chạy — xảy ra trong quá trình thực thi (chia cho số 0, không tìm thấy tập tin, chỉ số mảng vượt quá giới hạn). Chương trình bị sập hoặc ném ngoại lệ; sửa bằng cách thêm các kiểm tra.
    • lỗi logic — chương trình chạy nhưng đưa ra kết quả sai (dùng + thay vì -, vòng lặp lệch một bước, điều kiện sắp xếp sai thứ tự). Khó tìm nhất; dấu hiệu duy nhất là đầu ra sai, nên hãy sử dụng kiểm tra và truy vết cẩn thận.
    Quy trình từ viết code sang dịch sang chạy sang kết quả: lỗi cú pháp ngăn chặn ở giai đoạn dịch, lỗi thời gian chạy gây sập trong lúc chạy, và lỗi logic chạy tốt nhưng trả về kết quả sai
    Thời điểm xuất hiện từng loại lỗi: lỗi cú pháp tại lúc dịch, lỗi thời gian chạy trong lúc thực thi, lỗi logic tại kết quả đầu ra

    Phát hiện và tránh các lỗi. Các lỗi bị phát hiện thông qua việc thử nghiệm theo kế hoạch thử nghiệm, chạy thử hoặc bảng truy vết, thảo luận cùng đồng nghiệp, và bộ gỡ lỗi của IDE (ngắt chương trình, chạy từng bước, theo dõi biến). Chúng được tránh khỏi bằng cách thiết kế trước khi viết code (biểu đồ cấu trúc, mã giả), viết code mô-đun với tên biến có ý nghĩa và chú thích, xác minh mọi dữ liệu đầu vào, xử lý ngoại lệ thay để lỗi thời gian chạy làm sập chương trình, và các kiểm tra cú pháp động của IDE khi bạn đang gõ.

    Ví dụ đã giải. Nêu loại lỗi trong mỗi trường hợp và cách nó biểu hiện. (a) Result <- STR_TO_NUM(x) / STR_TO_NUM(y) được chạy với y = "0". (b) Dòng tương tự được chạy với x = "12a". (c) Một vòng lặp được viết là FOR i <- 1 TO 9 xử lý mảng mười phần tử. (d) OUTPUT "Total: " Total thiếu dấu phẩy.

    (a) Lỗi thời gian chạy — chia cho số 0; chương trình bị sập khi dòng này được thực thi với dữ liệu đó. (b) Lỗi thời gian chạy — chuỗi không thể chuyển đổi thành số. (c) Lỗi logic — chương trình chạy nhưng phần tử thứ mười chưa bao giờ được xử lý, nên kết quả đầu ra bị sai. (d) Lỗi cú pháp — câu lệnh vi phạm quy tắc của ngôn ngữ và bị báo cáo bởi trình dịch trước khi chương trình chạy.

    Ví dụ đã giải. Sửa các lỗi trong mã giả sau, vốn phải xuất trung bình cộng của mười điểm số.

    Total <- 0
    FOR i <- 1 TO 10
        INPUT Mark
        Total <- Total + Mark
    NEXT i
    Average <- Total / 9
    OUTPUT "Average" Average
    

    Phép chia phải là 10 chứ không phải 9 (lỗi logic); dòng xuất cần dấu phẩy hoặc & giữa chuỗi và giá trị (lỗi cú pháp); và Average chưa bao giờ được khai báo là REAL (lỗi cú pháp hoặc thời gian chạy, tùy thuộc vào ngôn ngữ). Hãy nói rõ dòng nào và dòng đã sửa là gì: Average <- Total / 10.

    12.3

    Testing methods · ⁨Các phương pháp thử nghiệm⁩

    English
    • dry run 手工跟踪 — trace the code on paper, writing each variable's value in a table.
    • walkthrough 走查 — a team review of the code.
    • white-box testing 白盒测试 — designed from the code's internal structure, covering every statement, branch and loop.
    • black-box testing 黑盒测试 — designed from the specification only: feed inputs, check outputs.
    • integration testing 集成测试 — combine modules and test the interfaces between them.
    • alpha testing α测试 — by the developers/in-house before release; beta testing β测试 — by a limited group of real users in their own environment.
    • acceptance testing 验收测试 — by the customer, to decide if the product is fit for purpose.
    • stub 桩 — a placeholder for a module that does not exist yet, so the structure can be tested top-down.

    Which method, when. A dry run and a walkthrough need no computer — the dry run is you, tracing the algorithm with a trace table 跟踪表; the walkthrough is a meeting in which the author explains the code line by line and colleagues look for faults, so it also spreads knowledge of the code through the team and checks it against the design. White-box tests are written by someone who can see the code and aims to exercise every path; black-box tests are written from the specification and check only inputs against expected outputs, so a user or a separate tester can do them. Integration testing follows module testing: modules that pass alone can still fail when the data passed between them is the wrong type or in the wrong order. Alpha testing is in-house; beta testing gives a release candidate to a sample of real users, who report faults from real use; acceptance testing is the customer checking the finished product against the requirements before paying for it. A stub lets top-down testing start before every module exists.

    Worked example. After the program passed its in-house tests it was given to a group of users to try before release. Name this type of testing, and state what happens next.

    Beta testing — real users in their own environment, reporting faults the developers did not find. The faults are corrected, then the customer carries out acceptance testing against the requirements and the program is released; faults found in live use are then handled by corrective maintenance.

    Worked example. Give three benefits of testing a program by walkthrough.

    Errors are found by people who did not write the code and so read it without assumptions; the logic is checked against the design and specification, not only against test data; several people learn how the code works, which helps later maintenance; and no test data or working computer is needed, so it can be done early.

    Tiếng Việt
    • chạy thử — truy vết code trên giấy, ghi lại giá trị của từng biến vào bảng.
    • thảo luận — buổi xem xét nhóm đối với code.
    • thử nghiệm hộp trắng — thiết kế dựa trên cấu trúc nội bộ của code, bao phủ mọi câu lệnh, nhánh và vòng lặp.
    • thử nghiệm hộp đen — thiết kế chỉ dựa trên tài liệu yêu cầu: cung cấp đầu vào, kiểm tra đầu ra.
    • thử nghiệm tích hợp — kết hợp các mô-đun và thử nghiệm các giao diện giữa chúng.
    • thử nghiệm alpha α — do nhà phát triển/người trong công ty tiến hành trước khi phát hành; thử nghiệm beta β — do một nhóm nhỏ người dùng thực tế trong môi trường riêng của họ tiến hành.
    • thử nghiệm chấp nhận — do khách hàng tiến hành, để quyết định sản phẩm có đáp ứng mục đích hay không.
    • mô phỏng (stub) — một chỗ trống cho một mô-đun chưa tồn tại, để cấu trúc có thể được thử nghiệm từ trên xuống.
    Thử nghiệm hộp đen hoạt động dựa trên tài liệu yêu cầu; thử nghiệm hộp trắng kiểm tra các đường đi nội bộ của code
    Hộp đen thử nghiệm tài liệu yêu cầu; hộp trắng thử nghiệm các đường đi của code

    Phương pháp nào, khi nào. Một chạy thử và một thảo luận không cần máy tính — chạy thử là bạn tự mình truy vết thuật toán bằng bảng truy vết; thảo luận là cuộc họp mà tác giả giải thích code từng dòng và đồng nghiệp tìm kiếm lỗi, vì vậy nó cũng lan truyền kiến thức về code trong nhóm và kiểm tra code so với thiết kế. Hộp trắng được viết bởi người có thể nhìn thấy code và nhằm mục đích kích hoạt mọi đường đi; hộp đen được viết từ tài liệu yêu cầu và chỉ kiểm tra đầu vào so với đầu ra dự kiến, nên người dùng hoặc người thử nghiệm độc lập có thể thực hiện chúng. Tích hợp thử nghiệm diễn ra sau thử nghiệm mô-đun: các mô-đun đạt yêu cầu khi chạy riêng vẫn có thể thất bại khi dữ liệu truyền giữa chúng không đúng kiểu hoặc sai thứ tự. Alpha thử nghiệm diễn ra trong nội bộ; beta thử nghiệm cung cấp bản ứng cử viên phát hành cho một mẫu người dùng thực tế, những người báo cáo lỗi từ việc sử dụng thực tế; chấp nhận thử nghiệm là khách hàng kiểm tra sản phẩm hoàn thiện so với các yêu cầu trước khi thanh toán. Một mô phỏng (stub) cho phép thử nghiệm từ trên xuống bắt đầu trước khi tất cả các mô-đun đều tồn tại.

    Thử nghiệm stub: chương trình chính dưới thử nghiệm gọi Module A đã hoàn thành và một stub đại diện cho Module B chưa viết, cái có header thật nhưng chỉ trả về một giá trị cố định
    Một stub đóng vai thay thế cho một mô-đun chưa được viết, để các mô-đun nằm phía trên có thể được thử nghiệm ngay bây giờ

    Ví dụ đã giải. Sau khi chương trình vượt qua các thử nghiệm nội bộ, nó được giao cho một nhóm người dùng thử trước khi phát hành. Gọi tên loại thử nghiệm này và nêu những gì sẽ xảy ra tiếp theo.

    Beta thử nghiệm — người dùng thực tế trong môi trường của họ, báo cáo các lỗi mà nhà phát triển không tìm thấy. Các lỗi được sửa chữa, sau đó khách hàng tiến hành thử nghiệm chấp nhận so với các yêu cầu và chương trình được phát hành; các lỗi được tìm thấy trong quá trình sử dụng thực tế sau đó được xử lý bởi bảo trì sửa chữa.

    Ví dụ đã giải. Đưa ra ba lợi ích của việc thử nghiệm chương trình bằng phương pháp thảo luận.

    Lỗi được phát hiện bởi những người không viết mã và do đó đọc nó mà không có giả định; logic được kiểm tra so với thiết kế và yêu cầu, không chỉ so với dữ liệu thử nghiệm; nhiều người học cách mã hoạt động, điều này giúp bảo trì sau này; và không cần dữ liệu thử nghiệm hoặc máy tính đang chạy, vì vậy có thể thực hiện ngay từ đầu.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    stub/stʌb/ phần giả lập (stub)
    corrective maintenance/kəˈrektɪv ˈmeɪntənəns/ bảo trì sửa chữa
    test strategy/test ˈstrætədʒi/ chiến lược kiểm thử
    normal data/ˈnɔːml ˈdeɪtə/ dữ liệu bình thường
    abnormal data/əbˈnɔːml ˈdeɪtə/ dữ liệu bất thường
    extreme data/ekˈstriːm ˈdeɪtə/ dữ liệu cực đoan
    perfective maintenance/pəˈfektɪv ˈmeɪntənəns/ bảo trì hoàn thiện
    adaptive maintenance/əˈdæptɪv ˈmeɪntənəns/ bảo trì thích ứng
    regression testing/rɪˈɡreʃn ˈtestɪŋ/ kiểm thử hồi quy
    12.3

    Test strategy and test plan · ⁨Chiến lược thử nghiệm và kế hoạch thử nghiệm⁩

    English

    A test strategy 测试策略 is the high-level approach — which kinds of testing, who does them, when, and the criteria to move on. A test plan 测试计划 is the detailed list of tests — each with input data, expected output, and a column for the actual output.

    What each contains. A test strategy states which testing methods will be used at which stage (module testing by the programmer, then integration, alpha, beta, acceptance), who is responsible for each, what test data is required, and the criteria for passing to the next stage. A test plan lists the individual tests: for each, the module or feature under test, the input data, the reason the data was chosen (normal, abnormal, extreme, boundary), the expected result, a space for the actual result, and what to do if they differ. The plan is written at the design stage, from the specification, so that it tests what the program should do rather than what it happens to do.

    Choosing test data

    For each field or condition, include three kinds:

    • normal data 正常数据 — typical values inside the valid range (for marks 0–100: 50, 75).
    • abnormal data 异常数据 — values that should be rejected (-10, 200, "abc").
    • extreme data 极端数据 — the largest and smallest values still accepted (0 and 100).
    • boundary data 边界数据 — values at the edges, where off-by-one errors hide (each accepted extreme and the rejected value just outside it: 0/-1, 100/101).

    Worked example. A field accepts an exam mark from 0 to 100. Give test data of each kind with its expected result. Normal: 50 - accepted, a typical value inside the range. Abnormal: -10, 200, "abc" - all rejected, being out of range or the wrong data type. Extreme: 0 and 100 - the largest and smallest values that are still accepted. Boundary: the pairs straddling each edge - -1 rejected alongside 0 accepted, and 100 accepted alongside 101 rejected. Every value must carry its expected result, or the test plan proves nothing. Extreme and boundary are the pair most often confused: an extreme value sits inside and is accepted, while a boundary test is always a pair either side of the edge - which is exactly where off-by-one errors hide.

    Worked example. A component passes if its weight, measured to the nearest gram, is within 3 g of the target of 50 g, i.e. from 47 g to 53 g inclusive. Draw up the test-plan rows for the check.

    Test data Type Reason Expected result
    50 normal a typical value well inside the range accepted
    47, 53 extreme (boundary) the smallest and largest values that must still be accepted accepted
    46, 54 boundary the values just outside the range, where an off-by-one error would accept them rejected
    20, 90 abnormal values far outside the range rejected
    "abc", −5 abnormal the wrong type, a negative weight rejected

    Each row must say why the value was chosen and what should happen; a bare list of numbers earns nothing.

    Tiếng Việt

    Một chiến lược thử nghiệm là phương pháp tổng quát — các loại thử nghiệm nào, ai làm, khi nào, và tiêu chuẩn để chuyển sang giai đoạn tiếp theo. Một kế hoạch thử nghiệm là danh sách chi tiết các bài kiểm tra — mỗi bài bao gồm dữ liệu đầu vào, kết quả mong đợi, và một cột cho kết quả thực tế.

    Mỗi phần chứa gì. Chiến lược thử nghiệm nêu rõ phương pháp thử nghiệm nào sẽ được sử dụng ở giai đoạn nào (thử nghiệm mô-đun bởi lập trình viên, sau đó là tích hợp, alpha, beta, chấp nhận), ai chịu trách nhiệm cho từng phần, dữ liệu thử nghiệm cần thiết là gì, và tiêu chuẩn để chuyển sang giai đoạn tiếp theo. Kế hoạch thử nghiệm liệt kê từng bài kiểm tra cụ thể: đối với mỗi bài, mô-đun hoặc tính năng đang được thử, dữ liệu đầu vào, lý do chọn dữ liệu đó (bình thường, bất thường, cực trị, biên), kết quả mong đợi, khoảng trống cho kết quả thực tế, và những gì nên làm nếu chúng khác nhau. Kế hoạch được viết ở giai đoạn thiết kế, dựa trên yêu cầu, để đảm bảo kiểm tra những gì chương trình nên làm thay vì những gì nó ngẫu nhiên làm.

    Chọn dữ liệu thử nghiệm

    Đối với mỗi trường hoặc điều kiện, hãy bao gồm ba loại:

    • dữ liệu bình thường — các giá trị điển hình nằm trong phạm vi hợp lệ (đối với điểm số 0–100: 50, 75).
    • dữ liệu bất thường — các giá trị nên bị từ chối (-10, 200, "abc").
    • dữ liệu cực trị — giá trị lớn nhất và nhỏ nhất vẫn được chấp nhận (0 và 100).
    • dữ liệu biên — các giá trị tại các cạnh, nơi ẩn chứa lỗi sai lệch một đơn vị (mỗi giá trị cực trị được chấp nhận và giá trị bị từ chối ngay bên ngoài nó: 0/-1, 100/101).
    Sơ đồ trục số cho trường điểm số từ 0 đến 100: các giá trị bình thường 50 và 75 nằm bên trong, các giá trị cực trị 0 và 100 tại các biên được chấp nhận, và các giá trị bất thường -1, 101, -10 và 200 bị từ chối bên ngoài
    Dữ liệu thử nghiệm cho trường 0–100: bình thường bên trong, cực trị tại các biên, bất thường bên ngoài

    Ví dụ giải. Một trường chấp nhận điểm thi từ 0 đến 100. Hãy đưa ra dữ liệu thử nghiệm của mỗi loại kèm kết quả dự kiến. Bình thường: 50 - được chấp nhận, là giá trị điển hình nằm trong khoảng. Bất thường: -10, 200, "abc" - tất cả bị từ chối, do nằm ngoài khoảng hoặc sai định dạng dữ liệu. Cực trị: 0 và 100 - giá trị lớn nhất và nhỏ nhất mà vẫn được chấp nhận. Biên giới: các cặp跨越 mỗi cạnh - -1 bị từ chối cùng với 0 được chấp nhận, và 100 được chấp nhận cùng với 101 bị từ chối. Mỗi giá trị đều phải có kết quả dự kiến, nếu không bản kiểm thử sẽ vô nghĩa. Cực trị và biên giới là cặp khái niệm dễ nhầm lẫn nhất: giá trị cực trị nằm bên trong và được chấp nhận, trong khi kiểm tra biên giới luôn là một cặp ở hai phía của cạnh -这正是 one-off errors ẩn náu之处。

    Ví dụ minh họa. Một thành phần đạt yêu cầu nếu trọng lượng của nó, đo đến gần gram nhất, nằm trong khoảng 3 g so với mục tiêu 50 g, tức là từ 47 g đến 53 g bao gồm. Hãy lập các hàng trong kế hoạch thử nghiệm cho phép kiểm tra này.

    Dữ liệu thử nghiệm Loại Lý do Kết quả mong đợi
    50 bình thường một giá trị điển hình nằm sâu trong phạm vi được chấp nhận
    47, 53 cực trị (biên) giá trị nhỏ nhất và lớn nhất vẫn phải được chấp nhận được chấp nhận
    46, 54 biên các giá trị ngay bên ngoài phạm vi, nơi lỗi sai lệch một đơn vị sẽ chấp nhận chúng bị từ chối
    20, 90 bất thường các giá trị nằm xa khỏi phạm vi bị từ chối
    "abc", −5 bất thường sai kiểu, trọng lượng âm bị từ chối

    Mỗi hàng phải giải thích tại sao giá trị đó được chọn và sẽ xảy ra điều gì; chỉ liệt kê các con số thuần túy thì không đạt điểm.

    12.3

    Maintenance · ⁨Bảo trì⁩

    English

    Most of a program's lifetime cost is in maintenance. Three kinds:

    • perfective maintenance 完善性维护 — improving performance or features even though it works (a faster query, a new option).
    • adaptive maintenance 适应性维护 — keeping it working in a changing environment (a new OS, a new API, a legal change).
    • corrective maintenance 纠正性维护 — fixing bugs found in use.

    A program may need all three throughout its life.

    Why each is needed — the reasons the mark scheme lists. Corrective: a fault is reported by a user after release, or an incorrect output is noticed in particular circumstances that testing did not cover. Adaptive: the operating system, hardware or browser is upgraded; a law or company rule changes (tax rates, data-protection requirements); the program must work with a new external system or file format. Perfective: users ask for extra features or a better interface; the program is made faster or made to use less memory; the code is tidied to make future changes easier.

    Worked example. (a) A released program outputs a wrong value under certain circumstances. (b) The hardware that runs a program is replaced. (c) Customers ask for the coffee-shop loyalty program to send a message on a customer's birthday. Name the maintenance type in each case.

    (a) Corrective — a fault in the delivered program is being fixed. (b) Adaptive — the program is changed to run in its new environment. (c) Perfective — a feature is added to a program that already works.

    Tiếng Việt

    Hầu hết chi phí vòng đời của một chương trình nằm ở việc bảo trì. Ba loại:

    Ba loại bảo trì: hoàn thiện, thích nghi và sửa chữa
    Ba loại bảo trì: hoàn thiện, thích nghi và sửa chữa
    • bảo trì hoàn thiện — cải thiện hiệu suất hoặc tính năng dù nó vẫn hoạt động tốt (truy vấn nhanh hơn, tùy chọn mới).
    • bảo trì thích nghi — duy trì hoạt động trong môi trường thay đổi (hệ điều hành mới, API mới, thay đổi pháp lý).
    • bảo trì sửa chữa — khắc phục các lỗi tìm thấy khi sử dụng.

    Một chương trình có thể cần cả ba loại trong suốt vòng đời của nó.

    Tại sao mỗi loại cần thiết — các lý do được liệt kê trong bảng chấm điểm. Sửa chữa: một lỗi được báo cáo bởi người dùng sau khi phát hành, hoặc kết quả sai được chú ý trong các tình huống cụ thể mà quá trình thử nghiệm chưa bao phủ. Thích nghi: hệ điều hành, phần cứng hoặc trình duyệt được nâng cấp; luật hoặc quy định công ty thay đổi (tỷ lệ thuế, yêu cầu bảo vệ dữ liệu); chương trình phải hoạt động với một hệ thống bên ngoài hoặc định dạng tệp mới. Hoàn thiện: người dùng yêu cầu thêm tính năng hoặc giao diện tốt hơn; chương trình được làm nhanh hơn hoặc sử dụng ít bộ nhớ hơn; mã được sắp xếp gọn gàng để việc thay đổi trong tương lai dễ dàng hơn.

    Ví dụ minh họa. (a) Một chương trình đã phát hành xuất ra giá trị sai trong một số trường hợp. (b) Phần cứng chạy chương trình được thay thế. (c) Khách hàng yêu cầu chương trình_OCC loyalty của quán cà phê gửi tin nhắn vào ngày sinh nhật khách hàng. Hãy đặt tên loại bảo trì trong từng trường hợp.

    (a) Sửa chữa — một lỗi trong chương trình được giao đang được khắc phục. (b) Thích nghi — chương trình được thay đổi để chạy trong môi trường mới. (c) Hoàn thiện — một tính năng được thêm vào một chương trình vốn đã hoạt động tốt.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    maintenance/ˈmeɪntənəns/ bảo trì
    12.3

    Amending an existing program · ⁨Sửa đổi chương trình hiện có⁩

    English

    When asked to add a feature or fix a bug:

    1. read the existing code until you understand the algorithm and data flow.
    2. find where the change goes — which subroutine, which lines.
    3. make the change as small as possible — don't rewrite working code.
    4. update related parts — every caller of a changed parameter list, every routine using a changed data structure.
    5. test the new behaviour and the old (regression testing 回归测试 — check you broke nothing).
    6. document the change.

    Clear comments, meaningful names, decomposed subroutines and a structure chart make a program much easier to amend — which is why the design tools matter even after the first release.

    Analysing a program you did not write. Start from the identifier table and the module headers: they tell you what each module receives and returns before you read a line of its body. Then trace the algorithm with a trace table for one small input, noting where each output value comes from. Only then decide where the enhancement goes — usually a new module called from the existing one, so the working code is disturbed as little as possible — and write the pseudocode for the change and the test data that proves it.

    Tiếng Việt

    Khi được yêu cầu thêm tính năng hoặc sửa lỗi:

    1. đọc mã hiện có cho đến khi hiểu thuật toán và luồng dữ liệu.
    2. tìm nơi thay đổi diễn ra — subroutine nào, dòng nào.
    3. tạo thay đổi nhỏ nhất có thể — không viết lại mã đang hoạt động.
    4. cập nhật các phần liên quan — mọi nơi gọi danh sách tham số đã thay đổi, mọi thủ tục sử dụng cấu trúc dữ liệu đã thay đổi.
    5. kiểm thử hành vi mới và hành vi cũ (kiểm thử suy thoái — đảm bảo bạn không làm hỏng điều gì).
    6. đocumented hóa sự thay đổi.

    Bình luận rõ ràng, tên gọi có ý nghĩa, các thủ tục con được phân tách và biểu đồ cấu trúc giúp chương trình dễ chỉnh sửa hơn — đó là lý do các công cụ thiết kế vẫn quan trọng ngay cả sau lần phát hành đầu tiên.

    Phân tích một chương trình bạn không tự viết. Bắt đầu từ bảng định danh và tiêu đề mô-đun: chúng cho biết mỗi mô-đun nhận và trả về cái gì trước khi đọc dòng nào của thân chương trình. Sau đó theo dõi thuật toán bằng bảng theo dõi với một đầu vào nhỏ, ghi chú xem mỗi giá trị đầu ra đến từ đâu. Chỉ sau đó mới quyết định vị trí cải tiến — thường là một mô-đun mới được gọi từ mô-đun hiện có, để mã đang hoạt động bị tác động ít nhất có thể — và viết mã giả cho sự thay đổi cùng dữ liệu kiểm thử chứng minh nó.

    12.3

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    development life cycle the sequence of stages, from analysis to maintenance, followed to produce and support a program
    waterfall model a life cycle in which the stages are carried out in a fixed order, each completed before the next begins
    iterative model a life cycle in which a working version is produced and then repeatedly refined until it is complete
    rapid application development a life cycle that builds prototypes quickly, refining them with user feedback until they are accepted
    structure chart a diagram that shows how a program is decomposed into modules, the order in which they are called and the parameters passed between them
    state-transition diagram a diagram that shows the states a system can be in and the inputs that cause it to move between them
    syntax error an error in the way a statement is written, so it breaks the rules of the language and cannot be translated
    logic error an error in the algorithm, so the program runs but produces the wrong result
    run-time error an error that occurs while the program is running, such as division by zero, and stops it
    dry run working through the algorithm by hand, recording the values of the variables in a trace table
    walkthrough a review in which the author steps through the code with colleagues who look for errors
    stub a placeholder module with the correct header that returns a fixed value, used so the modules that call it can be tested
    test plan a list of the tests to be carried out, each with its test data, the reason for the data and the expected result
    boundary data values at each edge of the valid range, both the last value accepted and the first value rejected
    corrective / adaptive / perfective maintenance fixing faults found in use / changing the program to suit a changed environment / improving a program that already works
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    vòng đời phát triển chuỗi các giai đoạn, từ phân tích đến bảo trì, được tuân theo để tạo ra và hỗ trợ một chương trình
    mô hình thác nước một vòng đời trong đó các giai đoạn được thực hiện theo thứ tự cố định, mỗi giai đoạn hoàn tất trước khi giai đoạn tiếp theo bắt đầu
    mô hình lặp một vòng đời trong đó phiên bản hoạt động được sản xuất và sau đó liên tục tinh chỉnh cho đến khi hoàn thiện
    phát triển ứng dụng nhanh chóng một vòng đời xây dựng prototyp nhanh chóng, tinh chỉnh chúng với phản hồi của người dùng cho đến khi được chấp nhận
    biểu đồ cấu trúc sơ đồ hiển thị cách một chương trình được phân tách thành các mô-đun, thứ tự gọi chúng và các tham số truyền giữa chúng
    biểu đồ chuyển trạng thái sơ đồ hiển thị các trạng thái mà hệ thống có thể ở và các đầu vào khiến nó di chuyển giữa các trạng thái đó
    lỗi cú pháp lỗi trong cách viết câu lệnh, khiến nó vi phạm quy tắc của ngôn ngữ và không thể dịch được
    lỗi logic lỗi trong thuật toán, khiến chương trình chạy nhưng tạo ra kết quả sai
    lỗi thời gian chạy lỗi xảy ra khi chương trình đang chạy, chẳng hạn như chia cho số không, và làm dừng nó lại
    chạy thử tay thực thi thuật toán bằng tay, ghi lại các giá trị biến trong bảng theo dõi
    duyệt qua một cuộc xem xét trong đó tác giả đi qua từng bước mã cùng đồng nghiệp tìm kiếm lỗi
    stub mô-đun giữ chỗ với tiêu đề đúng trả về giá trị cố định, dùng để các mô-đun gọi nó có thể được kiểm thử
    kế hoạch kiểm thử danh sách các bài kiểm thử sẽ được thực hiện, mỗi bài kèm dữ liệu kiểm thử, lý do chọn dữ liệu và kết quả mong đợi
    dữ liệu biên các giá trị tại mỗi cạnh của khoảng hợp lệ, bao gồm cả giá trị cuối cùng được chấp nhận và giá trị đầu tiên bị từ chối
    bảo trì sửa lỗi / thích ứng / hoàn thiện sửa chữa lỗi tìm thấy khi sử dụng / thay đổi chương trình để phù hợp với môi trường thay đổi / cải thiện một chương trình đã hoạt động tốt
    12.3

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Compare development models (waterfall, iterative, RAD) by principle, benefit, drawback, and know the five stages of the program development life cycle and what each produces.
    • Distinguish syntax, logic and run-time errors by when each shows itself: at translation, in the output, during the run.
    • Choose test data of every kind — normal, abnormal, extreme and boundary — and give each value with its reason and expected result.
    • Distinguish the types of maintenance (corrective, adaptive, perfective) by why the change is being made.
    • On a structure chart, name every symbol: box, calling line, data couple, control couple, selection diamond, iteration arrow. Reading module headers off a chart, remember a function has RETURNS.

    Common mistakes

    • Describing a life cycle stage by its name only ("in the design stage the program is designed"). Say what is produced: structure chart, pseudocode, test plan.
    • Calling a wrong output a "run-time error". If the program runs to the end, it is a logic error.
    • Giving boundary data as just the extremes. The mark needs the values on both sides of the edge.
    • Treating alpha and beta testing as the same. Alpha is in-house by the developers; beta is by real users outside.
    • Confusing adaptive and perfective maintenance. Adaptive responds to a change outside the program; perfective improves a program nobody had to change.
    • Drawing a structure chart with the modules in any order. They read left to right in the order they are called, and each parameter needs its arrow.
    Tiếng Việt
    • So sánh các mô hình phát triển (thác nước, lặp, RAD) dựa trên nguyên tắc, lợi ích, nhược điểm, và nắm vững năm giai đoạn của vòng đời phát triển chương trình cũng như những gì mỗi giai đoạn tạo ra.
    • Phân biệt lỗi cú pháp, logic và thời gian chạy dựa trên khi nào chúng xuất hiện: lúc dịch, trong đầu ra, hoặc trong quá trình chạy.
    • Chọn dữ liệu kiểm thử mọi loại — bình thường, bất thường, cực đoan và biên — và cung cấp mỗi giá trị kèm lý do và kết quả mong đợi.
    • Phân biệt các loại bảo trì (sửa lỗi, thích ứng, hoàn thiện) dựa trên tại sao sự thay đổi đang được thực hiện.
    • Trên biểu đồ cấu trúc, đặt tên mọi ký hiệu: ô vuông, đường gọi, cặp dữ liệu, cặp điều khiển, kim cương lựa chọn, mũi tên lặp. Khi đọc tiêu đề mô-đun từ biểu đồ, hãy nhớ một hàm có RETURNS.

    Lỗi thường gặp

    • Mô tả một giai đoạn vòng đời chỉ bằng tên gọi ("ở giai đoạn thiết kế thì chương trình được thiết kế"). Hãy nói rõ sản phẩm tạo ra: biểu đồ cấu trúc, mã giả, kế hoạch kiểm thử.
    • Gọi sai đầu ra là "lỗi thời gian chạy". Nếu chương trình chạy đến hết, đó là lỗi logic.
    • Cung cấp dữ liệu biên chỉ là các giá trị cực trị. Điểm cần phải có các giá trị ở cả hai phía của biên.
    • Coi kiểm thử alpha và beta là giống nhau. Alpha là nội bộ do nhà phát triển thực hiện; beta là do người dùng thật bên ngoài thực hiện.
    • Nhầm lẫn bảo trì thích ứng và hoàn thiện. Thích ứng phản ứng với sự thay đổi bên ngoài chương trình; hoàn thiện cải thiện một chương trình không ai buộc phải thay đổi.
    • Vẽ biểu đồ cấu trúc với các mô-đun theo bất kỳ thứ tự nào. Chúng được đọc từ trái sang phải theo thứ tự gọi, và mỗi tham số cần có mũi tên tương ứng.
  • 13

    Data Representation · ⁨Biểu diễn dữ liệu⁩

    Watch lesson · ⁨Xem bài học⁩
    13.1

    User-defined data types · ⁨Các kiểu dữ liệu do người dùng định nghĩa⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of why user-defined types are necessary
    Define and use non-composite types Including enumerated, pointer
    Define and use composite data types Including set, record and class/object
    Choose and design an appropriate user-defined data type for a given problem
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về lý do tại sao kiểu dữ liệu do người dùng định nghĩa là cần thiết
    Định nghĩa và sử dụng kiểu dữ liệu không tổ hợp Bao gồm liệt kê, con trỏ
    Định nghĩa và sử dụng kiểu dữ liệu tổ hợp Bao gồm tập hợp, ghi chép và lớp/đối tượng
    Chọn và thiết kế một kiểu dữ liệu do người dùng định nghĩa phù hợp cho một bài toán đã cho

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    The built-in types (INTEGER, REAL, STRING, CHAR, BOOLEAN) cover the simplest cases. For richer problems you can define user-defined types 用户定义类型, making the code clearer and the compiler stricter.

    Why they are needed

    A built-in STRING lets you store nonsense in a field that should hold one of a few legal values; a user-defined type can restrict it. Real entities are usually a collection of values of different types. And DECLARE Taxi : Vehicle is clearer (self-documenting) than DECLARE Taxi : STRING.

    "Describe the purpose of a user-defined data type" (two marks). A data type defined by the programmer, built from existing (built-in) types, so that data specific to the problem can be represented when no built-in type fits. Both halves score: defined by the programmer and based on existing types. The examiner also accepts "to make the program easier to read and maintain" as a supporting point, never on its own.

    "Explain what is meant by non-composite and composite data types" (four marks). A non-composite type is defined without reference to another type: it holds a single value, for example an integer, a real, or an enumerated value. A composite type is a collection of other types (which may themselves be composite): it holds several values under one identifier, for example a record, a set, an array or a class. Give an example with each definition; the exam asks for one.

    Non-composite types

    Enumerated type

    An enumerated type 枚举类型 has values that are a fixed list of named constants:

    The names are values of the new type (stored internally as small integers); you cannot assign anything outside the list. Uses: days of the week, colours, status codes.

    "State what is meant by an enumerated data type." A non-composite user-defined type defined by listing all its possible values (in order). Because the values are ordered, they can be compared and stepped through: with TYPE Month = (January, February, ..., December), the test IF ThisMonth > June is legal, and the values are stored internally as integers. The pseudocode has three parts and the exam marks each: the keyword TYPE, the identifier with =, and the list in brackets separated by commas.

    Worked example. Write pseudocode to define an enumerated type for the days on which a school is open (Monday to Friday), and declare a variable of that type set to Wednesday.

    A variable of an enumerated type cannot be given a value outside the list, which is the whole point: Today ← Saturday is a compile-time error, whereas a STRING would have accepted "Saturdy".

    Pointer type

    A pointer 指针 holds the memory address of another variable (or NULL for "no target"). Pointers build dynamic structures (linked lists, trees) and pass references without copying.

    To dereference 解引用 (p^) means to reach the variable it points to.

    "State what is meant by a pointer data type." A non-composite type whose value is the memory address of (a reference to) a variable of a given type. The pseudocode declares the type with a caret before the type it points to, and the exam asks for exactly that line:

    Pointers are what a dynamic linked list or binary tree (Topic 19) is built from: each node holds a pointer to the next. Two marks are commonly lost here: writing the pointer type as if it held the value itself, and forgetting the caret when reading through the pointer.

    Composite types

    A composite type 复合类型 (one of the composite data types) groups several values under one name.

    • record 记录 (Topic 10) — fields of different types in a TYPE ... ENDTYPE block.
    • set 集合 — an unordered collection of unique values, with operations add, remove, membership test, union, intersection:
    • class 类 / object 对象 — the OOP composite type, combining data fields (attributes 属性) with operations on them (methods 方法). An object is an instance of a class:

    Choosing a type

    Use enumerated for a value from a fixed list, pointer for indirection, record for a group of fields, set for an unordered unique collection, and class when you need state and behaviour together.

    "Describe the user-defined data type set" (three marks). A composite type that holds a collection of values of the same type, in no particular order and with no duplicates; values can be added and removed, and a value can be tested for membership. Declare the type with SET OF, then define a set constant with its values in brackets:

    "Describe the user-defined data type record" (three marks). A composite type made up of a fixed number of fields (items), each with its own identifier and its own type, referred to under a single identifier; the fields are accessed with dot notation.

    Worked example. Write pseudocode to declare a record type ClubMember for a club member's first name, last name, membership code (an integer), date of joining and whether fees have been paid; then declare a variable and set two of its fields.

    Every field needs its own DECLARE line with an appropriate type, the block ends with ENDTYPE, and a field 字段 is reached as variable.field. Asked to choose a type for each field, match it to the data: a code that is only ever compared is a STRING if it can contain letters, an INTEGER if arithmetic or ordering is needed; a yes/no is BOOLEAN; a date is DATE. A field that can take one of a few named values (a pet's species, a colour) is the one to make an enumerated type.

    Records in arrays and files. A table of many members is DECLARE Members : ARRAY[1:100] OF ClubMember; then Members[3].LastName is one field of one element, and a loop over the index processes every record. A record is also the natural unit written to and read from a file (below), one record per PUTRECORD or WRITEFILE.

    Worked example. A composite type Pet stores each pet's name (string), species (one of dog, cat, rabbit or hamster) and weight in kilograms (real). Define the types and declare a variable.

    The enumerated type is defined first, because the record uses it: order matters in pseudocode as it does in a compiler.

    Classes in pseudocode. A class is the composite type that also carries behaviour. The exam asks for the declaration with its attributes marked PRIVATE, a constructor 构造函数 named NEW that sets them, and PUBLIC methods to get or change them:

    Attributes are private so that they can only be changed through methods (encapsulation, Topic 20); the constructor is a procedure called NEW with one parameter per attribute; a getter is a function that returns the attribute. Each of these is a separate mark.

    Tiếng Việt

    Các kiểu có sẵn (INTEGER, REAL, STRING, CHAR, BOOLEAN) bao quát các trường hợp đơn giản nhất. Đối với các bài toán phức tạp hơn, bạn có thể định nghĩa kiểu dữ liệu do người dùng, giúp mã rõ ràng hơn và trình biên dịch nghiêm ngặt hơn.

    Tại sao chúng cần thiết

    Một kiểu có sẵn STRING cho phép bạn lưu trữ vô nghĩa vào một trường vốn dĩ chỉ chứa một vài giá trị hợp lệ; một kiểu do người dùng định nghĩa có thể hạn chế điều này. Các thực thể thực tế thường là một bộ sưu tập các giá trị thuộc nhiều kiểu khác nhau. Và DECLARE Taxi : Vehicle rõ ràng hơn (tự tài liệu hóa) so với DECLARE Taxi : STRING.

    "Mô tả mục đích của một kiểu dữ liệu do người dùng định nghĩa (hai điểm).** Một kiểu dữ liệu do lập trình viên định nghĩa, được xây dựng từ các kiểu có sẵn (predefined), nhằm đại diện cho dữ liệu đặc thù của bài toán khi không có kiểu có sẵn nào phù hợp. Cả hai nửa đều đạt điểm: do lập trình viên định nghĩa và dựa trên các kiểu hiện có. Giám khảo cũng chấp nhận "để làm cho chương trình dễ đọc và bảo trì hơn" như một điểm bổ sung, nhưng không bao giờ tính riêng lẻ.

    "Giải thích ý nghĩa của các kiểu dữ liệu không tổ hợp và kiểu dữ liệu tổ hợp" (bốn điểm). Một kiểu không tổ hợp được định nghĩa không tham chiếu đến một kiểu nào khác: nó chứa một giá trị đơn lẻ, ví dụ như số nguyên, số thực hoặc giá trị liệt kê. Một kiểu tổ hợp là tập hợp của các kiểu khác (có thể bản thân chúng cũng là kiểu tổ hợp): nó chứa nhiều giá trị dưới cùng một danh xưng, ví dụ như bản ghi, tập hợp, mảng hoặc lớp. Hãy đưa ra một ví dụ cho mỗi định nghĩa; đề thi yêu cầu chỉ một ví dụ.

    Các kiểu không tổ hợp

    Kiểu liệt kê

    Một kiểu liệt kê có các giá trị là một danh sách cố định các hằng có tên:

    TYPE Vehicle = (M100, M230, T101, T102, T120, T150)
    DECLARE MyTaxi : Vehicle
    MyTaxi ← T102
    

    Các tên này là các giá trị của kiểu mới (được lưu trữ bên trong dưới dạng số nguyên nhỏ); bạn không thể gán bất kỳ giá trị nào nằm ngoài danh sách đó. Ứng dụng: các ngày trong tuần, màu sắc, mã trạng thái.

    "Nêu ý nghĩa của kiểu dữ liệu liệt kê." Một kiểu do người dùng tự định nghĩa không tổ hợp, được xác định bằng cách liệt kê tất cả các giá trị có thể có của nó (theo thứ tự). Vì các giá trị được sắp xếp thứ tự, nên chúng có thể so sánh và duyệt qua từng bước: với TYPE Month = (January, February, ..., December), phép kiểm tra IF ThisMonth > June là hợp lệ, và các giá trị được lưu trữ bên trong dưới dạng số nguyên. Mã giả gồm ba phần và đề thi chấm điểm riêng cho từng phần: từ khóa TYPE, danh xưng đi kèm =, và danh sách trong ngoặc vuông phân tách bởi dấu phẩy.

    Ví dụ giải. Viết mã giả để định nghĩa một kiểu liệt kê cho các ngày nhà trường mở cửa (Thứ Hai đến Thứ Sáu), và khai báo một biến của kiểu đó có giá trị là Thứ Tư.

    TYPE SchoolDay = (Monday, Tuesday, Wednesday, Thursday, Friday)
    DECLARE Today : SchoolDay
    Today ← Wednesday
    

    Một biến của kiểu liệt kê không thể được gán một giá trị nằm ngoài danh sách, đây chính là mục đích cốt lõi: Today ← Saturday sẽ gây lỗi biên dịch, trong khi một STRING sẽ chấp nhận được "Saturdy".

    Kiểu liệt kê Vehicle với các giá trị có tên cố định M100, M230, T101, T102, T120 và T150; một biến của kiểu này chỉ có thể chứa một trong các giá trị đó
    Kiểu liệt kê là một danh sách cố định các giá trị có tên

    Kiểu conype

    Một conype lưu địa chỉ bộ nhớ của một biến khác (hoặc NULL để biểu thị "không có mục tiêu"). Conype tạo nên các cấu trúc động (danh sách liên kết, cây) và truyền tham chiếu mà không cần sao chép dữ liệu.

    TYPE PNode = ^TNode    // pointer to a TNode
    DECLARE p : PNode
    p ← NEW TNode
    p^.Value ← 42          // dereference to reach the fields
    

    Để giải tham chiếu (p^) có nghĩa là truy cập trực tiếp vào biến mà nó trỏ tới.

    "Nêu ý nghĩa của kiểu dữ liệu conype." Một kiểu không tổ hợp mà giá trị của nó là địa chỉ bộ nhớ (hoặc tham chiếu) đến một biến thuộc một kiểu đã cho. Mã giả khai báo kiểu này bằng cách đặt ký hiệu caret (^) trước tên kiểu mà nó trỏ tới, và đề thi yêu cầu đúng dòng đó:

    TYPE SelectParts = ^Parts        // a pointer to a value of type Parts
    DECLARE Chosen : SelectParts
    Chosen ← ^Keyboard               // Chosen now holds the address of Keyboard
    OUTPUT Chosen^                   // dereference: the value stored at that address
    

    Conype là thành phần cơ bản để xây dựng một danh sách liên kết động hay cây nhị phân (Chủ đề 19): mỗi nút chứa một conype trỏ tới nút tiếp theo. Hai điểm thường bị mất ở đây: viết kiểu conype như thể nó chứa chính giá trị đó, và quên bỏ ký hiệu caret khi truy cập thông qua conype.

    Conype p lưu một địa chỉ và trỏ tới một TNode chứa Value = 42 và trường Next; p^ giải tham chiếu để truy cập các trường của nút, chẳng hạn như p^.Value
    Con trỏ giữ một địa chỉ; p^ truy cập vào nó để tiếp cận các trường của node

    Các kiểu tổ hợp

    Một kiểu tổ hợp (một trong các kiểu dữ liệu tổ hợp) nhóm nhiều giá trị dưới cùng một tên gọi.

    Set (tập hợp): một tập hợp không thứ tự nơi mọi giá trị đều duy nhất
    Set là một tập hợp không thứ tự các giá trị duy nhất
    Record Student với các trường Name, Age, Grade và Enrolled, mỗi trường thuộc một kiểu khác nhau
    Record nhóm các trường thuộc các kiểu khác nhau dưới cùng một tên gọi
    • record (Chủ đề 10) — các trường thuộc các kiểu khác nhau nằm trong khối TYPE ... ENDTYPE.
    • set — một tập hợp không thứ tự các giá trị duy nhất, với các thao tác add (thêm), remove (xóa), kiểm tra thành viên, union (hợp), intersection (giao):
    DECLARE Available : SET OF Colour
    Available ← {Red, Blue}
    IF Green IN Available THEN
        ...
    ENDIF
    
    • class / object — kiểu tổ hợp hướng đối tượng, kết hợp các trường dữ liệu (thuộc tính) với các thao tác trên chúng (phương thức). Một object là một thực thể (instance) của một class:
    CLASS Taxi
        PRIVATE Capacity : INTEGER
        PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
            RETURN Capacity
        ENDFUNCTION
    ENDCLASS
    

    Lựa chọn kiểu dữ liệu

    Sử dụng enumerated cho một giá trị từ danh sách cố định, pointer cho sự gián tiếp, record cho một nhóm các trường, set cho một tập hợp không thứ tự và duy nhất, và class khi bạn cần đồng thời cả trạng thái và hành vi.

    "Mô tả kiểu dữ liệu set do người dùng tự định nghĩa" (ba điểm). Một kiểu tổ hợp chứa một tập hợp các giá trị cùng loại, không theo thứ tự cụ thể và không có giá trị trùng lặp; có thể thêm và xóa giá trị, cũng như kiểm tra xem một giá trị có thuộc về tập hợp đó hay không. Khai báo kiểu này với SET OF, sau đó định nghĩa một hằng set với các giá trị của nó trong ngoặc vuông:

    TYPE EvenNumbers = SET OF INTEGER
    DEFINE Evens (2, 4, 6, 8, 10, 12) : EvenNumbers
    TYPE SymbolSet = SET OF CHAR
    DEFINE Operators ('+', '-', '*', '/') : SymbolSet
    

    "Mô tả kiểu dữ liệu record do người dùng tự định nghĩa" (ba điểm). Một kiểu tổ hợp bao gồm một số lượng cố định các trường (mục), mỗi trường có danh xưng riêng và kiểu dữ liệu riêng, nhưng được tham chiếu chung dưới một danh xưng duy nhất; các trường được truy cập thông qua ký hiệu chấm.

    Ví dụ giải. Viết mã giả để khai báo một kiểu record ClubMember cho thành viên câu lạc bộ: tên đầu, họ, mã thành viên (số nguyên), ngày gia nhập và tình trạng đã đóng phí chưa; sau đó khai báo một biến và gán giá trị cho hai trong số các trường của biến đó.

    TYPE ClubMember
        DECLARE FirstName : STRING
        DECLARE LastName : STRING
        DECLARE Code : INTEGER
        DECLARE DateJoined : DATE
        DECLARE FeesPaid : BOOLEAN
    ENDTYPE
    
    DECLARE NewMember : ClubMember
    NewMember.LastName ← "Chen"
    NewMember.FeesPaid ← TRUE
    

    Mỗi trường cần có dòng khai báo riêng với DECLARE phù hợp, khối mã kết thúc bằng ENDTYPE, và một trường được truy cập thông qua variable.field. Khi được yêu cầu chọn kiểu dữ liệu cho mỗi trường, hãy khớp nó với loại dữ liệu: một mã chỉ dùng để so sánh nếu có thể chứa chữ cái thì là STRING, nếu cần toán học hoặc sắp xếp thì là INTEGER; yes/no là BOOLEAN; ngày tháng là DATE. Một trường có thể nhận một trong vài giá trị được đặt tên (loài vật nuôi, màu sắc) thì nên tạo thành kiểu liệt kê.

    Mảng chứa bốn bản ghi ClubMember được vẽ thành các hàng trường, với chú thích Members[3].LastName chỉ ra một trường của một phần tử, và phép gán viết giá trị vào một trường của một phần tử khác
    Mảng chứa các record: mỗi phần tử là một bản ghi hoàn chỉnh, chỉ số chọn phần tử, và ký hiệu chấm chọn trường

    Dữ liệu trong mảng và tập tin. Một bảng chứa nhiều thành viên là DECLARE Members : ARRAY[1:100] OF ClubMember; sau đó Members[3].LastName là một trường của một phần tử, và vòng lặp theo chỉ mục sẽ xử lý mọi bản ghi. Một bản ghi cũng là đơn vị tự nhiên được viết vào và đọc từ một tập tin (phần dưới đây), mỗi bản ghi tương ứng với một PUTRECORD hoặc WRITEFILE.

    Ví dụ có lời giải. Một kiểu hợp thành Pet lưu tên mỗi vật nuôi (chuỗi ký tự), loài động vật (một trong các lựa chọn: chó, mèo, thỏ hay hamster) và trọng lượng tính bằng kilogram (số thực). Hãy định nghĩa các kiểu dữ liệu và khai báo một biến.

    TYPE Species = (Dog, Cat, Rabbit, Hamster)
    TYPE Pet
        DECLARE Name : STRING
        DECLARE Kind : Species
        DECLARE Weight : REAL
    ENDTYPE
    DECLARE MyPet : Pet
    MyPet.Kind ← Rabbit
    

    Kiểu liệt kê được định nghĩa trước, vì bản ghi sử dụng nó: thứ tự quan trọng trong giả mã cũng như trong trình biên dịch.

    Các lớp trong giả mã. Một lớp là kiểu hợp thành đồng thời mang theo hành vi. Đề thi yêu cầu phần khai báo với các thuộc tính được đánh dấu PRIVATE, một hàm khởi tạo tên là NEW để gán giá trị cho chúng, và PUBLIC phương thức để lấy hoặc thay đổi các giá trị này:

    CLASS Appointment
        PRIVATE PatientName : STRING
        PRIVATE Treatment : STRING
        PRIVATE Medication : STRING
        PUBLIC PROCEDURE NEW(Name : STRING, Treat : STRING, Med : STRING)
            PatientName ← Name
            Treatment ← Treat
            Medication ← Med
        ENDPROCEDURE
        PUBLIC FUNCTION GetTreatment() RETURNS STRING
            RETURN Treatment
        ENDFUNCTION
    ENDCLASS
    
    DECLARE Visit : Appointment
    Visit ← NEW Appointment("A. Chen", "filling", "none")
    OUTPUT Visit.GetTreatment()
    

    Các thuộc tính được thiết lập riêng tư (private) để chỉ có thể thay đổi thông qua các phương thức (bao đóng, Chủ đề 20); hàm khởi tạo là một thủ tục được gọi NEW với mỗi tham số tương ứng với một thuộc tính; một phương thức truy xuất (getter) là một hàm trả về giá trị thuộc tính. Mỗi yếu tố trên đều được chấm điểm riêng.

    Explore · ⁨Khám phá⁩

    Programming concept lab · ⁨Phòng thí nghiệm khái niệm lập trình⁩

    Connect examples to the programming idea they show.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    user-defined type/ˈjuːzə dɪˈfaɪnd taɪp/ kiểu do người dùng định nghĩa
    field/fiːld/ trường
    record/ˈrekɔːd/ bản ghi
    set/set/ tập hợp
    class/klæs/ lớp
    composite type/ˈkɒmpəzɪt taɪp/ kiểu tổ hợp
    enumerated type/ɪˈnjuːməreɪtɪd taɪp/ kiểu liệt kê
    pointer/ˈpɔɪntə/ con trỏ
    linked list/lɪŋkt lɪst/ danh sách liên kết
    dereference/ˌdiːˈrefrəns/ dereference
    object/ˈɒbdʒekt/ vật
    attributes/ˈætrɪbjuːts/ thuộc tính
    methods/ˈmeθədz/ phương thức
    constructor/kənˈstrʌktə/ constructor
    File organisation/faɪl ˌɔːɡənaɪˈzeɪʃn/ Sắp xếp tệp tin
    13.2

    File organisation and access · ⁨Tổ chức và truy cập tập tin⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of the methods of file organisation and select an appropriate method of file organisation and file access for a given problem Including serial, sequential (using a key field), random (using a record key)
    Show understanding of methods of file access Including Sequential access for serial and sequential files Direct access for sequential and random files
    Show understanding of hashing algorithms Describe and use different hashing algorithms to read from and write data to a random/sequential file
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về các phương pháp sắp xếp tệp và chọn phương pháp sắp xếp tệp và truy cập tệp phù hợp cho một bài toán đã cho Bao gồm thường trực tiếp, thứ tự (sử dụng trường khóa), ngẫu nhiên (sử dụng khóa ghi)
    Thể hiện sự hiểu biết về các phương pháp truy cập tệp Bao gồm Truy cập thứ tự cho tệp thường trực tiếp và thứ tự Truy cập trực tiếp cho tệp thứ tự và ngẫu nhiên
    Thể hiện sự hiểu biết về thuật toán băm Mô tả và sử dụng các thuật toán băm khác nhau để đọc và ghi dữ liệu vào tệp ngẫu nhiên/thứ tự

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    File organisation 文件组织 is how the data is laid out; file access is how the program reaches a record.

    • serial file 串行文件 — records in the order added, no sorting. Access is sequential only; appending is fast; searching is slow. Used for logs and audit trails.
    • sequential file 顺序文件 — records sorted by a key. Searching is faster (you can stop early or binary-search); inserting is slow (records must shift). Used for master files updated in batch.
    • random file 随机文件 (direct-access file) — records at positions computed from the key (often by a hash). Direct access by key is very fast; reading in key order is harder. Used for large lookup tables and customer accounts.

    The two access methods are sequential access 顺序存取 (read from start to end) and direct access 直接存取 (jump straight to a known position). Match the structure to the dominant operation: single-key lookups favour random; in-order reports favour sequential.

    Describing each organisation (the wording that scores). Serial: records are stored one after another in the order in which they were added, with no ordering by key. Sequential: records are stored in order of a key field (sorted). Random: each record is stored at an address calculated from its key by a hashing algorithm, so the records are not in any order. Comparing serial and sequential: both store records one after another and both are read sequentially, but a sequential file is ordered by key, so a search can stop as soon as a key larger than the target is read, and a new record must be inserted in its correct position (usually by rewriting the file), whereas a serial file is simply appended to.

    Describing each access method. Sequential access: start at the beginning of the file and read the records one after another (in the order stored) until the required record is found or the end of the file is reached. Applied to a serial file this means reading every record up to the match, and reading the whole file to establish that a record is absent; applied to a sequential file the search can stop early, as soon as a key greater than the target is read. Direct access: the address of the record is calculated from its key (by a hashing algorithm, or from an index), and the program goes straight to that position without reading the records before it; this is the access method for random files, and for a record referenced by a unique address on a disk.

    Choosing. A payroll or utility-billing master file processed in batch, every record in turn, suits a sequential file; a log of transactions in the order they happened suits a serial file; a stock or customer file where single records are looked up and updated by key while the program runs suits a random file with direct access.

    File handling in pseudocode. The exam expects the standard statements, and Paper 3 sets algorithms that use them:

    Task Statements
    open a text file OPENFILE "Scores.txt" FOR READ (or FOR WRITE, which creates or overwrites, or FOR APPEND)
    read or write a line READFILE "Scores.txt", Line and WRITEFILE "Scores.txt", Line
    test for the end WHILE NOT EOF("Scores.txt")
    close CLOSEFILE "Scores.txt"
    open a random file OPENFILE "Stock.dat" FOR RANDOM
    move to a record position SEEK "Stock.dat", Address
    read or write a whole record GETRECORD "Stock.dat", Item and PUTRECORD "Stock.dat", Item

    Worked example. A random file Stock.dat holds records of type StockItem, stored at the address given by ItemID MOD 100. Write pseudocode that stores a new item at its hashed address if that position is empty, reporting the position if it is already in use.

    Two details the mark scheme checks: SEEK before each GETRECORD or PUTRECORD (reading moves the position on, so seek again before writing), and the file opened FOR RANDOM and closed at the end. To copy every record of a random file to another, loop over the addresses with SEEK, GETRECORD from one file and PUTRECORD to the other, skipping empty positions.

    Tiếng Việt

    Tổ chức tập tin là cách dữ liệu được sắp xếp; truy cập tập tin là cách chương trình tiếp cận một bản ghi.

    • tập tin tuần tự (serial file) — các bản ghi theo thứ tự thêm vào, không sắp xếp. Truy cập chỉ theo dòng chảy liên tiếp; việc thêm vào cuối nhanh; tìm kiếm chậm. Dùng cho nhật ký và hồ sơ kiểm toán.
    • tập tin lần lượt (sequential file) — các bản ghi được sắp xếp theo khóa. Tìm kiếm nhanh hơn (có thể dừng sớm hoặc dùng tìm kiếm nhị phân); chèn vào chậm (các bản ghi phải di chuyển). Dùng cho tập tin chính được cập nhật theo lô.
    • tập tin ngẫu nhiên (random file) (tập tin truy cập trực tiếp) — các bản ghi tại các vị trí được tính toán từ khóa (thường qua hàm băm). Truy cập trực tiếp theo khóa rất nhanh; đọc theo thứ tự khóa khó khăn hơn. Dùng cho bảng tra cứu lớn và tài khoản khách hàng.
    Một hàng các hộp bản ghi từ đầu đến thứ sáu theo thứ tự chúng được thêm vào, với mũi tên chèn vào cuối và đánh dấu Bắt đầu tập tin
    Tập tin tuần tự: các bản ghi được giữ nguyên thứ tự mà chúng được thêm vào
    Một hàng các hộp bản ghi khách hàng với các giá trị khóa tăng dần, hiển thị các bản ghi đã được sắp xếp theo thứ tự khóa
    Tập tin lần lượt: các bản ghi được sắp xếp theo một trường khóa
    Một khóa bản ghi đi qua hàm băm để tính số ô, với bản ghi được đặt vào ô đó của tập tin
    Tập tin ngẫu nhiên: các bản ghi nằm ở các vị trí được tính toán từ khóa

    Hai phương pháp truy cập là truy cập tuần tự (đọc từ đầu đến cuối) và truy cập trực tiếp (nhảy thẳng đến một vị trí đã biết). Ghép nối cấu trúc với thao tác chủ đạo: tra cứu theo khóa đơn ưu tiên ngẫu nhiên; báo cáo theo thứ tự ưu tiên lần lượt.

    Mô tả từng tổ chức (cách diễn đạt để đạt điểm). Tuần tự: các bản ghi được lưu trữ liên tiếp nhau theo thứ tự chúng được thêm vào, không có sự sắp xếp theo khóa. Lần lượt: các bản ghi được lưu trữ theo thứ tự của một trường khóa (đã sắp xếp). Ngẫu nhiên: mỗi bản ghi được lưu trữ tại một địa chỉ được tính toán từ khóa của nó bởi thuật toán băm, nên các bản ghi không theo bất kỳ thứ tự nào. So sánh tuần tự và lần lượt: cả hai đều lưu trữ các bản ghi liên tiếp nhau và đều được đọc theo dòng chảy liên tiếp, nhưng tập tin lần lượt được sắp xếp theo khóa, nên việc tìm kiếm có thể dừng ngay khi đọc được một khóa lớn hơn mục tiêu, và một bản ghi mới phải được chèn vào đúng vị trí (thường là bằng cách ghi lại toàn bộ tập tin), trong khi tập tin tuần tự chỉ cần được chèn vào cuối.

    Hai chuỗi các bước: truy cập trực tiếp băm khóa thành địa chỉ, tìm đến vị trí đó và đọc/ghi bản ghi; truy cập lần lượt mở tập tin, đọc các bản ghi từng cái một từ đầu và so sánh các khóa cho đến khi tìm thấy bản ghi hoặc kết thúc tập tin
    Hai phương pháp truy cập dưới dạng thủ tục: truy cập trực tiếp tính nơi cần tìm; truy cập lần lượt tìm kiếm khắp nơi theo thứ tự

    Mô tả từng phương pháp truy cập. Truy cập lần lượt: bắt đầu từ đầu tập tin và đọc các bản ghi liên tiếp nhau (theo thứ tự lưu trữ) cho đến khi tìm thấy bản ghi mong muốn hoặc kết thúc tập tin. Áp dụng cho tập tin tuần tự điều này có nghĩa là đọc every record up to the match, and reading the whole file to establish that a record is absent; áp dụng cho tập tin lần lượt việc tìm kiếm có thể dừng sớm, ngay khi đọc được một khóa lớn hơn mục tiêu. Truy cập trực tiếp: địa chỉ của bản ghi được tính toán từ khóa của nó (bởi thuật toán băm, hoặc từ chỉ mục), và chương trình đi thẳng đến vị trí đó mà không đọc các bản ghi phía trước; đây là phương pháp truy cập dành cho tập tin ngẫu nhiên, và đối với một bản ghi được tham chiếu bởi địa chỉ duy nhất trên đĩa.

    Lựa chọn. Một tập tin chính lương thưởng hoặc hóa đơn tiện ích được xử lý theo lô, từng bản ghi một, phù hợp với tập tin lần lượt; nhật ký giao dịch theo thứ tự xảy ra phù hợp với tập tin tuần tự; tập tin kho hàng hoặc khách hàng nơi các bản ghi đơn lẻ được tra cứu và cập nhật theo khóa trong khi chương trình chạy phù hợp với tập tin ngẫu nhiên có truy cập trực tiếp.

    Xử lý tập tin trong giả mã. Đề thi yêu cầu các câu lệnh tiêu chuẩn, và Paper 3 đưa ra các thuật toán sử dụng chúng:

    Nhiệm vụ Câu lệnh
    mở một tập tin văn bản OPENFILE "Scores.txt" FOR READ (hoặc FOR WRITE, tạo hoặc ghi đè lên, hoặc FOR APPEND)
    đọc hoặc ghi một dòng READFILE "Scores.txt", Line và WRITEFILE "Scores.txt", Line
    kiểm tra kết thúc WHILE NOT EOF("Scores.txt")
    đóng CLOSEFILE "Scores.txt"
    mở một tập tin ngẫu nhiên OPENFILE "Stock.dat" FOR RANDOM
    di chuyển đến vị trí bản ghi SEEK "Stock.dat", Address
    đọc hoặc ghi toàn bộ một bản ghi GETRECORD "Stock.dat", Item và PUTRECORD "Stock.dat", Item

    Ví dụ có lời giải. Một tập tin ngẫu nhiên Stock.dat chứa các bản ghi loại StockItem, được lưu tại địa chỉ do ItemID MOD 100 cung cấp. Viết giả mã để lưu một mục mới tại địa chỉ đã băm nếu vị trí đó trống, và báo cáo vị trí nếu nó đã được sử dụng.

    DECLARE Item, Existing : StockItem
    DECLARE Address : INTEGER
    INPUT Item.ItemID, Item.Description, Item.Quantity
    Address ← Item.ItemID MOD 100
    OPENFILE "Stock.dat" FOR RANDOM
    SEEK "Stock.dat", Address
    GETRECORD "Stock.dat", Existing
    IF Existing.ItemID = 0 THEN
        // 0 marks an empty position
    ENDIF
        SEEK "Stock.dat", Address
        PUTRECORD "Stock.dat", Item
        OUTPUT "Stored at ", Address
    ELSE
        OUTPUT "Position ", Address, " is in use"
    ENDIF
    CLOSEFILE "Stock.dat"
    

    Hai chi tiết mà đáp án kiểm tra: SEEK trước mỗi GETRECORD hoặc PUTRECORD (việc đọc di chuyển vị trí, nên tìm lại trước khi ghi), và tệp được mở FOR RANDOM và đóng ở cuối. Để sao chép mọi bản ghi của tệp ngẫu nhiên sang tệp khác, lặp qua các địa chỉ với SEEK, GETRECORD từ tệp này và PUTRECORD sang tệp kia, bỏ qua các vị trí trống.

    Explore · ⁨Khám phá⁩

    File access route · ⁨Đường dẫn truy cập tập tin⁩

    Follow a file from storage to program and back safely. · ⁨Theo dõi tập tin từ bộ lưu trữ đến chương trình và trở lại an toàn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    serial file/ˈsɪərɪəl faɪl/ tệp tuần tự
    sequential file/siːˈkwenʃl faɪl/ tệp liên tiếp
    random file/ˈrændəm faɪl/ tệp ngẫu nhiên
    direct access/daɪˈrekt ˈækses/ truy cập trực tiếp
    hash function/hæʃ ˈfʌŋkʃn/ hàm bứt
    sequential access/siːˈkwenʃl ˈækses/ truy cập liên tiếp
    deterministic/dɪˌtɜːmɪˈnɪstɪk/ quy định trước
    collision/kəˈlɪʒn/ va chạm
    Watch lesson · ⁨Xem bài học⁩
    13.2

    Hashing

    English

    A hash function 散列函数 (a hashing algorithm) takes a record key and produces an address where the record is stored. A good one is fast, deterministic 确定性, and spreads keys evenly.

    Common hashing algorithms for $N$ slots: modulo hash address ← key MOD N; folding (split the key, add the pieces, MOD N); a string hash (sum the character codes, MOD N).

    A collision 冲突 is when two keys hash to the same address. Three ways to resolve it:

    Strategy How it works Trade-off
    linear probing 线性探测 use the next free slot (wrapping around) simple, but keys cluster
    chaining 链接法 each slot points to a linked list 链表 of records no clustering, but uses more memory
    rehashing apply a second hash function spreads keys, but more work

    To search: hash the key, read that slot; if the keys match you are done, else follow the resolution strategy until a match or an empty slot. To insert: hash the key, write to that slot or the next free one. Keep the load factor 装填因子 (records ÷ slots) below about 70% for near-O(1) lookups.

    "Explain what is meant by a hashing algorithm in the context of file access" (three marks). A calculation (function) performed on the key field of a record that produces a value, which is used as the address (location) at which the record is stored in the file and from which it is retrieved. The same calculation on the same key always gives the same address, which is why the record can be found again without searching.

    "Outline two methods of overcoming a collision." (1) Linear probing (open addressing): store the record in the next free location after the calculated address, wrapping round to the start if necessary; to retrieve, start at the hashed address and read forward until the key matches. (2) An overflow area 溢出区 or chaining: store the colliding record in a separate overflow area (or a linked list attached to the address), which is searched sequentially after the main address fails to match. Either scores; describe the retrieval as well as the storage.

    Worked example. A random file has 11 record positions, numbered 0 to 10, and the hashing algorithm is Address ← Key MOD 11. Records with keys 1250, 1381, 1452, 1613 and 1470 are stored in that order, using linear probing. Show where each record goes, and describe how key 1470 is retrieved.

    $1250 \bmod 11 = 7$; $1381 \bmod 11 = 6$; $1452 \bmod 11 = 0$; $1613 \bmod 11 = 7$, a collision with 1250, so 1613 takes the next free position, 8; $1470 \bmod 11 = 7$ again, and positions 7 and 8 are full, so 1470 goes to 9. To retrieve 1470: calculate $7$, read position 7 (key 1250, no match), read 8 (1613, no), read 9 (1470, found). If an empty position is reached before a match, the record is not in the file. Collisions are the price of a small file: a good hashing algorithm spreads the keys evenly, and the file is kept well below full so that probes stay short.

    Tiếng Việt

    Một hàm hash (một thuật toán hashing) nhận một khóa bản ghi và tạo ra một địa chỉ nơi bản ghi được lưu trữ. Một hàm tốt thì nhanh, xác định, và phân bố đều các khóa.

    Các thuật toán hashing phổ biến cho $N$ ô: hash chia dư address ← key MOD N; gập (chia nhỏ khóa, cộng các phần, MOD N); hash chuỗi (tổng mã ký tự, MOD N).

    Một xung đột là khi hai khóa có cùng địa chỉ hash. Ba cách khắc phục:

    Chiến lược Cách hoạt động Đánh đổi
    quét tuyến tính sử dụng ô tiếp theo trống (lăn vòng) đơn giản, nhưng các khóa bám nhóm
    nối链条 mỗi ô trỏ đến một danh sách liên kết các bản ghi không bị bám nhóm, nhưng tốn bộ nhớ hơn
    HASHING LẠI áp dụng hàm hash thứ hai phân tán khóa, nhưng tốn công hơn
    Giải quyết va chạm khi khóa A và B đều hash vào slot 2. Linear probing đưa B vào slot trống tiếp theo (3); chaining giữ cho slot 2 trỏ tới danh sách liên kết chứa A rồi B
    Khắc phục xung đột hash: quét tuyến tính dùng ô trống tiếp theo; nối链条 giữ danh sách liên kết cho mỗi ô

    Để tìm kiếm: hash khóa, đọc ô đó; nếu khóa trùng bạn đã xong, nếu không hãy làm theo chiến lược khắc phục cho đến khi khớp hoặc gặp ô trống. Để chèn: hash khóa, ghi vào ô đó hoặc ô trống tiếp theo. Giữ tỷ lệ tải (số bản ghi ÷ số ô) dưới khoảng 70% để tra cứu gần như O(1).

    "Giải thích thuật ngữ thuật toán hashing trong ngữ cảnh truy cập tệp" (ba điểm). Một phép tính (hàm) thực hiện trên trường khóa của bản ghi tạo ra một giá trị, giá trị này được dùng làm địa chỉ (vị trí) lưu trữ bản ghi trong tệp và lấy lại từ đó. Phép tính giống nhau trên cùng một khóa luôn cho cùng một địa chỉ, vì vậy bản ghi có thể được tìm thấy lần nữa mà không cần tìm kiếm.

    "Nêu hai phương pháp khắc phục xung đột." (1) Quét tuyến tính (địa chỉ mở): lưu bản ghi vào vị trí tiếp theo trống sau địa chỉ đã tính, lăn vòng về đầu nếu cần thiết; để lấy lại, bắt đầu từ địa chỉ hash và đọc tiến tới cho đến khi khóa khớp. (2) Khu vực tràn hoặc nối链条: lưu bản ghi xung đột vào khu vực tràn riêng biệt (hoặc danh sách liên kết gắn với địa chỉ), khu vực này được tìm tuần tự sau khi địa chỉ chính không khớp. Either scores; mô tả cả việc lấy lại cũng như lưu trữ.

    Ví dụ minh họa. Một tệp ngẫu nhiên có 11 vị trí bản ghi, đánh số từ 0 đến 10, và thuật toán hashing là Address ← Key MOD 11. Các bản ghi có khóa 1250, 1381, 1452, 1613 và 1470 được lưu theo thứ tự đó, sử dụng quét tuyến tính. Hãy chỉ ra vị trí của từng bản ghi và mô tả cách lấy lại khóa 1470.

    $1250 \bmod 11 = 7$; $1381 \bmod 11 = 6$; $1452 \bmod 11 = 0$; $1613 \bmod 11 = 7$, một xung đột với 1250, vì vậy 1613 chiếm vị trí trống tiếp theo là 8; $1470 \bmod 11 = 7$ một lần nữa, và các vị trí 7 và 8 đã đầy, nên 1470 đi vào 9. Để lấy lại 1470: tính $7$, đọc vị trí 7 (khóa 1250, không khớp), đọc 8 (1613, không), đọc 9 (1470, tìm thấy). Nếu đạt được vị trí trống trước khi khớp, bản ghi không có trong tệp. Xung đột là cái giá của một tệp nhỏ: một thuật toán hashing tốt phân tán đều các khóa, và tệp được giữ远低于满这样探子保持短。

    Explore · ⁨Khám phá⁩

    A hash table · ⁨Bảng hash⁩

    Watch each key get hashed to a bucket. A good hash spreads keys out so lookups stay fast. · ⁨Quan sát mỗi khóa được hash vào một ngăn chứa. Một hàm hash tốt phân tán các khóa ra để việc tra cứu vẫn nhanh.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    linear probing/ˈlɪnɪə ˈprəʊbɪŋ/ khám phá tuyến tính
    chaining/ˈtʃeɪnɪŋ/ liên kết chuỗi
    load factor/ləʊd ˈfæktə/ hệ số tải
    overflow area/ˌəʊvəˈfləʊ ˈeərɪə/ vùng tràn
    13.3

    Floating-point numbers · ⁨Số thập phân động⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Describe the format of binary floating-point real numbers Use two's complement form Understand of the effects of changing the allocation of bits to mantissa and exponent in a floating-point representation
    Convert binary floating-point real numbers into denary and vice versa
    Normalise floating-point numbers Understand the reasons for normalisation
    Show understanding of the consequences of a binary representation only being an approximation to the real number it represents (in certain cases) Understand how underflow and overflow can occur
    Show understanding that binary representations can give rise to rounding errors
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Mô tả định dạng của số thực phân số nhị phân Sử dụng dạng bổ hai Hiểu về ảnh hưởng của việc thay đổi số bit phân bổ cho phần thập phân và số mũ trong biểu diễn phân số
    Chuyển đổi số thực dấu phẩy động nhị phân sang thập phân và ngược lại
    Chuẩn hóa các số phân số Hiểu lý do tại sao cần chuẩn hóa
    Thể hiện sự hiểu biết về hậu quả của việc biểu diễn nhị phân chỉ là xấp xỉ của số thực mà nó đại diện (trong một số trường hợp) Hiểu cách dưới lưu trữ và vượt lưu trữ có thể xảy ra
    Thể hiện sự hiểu biết rằng biểu diễn nhị phân có thể dẫn đến lỗi làm tròn

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    To store real numbers of very different sizes, computers use a floating-point 浮点 format — a binary form of scientific notation, with two fields:

    • a mantissa 尾数 — the significant digits.
    • an exponent 指数 — the power of 2 to multiply by.

    Both are stored as two's complement 补码 integers. The value is

    $$\text{number} = \text{mantissa} \times 2^{\text{exponent}}.$$

    Read the mantissa as a binary fraction — the first bit after the point is worth $1/2$, the next $1/4$, then $1/8$, and so on. So 0.1010000 is $1/2 + 1/8 = 0.625$; with exponent 00000010 (= 2) the value is $0.625 \times 2^{2} = 2.5$.

    Converting

    • binary → denary: read the mantissa (use two's-complement rules if negative) as a fraction, read the exponent as a signed integer, then multiply mantissa by $2^{\text{exponent}}$.
    • denary → binary: write the number as a binary fraction × a power of 2, then store the mantissa and exponent in the agreed formats.

    Worked example. A number has mantissa 10110000 and exponent 00000011. Find its denary value.

    The exponent 00000011 is $+3$. The mantissa begins with a 1, so it is negative. Read as 1.0110000 in two's complement, the sign bit is worth $-1$ and the fraction bits add $\tfrac{1}{4} + \tfrac{1}{8} = 0.375$, so the mantissa is $-1 + 0.375 = -0.625$. Then

    $$\text{number} = -0.625 \times 2^{3} = -5.0.$$

    Worked example. Store $+2.5$ in this format.

    In binary $2.5 = 10.1$. Written as a normalised fraction, $2.5 = 0.101 \times 2^{2}$. So the mantissa is 01010000 (sign bit 0, then .101) and the exponent is 00000010 ($= 2$).

    The exam's format: two's complement, a mantissa and an exponent

    The exam states a format such as 10 bits for the mantissa and 6 bits for the exponent, both in two's complement. The mantissa's binary point sits after its first (sign) bit, so a positive mantissa is 0.xxxxxxxxx and a negative one 1.xxxxxxxxx; the exponent is an ordinary signed integer. Every conversion uses the same three moves: read the mantissa as a fraction (two's-complement rules if it starts with 1), read the exponent as an integer, multiply by $2^{\text{exponent}}$.

    Worked example (binary to denary). Mantissa 0101100000, exponent 000011.

    Mantissa: $0.101100000_2 = \tfrac{1}{2} + \tfrac{1}{8} + \tfrac{1}{16} = 0.6875$. Exponent: $000011_2 = 3$. Value: $0.6875 \times 2^{3} = 5.5$.

    Worked example (negative mantissa). Mantissa 1011000000, exponent 000010.

    The mantissa starts with 1, so it is negative. Its value is $-1 + 0.011000000_2 = -1 + (\tfrac{1}{4} + \tfrac{1}{8}) = -0.625$; exponent $= 2$; value $-0.625 \times 4 = -2.5$. (Alternatively, take the two's complement of the mantissa, 0101000000 $= 0.625$, and attach the minus sign.) A negative exponent such as 111110 $= -2$ divides instead: a mantissa of $0.5$ with that exponent is $0.5 \times 2^{-2} = 0.125$.

    Worked example (denary to binary). Store $+6.5$ and $-6.5$ in the 10-bit and 6-bit format, normalised.

    $6.5 = 110.1_2 = 0.1101_2 \times 2^{3}$, so the mantissa is 0110100000 and the exponent 000011. For $-6.5$, take the two's complement of the mantissa: 1001100000 (check: $-1 + 0.0011_2 = -1 + 0.1875 = -0.8125$, and $-0.8125 \times 8 = -6.5$), exponent 000011 unchanged. The sign never goes into the exponent; a negative number has a negative mantissa.

    Normalisation

    A number is normalised 规格化 when the first significant bit is immediately after the binary point (no wasted leading zeros). This maximises precision, because every mantissa bit carries information. To normalise, shift the mantissa left and decrease the exponent (or shift right and increase it) until the first significant bit is in place; the value is unchanged. For negative (two's-complement) mantissas, the sign bit (1) is followed immediately by a 0.

    Recognising and producing normalised form. A positive normalised mantissa begins 01; a negative one begins 10. So 0011000000 is not normalised (shift left one place and subtract one from the exponent: 0110000000, exponent one less) and 1100000000 is not either (shift left until the pattern is 10...). Each shift left of the mantissa must be matched by subtracting one from the exponent, or the value changes.

    "Explain why numbers are stored in normalised form" (two marks). (1) It gives the maximum precision (accuracy) for the number of bits available, because no bits are wasted on leading zeros (or leading ones for a negative number); (2) each number then has a unique representation, so numbers can be compared; and (3) it makes the best use of the available range. Any two of these score.

    Approximation and rounding errors

    Many denary reals cannot be stored exactly in binary — e.g. $0.1_{10}$ is the repeating binary fraction $0.000110011\ldots_{2}$, which must be truncated. Consequences:

    • rounding errors 舍入误差 build up over many operations (0.1 + 0.2 is not exactly 0.3).
    • comparisons fail — never test a real for equality. Test that the difference is smaller than a small tolerance, IF Difference < 0.000001, where the difference is taken the right way round or through a modulus function that the question would define. ABS is not on the 9618 insert or in the Pseudocode Guide, so do not assume it: the guide says any function a question needs will be given.
    • subtracting two nearly-equal values loses precision.
    • overflow 溢出 (a result too large for the exponent's range) and underflow 下溢 (a result too small, rounding to zero) occur when the exponent runs out of range.

    For exact needs (currency), use fixed-point 定点 or BCD 二进码十进数 instead of floating-point.

    "Describe the effect of changing the allocation of bits" (three marks). With a fixed total number of bits, increasing the mantissa and reducing the exponent gives greater precision 精度 (more significant figures, smaller rounding errors) but a smaller range 范围 (the largest and smallest magnitudes that can be stored shrink); increasing the exponent does the opposite: a larger range at the cost of precision. Name both effects and both directions.

    Largest and smallest. In the 10-bit mantissa, 6-bit exponent format the largest positive number has mantissa 0111111111 ($= 1 - 2^{-9}$) and exponent 011111 ($= 31$): about $2^{31}$. The smallest positive normalised number has mantissa 0100000000 ($= 0.5$) and exponent 100000 ($= -32$): $0.5 \times 2^{-32} = 2^{-33}$. The most negative number has mantissa 1000000000 ($= -1$) and exponent $31$: $-2^{31}$.

    "Explain what is meant by overflow and underflow." Overflow occurs when the result of a calculation is larger than the largest number that can be represented, so the exponent would need more bits than it has; underflow occurs when a result is smaller than the smallest (non-zero) number that can be represented, too close to zero for the exponent to express, so it is stored as zero. Both come from the exponent's range, not the mantissa's.

    Why a binary representation is only an approximation. A binary fraction can only represent sums of $\tfrac{1}{2}, \tfrac{1}{4}, \tfrac{1}{8}, \ldots$ exactly; a value such as $0.1$ or $\tfrac{1}{3}$ has an infinite binary expansion, and the mantissa has a fixed number of bits, so the stored value is the nearest one that fits. The difference is a rounding error; it is small for one number but accumulates over repeated calculations (adding $0.1$ ten times may not give exactly $1$), which is why real numbers should never be tested for exact equality.

    Tiếng Việt

    Để lưu trữ số thực có kích thước rất khác nhau, máy tính sử dụng định dạng thập phân động — dạng nhị phân của ký hiệu khoa học, với hai trường:

    • phầnmantissa — các chữ số có ý nghĩa.
    • số mũ — lũy thừa của 2 để nhân với.

    Cả hai đều được lưu dưới dạng số nguyên bù hai. Giá trị là

    $$\text{number} = \text{mantissa} × 2^{\text{exponent}}.$$

    Đọc mantissa dưới dạng phân số nhị phân — bit đầu tiên sau dấu phẩy có giá trị $1/2$, bit tiếp theo $1/4$, sau đó $1/8$, v.v. Vậy 0.1010000 là $1/2 + 1/8 = 0.625$; với số mũ 00000010 (= 2) giá trị là $0.625 \times 2^{2} = 2.5$.

    Hai byte giá trị vị trí: mantissa 8-bit có bit dấu và phân số từ một nửa đến 1 chia cho 128, và số mũ two's-complement 8-bit từ âm 128 đến 1
    Giá trị vị trí của mantissa 8-bit và số mũ 8-bit

    Chuyển đổi

    • nhị phân → thập phân: đọc mantissa (sử dụng quy tắc bù hai nếu âm) dưới dạng phân số, đọc số mũ dưới dạng số nguyên có dấu, sau đó nhân mantissa với $2^{\text{exponent}}$.
    • thập phân → nhị phân: viết số dưới dạng phân số nhị phân × lũy thừa của 2, sau đó lưu mantissa và số mũ theo định dạng thống nhất.

    Ví dụ minh họa. Một số có mantissa 10110000 và số mũ 00000011. Tìm giá trị thập phân của nó.

    Số mũ 00000011 là $+3$. Mantissa bắt đầu bằng 1, vì vậy nó là số âm. Đọc dưới dạng 1.0110000 trong bù hai, bit dấu có giá trị $-1$ và các bit phân số cộng thêm $\tfrac{1}{4} + \tfrac{1}{8} = 0.375$, nên mantissa là $-1 + 0.375 = -0.625$. Sau đó

    $$\text{number} = -0.625 \times 2^{3} = -5.0.$$

    Ví dụ minh họa. Lưu $+2.5$ dưới định dạng này.

    Trong nhị phân là $2.5 = 10.1$. Viết dưới dạng phân số chuẩn hóa, là $2.5 = 0.101 \times 2^{2}$. Vậy mantissa là 01010000 (bit dấu 0, sau đó là .101) và số mũ là 00000010 ($= 2$).

    Định dạng đề thi: bù hai, mantissa và số mũ

    Đề thi nêu một định dạng như 10 bit cho phần thập phân và 6 bit cho số mũ, cả hai đều dùng bổ hai. Dấu thập phân nhị phân của phần thập phân nằm ngay sau bit đầu tiên (bit dấu), nên một phần thập phân dương là 0.xxxxxxxxx và một phần thập phân âm là 1.xxxxxxxxx; số mũ là một số nguyên có dấu thông thường. Mọi phép chuyển đổi đều sử dụng ba bước giống nhau: đọc phần thập phân dưới dạng phân số (áp dụng quy tắc bổ hai nếu nó bắt đầu bằng 1), đọc số mũ dưới dạng số nguyên, rồi nhân với $2^{\text{exponent}}$.

    Ví dụ đã giải (nhị phân sang thập phân). Phần thập phân 0101100000, số mũ 000011.

    Mantissa: $0.101100000_2 = \tfrac{1}{2} + \tfrac{1}{8} + \tfrac{1}{16} = 0.6875$. Số mũ: $000011_2 = 3$. Giá trị: $0.6875 \times 2^{3} = 5.5$.

    Ví dụ đã giải (phần thập phân âm). Phần thập phân 1011000000, số mũ 000010.

    Phần thập phân bắt đầu bằng 1, do đó nó là số âm. Giá trị của nó là $-1 + 0.011000000_2 = -1 + (\tfrac{1}{4} + \tfrac{1}{8}) = -0.625$; số mũ $= 2$; giá trị $-0.625 \times 4 = -2.5$. (Hoặc, lấy bổ hai của phần thập phân, 0101000000 $= 0.625$, và thêm dấu trừ). Một số mũ âm như 111110 $= -2$ sẽ thực hiện phép chia thay vì nhân: một phần thập phân có giá trị $0.5$ kết hợp với số mũ đó sẽ tạo ra $0.5 \times 2^{-2} = 0.125$.

    Ví dụ đã giải (thập phân sang nhị phân). Lưu trữ $+6.5$ và $-6.5$ ở định dạng 10 bit và 6 bit, chuẩn hóa.

    $6.5 = 110.1_2 = 0.1101_2 \times 2^{3}$, nên phần thập phân là 0110100000 và số mũ là 000011. Đối với $-6.5$, hãy lấy bổ hai của phần thập phân: 1001100000 (kiểm tra: $-1 + 0.0011_2 = -1 + 0.1875 = -0.8125$, và $-0.8125 \times 8 = -6.5$), số mũ 000011 không đổi. Dấu không bao giờ đi vào số mũ; một số âm luôn có một phần thập phân mang dấu âm.

    Chuẩn hóa

    Một số được chuẩn hóa khi bit có ý nghĩa đầu tiên nằm ngay sau dấu nhị phân (không có số không dẫn đầu vô ích). Điều này tối đa hóa độ chính xác, vì mỗi bit của phần mantissa đều mang thông tin. Để chuẩn hóa, dịch mantissa sang trái và giảm số mũ (hoặc dịch sang phải và tăng nó) cho đến khi bit có ý nghĩa đầu tiên được đặt đúng chỗ; giá trị không thay đổi. Đối với mantissa âm (hai bù), bit dấu (1) được theo ngay sau bởi một 0.

    Nhận diện và tạo dạng chuẩn hóa. Một phần thập phân dương chuẩn hóa bắt đầu bằng 01; một phần thập phân âm bắt đầu bằng 10. Vì vậy, 0011000000 không phải là dạng chuẩn hóa (dịch sang trái một vị trí và trừ đi một từ số mũ: 0110000000, số mũ ít hơn một) và 1100000000 cũng không phải (dịch sang trái cho đến khi mẫu hình trở thành 10...). Mỗi lần dịch phần thập phân sang trái phải được cân bằng bằng việc trừ đi một từ số mũ, nếu không giá trị sẽ thay đổi.

    "Giải thích tại sao các số được lưu ở dạng chuẩn hoá" (hai điểm). (1) Nó mang lại độ chính xác tối đa (độ chính xác) cho số bit có sẵn, vì không có bit nào bị lãng phí vào các số không đầu (hoặc số một đầu đối với số âm); (2) mỗi số sau đó có một biểu diễn duy nhất, do đó các số có thể được so sánh; và (3) nó sử dụng tốt nhất phạm vi có sẵn. Bất kỳ hai ý nào trong ba ý này đều đạt điểm.

    Chuẩn hoá 0.0011010 với số mũ 4: dịch chuyển phần thập phân sang trái hai vị trí và giảm số mũ đi 2, tạo ra 0.1101000 với số mũ 2 — cùng giá trị, không có số không đầu bị lãng phí
    Chuẩn hoá: dịch chuyển phần thập phân sang trái để loại bỏ các số không đầu, đồng thời giảm số mũ đi đúng lượng đó

    xấp xỉ và lỗi làm tròn

    Nhiều số thực thập phân không thể được lưu trữ chính xác trong hệ nhị phân — ví dụ: $0.1_{10}$ là phân số nhị phân vô hạn $0.000110011\ldots_{2}$, buộc phải cắt cụt. Hệ quả:

    • lỗi làm tròn tích lũy qua nhiều phép toán (0.1 + 0.2 không chính xác bằng 0.3).
    • so sánh thất bại — tuyệt đối không kiểm tra sự bằng nhau của số thực. Hãy kiểm tra xem sự chênh lệch có nhỏ hơn một ngưỡng cho phép nhỏ, IF Difference < 0.000001, trong đó sự chênh lệch được tính theo hướng đúng hoặc thông qua một hàm模数 mà đề bài sẽ định nghĩa. ABS không nằm trong tài liệu đính kèm 9618 hay Hướng dẫn Pseudocode, vì vậy đừng giả định rằng nó tồn tại: hướng dẫn nói rằng bất kỳ hàm nào đề bài cần thiết đều sẽ được cung cấp.
    • trừ hai giá trị gần bằng nhau sẽ mất độ chính xác.
    • vượt quá giới hạn trên ( Overflow - kết quả quá lớn so với phạm vi của số mũ) và vượt quá giới hạn dưới ( Underflow - kết quả quá nhỏ, làm tròn về zero) xảy ra khi số mũ vượt quá phạm vi cho phép.

    Đối với nhu cầu chính xác tuyệt đối (tiền tệ), hãy sử dụng điểm cố định hoặc BCD thay vì số thực động.

    Ba từ 16-bit được chia tách khác nhau giữa phần thập phân và số mũ: mười hai và bốn bit cho độ chính xác cao nhưng phạm vi nhỏ, tám và tám bit cho sự cân bằng, bốn và mười hai bit cho phạm vi cực lớn nhưng giá trị thô sơ
    Tổng số bit giống nhau được chia sẻ theo hai cách: các bit của phần thập phân mua độ chính xác, các bit của số mũ mua phạm vi, và một bên chỉ có thể phát triển ở mức hy sinh bên kia

    "Mô tả tác động của việc thay đổi phân bổ bit" (ba điểm). Với tổng số bit cố định, tăng phần thập phân và giảm số mũ sẽ mang lại độ chính xác cao hơn (nhiều chữ số có ý nghĩa hơn, lỗi làm tròn nhỏ hơn) nhưng phạm vi nhỏ hơn (các giá trị lớn nhất và nhỏ nhất có thể lưu trữ bị thu hẹp); tăng số mũ làm ngược lại: phạm vi lớn hơn nhưng đánh đổi bằng độ chính xác. Phải nêu rõ cả hai tác động và cả hai chiều hướng.

    Lớn nhất và nhỏ nhất. Trong định dạng 10 bit cho phần thập phân, 6 bit cho số mũ, số dương lớn nhất có phần thập phân 0111111111 ($= 1 - 2^{-9}$) và số mũ 011111 ($= 31$): khoảng $2^{31}$. Số dương chuẩn hóa nhỏ nhất có phần thập phân 0100000000 ($= 0.5$) và số mũ 100000 ($= -32$): $0.5 \times 2^{-32} = 2^{-33}$. Số âm lớn nhất (giá trị tuyệt đối lớn nhất) có phần thập phân 1000000000 ($= -1$) và số mũ $31$: $-2^{31}$.

    "Giải thích ý nghĩa của vượt quá giới hạn trên và dưới." Vượt quá giới hạn trên (Overflow) xảy ra khi kết quả của một phép tính lớn hơn số lớn nhất có thể biểu diễn, khiến số mũ đòi hỏi nhiều bit hơn so với số bit thực tế; vượt quá giới hạn dưới (Underflow) xảy ra khi một kết quả nhỏ hơn số nhỏ nhất (khác không) có thể biểu diễn, quá gần với zero để số mũ có thể biểu diễn, nên nó được lưu trữ là zero. Cả hai đều xuất phát từ phạm vi của số mũ, không phải từ phần thập phân.

    Tại sao biểu diễn nhị phân chỉ là một giá trị xấp xỉ. Một phân số nhị phân chỉ có thể biểu diễn chính xác các tổng của $\tfrac{1}{2}, \tfrac{1}{4}, \tfrac{1}{8}, \ldots$; một giá trị như $0.1$ hoặc $\tfrac{1}{3}$ có phần mở rộng nhị phân vô hạn, và mantissa có số bit cố định, nên giá trị được lưu trữ là giá trị gần nhất phù hợp. Sự khác biệt này là lỗi làm tròn; nó nhỏ đối với một số nhưng tích lũy qua các phép tính lặp lại (cộng $0.1$ mười lần có thể không cho ra kết quả chính xác là $1$), do đó các số thực không bao giờ nên được kiểm tra bằng cách so sánh bằng nhau hoàn toàn.

    Explore · ⁨Khám phá⁩

    Build a floating-point number · ⁨Xây dựng số thực⁩

    Flip the mantissa and exponent bits to make a value, and check whether it is normalised. · ⁨Lật ngược các bit phần thập phân và mũ để tạo ra giá trị, và kiểm tra xem nó có được chuẩn hóa hay không.⁩

    Explore · ⁨Khám phá⁩

    Normalising a floating-point number · ⁨Chuẩn hóa số thực⁩

    Step through normalisation. Shifting the mantissa to remove wasted leading zeros — and adjusting the exponent to match — keeps the value the same but spends every bit on precision.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    overflow/ˌəʊvəˈfləʊ/ tràn
    floating-point/ˈfləʊtɪŋ pɔɪnt/ dấu phẩy động
    mantissa/mænˈtɪsə/ phần thập phân
    exponent/ekˈspəʊnənt/ số mũ
    two's complement/tuːz ˈkɒmplɪmənt/ bổ hai
    normalised/ˈnɔːməlaɪzd/ chuẩn hóa
    rounding errors/ˈraʊndɪŋ ˈerəz/ lỗi làm tròn
    underflow/ˌʌndəˈfləʊ/ quá nhỏ (underflow)
    fixed-point/fɪkst pɔɪnt/ dấu phẩy cố định
    BCD/ˌbiː siː ˈdiː/ BCD
    precision/prɪˈsɪʒn/ độ chính xác (precision)
    range/reɪndʒ/ tập giá trị
    Watch lesson · ⁨Xem bài học⁩
    13.3

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    user-defined data type a data type defined by the programmer, based on existing types, to represent data specific to the problem
    non-composite type a type defined without reference to another type; it holds a single value (integer, real, enumerated, pointer)
    composite type a type made up of other types; it holds several values under one identifier (record, set, array, class)
    enumerated type a non-composite type defined by listing all its possible values, in order
    pointer type a non-composite type whose value is the memory address of a variable of a given type
    set a composite type holding a collection of values of one type, unordered and without duplicates
    record a composite type with a fixed number of fields, each with its own identifier and type, accessed by dot notation
    class a composite type combining attributes (data) with the methods (procedures and functions) that act on them; an object is an instance of a class
    serial file records stored one after another in the order in which they were added
    sequential file records stored one after another in order of a key field
    random file records stored at addresses calculated from their keys by a hashing algorithm
    sequential access reading the records in turn from the start of the file until the one required is found
    direct access calculating the address of a record from its key and going straight to that position
    hashing algorithm a calculation on the key of a record that gives the address at which the record is stored and found
    collision two different keys producing the same address
    mantissa the part of a floating-point number that holds its significant bits, as a two's-complement fraction
    exponent the two's-complement integer giving the power of two by which the mantissa is multiplied
    normalised a floating-point number whose mantissa begins 01 (positive) or 10 (negative), so no bits are wasted on leading zeros or ones
    overflow a result too large to be represented in the number of bits available
    underflow a non-zero result too small to be represented, so it is stored as zero
    rounding error the difference between a real number and the nearest value that the binary representation can hold
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    kiểu dữ liệu do người dùng định nghĩa một kiểu dữ liệu do lập trình viên tạo ra, dựa trên các kiểu đã có, để biểu diễn dữ liệu đặc thù cho vấn đề đang giải quyết
    kiểu đơn giản một kiểu được định nghĩa mà không tham chiếu đến kiểu nào khác; nó chứa một giá trị duy nhất (nguyên, thực, liệt kê, conype)
    kiểu phức hợp một kiểu được cấu thành từ các kiểu khác; nó chứa nhiều giá trị dưới cùng một danh xưng (bản ghi, tập hợp, mảng, lớp)
    kiểu liệt kê một kiểu đơn giản được định nghĩa bằng cách liệt kê tất cả các giá trị có thể có của nó theo thứ tự
    kiểu conype một kiểu đơn giản mà giá trị của nó là địa chỉ bộ nhớ của một biến thuộc một kiểu xác định
    tập hợp một kiểu phức hợp chứa một nhóm các giá trị của một kiểu, không có thứ tự và không có giá trị trùng lặp
    bản ghi một kiểu phức hợp có một số lượng trường cố định, mỗi trường có danh xưng và kiểu riêng, truy cập thông qua ký hiệu chấm
    lớp một kiểu phức hợp kết hợp các thuộc tính (dữ liệu) với các phương thức (thủ tục và hàm) tác động lên chúng; một đối tượng là một实例 của lớp
    tập tin tuần tự các bản ghi được lưu trữ liên tiếp theo đúng thứ tự chúng được thêm vào
    tập tin truy cập tuần tự các bản ghi được lưu trữ liên tiếp theo thứ tự của một trường khóa
    tập tin truy cập ngẫu nhiên các bản ghi được lưu trữ tại các địa chỉ được tính toán từ khóa của chúng bởi một thuật toán băm
    truy cập tuần tự đọc các bản ghi lần lượt từ đầu tập tin cho đến khi tìm thấy bản ghi cần thiết
    truy cập trực tiếp tính toán địa chỉ của một bản ghi từ khóa của nó và truy cập ngay vị trí đó
    thuật toán băm một phép tính trên khóa của một bản ghi mang lại địa chỉ nơi bản ghi được lưu trữ và tìm thấy
    va chạm hai khóa khác nhau sinh ra cùng một địa chỉ
    mantissa phần của số thực chứa các bit có ý nghĩa của nó, dưới dạng phân số bù hai
    số mũ số nguyên bù hai cho biết lũy thừa của hai mà mantissa được nhân với
    đã chuẩn hoá một số thực động mà phần thập phân bắt đầu bằng 01 (số dương) hoặc 10 (số âm), do đó không có bit nào bị lãng phí vào các số không hay số một đầu
    tràn một kết quả quá lớn để được biểu diễn trong số bit khả dụng
    thiếu một kết quả khác 0 quá nhỏ để được biểu diễn, vì vậy nó được lưu trữ như 0
    lỗi làm tròn sự khác biệt giữa một số thực và giá trị gần nhất mà biểu diễn nhị phân có thể chứa
    13.3

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Pseudocode declarations are marked line by line: TYPE ... = (...) for enumerated, TYPE ... = ^... for pointer, TYPE ... = SET OF ... then DEFINE ... (...) : ... for a set, TYPE ... DECLARE ... ENDTYPE for a record, CLASS ... PRIVATE ... PUBLIC PROCEDURE NEW ... ENDCLASS for a class.
    • Match the type to the data: fixed named values, enumerated; a group of different fields, record; a collection of unique values, set; data plus behaviour, class; an address, pointer.
    • File organisation is how records are stored; file access is how they are found. Serial and sequential are read sequentially; random files use direct access via a hash of the key. Sequential search of a sequential file can stop early; of a serial file it cannot.
    • Random-file pseudocode: OPENFILE ... FOR RANDOM, SEEK before every GETRECORD or PUTRECORD, CLOSEFILE at the end. Say how a collision is resolved when you describe hashing.
    • Floating point: mantissa as a two's-complement fraction (point after the sign bit), exponent as an integer, multiply by $2^{\text{exponent}}$; shift left and subtract one from the exponent to normalise; the mantissa buys precision, the exponent buys range.
    • The three "explain" stock answers: why normalise (precision, unique form, range), the effect of re-allocating bits (precision against range), and why $0.1$ cannot be stored exactly (an infinite binary fraction in a finite mantissa).

    Common mistakes

    • Writing DECLARE instead of TYPE for a new type, or leaving out ENDTYPE; declaring a set without SET OF, or an enumerated type with quotation marks round its values.
    • Putting the sign of a floating-point number in the exponent; the sign is the first bit of the mantissa.
    • Reading a negative mantissa as if it were sign-and-magnitude; it is two's complement, so 1011000000 is $-0.625$, not $-0.375$.
    • Shifting the mantissa to normalise without changing the exponent, or changing it the wrong way (shift left, exponent down).
    • Describing a random file as "in random order"; the records are at addresses computed from their keys.
    • Saying sequential access reads "the whole file" for a sequential file; it stops when a larger key is met.
    • Explaining hashing without saying what the calculated value is used for (the address to store and retrieve the record), or without a way of handling collisions.
    • Defining overflow as "too many digits" instead of a result beyond the largest representable value, or blaming the mantissa for it.
    Tiếng Việt
    • Các khai báo giả mã được đánh dấu từng dòng: TYPE ... = (...) cho liệt kê, TYPE ... = ^... cho con trỏ, TYPE ... = SET OF ... sau đó DEFINE ... (...) : ... cho tập hợp, TYPE ... DECLARE ... ENDTYPE cho bản ghi, CLASS ... PRIVATE ... PUBLIC PROCEDURE NEW ... ENDCLASS cho lớp.
    • Khớp loại với dữ liệu: các giá trị có tên cố định, liệt kê; một nhóm các trường khác nhau, bản ghi; một tập hợp các giá trị độc nhất, tập hợp; dữ liệu plus hành vi, lớp; một địa chỉ, conype.
    • Tổ chức tập tin là cách các bản ghi được lưu trữ; truy cập tập tin là cách chúng được tìm kiếm. Tuần tự và truy cập tuần tự được đọc lần lượt; tập tin ngẫu nhiên sử dụng truy cập trực tiếp thông qua mã băm của khóa. Tìm kiếm tuần tự của một tập tin truy cập tuần tự có thể dừng sớm; của một tập tin tuần tự thì không thể.
    • Pseudocode tập tin ngẫu nhiên: OPENFILE ... FOR RANDOM, SEEK trước mỗi GETRECORD hoặc PUTRECORD, CLOSEFILE ở cuối. Nêu cách giải quyết va chạm khi bạn mô tả thuật toán băm.
    • Số thực: mantissa dưới dạng phân số bù hai (chấm sau bit dấu), số mũ dưới dạng số nguyên, nhân với $2^{\text{exponent}}$; dịch trái và trừ một khỏi số mũ để chuẩn hóa; mantissa mua độ chính xác, số mũ mua phạm vi.
    • Ba câu trả lời "giải thích" tiêu chuẩn: tại sao phải chuẩn hóa (độ chính xác, dạng duy nhất, phạm vi), ảnh hưởng của việc tái phân bổ bit (độ chính xác chống lại phạm vi), và tại sao $0.1$ không thể được lưu trữ chính xác (một phân số nhị phân vô hạn trong mantissa hữu hạn).

    Lỗi thường gặp

    • Viết DECLARE thay vì TYPE cho một loại mới, hoặc bỏ sót ENDTYPE; khai báo một tập hợp mà không có SET OF, hoặc một kiểu liệt kê với dấu ngoặc kép bao quanh các giá trị của nó.
    • Đặt dấu của số thực vào số mũ; dấu là bit đầu tiên của mantissa.
    • Đọc một mantissa âm như thể nó là dấu và độ lớn; nó là bù hai, vì vậy 1011000000 là $-0.625$, không phải $-0.375$.
    • Dịch chuyển mantissa để chuẩn hóa mà không thay đổi số mũ, hoặc thay đổi nó theo cách sai (dịch trái, số mũ giảm).
    • Mô tả một tập tin ngẫu nhiên là "theo thứ tự ngẫu nhiên"; các bản ghi nằm tại các địa chỉ được tính toán từ khóa của chúng.
    • Nói rằng truy cập tuần tự đọc "toàn bộ tập tin" cho một tập tin truy cập tuần tự; nó dừng lại khi gặp một khóa lớn hơn.
    • Giải thích thuật toán băm mà không nói giá trị được tính toán dùng để làm gì (địa chỉ để lưu và lấy lại bản ghi), hoặc không có cách xử lý va chạm.
    • Định nghĩa tràn là "quá nhiều chữ số" thay vì một kết quả vượt quá giá trị biểu diễn lớn nhất, hoặc đổ lỗi cho mantissa về điều đó.
  • 14

    Communication and internet technologies · ⁨Công nghệ truyền thông và internet⁩

    Watch lesson · ⁨Xem bài học⁩
    14.1

    Why protocols are needed · ⁨Tại sao cần các giao thức⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of why a protocol is essential for communication between computers
    Show understanding of how protocol implementation can be viewed as a stack, where each layer has its own functionality
    Show understanding of the TCP/IP protocol suite Four Layers (Application, Transport, Internet, Link) Purpose and function of each layer Application when a message is sent from one host to another on the internet
    Show understanding of protocols (HTTP, FTP, POP3, IMAP, SMTP, BitTorrent) and their purposes BitTorrent protocol provides peer-to-peer file sharing
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về lý do tại sao một giao thức là thiết yếu cho giao tiếp giữa các máy tính
    Thể hiện sự hiểu biết về cách thực hiện giao thức có thể được xem như một ngăn xếp, trong đó mỗi lớp có chức năng riêng
    Thể hiện sự hiểu biết về bộ giao thức TCP/IP Bốn Lớp (Application, Transport, Internet, Link) Mục đích và chức năng của từng lớp Ứng dụng khi một tin nhắn được gửi từ máy chủ này sang máy chủ khác trên internet
    Thể hiện sự hiểu biết về các giao thức (HTTP, FTP, POP3, IMAP, SMTP, BitTorrent) và mục đích của chúng Giao thức BitTorrent cung cấp chia sẻ tệp ngang hàng (peer-to-peer)

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    A protocol 协议 is a set of rules for how devices communicate. Both ends must follow the same rules, or one side's signals are meaningless to the other. Protocols define the format of the data (where addresses and payload sit), the order of messages (who speaks first, when to acknowledge), the meaning of each message, the timing (timeouts, retransmits), and what to do on error. Without an agreed protocol, communication fails — like two people speaking different languages with no translator.

    "Explain why protocols are essential for communication between computers" (three marks). (1) A protocol is a set of rules agreed by both the sender and the receiver; (2) without it the two computers would interpret the data differently (format, order, meaning of each part), so the message could not be understood; (3) it allows computers of different types and manufacturers to communicate, because everyone implements the same standard. Mention what the rules cover: the format of the data, the order of messages, error detection and recovery, and speed or timing.

    Tiếng Việt

    Một giao thức là một bộ quy tắc để các thiết bị giao tiếp. Cả hai đầu cuối phải tuân theo cùng một bộ quy tắc, nếu không tín hiệu của bên này sẽ vô nghĩa đối với bên kia. Các giao thức xác định định dạng dữ liệu (vị trí của địa chỉ và phần tải), thứ tự của tin nhắn (ai nói trước, khi nào xác nhận), ý nghĩa của mỗi tin nhắn, thời gian (hết giờ, gửi lại) và hành động khi xảy ra lỗi. Nếu không có giao thức thống nhất, việc giao tiếp sẽ thất bại — giống như hai người nói những ngôn ngữ khác nhau mà không có ai phiên dịch.

    "Giải thích tại sao các giao thức lại cần thiết cho việc giao tiếp giữa các máy tính" (ba điểm). (1) Một giao thức là một bộ quy tắc được cả người gửi và người nhận đồng ý; (2) nếu không có nó, hai máy tính sẽ hiểu dữ liệu theo cách khác nhau (định dạng, thứ tự, ý nghĩa của từng phần), do đó tin nhắn sẽ không thể được hiểu; (3) nó cho phép các máy tính khác loại và từ nhà sản xuất khác nhau giao tiếp với nhau, vì tất cả đều thực hiện cùng một tiêu chuẩn. Nêu rõ các quy tắc bao gồm: định dạng dữ liệu, thứ tự tin nhắn, phát hiện và khắc phục lỗi, cũng như tốc độ hoặc thời gian.

    Hai thiết bị tuân theo cùng một quy tắc: định dạng, thứ tự, thời gian và hành động khi có lỗi
    Giao thức là các quy tắc chung: định dạng, thứ tự, thời gian và xử lý lỗi
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    protocol/ˈprəʊtəkɒl/ giao thức
    14.1

    Layered protocols · ⁨Giao thức phân tầng⁩

    English

    Networking is complex, so it is split into layers 层, each with one focused job, talking only to the layer above and below. Benefits: modularity 模块化 (replace one layer — say Ethernet with Wi-Fi — without touching the others), standardisation (vendors interoperate), and abstraction 抽象 (you ignore details handled elsewhere). The internet uses the TCP/IP protocol suite 协议栈 (4 layers).

    Tiếng Việt

    Mạng máy tính rất phức tạp, nên được chia thành các tầng, mỗi tầng đảm nhiệm một công việc chuyên biệt, chỉ giao tiếp với tầng ngay trên và ngay dưới. Lợi ích: tính mô-đun (có thể thay thế một tầng — ví dụ Ethernet bằng Wi-Fi — mà không làm ảnh hưởng đến các tầng khác), tiêu chuẩn hóa (các nhà cung cấp tương tác với nhau), và trừu tượng hóa (bạn bỏ qua các chi tiết được xử lý ở nơi khác). Internet sử dụng bộ giao thức TCP/IP (4 tầng).

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    TCP/ˌtiː siː ˈpiː/ TCP
    connection-oriented/kəˈnekʃn ˈɔːrɪəntɪd/ có kết nối
    packets/ˈpækɪts/ các gói tin
    14.1

    TCP/IP protocol suite · ⁨Bộ giao thức TCP/IP⁩

    English
    Layer Purpose Examples
    Application what the user program does HTTP, FTP, SMTP, IMAP
    Transport end-to-end delivery between processes TCP, UDP
    Internet routing packets between networks IP
    Link sending bits over the physical medium Ethernet, Wi-Fi

    The purpose of each layer, as the mark scheme words it. Application layer: provides the protocols that user applications use (HTTP for the web, SMTP for email) and the interface between the application and the network; it produces the data to be sent and passes it to the transport layer. Transport layer: establishes the end-to-end connection, splits the data into packets (segments) and adds port numbers and sequence numbers; on receipt it reassembles the packets in order and requests any that are missing (TCP), or sends without those guarantees (UDP). Internet layer: adds the source and destination IP addresses to form IP packets (datagrams) and routes them across networks via routers; it does not guarantee delivery. Link layer: adds the MAC addresses and error-check bits to form a frame and transmits the bits over the physical local network (Ethernet or Wi-Fi) through the network interface card. "Complete the stack" means these four, in this order, from the top: Application, Transport, Internet, Link.

    "Describe how the TCP/IP suite is applied when a message is sent from one host to another" (five marks). At the sender the message passes down the stack: (1) the application layer produces the data using a protocol such as HTTP or SMTP; (2) the transport layer splits it into packets and adds a header with the port numbers and a sequence number; (3) the internet layer adds a header with the source and destination IP addresses and chooses the route; (4) the link layer adds the MAC addresses of the next device and sends the frame over the physical link. Routers along the way read the internet-layer header and forward each packet. At the receiver the frame passes up the stack: each layer removes and acts on its own header, the transport layer reassembles the packets in sequence-number order and asks for any that are missing, and the application layer presents the message. The same protocol at each layer at both ends is what makes the exchange work.

    Application layer

    The application layer 应用层 gives services to user programs and defines the protocols they speak (HTTP for web, SMTP for email). This is where a programmer most often works.

    Transport layer

    The transport layer 传输层 delivers data end-to-end between processes, identified by port numbers 端口号. Two protocols:

    • TCP 传输控制协议 — connection-oriented 面向连接: sets up a connection, ensures all data arrives in order, retransmits lost packets 数据包, controls flow. Reliable but with overhead. Used by HTTP, HTTPS, SMTP, FTP.
    • UDP 用户数据报协议 — connectionless 无连接: sends and forgets, with no acknowledgements or ordering. Low overhead, no guarantees. Used for streaming, DNS and gaming, where speed beats reliability.

    Internet layer

    The internet layer 网络层 carries packets between hosts using IP. Each packet has a source and destination IP address IP地址, and routers 路由器 forward it onward. It does not guarantee delivery — that is TCP's job.

    A home router does this job for your house: it reads each packet's destination address and sends it on towards the internet, and back to the right device.

    Before the router reaches the wider internet, a modem 调制解调器 connects the home to the internet provider over the provider's cable or phone line. Its lights show the link is up and online.

    Link layer

    The link layer 链路层 sends bits over one physical link (Ethernet, Wi-Fi). It adds a frame header with MAC addresses MAC地址 and handles medium access (e.g. CSMA/CD 载波侦听多路访问/冲突检测 on Ethernet).

    On a wired local network, a switch 交换机 joins many devices together. Each device plugs into a port with an Ethernet cable (an RJ45 plug), and the switch uses the MAC addresses in each frame to send it only to the correct port.

    The physical link can be a copper wire, a radio signal (Wi-Fi), or a fibre-optic cable 光纤. In a fibre-optic cable, the bits travel as flashes of light through very thin strands of glass, which is fast and carries data a long way.

    A radio link can reach much further. A satellite dish 卫星天线 sends and receives radio signals to and from a satellite, carrying data to places that wired links cannot easily reach.

    Tiếng Việt
    Lớp Mục đích Ví dụ
    Ứng dụng những gì chương trình người dùng thực hiện HTTP, FTP, SMTP, IMAP
    Vận chuyển giao tiếp cuối-đến-cuối giữa các tiến trình TCP, UDP
    Internet định tuyến gói tin giữa các mạng IP
    Liên kết truyền bit qua môi trường vật lý Ethernet, Wi-Fi
    Mô hình chồng 4 tầng: Ứng dụng, Vận chuyển, Internet, Liên kết, với quá trình gửi đi xuống phía bên trái và quá trình nhận lên phía bên phải, kèm theo các ví dụ về giao thức ở mỗi tầng
    Bốn tầng của bộ giao thức TCP/IP

    Mục đích của từng tầng, diễn giải theo cách viết của đáp án. Tầng ứng dụng: cung cấp các giao thức mà các ứng dụng người dùng sử dụng (HTTP cho web, SMTP cho email) và giao diện giữa ứng dụng và mạng; nó tạo ra dữ liệu cần gửi và chuyển nó cho tầng vận chuyển. Tầng vận chuyển: thiết lập kết nối cuối-đến-cuối, phân đoạn dữ liệu thành các gói (đoạn) và thêm số cổng và số thứ tự; khi nhận được, nó ghép nối các gói lại theo thứ tự và yêu cầu gửi lại bất kỳ gói nào bị thiếu (TCP), hoặc gửi mà không có các cam kết đó (UDP). Tầng Internet: thêm địa chỉ IP nguồn và đích vào để tạo thành các gói IP (datagram) và định tuyến chúng qua các mạng thông qua bộ định tuyến; nó không đảm bảo việc giao thành công. Tầng Liên kết: thêm địa chỉ MAC và các bit kiểm tra lỗi để tạo thành một khung và truyền các bit qua môi trường vật lý của mạng cục bộ (Ethernet hoặc Wi-Fi) thông qua card giao diện mạng. "Hoàn thành mô hình chồng" có nghĩa là bốn tầng này, theo thứ tự từ trên xuống: Ứng dụng, Vận chuyển, Internet, Liên kết.

    Quá trình gửi tin nhắn xuống mô hình TCP/IP: tin nhắn của ứng dụng được bọc bởi header TCP mang số cổng và số thứ tự, sau đó được bọc bởi header IP mang địa chỉ IP nguồn và đích, rồi được bọc bởi header khung mang địa chỉ MAC và trường kiểm tra; đầu thu sẽ gọt bỏ chúng theo thứ tự ngược lại
    Sự đóng gói: mỗi tầng thêm header riêng của nó vào dữ liệu nhận được từ tầng trên, do đó các bit trên dây dẫn mang bốn tập thông tin; đầu thu sẽ loại bỏ chúng từng tầng một

    "Mô tả cách bộ giao thức TCP/IP được áp dụng khi một tin nhắn được gửi từ máy chủ này sang máy chủ khác" (năm điểm). Tại người gửi, tin nhắn đi xuống mô hình chồng: (1) tầng ứng dụng tạo ra dữ liệu bằng cách sử dụng một giao thức như HTTP hoặc SMTP; (2) tầng vận chuyển phân đoạn nó thành các gói và thêm header chứa số cổng và số thứ tự; (3) tầng internet thêm header chứa địa chỉ IP nguồn và đích và chọn đường đi; (4) tầng liên kết thêm địa chỉ MAC của thiết bị tiếp theo và gửi khung qua liên kết vật lý. Các bộ định tuyến dọc đường đọc header tầng internet và chuyển tiếp mỗi gói tin. Tại người nhận, khung đi lên mô hình chồng: mỗi tầng sẽ loại bỏ và xử lý header riêng của nó, tầng vận chuyển ghép nối các gói theo thứ tự số thứ tự và yêu cầu gửi lại bất kỳ gói nào bị thiếu, và tầng ứng dụng hiển thị tin nhắn. Việc sử dụng cùng một giao thức ở mỗi tầng tại cả hai đầu là điều làm cho quá trình trao đổi hoạt động.

    Tầng ứng dụng

    Tầng ứng dụng cung cấp các dịch vụ cho các chương trình người dùng và xác định các giao thức mà chúng sử dụng (HTTP cho web, SMTP cho email). Đây là nơi lập trình viên thường xuyên làm việc nhất.

    Tầng vận chuyển

    Tầng vận chuyển giao dữ liệu cuối-đến-cuối giữa các tiến trình, được xác định bởi số cổng. Hai giao thức:

    TCP thiết lập kết nối và giao tất cả dữ liệu theo thứ tự; UDP gửi và quên đi
    TCP kết nối và giao theo thứ tự; UDP gửi và quên đi
    • TCP — có kết nối: thiết lập kết nối, đảm bảo tất cả dữ liệu đến đúng thứ tự, gửi lại các gói bị mất, kiểm soát luồng dữ liệu. Đáng tin cậy nhưng tốn tài nguyên. Được HTTP, HTTPS, SMTP, FTP sử dụng.
    • UDP — không có kết nối: gửi và quên đi, không có xác nhận hay sắp xếp thứ tự. Tốn ít tài nguyên, không có cam kết. Dùng cho phát trực tuyến, DNS và trò chơi điện tử, nơi tốc độ quan trọng hơn độ tin cậy.

    Tầng Internet

    Lớp internet vận chuyển các gói tin giữa các máy chủ bằng cách sử dụng IP. Mỗi gói tin có địa chỉ nguồn và đích là địa chỉ IP, và bộ định tuyến (router) sẽ chuyển tiếp nó. Lớp này không đảm bảo việc giao nhận — đó là nhiệm vụ của TCP.

    Một bộ định tuyến gia đình thực hiện công việc này cho ngôi nhà của bạn: nó đọc địa chỉ đích của mỗi gói tin và gửi nó tiến về phía internet, hoặc quay lại đúng thiết bị.

    Một bộ phát Wi-Fi gia đình màu đen với bốn anten dựng đứng và một hàng đèn trạng thái dọc theo mặt trước
    Bộ phát Wi-Fi gia đình: chuyển tiếp các gói tin giữa các thiết bị của bạn và internet

    Trước khi bộ định tuyến kết nối với mạng internet rộng hơn, một modem sẽ kết nối ngôi nhà với nhà cung cấp dịch vụ internet qua cáp hoặc đường dây điện thoại của họ. Các đèn trên modem cho thấy liên kết đã hoạt động và trực tuyến.

    Một modem cáp cao màu đen đứng thẳng trên nền trơn, với một cột đèn trạng thái dọc theo mặt trước
    Modem cáp kết nối mạng gia đình với nhà cung cấp dịch vụ internet

    Lớp liên kết

    Lớp liên kết truyền bit qua một liên kết vật lý (Ethernet, Wi-Fi). Nó thêm tiêu đề khung với địa chỉ MAC và xử lý truy cập môi trường (ví dụ: CSMA/CD trên Ethernet).

    Khung Ethernet được chia thành phần tiền tố, điểm bắt đầu khung, dữ liệu Ethernet và khoảng cách giữa các gói tin, với phần dữ liệu được mở rộng thành địa chỉ đích và nguồn MAC, loại/chiều dài, tin nhắn tải trọng và chuỗi kiểm tra khung, mỗi phần đều có kích thước tính bằng byte
    Các phần của một khung Ethernet điển hình

    Trong mạng nội bộ có dây, một bộ chuyển mạch (switch) kết nối nhiều thiết bị lại với nhau. Mỗi thiết bị cắm vào một cổng bằng cáp Ethernet (đầu cắm RJ45), và bộ chuyển mạch sử dụng địa chỉ MAC trong mỗi khung để chỉ gửi nó đến đúng cổng.

    Một bộ chuyển mạch Ethernet Gigabit nhỏ màu đen với 8 cổng trên nền trơn, các cổng RJ45 được đánh số xếp thành hàng ngang mặt trước, mỗi cổng đều có đèn trạng thái
    Bộ chuyển mạch mạng kết nối nhiều thiết bị có dây trong mạng nội bộ

    Liên kết vật lý có thể là dây đồng, tín hiệu vô tuyến (Wi-Fi) hoặc cáp quang. Trong cáp quang, các bit di chuyển dưới dạng ánh sáng nhấp nháy qua những sợi thủy tinh rất mỏng, điều này giúp tốc độ nhanh và truyền dữ liệu đi xa.

    Một bó sợi quang tỏa rộng trên nền tối, mỗi sợi thủy tinh mỏng phát sáng với một điểm ánh sáng xanh-trắng ở đầu
    Cáp quang: dữ liệu di chuyển dưới dạng ánh sáng qua các sợi thủy tinh mỏng

    Liên kết vô tuyến có thể bao quát khoảng cách xa hơn. Một thân thiên văn vệ tinh gửi và nhận tín hiệu vô tuyến lên và xuống vệ tinh, mang dữ liệu đến những nơi mà liên kết có dây khó tiếp cận.

    Một đĩa vệ tinh gia đình hình tròn màu xám gắn trên tường nhà bên cạnh cửa sổ, với cánh cung cấp tín hiệu vươn ra phía trước
    Thân thiên văn vệ tinh gửi và nhận dữ liệu bằng vô tuyến trong khoảng cách xa
    Explore · ⁨Khám phá⁩

    Tap the four layers of the TCP/IP model · ⁨Nhấn vào bốn lớp của mô hình TCP/IP⁩

    Explore each layer. Data travels DOWN the stack as it's sent (each layer adds its header) and back UP as it's received — and any layer can be swapped without touching the others. · ⁨Khám phá từng lớp. Dữ liệu di chuyển XUỐNG theo chồng khi đang gửi (mỗi lớp thêm tiêu đề của nó) và đi LÊN ngược lại khi nhận — và bất kỳ lớp nào cũng có thể thay thế mà không cần chạm vào các lớp khác.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    layers/ˈleɪəz/ lớp
    modularity/ˌmɒdjʊˈlærɪti/ tính mô-đun
    abstraction/əbˈstrækʃn/ trừu tượng hóa
    protocol suite/ˈprəʊtəkɒl swiːt/ bộ giao thức
    application layer/ˌæplɪˈkeɪʃn ˈleɪə/ lớp ứng dụng
    transport layer/ˈtrænspɔːt ˈleɪə/ lớp vận chuyển
    port numbers/pɔːt ˈnʌmbəz/ số cổng
    UDP/ˌjuː diː ˈpiː/ UDP
    connectionless/kəˈnekʃənləs/ không có kết nối
    internet layer/ˈɪntənet ˈleɪə/ lớp internet
    routers/ˈruːtəz/ bộ định tuyến
    modem/ˈməʊdem/ modem
    link layer/lɪŋk ˈleɪə/ lớp liên kết
    CSMA/CD/ˌsiː es em ˈeɪ ˌsiː ˈdiː/ CSMA/CD
    switch/swɪtʃ/ công tắc
    fibre-optic cable/ˈfaɪbə ˈɒptɪk ˈkeɪbl/ cáp quang
    satellite dish/ˈsætəlaɪt dɪʃ/ tán xạ vệ tinh
    HTTP/ˌeɪtʃ tiː tiː ˈpiː/ HTTP
    FTP/ˌef tiː ˈpiː/ FTP
    SMTP/ˌes em tiː ˈpiː/ SMTP
    header/ˈhedə/ header (phần đầu)
    14.1

    Common application-layer protocols · ⁨Các giao thức lớp ứng dụng phổ biến⁩

    English
    • HTTP 超文本传输协议 — browsers fetch web pages from servers (over TCP, port 80). HTTPS is HTTP over TLS — encrypted, port 443.
    • FTP 文件传输协议 — transfer files between client and server.
    • SMTP 简单邮件传输协议 — send email between client and server, and between servers. Receiving uses POP3 or IMAP.
    • POP3 — downloads email and usually deletes it from the server. IMAP — leaves email on the server and syncs across devices, so the same inbox appears everywhere.
    • BitTorrent — a peer-to-peer 对等网络 protocol; a file is split into pieces downloaded from many peers in parallel, so no single server carries all the load.

    The purpose of each protocol, in the words that score.

    Protocol Purpose (state this)
    HTTP transfers web pages (hypertext) between a web server and a browser; HTTPS is the encrypted version
    FTP transfers files between a client and a server (uploading to and downloading from a file server)
    SMTP sends email from a client to a mail server, and between mail servers (a "push" protocol)
    POP3 downloads email from the server to the client, usually deleting it from the server, so it is read on one device
    IMAP lets the client read and manage email that stays on the server, so the same mailbox is seen on every device
    BitTorrent shares files peer-to-peer: pieces of a file are downloaded from, and uploaded to, many other users at once

    Asked for the two email protocols, give SMTP for sending and POP3 or IMAP for receiving; asked to describe IMAP, say that the messages remain on the server and are synchronised across devices, which is the difference from POP3.

    "Describe how files are shared using the BitTorrent protocol" (four marks). (1) The file is split into pieces (typically 256 KB each), and a small torrent file describes them (their hashes) and names a tracker 追踪器. (2) A peer wanting the file contacts the tracker, which keeps a list of the peers in the swarm 群 currently sharing that file. (3) The peer downloads different pieces from many peers at the same time, and as soon as it holds a piece it uploads it to others; a peer with the whole file is a seed 种子, one still downloading a leech. (4) When all pieces are in, they are reassembled and checked against the hashes. "Explain what peer-to-peer file sharing means": there is no central server holding the file; every computer is both a client and a server, downloading from and uploading to the others, so the load and the bandwidth are spread across the swarm and the more peers there are, the faster it gets.

    Tiếng Việt
    • HTTP — trình duyệt lấy trang web từ máy chủ (qua TCP, cổng 80). HTTPS là HTTP chạy trên TLS — được mã hóa, cổng 443.
    • FTP — chuyển file giữa máy khách và máy chủ.
    • SMTP — gửi email giữa máy khách và máy chủ, cũng như giữa các máy chủ. Việc nhận email sử dụng POP3 hoặc IMAP.
    • POP3 — tải về email và thường xóa nó khỏi máy chủ. IMAP — giữ email trên máy chủ và đồng bộ hóa across thiết bị, nên hộp thư giống nhau xuất hiện ở mọi nơi.
    • BitTorrent — một giao thức từ bạn đến bạn (peer-to-peer); một file được chia thành các mảnh tải về từ nhiều bạn cùng lúc, vì vậy không có máy chủ đơn lẻ nào chịu hết gánh nặng.
    Một trình theo dõi ở trung tâm với các bạn bè xung quanh — hạt giống, người dùng tải xuống và bạn bè mới — đang trao đổi các mảnh tệp, kèm theo một chìa khóa
    BitTorrent: một tracker giúp các peer tìm thấy nhau, sau đó chúng chia sẻ các mảnh file trực tiếp

    Mục đích của từng giao thức, bằng những từ ngữ đạt điểm.

    Giao thức Mục đích (nêu rõ điều này)
    HTTP chuyển trang web (siêu văn bản) giữa máy chủ web và trình duyệt; HTTPS là phiên bản được mã hóa
    FTP chuyển file giữa máy khách và máy chủ (tải lên và tải xuống từ máy chủ tập tin)
    SMTP gửi email từ máy khách đến máy chủ thư, và giữa các máy chủ thư (một giao thức "đẩy")
    POP3 tải email từ máy chủ xuống máy khách, thường xóa nó khỏi máy chủ, do đó chỉ đọc trên một thiết bị
    IMAP cho phép máy khách đọc và quản lý email vẫn nằm trên máy chủ, nên cùng một hộp thư được hiển thị trên mọi thiết bị
    BitTorrent chia sẻ file từ bạn đến bạn: các mảnh của file được tải về từ và tải lên tới nhiều người dùng khác cùng lúc

    Khi được hỏi về hai giao thức email, hãy đưa ra SMTP để gửi và POP3 hoặc IMAP để nhận; khi được yêu cầu mô tả IMAP, hãy nói rằng các tin nhắn vẫn còn trên máy chủ và được đồng bộ hóa across thiết bị, đó là sự khác biệt so với POP3.

    "Mô tả cách file được chia sẻ sử dụng giao thức BitTorrent (bốn điểm)." (1) File được chia thành các mảnh (thường mỗi mảnh 256 KB), và một file torrent nhỏ mô tả chúng (các hash của chúng) và chỉ định một tracker. (2) Một peer muốn có file liên hệ với tracker, người duy trì danh sách các peer đang trong swarm đang chia sẻ file đó. (3) Peer tải các mảnh khác nhau từ nhiều peer cùng lúc, và ngay khi nắm được một mảnh, nó tải lên cho người khác; một peer có toàn bộ file là seed, một người đang tải xuống gọi là leech. (4) Khi tất cả các mảnh đã có, chúng được ghép lại và kiểm tra đối chiếu với các hash. "Giải thích ý nghĩa của việc chia sẻ file từ bạn đến bạn: không có máy chủ trung tâm nào lưu file; mỗi máy tính vừa là máy khách vừa là máy chủ, tải xuống từ và tải lên tới các máy khác, do đó gánh nặng và băng thông được phân tán across swarm và càng có nhiều peer thì tốc độ càng nhanh." (Note: The second quoted question in the source text appears to be a continuation of the prompt structure rather than a separate question, but is translated faithfully as written.)

    Explore · ⁨Khám phá⁩

    Network route lab · ⁨Phòng thí nghiệm định tuyến mạng⁩

    Follow data from a device through network hardware and protocols. · ⁨Theo dõi dữ liệu từ một thiết bị qua phần cứng mạng và giao thức.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    peer-to-peer/pɪə tə pɪə/ giao tiếp ngang hàng (peer-to-peer)
    tracker/ˈtrækə/ thiết bị truy vết
    swarm/swɔːm/ đàn
    seed/siːd/ hạt
    14.2

    Circuit switching vs packet switching · ⁨Chuyển mạch mạch (Circuit switching) vs chuyển mạch gói (Packet switching)⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of circuit switching Benefits, drawbacks and where it is applicable
    Show understanding of packet switching Benefits, drawbacks and where it is applicable Show understanding of the function of a router in packet switching Explain how packet switching is used to pass messages across a network, including the internet
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về chuyển mạch đường dẫn Lợi ích, nhược điểm và nơi áp dụng
    Thể hiện sự hiểu biết về chuyển mạch gói Lợi ích, nhược điểm và nơi áp dụng Thể hiện sự hiểu biết về chức năng của bộ định tuyến (router) trong chuyển mạch gói Giải thích cách chuyển mạch gói được sử dụng để truyền tin nhắn qua mạng, bao gồm cả internet

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Circuit switching

    A dedicated path is set up between the two ends before any data is sent (circuit switching 电路交换), reserved for the whole conversation, then released. It gives reserved bandwidth 带宽 and in-order delivery, but is inefficient during silences and slow to set up. Classic example: the traditional telephone network.

    "Describe circuit switching as a method of data transmission" (three marks). (1) A dedicated path (circuit) is set up between the sender and the receiver before any data is sent; (2) the whole message is sent along that path, in order, as one continuous stream; (3) the circuit is reserved for the duration of the communication and released afterwards.

    Benefits and drawbacks. Benefits: the full bandwidth of the circuit is available and guaranteed; data arrives in order with no reassembly and no delay once the circuit is up; the route does not change, so timing is predictable (good for real-time voice and video). Drawbacks: time is spent setting up the circuit before anything is sent; the circuit is reserved even while no data is flowing, so bandwidth is wasted and other users cannot share it; both ends must be free at the same time; a failure anywhere on the path breaks the whole call, and there is no automatic alternative route. Where it is appropriate: a telephone call or a live video link, where a steady, uninterrupted stream matters more than efficiency.

    Packet switching

    The data is split into packets, each sent independently (packet switching 分组交换). Each packet carries the destination address; routers make per-packet decisions, so packets may take different routes and arrive out of order, and the destination reassembles them. It is efficient (one link is multiplexed 多路复用 across many conversations), robust (reroute around a failure), but has variable latency 延迟 and possible loss (TCP handles reliability). Used by the internet.

    "Describe how packet switching is used to pass messages across a network" (four marks). (1) The message is split into packets of a fixed maximum size; (2) each packet is given a header containing the source and destination addresses, a sequence number 序号 and an error check; (3) each packet is sent independently and may take a different route, chosen by the routers it meets; (4) at the destination the packets are reassembled in order using the sequence numbers, and any missing packet is requested again. If the question excludes checking and resending, leave out the last clause.

    "Describe the function of a router in packet switching" (three marks). A router receives a packet, reads the destination IP address in its header, and consults its routing table 路由表 to decide the best next hop towards that destination, taking account of the traffic (congestion) and failed links; it then forwards the packet onto that link. Packets of the same message may leave by different routes; the router holds packets in a queue when a link is busy.

    "Describe two ways packet switching ensures the complete message is received." (1) Each packet carries a sequence number, so the receiver can put the packets in order and can tell that one is missing, and (2) the receiver sends an acknowledgement 确认 for packets that arrive; a packet not acknowledged within a time limit is retransmitted by the sender. A checksum 校验和 in each packet lets the receiver detect a corrupted packet and discard it, which then triggers the resend.

    Benefits and drawbacks. Benefits: no circuit to set up; the network's links are shared by many messages, so bandwidth is used efficiently; packets can be rerouted around a failed or congested link, so transmission is robust; a lost or damaged packet means resending only that packet, not the whole message. Drawbacks: packets may arrive out of order and must be reassembled, and some may be lost or delayed; the headers add overhead; the variable delay makes it less suitable for real-time voice and video without extra measures; a heavily loaded network drops packets. Where it is appropriate: email, web pages, file downloads and any "bursty" traffic, and the internet in general.

    Aspect Circuit switching Packet switching
    Path dedicated, reserved shared, per-packet
    Setup time slow none
    Bandwidth use inefficient efficient
    Order in order may be out of order
    Robustness one failure cuts the circuit reroute around failures
    Suits constant-rate flows (voice) bursty flows (web, email)

    Modern networks use packet switching for its efficiency and resilience.

    Four differences, stated as pairs. (1) Circuit switching sets up a dedicated path before sending; packet switching sends without setting up a path. (2) In circuit switching the whole message follows one route; in packet switching the packets may take different routes. (3) Circuit switching delivers the data in order without reassembly; packet switching needs sequence numbers to reassemble it. (4) Circuit switching reserves bandwidth for one conversation even when idle; packet switching shares the links between many messages. (Also acceptable: a failed link breaks a circuit but packets are rerouted; circuit switching suits real-time streams, packet switching suits bursty data.) Write each difference as both halves; one side alone earns nothing.

    Describing packet switching in a few sentences

    A good exam answer: "The message is broken into small packets. Each packet carries the destination and source addresses and a sequence number. Each packet travels through the network independently, with routers choosing the next hop per packet. Packets may take different paths and arrive out of order. The destination uses the sequence numbers to reassemble the message, and missing packets can be requested again."

    Worked example. A phone call and a large file download share a network. Which switching method suits each, and why? A phone call needs a steady stream with low delay, and it would suffer badly if pieces arrived late or out of order - so circuit switching suits it: a dedicated path is set up for the whole call and its capacity is reserved for the duration. A file download does not care about timing or arrival order, because the receiver reassembles it, and it benefits from using whatever capacity happens to be spare - so packet switching suits it: the file is split into packets that travel independently, each carrying source and destination addresses and a sequence number, with routers choosing a next hop per packet. Name the property of the traffic that decides it: reserved capacity and low delay for the call, efficiency and resilience for the download.

    Tiếng Việt

    Chuyển mạch mạch

    Một đường dẫn riêng được thiết lập giữa hai đầu trước khi bất kỳ dữ liệu nào được gửi (chuyển mạch mạch), được dành riêng cho toàn bộ cuộc trò chuyện, sau đó sẽ bị giải phóng. Nó cung cấp băng thông được dự trữ và giao hàng đúng thứ tự, nhưng không hiệu quả trong thời gian im lặng và mất nhiều thời gian để thiết lập. Ví dụ điển hình: mạng điện thoại truyền thống.

    Mạng lưới các bộ định tuyến giữa thiết bị A và thiết bị B, với một đường dẫn được làm nổi bật và được dự trữ cuối đến cuối cho toàn bộ cuộc gọi
    Chuyển mạch mạch: một đường dẫn riêng được dự trữ từ đầu đến cuối

    "Mô tả chuyển mạch mạch như một phương pháp truyền dữ liệu" (ba điểm). (1) Một đường dẫn riêng (mạch) được thiết lập giữa người gửi và người nhận trước khi bất kỳ dữ liệu nào được gửi; (2) toàn bộ tin nhắn được gửi dọc theo đường dẫn đó, theo đúng thứ tự, dưới dạng một luồng liên tục; (3) mạch được dự trữ trong thời gian của quá trình truyền thông và bị giải phóng sau đó.

    Ưu và nhược điểm. Ưu điểm: toàn bộ băng thông của mạch có sẵn và được đảm bảo; dữ liệu đến theo thứ tự mà không cần tái cấu trúc và không có độ trễ once mạch đã hoạt động; tuyến đường không thay đổi, nên thời gian là dự đoán được (tốt cho giọng nói và video thời gian thực). Nhược điểm: thời gian được dành để thiết lập mạch trước khi bất cứ điều gì được gửi; mạch được dự trữ ngay cả khi không có dữ liệu nào đang lưu thông, do đó băng thông bị lãng phí và người dùng khác không thể chia sẻ nó; cả hai đầu phải rảnh cùng lúc; một lỗi ở bất kỳ đâu trên đường dẫn sẽ làm hỏng toàn bộ cuộc gọi, và không có tuyến đường dự phòng tự động. Nơi thích hợp: cuộc gọi điện thoại hoặc liên kết video trực tiếp, nơi một luồng ổn định, không gián đoạn quan trọng hơn hiệu quả.

    Chuyển mạch gói

    Dữ liệu được chia thành các gói, mỗi gói được gửi độc lập (chuyển mạch gói). Mỗi gói chứa địa chỉ đích; các bộ định tuyến đưa ra quyết định từng gói, nên các gói có thể đi theo các tuyến đường khác nhau và đến không theo thứ tự, và đích sẽ tái cấu trúc chúng. Nó hiệu quả (một liên kết được ghép kênh đa qua nhiều cuộc hội thoại), bền bỉ (định tuyến lại quanh lỗi), nhưng có độ trễ biến đổi và khả năng mất mát (TCP xử lý độ tin cậy). Được sử dụng bởi internet.

    Mạng lưới các bộ định tuyến tương tự với các gói được biểu thị bằng các ô vuông màu đánh số đi theo các tuyến đường khác nhau từ máy tính A đến máy tính B, sau đó được tái cấu trúc theo thứ tự tại B
    Chuyển mạch gói: các gói di chuyển độc lập và có thể đi theo các tuyến đường khác nhau
    Các phần của một gói: phần đầu giữ địa chỉ nguồn và đích, số thứ tự, tổng số gói và checksum, theo sau là phần dữ liệu mang phần dữ liệu của gói này
    Điều cho phép một gói di chuyển độc lập: các địa chỉ cho biết nơi đi, số thứ tự cho biết đó là phần nào của tin nhắn, và checksum cho thấy liệu nó có đến nguyên vẹn hay không

    "Mô tả cách chuyển mạch gói được sử dụng để truyền tin nhắn qua mạng" (bốn điểm). (1) Tin nhắn được chia thành các gói có kích thước tối đa cố định; (2) mỗi gói được gán một phần đầu chứa địa chỉ nguồn và đích, số thứ tự và kiểm tra lỗi; (3) mỗi gói được gửi độc lập và có thể đi theo tuyến đường khác, được chọn bởi các bộ định tuyến nó gặp phải; (4) tại đích, các gói được tái cấu trúc theo thứ tự sử dụng các số thứ tự, và bất kỳ gói nào bị thiếu đều được yêu cầu gửi lại. Nếu câu hỏi loại bỏ việc kiểm tra và gửi lại, hãy bỏ qua mệnh đề cuối cùng.

    "Mô tả chức năng của một bộ định tuyến trong chuyển mạch gói" (ba điểm). Một bộ định tuyến nhận một gói, đọc địa chỉ IP đích trong phần đầu của nó, và tham khảo bảng định tuyến của nó để quyết định nút bước tiếp theo tốt nhất hướng về đích đó, có tính đến lưu lượng (tắc nghẽn) và các liên kết bị hỏng; sau đó nó chuyển tiếp gói vào liên kết đó. Các gói của cùng một tin nhắn có thể rời đi theo các tuyến đường khác nhau; bộ định tuyến giữ các gói trong hàng đợi khi một liên kết đang bận rộn.

    "Mô tả hai cách chuyển mạch gói đảm bảo tin nhắn hoàn chỉnh được nhận." (1) Mỗi gói mang một số thứ tự, nên người nhận có thể sắp xếp các gói theo thứ tự và có thể biết rằng một gói bị thiếu, và (2) người nhận gửi một xác nhận cho các gói đã đến; một gói không được xác nhận trong giới hạn thời gian sẽ được gửi lại bởi người gửi. Một checksum trong mỗi gói cho phép người nhận phát hiện gói bị hỏng và loại bỏ nó, điều này sau đó sẽ kích hoạt việc gửi lại.

    Ưu và nhược điểm. Ưu điểm: không cần thiết lập mạch; các liên kết của mạng được chia sẻ bởi nhiều tin nhắn, do đó băng thông được sử dụng hiệu quả; các gói có thể được định tuyến lại quanh một liên kết bị hỏng hoặc tắc nghẽn, do đó quá trình truyền tải bền bỉ; một gói bị mất hoặc hỏng chỉ cần gửi lại gói đó, không phải toàn bộ tin nhắn. Nhược điểm: các gói có thể đến không theo thứ tự và phải được tái cấu trúc, và một số có thể bị mất hoặc bị chậm; các phần đầu làm tăng chi phí vận hành; độ trễ biến đổi khiến nó kém phù hợp hơn cho giọng nói và video thời gian thực nếu không có biện pháp bổ sung; một mạng bị quá tải sẽ loại bỏ các gói. Nơi thích hợp: email, trang web, tải xuống tệp và bất kỳ lưu lượng "bùng nổ" nào, và internet nói chung.

    Khía cạnh Chuyển mạch đường dẫn Chuyển mạch gói
    Tuyến đường riêng, được dự trữ chia sẻ, theo từng gói
    Thời gian thiết lập chậm không có
    Sử dụng băng thông không hiệu quả hiệu quả
    Thứ tự theo thứ tự có thể không theo thứ tự
    Độ bền một lỗi cắt断 mạch định tuyến lại quanh các lỗi
    Phù hợp với luồng tốc độ không đổi (giọng nói) luồng bùng nổ (web, email)

    Các mạng hiện đại sử dụng chuyển mạch gói vì tính hiệu quả và khả năng chịu lỗi.

    Bốn khác biệt, được nêu dưới dạng cặp. (1) Chuyển mạch đường truyền thiết lập đường dẫn riêng trước khi gửi; chuyển mạch gói gửi mà không cần thiết lập đường dẫn. (2) Trong chuyển mạch đường truyền, toàn bộ tin nhắn đi theo một tuyến; trong chuyển mạch gói, các gói có thể đi theo tuyến khác nhau. (3) Chuyển mạch đường truyền truyền dữ liệu theo thứ tự mà không cần tái cấu trúc; chuyển mạch gói cần số thứ tự để tái cấu trúc nó. (4) Chuyển mạch đường truyền dành riêng băng thông cho một cuộc hội thoại ngay cả khi rảnh rỗi; chuyển mạch gói chia sẻ các liên kết giữa nhiều tin nhắn. (Cũng chấp nhận: một liên kết hỏng sẽ phá vỡ đường truyền nhưng các gói sẽ được định tuyến lại; chuyển mạch đường truyền phù hợp với luồng thời gian thực, chuyển mạch gói phù hợp với dữ liệuburst.) Viết mỗi khác biệt thành cả hai nửa; chỉ một bên đơn lẻ sẽ không nhận điểm nào.

    Mô tả chuyển mạch gói trong vài câu

    Một câu trả lời tốt cho bài thi: "Tin nhắn được chia thành các gói nhỏ. Mỗi gói mang địa chỉ đích và nguồn cùng số thứ tự. Mỗi gói di chuyển độc lập qua mạng, với router chọn bước tiếp theo cho từng gói. Các gói có thể đi theo các đường khác nhau và đến nơi không theo thứ tự. Thiết bị đích sử dụng các số thứ tự để tái cấu trúc tin nhắn, và các gói bị thiếu có thể được yêu cầu gửi lại."

    Ví dụ minh họa. Một cuộc gọi điện thoại và một lần tải tệp lớn chia sẻ mạng. Phương pháp chuyển mạch nào phù hợp với từng loại, và tại sao? Một cuộc gọi điện thoại cần một luồng ổn định với độ trễ thấp, và nó sẽ chịu thiệt hại nghiêm trọng nếu các mảnh đến muộn hoặc không đúng thứ tự - nên chuyển mạch đường truyền phù hợp: một đường dẫn riêng được thiết lập cho toàn bộ cuộc gọi và dung lượng của nó được dành riêng trong suốt thời gian. Một lần tải tệp không quan tâm đến thời gian hoặc thứ tự đến, vì người nhận sẽ tái cấu trúc nó, và nó được hưởng lợi từ việc sử dụng bất kỳ dung lượng dự phòng nào có sẵn - nên chuyển mạch gói phù hợp: tệp được chia thành các gói di chuyển độc lập, mỗi gói mang địa chỉ nguồn và đích cùng một số thứ tự, với các bộ định tuyến chọn bước tiếp theo cho từng gói. Tên gọi tính chất của lưu lượng quyết định điều đó: dung lượng được dành riêng và độ trễ thấp cho cuộc gọi, hiệu quả và khả năng phục hồi cho lần tải tệp.

    Explore · ⁨Khám phá⁩

    A packet's journey across the internet · ⁨Hành trình của một gói tin trên internet⁩

    Step through packet switching. The message is split up, each packet finds its own way, and the destination puts them back together — which is why the internet is so efficient and hard to break. · ⁨Quá trình chuyển mạch gói tin: Thông điệp được chia nhỏ, mỗi gói tin tự tìm đường đi riêng, và điểm đến sắp xếp chúng lại — đó là lý do internet cực kỳ hiệu quả và khó bị phá vỡ.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    circuit switching/ˈsɜːkɪt ˈswɪtʃɪŋ/ chuyển mạch đường dẫn
    reserved bandwidth/rɪˈzɜːvd ˈbændwɪdθ/ băng thông được dành riêng
    packet switching/ˈpækɪt ˈswɪtʃɪŋ/ chuyển mạch gói tin
    multiplexed/ˌmʌltɪˈplekst/ nhiều kênh
    variable latency/ˈveərɪəbl ˈleɪtənsi/ độ trễ thay đổi
    sequence number/ˈsiːkwəns ˈnʌmbə/ số thứ tự
    routing table/ˈraʊtɪŋ ˈteɪbl/ bảng định tuyến
    acknowledgement/əkˈnɒlɪdʒmənt/ xác nhận
    checksum/ˈtʃeksəm/ checksum
    IP address/ˌaɪ ˈpiː əˈdres/ địa chỉ IP
    MAC addresses/mæk əˈdresɪz/ địa chỉ MAC
    bandwidth/ˈbændwɪdθ/ băng thông
    latency/ˈleɪtənsi/ độ trễ
    14.2

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    protocol a set of rules governing how data is transmitted, agreed by sender and receiver so that both interpret it the same way
    protocol stack the layers of protocols, each with its own function, that together carry out communication; each layer communicates only with the layers above and below
    application layer provides the protocols used by applications to exchange data (HTTP, SMTP, FTP, IMAP, POP3)
    transport layer establishes end-to-end communication, splits data into packets with port and sequence numbers, reassembles them and requests missing ones (TCP), or sends without guarantees (UDP)
    internet layer adds IP addresses to form packets and routes them between networks via routers
    link layer adds MAC addresses to form frames and transmits the bits over the physical local network
    router a device that reads a packet's destination address and forwards it along the best available route towards that destination
    circuit switching a dedicated communication path is established between the two ends before data is sent and held for the whole transmission
    packet switching the message is split into packets, each with a header, sent independently over possibly different routes and reassembled at the destination
    packet a unit of data carrying a header (addresses, sequence number, error check) and a payload
    peer-to-peer file sharing without a central server, each computer acting as both client and server
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    giao thức một tập hợp quy tắc điều khiển cách dữ liệu được truyền, được đồng thuận bởi người gửi và người nhận để cả hai diễn giải giống nhau
    chồng giao thức các lớp của các giao thức, mỗi lớp có chức năng riêng, cùng thực hiện việc truyền thông; mỗi lớp chỉ giao tiếp với các lớp phía trên và phía dưới
    lớp ứng dụng cung cấp các giao thức do ứng dụng sử dụng để trao đổi dữ liệu (HTTP, SMTP, FTP, IMAP, POP3)
    lớp vận chuyển thiết lập truyền thông đầu-đầu, phân tách dữ liệu thành các gói với số cổng và số thứ tự, tái cấu trúc chúng và yêu cầu các gói bị thiếu (TCP), hoặc gửi mà không đảm bảo (UDP)
    lớp internet thêm địa chỉ IP vào để tạo thành các gói và định tuyến chúng giữa các mạng thông qua router
    lớp liên kết thêm địa chỉ MAC vào để tạo thành khung và truyền bit qua mạng vật lý cục bộ
    router một thiết bị đọc địa chỉ đích của gói và chuyển tiếp nó dọc theo tuyến khả dụng tốt nhất hướng về đích đó
    chuyển mạch đường dẫn một đường truyền thông riêng được thiết lập giữa hai đầu cuối trước khi dữ liệu được gửi và duy trì trong suốt quá trình truyền
    chuyển mạch gói tin nhắn được chia thành các gói, mỗi gói có tiêu đề, được gửi độc lập qua các tuyến có thể khác nhau và tái cấu trúc tại đích
    gói đơn vị dữ liệu mang theo tiêu đề (địa chỉ, số thứ tự, kiểm tra lỗi) và phần tải trọng
    peer-to-peer chia sẻ tập tin mà không có máy chủ trung tâm, mỗi máy tính đóng vai vừa là khách hàng vừa là máy chủ
    14.2

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Why protocols: shared rules, same interpretation, any make of computer. Why layers: each layer has one job and can be changed independently.
    • The four layers in order, top to bottom: Application, Transport, Internet, Link. Give each layer's job in one sentence, and the "message from host to host" answer as a walk down the stack and back up.
    • Protocol purposes are one-liners: HTTP web pages, FTP files, SMTP sending mail, POP3 downloading mail, IMAP mail kept on the server, BitTorrent peer-to-peer pieces from a swarm.
    • Circuit switching: dedicated path first, whole message, held for the duration. Packet switching: split, header with addresses and sequence number, independent routes, reassemble. Benefits and drawbacks come in pairs of opposites.
    • A router reads the destination address, consults its routing table, forwards along the best route; it is the packet-switching question the exam asks most.
    • "Where appropriate": circuit switching for a phone or live video call; packet switching for email, the web and downloads.

    Common mistakes

    • Defining a protocol as "a language" or "software"; it is a set of rules.
    • Putting the layers in the wrong order, or giving the OSI seven layers instead of the four of TCP/IP.
    • Describing the transport layer as "routing" or the internet layer as "splitting into packets"; ports and splitting are transport, IP addresses and routing are internet.
    • Confusing POP3 with IMAP, or saying SMTP receives email.
    • Describing packet switching without the header (addresses and sequence number) or without reassembly.
    • Saying a router "sends the packet everywhere"; it chooses one next hop from its routing table.
    • Giving a benefit of packet switching as a drawback of circuit switching without stating the circuit-switching side; each difference needs both halves.
    • Claiming packet switching guarantees delivery by itself; the transport layer's sequence numbers and acknowledgements do that.
    Tiếng Việt
    • Tại sao có giao thức: quy tắc chung, cách diễn giải giống nhau, bất kỳ hãng máy tính nào. Tại sao có lớp: mỗi lớp có một nhiệm vụ và có thể thay đổi độc lập.
    • Bốn lớp theo thứ tự, từ trên xuống dưới: Ứng dụng, Vận chuyển, Internet, Liên kết. Nêu nhiệm vụ của mỗi lớp trong một câu, và câu trả lời "tin nhắn từ máy này sang máy khác" như một hành trình xuống và lên lại chồng giao thức.
    • Mục đích của các giao thức là tóm tắt ngắn gọn: HTTP trang web, FTP tập tin, SMTP gửi thư, POP3 tải thư, IMAP giữ thư trên máy chủ, BitTorrent các mảnh peer-to-peer từ một đám đông.
    • Chuyển mạch đường dẫn: đường dẫn riêng trước, toàn bộ tin nhắn, giữ chỗ trong suốt thời gian. Chuyển mạch gói: phân tách, tiêu đề có địa chỉ và số thứ tự, tuyến độc lập, tái cấu trúc. Lợi ích và nhược điểm xuất hiện theo cặp đối lập.
    • Router đọc địa chỉ đích, tra bảng định tuyến, chuyển tiếp theo tuyến tốt nhất; đây là câu hỏi về chuyển mạch gói mà đề thi hỏi thường xuyên nhất.
    • "Khi thích hợp": chuyển mạch đường dẫn cho điện thoại hoặc cuộc gọi video trực tiếp; chuyển mạch gói cho email, web và tải xuống.

    Lỗi thường gặp

    • Định nghĩa giao thức là "ngôn ngữ" hoặc "phần mềm"; nó là một tập hợp quy tắc.
    • Đặt các lớp theo thứ tự sai, hoặc đưa ra bảy lớp OSI thay vì bốn lớp TCP/IP.
    • Mô tả lớp vận chuyển là "định tuyến" hoặc lớp internet là "phân tách thành các gói"; số cổng và phân tách thuộc lớp vận chuyển, địa chỉ IP và định tuyến thuộc lớp internet.
    • Nhầm lẫn POP3 với IMAP, hoặc nói rằng SMTP nhận thư.
    • Mô tả chuyển mạch gói mà không có tiêu đề (địa chỉ và số thứ tự) hoặc không có tái cấu trúc.
    • Nói rằng router "gửi gói đến mọi nơi"; nó chọn một bước tiếp theo từ bảng định tuyến của mình.
    • Đưa ra lợi ích của chuyển mạch gói như một nhược điểm của chuyển mạch đường dẫn mà không nêu mặt bên chuyển mạch đường dẫn; mỗi điểm khác biệt cần cả hai phần.
    • Cho rằng chuyển mạch gói tự đảm bảo việc giao nhận; các số thứ tự và xác nhận của lớp vận chuyển mới làm điều đó.
  • 15

    Hardware and Virtual Machines · ⁨Phần cứng và máy ảo⁩

    Watch lesson · ⁨Xem bài học⁩
    15.1

    RISC vs CISC processors · ⁨Bộ xử lý RISC so với CISC⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of Reduced Instruction Set Computers (RISC) and Complex Instruction Set Computers (CISC) processors Differences between RISC and CISC Understand interrupt handling on CISC and RISC processors
    Show understanding of the importance/use of pipelining and registers in RISC processors
    Show understanding of the four basic computer architectures SISD, SIMD, MISD, MIMD
    Show understanding of the characteristics of massively parallel computers
    Show understanding of the concept of a virtual machine Give examples of the role of virtual machines Understand the benefits and limitations of virtual machines
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về Máy tính tập lệnh đơn giản (RISC) và Máy tính tập lệnh phức tạp (CISC) Sự khác biệt giữa RISC và CISC Hiểu cách xử lý ngắt trên bộ xử lý CISC và RISC
    Thể hiện sự hiểu biết về tầm quan trọng/sử dụng pipelining và ký hiệu registers trong bộ xử lý RISC
    Thể hiện sự hiểu biết về bốn kiến trúc máy tính cơ bản SISD, SIMD, MISD, MIMD
    Thể hiện sự hiểu biết về đặc điểm của máy tính song song quy mô lớn
    Thể hiện sự hiểu biết về khái niệm máy ảo Đưa ra ví dụ về vai trò của máy ảo Hiểu lợi ích và hạn chế của máy ảo

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Two styles of CPU design. The CPU itself plugs into the motherboard 主板, the main board that links the processor, the memory and every other part of the computer together.

    CISC

    A CISC 复杂指令集 (Complex Instruction Set Computers) has many, often complex instructions (one may do several memory accesses and operations), of variable length, so decoding is intricate. It does more per instruction in hardware. Examples: Intel x86.

    RISC

    A RISC 精简指令集 (Reduced Instruction Set Computers) has a small set of simple instructions, each doing one basic operation, all of fixed length (fast to decode). Only load and store touch memory; everything else is register 寄存器 to register. Programs are longer but each instruction is quick and predictable, which suits pipelining. Examples: ARM, RISC-V.

    Feature CISC RISC
    Instruction set many few
    Instruction length variable fixed
    Memory access many instructions only load/store
    Pipeline-friendly harder naturally
    Per-instruction cycles varies usually 1

    The trade-off is doing more per instruction (CISC) vs doing each instruction faster and more predictably (RISC). Modern Intel chips translate CISC instructions into simpler RISC-like micro-ops internally.

    "Identify four features of a RISC processor." Any four of: a small set of simple instructions; instructions of fixed length (one word); most instructions complete in one clock cycle; many general-purpose registers; only load and store instructions access memory (all arithmetic is register to register); hard-wired control (no microcode); designed for pipelining; the compiler does more of the work, so programs contain more instructions and need more memory. "Identify four features of a CISC processor." Any four of: a large set of instructions, many of them complex (one instruction may do several operations); instructions of variable length; instructions that take several clock cycles; fewer registers; instructions that can access memory directly; microprogrammed control; less suited to pipelining; shorter programs, so a simpler compiler and less memory. "Describe what is meant by RISC and CISC" (two marks each): name the expansion and give the defining idea (few simple single-cycle instructions; many complex multi-cycle instructions).

    Interrupt handling on the two designs. On a CISC processor the current instruction, however complex, is completed before the interrupt is serviced; the processor then saves the contents of its registers (including the program counter) on the stack, jumps to the interrupt service routine, and restores the registers afterwards. On a RISC processor with a pipeline, several instructions are part-way through at the moment the interrupt 中断 arrives, so the processor must either let every instruction in the pipeline finish, or discard (flush) the partly executed instructions and restart them after the interrupt; either way the pipeline is emptied, the registers are saved, and the service routine runs. The exam phrasing: "pipelining makes interrupt handling more complex, because the contents of the pipeline must be dealt with before the interrupt can be serviced".

    Tiếng Việt

    Hai kiểu thiết kế CPU. Bản thân CPU cắm vào bo mạch chủ (motherboard), là bo mạch chính kết nối bộ xử lý, bộ nhớ và mọi linh kiện khác của máy tính với nhau.

    CISC có nhiều lệnh phức tạp biến độ dài; RISC có ít lệnh đơn giản cố định độ dài
    CISC có nhiều lệnh phức tạp; RISC có ít lệnh đơn giản
    Một bo mạch chủ máy tính trên nền trắng, hiển thị ổ cắm CPU hình vuông ở giữa, các khe nhớ dài, một số khe mở rộng và các hàng cổng I/O dọc theo một cạnh
    Bo mạch chủ kết nối CPU, bộ nhớ và các bộ phận khác với nhau

    CISC

    CISC (Complex Instruction Set Computers - Máy tính tập lệnh phức tạp) có nhiều, thường phức tạp các lệnh (một lệnh có thể thực hiện nhiều truy cập bộ nhớ và thao tác), có độ dài biến đổi, do đó giải mã rất phức tạp. Nó thực hiện nhiều hơn trong mỗi lệnh bằng phần cứng. Ví dụ: Intel x86.

    RISC

    RISC (Reduced Instruction Set Computers - Máy tính tập lệnh rút gọn) có một tập hợp nhỏ các lệnh đơn giản, mỗi lệnh thực hiện một thao tác cơ bản, tất cả đều có độ dài cố định (giải mã nhanh). Chỉ có load và store tiếp xúc với bộ nhớ; mọi thứ còn lại là từ register sang register. Chương trình dài hơn nhưng mỗi lệnh chạy nhanh và dự đoán được, phù hợp với kỹ thuật pipeline. Ví dụ: ARM, RISC-V.

    Tính năng CISC RISC
    Tập lệnh nhiều ít
    Độ dài lệnh biến đổi cố định
    Truy cập bộ nhớ nhiều lệnh chỉ load/store
    Thân thiện với pipeline khó hơn tự nhiên
    Chu kỳ trên mỗi lệnh thay đổi thường là 1

    Sự đánh đổi là làm nhiều hơn trong mỗi lệnh (CISC) so với việc thực hiện mỗi lệnh nhanh hơn và dự đoán được hơn (RISC). Các chip Intel hiện đại dịch các lệnh CISC thành các micro-ops RISC đơn giản hơn bên trong.

    "Xác định bốn đặc điểm của bộ xử lý RISC." Bất kỳ bốn đặc điểm nào: một tập hợp nhỏ các lệnh đơn giản; các lệnh có độ dài cố định (một từ); hầu hết các lệnh hoàn thành trong một chu kỳ xung nhịp; nhiều thanh ghi đa năng; chỉ các lệnh load và store truy cập bộ nhớ (tất cả phép toán là register sang register); điều khiển cứng (không có microcode); được thiết kế cho pipeline; trình biên dịch làm nhiều công việc hơn, nên chương trình chứa nhiều lệnh hơn và cần nhiều bộ nhớ hơn. "Xác định bốn đặc điểm của bộ xử lý CISC." Bất kỳ bốn đặc điểm nào: một tập hợp lớn các lệnh, nhiều trong số đó phức tạp (một lệnh có thể thực hiện nhiều thao tác); các lệnh có độ dài biến đổi; các lệnh mất vài chu kỳ xung nhịp; ít thanh ghi hơn; các lệnh có thể truy cập bộ nhớ trực tiếp; điều khiển viên lập trình (microprogrammed); ít phù hợp với pipeline; ngắn hơn, nên trình biên dịch đơn giản hơn và cần ít bộ nhớ hơn. "Mô tả ý nghĩa của RISC và CISC" (hai điểm mỗi câu): nêu tên viết tắt và đưa ra ý tưởng định nghĩa (các lệnh đơn giản một chu kỳ ít; các lệnh phức tạp nhiều chu kỳ nhiều).

    Xử lý ngắt trên hai kiến trúc. Trên bộ xử lý CISC, lệnh hiện tại, dù phức tạp thế nào đi nữa, cũng phải được hoàn thành trước khi ngắt được phục vụ; sau đó, bộ xử lý lưu nội dung các thanh ghi (bao gồm bộ đếm chương trình) lên ngăn xếp, nhảy đến thủ tục xử lý ngắt, và khôi phục các thanh ghi sau này. Trên bộ xử lý RISC có pipeline, vài lệnh đang ở giữa quá trình thực thi ngay khi ngắt xuất hiện, vì vậy bộ xử lý phải hoặc để mọi lệnh trong pipeline finish, hoặc xóa bỏ (flush) các lệnh đã thực thi một phần và khởi động lại chúng sau khi ngắt; theo bất kỳ cách nào, pipeline bị trống, các thanh ghi được lưu, và thủ tục phục vụ chạy. Cách diễn đạt đề thi: "kỹ thuật pipeline làm việc xử lý ngắt phức tạp hơn, vì nội dung của pipeline phải được xử lý trước khi ngắt có thể được phục vụ".

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    motherboard/ˈmʌðəbɔːd/ bo mạch chủ
    CISC/sɪsk/ CISC
    RISC/rɪsk/ RISC
    register/ˈredʒɪstə/ đăng ký (register)
    interrupt/ˈɪntərʌpt/ ngắt
    pipeline/ˈpaɪplaɪn/ dòng chảy
    15.1

    Pipelining · ⁨Pipeline⁩

    English

    A pipeline 流水线 processes instructions in overlapping stages, like an assembly line: Fetch → Decode → Execute (in the ALU 算术逻辑单元) → Memory access → Write back. Each stage works on a different instruction at once, so once the pipeline is full, one instruction completes per cycle. RISC's fixed-length, simple instructions make every stage take the same time. A pipeline can stall on a hazard 冒险 — a data hazard (an instruction needs a result not ready yet) or a control hazard (a branch makes the next address unknown).

    RISC chips keep data in many registers because memory is slow and registers are fast; the compiler allocates values to registers wisely.

    "Describe the use of pipelining in RISC processors" (three marks). (1) The fetch–execute cycle is divided into stages (fetch, decode, execute, memory access, write back); (2) several instructions are in the pipeline at once, each at a different stage, so while one is being executed the next is being decoded and the one after fetched; (3) a new instruction is started, and one completed, in every clock cycle once the pipeline is full, which increases throughput 吞吐量 (the number of instructions completed per second), although each instruction still takes the same time on its own. Fixed-length single-cycle RISC instructions are what make the stages equal and the pipeline possible.

    Worked example. A processor uses five pipeline stages (IF, ID, OF, EX, WB). Four instructions enter the pipeline one after another. In which cycle does the last instruction complete, and how many cycles would the four take without pipelining?

    Instruction 1 occupies IF in cycle 1, ID in 2, OF in 3, EX in 4 and WB in 5; instruction 2 starts one cycle later and finishes in cycle 6; instruction 3 in cycle 7; instruction 4 in cycle 8. In general $n$ instructions through $k$ stages take $n + k - 1$ cycles, here $4 + 5 - 1 = 8$. Without pipelining each instruction takes all five cycles before the next starts: $4 \times 5 = 20$ cycles. The exam's table is filled by writing each instruction's stages diagonally, one column to the right of the previous instruction.

    A processor running this fast gives off a lot of heat, so a heat-sink 散热器 and fan sit on top of it. The metal fins spread the heat and the fan blows it away, keeping the CPU cool enough to work.

    Tiếng Việt

    Một pipeline xử lý các lệnh theo các giai đoạn xen kẽ, giống như dây chuyền lắp ráp: Nhặt lệnh → Giải mã → Thực thi (trong ALU) → Truy cập bộ nhớ → Ghi lại. Mỗi giai đoạn làm việc với một lệnh khác nhau cùng lúc, vì vậy một khi pipeline đầy, một lệnh hoàn thành mỗi chu kỳ. Các lệnh RISC độ dài cố định, đơn giản khiến mỗi giai đoạn mất cùng một khoảng thời gian. Một pipeline có thể bị tắc nghẽn do một nguy hiểm — nguy hiểm dữ liệu (một lệnh cần kết quả chưa sẵn có) hoặc nguy hiểm điều khiển (nhánh làm địa chỉ tiếp theo không xác định).

    Biểu đồ Gantt của năm giai đoạn pipeline IF, ID, EX, MEM, WB qua mười chu kỳ xung nhịp, với sáu lệnh A đến F mỗi lệnh trễ hơn một chu kỳ nên chúng xen chéo nhau theo đường chéo
    Pipeline xen kẽ các giai đoạn của sáu lệnh, nên một lệnh hoàn thành mỗi chu kỳ

    Các chip RISC giữ dữ liệu trong nhiều thanh ghi vì bộ nhớ chậm và thanh ghi nhanh; trình biên dịch phân bổ giá trị cho các thanh ghi một cách thông minh.

    "Mô tả việc sử dụng pipeline trong bộ xử lý RISC" (ba điểm). (1) Chu kỳ nhặt-thực thi được chia thành các giai đoạn (nhặt, giải mã, thực thi, truy cập bộ nhớ, ghi lại); (2) nhiều lệnh nằm trong pipeline cùng lúc, mỗi lệnh ở một giai đoạn khác nhau, nên trong khi một lệnh đang được thực thi thì lệnh tiếp theo đang được giải mã và lệnh sau đó đang được nhặt; (3) một lệnh mới được bắt đầu, và một lệnh hoàn thành, trong mỗi chu kỳ xung nhịp một khi pipeline đầy, điều này tăng thông lượng (số lệnh hoàn thành mỗi giây), mặc dù mỗi lệnh vẫn mất cùng một thời gian nếu xét riêng lẻ. Các lệnh RISC độ dài cố định một chu kỳ là yếu tố khiến các giai đoạn bằng nhau và cho phép pipeline hoạt động.

    Ví dụ có lời giải. Một bộ xử lý sử dụng năm giai đoạn pipeline (IF, ID, OF, EX, WB). Bốn lệnh đi vào pipeline lần lượt. Lệnh cuối cùng hoàn thành ở chu kỳ nào, và sẽ mất bao nhiêu chu kỳ để bốn lệnh đó hoàn thành nếu không có pipeline?

    Lệnh 1 chiếm IF ở chu kỳ 1, ID ở 2, OF ở 3, EX ở 4 và WB ở 5; lệnh 2 bắt đầu sau một chu kỳ và hoàn thành ở chu kỳ 6; lệnh 3 ở chu kỳ 7; lệnh 4 ở chu kỳ 8. Nhìn chung $n$ lệnh qua $k$ giai đoạn mất $n + k - 1$ chu kỳ, ở đây là $4 + 5 - 1 = 8$. Không có pipelining, mỗi lệnh cần cả năm chu kỳ trước khi lệnh tiếp theo bắt đầu: $4 \times 5 = 20$ chu kỳ. Bảng đề thi được điền bằng cách viết các giai đoạn của từng lệnh theo đường chéo, mỗi lệnh nằm một cột về phía bên phải so với lệnh trước đó.

    Một bộ xử lý chạy nhanh này sinh ra rất nhiều nhiệt, vì vậy một tản nhiệt và quạt đặt ngay trên nó. Các cánh tản nhiệt kim loại spread nhiệt và quạt thổi đi, giữ cho CPU đủ mát để hoạt động.

    A tower CPU cooler with a black fan in front, a tall stack of thin metal cooling fins, and copper heat-pipes running up from the flat base that touches the processor
    Tản nhiệt và quạt CPU mang nhiệt ra xa khỏi bộ xử lý
    Explore · ⁨Khám phá⁩

    How pipelining fills up · ⁨Cách pipeline được lấp đầy⁩

    Step through the clock cycles. Once the pipeline is full, a new instruction finishes every cycle — even though each one still takes several stages — because the stages of different instructions overlap. · ⁨Xét qua các chu kỳ đồng hồ. Một khi pipeline đã đầy, một lệnh mới hoàn thành sau mỗi chu kỳ — mặc dù mỗi lệnh vẫn mất nhiều giai đoạn — vì các giai đoạn của các lệnh khác nhau trùng lặp với nhau.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    ALU/ˌeɪ el ˈjuː/ ALU
    hazard/ˈhæzəd/ nguy cơ
    throughput/ˈθruːpʊt/ throughput
    heat-sink/hiːt sɪŋk/ tản nhiệt
    Flynn's taxonomy/flɪnz tækˈsɒnəmi/ Phân loại Flynn
    15.1

    Flynn's taxonomy · ⁨Phân loại Flynn⁩

    English

    Flynn's taxonomy 弗林分类 sorts computers by the number of instruction and data streams:

    • SISD — one instruction, one data stream (a traditional single core).
    • SIMD 单指令多数据 — one instruction works on many data items at once (GPUs, CPU vector extensions). Great for images, video, scientific arrays.
    • MISD — several operations on the same data; rare, mostly theoretical.
    • MIMD 多指令多数据 — many processors run different instructions on different data (multi-core CPUs, clusters). The most general.

    Describing the four architectures (two marks each). SISD: a single processor executes one instruction at a time on one item of data; no parallelism, the traditional von Neumann machine. SIMD: one instruction is applied simultaneously to many data items, by many processing elements acting in step; used for array and graphics processing. MISD: several processors apply different instructions to the same data; rarely used, for example a fault-tolerant system where several processors check one stream. MIMD: many processors, each executing its own instructions on its own data, independently; the multi-core computer and the cluster.

    A graphics card 显卡 (with its GPU) is a real example of SIMD hardware: it has thousands of small cores that run the same instruction on many pixels or numbers at once, which is why GPUs are so fast for images, video and machine learning.

    Tiếng Việt

    Phân loại Flynn sắp xếp máy tính dựa trên số lượng luồng lệnh và luồng dữ liệu:

    • SISD — một lệnh, một luồng dữ liệu (lõi đơn truyền thống).
    • SIMD — một lệnh thực hiện trên nhiều mục dữ liệu cùng lúc (GPU, mở rộng vector CPU). Phù hợp cho hình ảnh, video, mảng khoa học.
    • MISD — nhiều thao tác trên cùng một dữ liệu; hiếm gặp, chủ yếu là lý thuyết.
    • MIMD — nhiều bộ xử lý chạy các lệnh khác nhau trên các dữ liệu khác nhau (CPU đa lõi, cụm máy). Phổ biến nhất.

    Mô tả bốn kiến trúc (mỗi câu hai điểm). SISD: một bộ xử lý duy nhất thực thi một lệnh tại một thời điểm trên một mục dữ liệu; không có song song, máy von Neumann truyền thống. SIMD: một lệnh được áp dụng đồng thời lên nhiều mục dữ liệu, bởi nhiều phần tử xử lý hoạt động cùng nhịp; dùng cho xử lý mảng và đồ họa. MISD: nhiều bộ xử lý áp dụng các lệnh khác nhau lên cùng một dữ liệu; ít dùng, ví dụ hệ thống chịu lỗi nơi nhiều bộ xử lý kiểm tra một luồng. MIMD: nhiều bộ xử lý, mỗi cái thực thi lệnh riêng của nó trên dữ liệu riêng của nó, độc lập; máy đa lõi và cụm máy.

    A single control unit broadcasting one instruction stream to four processing units, each of which works on its own data item
    SIMD: nhiều bộ xử lý chạy cùng một lệnh trên các dữ liệu khác nhau

    Một card đồ họa (với GPU của nó) là ví dụ thực tế của phần cứng SIMD: nó có hàng nghìn nhân nhỏ chạy cùng một lệnh trên nhiều pixel hoặc số cùng lúc, đó là lý do tại sao GPU rất nhanh đối với hình ảnh, video và học máy.

    A graphics card on a white background, showing the large cooling fan over the GPU and the gold edge connector that plugs into the motherboard
    Card đồ họa: GPU của nó chạy cùng một lệnh trên nhiều mục dữ liệu cùng lúc (SIMD)
    Four independent processors, each fed by its own separate instruction stream from above and its own data item from below
    MIMD: mỗi bộ xử lý chạy các lệnh riêng của nó trên dữ liệu riêng của nó
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    SIMD/ˈsɪmdiː/ SIMD
    MIMD/ˈmɪmdiː/ MIMD
    graphics card/ˈɡræfɪks kɑːd/ card đồ họa
    massively parallel/ˈmæsɪvli ˈpærəlel/ tính song song cực lớn
    distributed memory/ˈdɪstrɪbjuːtɪd ˈmeməri/ b bộ nhớ phân tán
    machine learning/məˈʃiːn ˈlɜːnɪŋ/ học máy
    supercomputers/ˌsuːpəkəmˈpjuːtəz/ siêu máy tính
    15.1

    Massively parallel computers · ⁨Máy tính song song cực lớn⁩

    English

    A massively parallel 大规模并行 system uses thousands of processors on a fast network, each with its own memory (distributed memory 分布式内存), exchanging data by messages. It is MIMD, needs specially-written software (MPI, CUDA), and suits climate simulation, large machine learning 机器学习 training, and astrophysics. The largest supercomputers 超级计算机 are massively parallel.

    "Outline the characteristics of massively parallel computers" (three marks). A very large number of processors (thousands), each with its own memory, connected by a network (a high-speed interconnect or bus) so that they can pass messages to one another; they work simultaneously on parts of the same problem, so the problem must be written as a program that can be split into parts that run in parallel and combine their results. It is an MIMD arrangement.

    The processors live in tall server 服务器 racks, often filling a whole room (a data centre 数据中心), wired together so they can work on one big problem at the same time.

    Tiếng Việt

    Hệ thống song song cực lớn sử dụng hàng nghìn bộ xử lý trên mạng tốc độ cao, mỗi bộ có bộ nhớ riêng (bộ nhớ phân tán), trao đổi dữ liệu qua tin nhắn. Nó là MIMD, cần phần mềm được viết đặc biệt (MPI, CUDA), và phù hợp cho mô phỏng khí hậu, huấn luyện học máy quy mô lớn, và thiên văn vật lý. Các siêu máy tính lớn nhất đều là song song cực lớn.

    "Nêu đặc điểm của máy tính song song cực lớn" (ba điểm). Một số lượng rất lớn bộ xử lý (hàng nghìn), mỗi cái có bộ nhớ riêng, được kết nối bởi mạng (cổng kết nối tốc độ cao hoặc bus) để chúng có thể gửi tin nhắn cho nhau; chúng làm việc đồng thời trên các phần của cùng một vấn đề, vì vậy vấn đề phải được viết dưới dạng chương trình có thể chia thành các phần chạy song song và tổng hợp kết quả. Đây là cấu hình MIMD.

    Các bộ xử lý sống trong các giá máy chủ cao, thường lấp đầy cả một phòng (một trung tâm dữ liệu), được đấu dây với nhau để chúng có thể giải quyết cùng một vấn đề lớn cùng lúc.

    A long row of black server racks on a raised white floor in a data centre, packed with equipment and cables
    Hàng giá máy chủ trong trung tâm dữ liệu, giống như những gì được dùng cho tính toán song song cực lớn
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    server/ˈsɜːvə/ máy chủ
    data centre/ˈdeɪtə ˈsentə/ trung tâm dữ liệu
    15.1

    Virtual machines · ⁨Máy ảo⁩

    English

    A virtual machine 虚拟机 (VM) is a software emulation of a whole computer — the software inside sees a CPU, memory and disks that look real but are managed by host software.

    • a system VM runs a complete OS. A hypervisor 虚拟机监控器 creates and manages VMs, each booting its own guest OS. Uses: run different OSes on one machine; server consolidation; sandboxing 沙箱 (risky software runs isolated); snapshots.
    • a process (language) VM runs one program in portable bytecode 字节码 — the JVM (Java), the CLR (.NET), CPython. Benefits: portability ("write once, run anywhere"), runtime safety checks, and just-in-time compilation 即时编译 for near-native speed. The cost is an extra layer and needing the VM installed.

    "Describe what is meant by a virtual machine" (two marks). A software emulation (implementation) of a computer system that runs on a host computer and behaves, to the programs running inside it, like a separate physical computer with its own processor, memory and storage. The host operating system 宿主操作系统 runs on the actual hardware, manages the real resources and (through the hypervisor) creates and controls the virtual machines; each guest operating system 客户操作系统 runs inside a virtual machine, manages the applications in it, and is unaware that its hardware is virtual.

    Benefits (give two). Several different operating systems can run on one machine at the same time; software can be tested on many systems without buying the hardware; a new computer system can be emulated and tried before it is built; each VM is isolated, so a crash or malware in one does not affect the host or the others; VMs can be copied, moved and backed up as files, and a server can be shared between many users, reducing hardware cost. Limitations (give two). A VM runs more slowly than the real hardware because every instruction passes through the emulation layer; it consumes the host's memory and processing power, so the host must be powerful; some hardware features or devices are not emulated exactly, so the tested software may behave differently on the real machine; licences are needed for each guest OS, and setting the system up needs expertise.

    Tiếng Việt

    Một máy ảo (VM) là sự mô phỏng phần mềm của toàn bộ máy tính — phần mềm bên trong thấy một CPU, bộ nhớ và ổ đĩa trông thật nhưng được quản lý bởi phần mềm máy chủ.

    • một system VM chạy một OS hoàn chỉnh. Một hypervisor tạo và quản lý VMs, mỗi cái khởi động guest OS riêng của nó. Ứng dụng: chạy các OS khác nhau trên một máy; gộp máy chủ; sandboxing (phần mềm rủi ro chạy cô lập); ảnh chụp nhanh.
    • một process (language) VM chạy một chương trình trong bytecode di động — JVM (Java), CLR (.NET), CPython. Lợi ích: portability ("viết một lần, chạy mọi nơi"), kiểm tra an toàn runtime, và just-in-time compilation cho tốc độ gần như bản địa. Chi phí là thêm một lớp và cần cài đặt VM.
    A virtual machine stack: the physical hardware at the bottom, the host operating system above it, then the hypervisor, and above that three virtual machines, each holding a guest operating system with its own applications
    Một máy thật, nhiều máy giả: hệ điều hành máy chủ và hypervisor chia sẻ phần cứng, và mỗi hệ điều hành khách chạy như thể nó có một máy riêng

    "Mô tả ý nghĩa của một máy ảo" (hai điểm). Một sự mô phỏng (triển khai) phần mềm của một hệ thống máy tính chạy trên máy chủ và hoạt động, đối với các chương trình chạy bên trong nó, giống như một máy tính vật lý riêng biệt có bộ xử lý, bộ nhớ và bộ lưu trữ riêng. Hệ điều hành chủ chạy trên phần cứng thực tế, quản lý tài nguyên thực và (thông qua hypervisor) tạo ra và kiểm soát các máy ảo; mỗi hệ điều hành khách chạy bên trong một máy ảo, quản lý các ứng dụng trong đó, và không nhận biết được phần cứng của mình là ảo.

    Lợi ích (đưa ra hai). Nhiều hệ điều hành khác nhau có thể chạy trên một máy cùng lúc; phần mềm có thể được kiểm thử trên nhiều hệ thống mà không cần mua phần cứng; một hệ thống máy tính mới có thể được mô phỏng và thử nghiệm trước khi chế tạo; mỗi VM được cô lập, nên lỗi sập hoặc malware trong một VM sẽ không ảnh hưởng đến máy chủ hay các VM khác; các VM có thể được sao chép, di chuyển và sao lưu dưới dạng tệp, và một máy chủ có thể được chia sẻ giữa nhiều người dùng, giảm chi phí phần cứng. Hạn chế (đưa ra hai). Một VM chạy chậm hơn phần cứng thực vì mọi lệnh đều phải đi qua lớp mô phỏng; nó tiêu thụ bộ nhớ và công suất xử lý của máy chủ, do đó máy chủ phải mạnh mẽ; một số tính năng hoặc thiết bị phần cứng không được mô phỏng chính xác, nên phần mềm được kiểm thử có thể hoạt động khác trên máy thực; cần bản quyền cho mỗi hệ điều hành khách, và việc thiết lập hệ thống đòi hỏi chuyên môn.

    Explore · ⁨Khám phá⁩

    Computing concept lab · ⁨Phòng thí nghiệm khái niệm tin học⁩

    Classify concrete examples by the computing idea they demonstrate. · ⁨Phân loại các ví dụ cụ thể theo ý tưởng tin học mà chúng minh họa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ máy ảo
    hypervisor/ˌhaɪpəˈvaɪzə/ hypervisor
    sandboxing/ˈsændbɒksɪŋ/ phòng cách ly
    bytecode/ˈbaɪtkəʊd/ bytecode
    just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ compilation tức thì (JIT)
    host operating system/həʊst ˈɒpəreɪtɪŋ ˈsɪstəm/ hệ điều hành chủ
    guest operating system/ɡest ˈɒpəreɪtɪŋ ˈsɪstəm/ hệ điều hành khách
    Boolean algebra/ˈbuːlɪən ˈældʒɪbrə/ Đại số Boole
    15.2

    Boolean algebra · ⁨Đại số Boole⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Produce truth tables for logic circuits including half adders and full adders May include logic gates with more than two inputs
    Show understanding of a flip-flop (SR, JK) Draw a logic circuit and derive a truth table for a flip-flop Understand of the role of flip-flops as data storage elements
    Show understanding of Boolean algebra Understand De Morgan’s laws Perform Boolean algebra using De Morgan’s laws Simplify a logic circuit/expression using Boolean algebra
    Show understanding of Karnaugh maps (K-map) Understand of the benefits of using Karnaugh maps Solve logic problems using Karnaugh maps
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Lập bảng chân lý cho các mạch logic bao gồm bộ cộng nửa (half adders) và bộ cộng đầy đủ (full adders) Có thể bao gồm cửa logic với nhiều hơn hai đầu vào
    Thể hiện sự hiểu biết về flip-flop (SR, JK) Vẽ mạch logic và rút ra bảng chân lý cho flip-flop Hiểu vai trò của flip-flops như các phần tử lưu trữ dữ liệu
    Thể hiện sự hiểu biết về đại số Boolean Hiểu định luật De Morgan Thực hiện đại số Boolean bằng định luật De Morgan Rút gọn mạch logic/biểu thức bằng đại số Boolean
    Thể hiện sự hiểu biết về bản đồ Karnaugh (K-map) Hiểu lợi ích của việc sử dụng bản đồ Karnaugh Giải quyết bài toán logic bằng bản đồ Karnaugh

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English
    The half adder: XOR + AND add two bits

    Boolean algebra 布尔代数 simplifies Boolean 布尔 expressions, which can equally be described by truth tables 真值表. Symbols: + for OR, · for AND (often omitted), an overbar for NOT.

    Key laws include commutative, associative and distributive (as in ordinary algebra), plus:

    • identity $A + 0 = A$, $A \cdot 1 = A$; null $A + 1 = 1$, $A \cdot 0 = 0$.
    • idempotent $A + A = A$; inverse $A + \overline{A} = 1$, $A \cdot \overline{A} = 0$.
    • De Morgan's laws 德摩根定律: $(A + B)' = A' \cdot B'$; $(A \cdot B)' = A' + B'$ — negate the whole, swap AND/OR, negate each operand.
    • absorption 吸收律: $A + AB = A$.

    Simplifying reduces the number of terms, so the resulting logic circuit has fewer gates. Example: $Z = AB + A\overline{B} = A(B + \overline{B}) = A$.

    The laws with their names (quote the name at each step when "show all working" is asked).

    Law OR form AND form
    identity $A + 0 = A$ $A \cdot 1 = A$
    null (annulment) $A + 1 = 1$ $A \cdot 0 = 0$
    idempotent $A + A = A$ $A \cdot A = A$
    complement (inverse) $A + \overline{A} = 1$ $A \cdot \overline{A} = 0$
    commutative $A + B = B + A$ $A \cdot B = B \cdot A$
    associative $A + (B + C) = (A + B) + C$ $A(BC) = (AB)C$
    distributive $A + BC = (A + B)(A + C)$ $A(B + C) = AB + AC$
    absorption $A + AB = A$ $A(A + B) = A$
    De Morgan $\overline{A + B} = \overline{A} \cdot \overline{B}$ $\overline{A \cdot B} = \overline{A} + \overline{B}$
    double negation $\overline{\overline{A}} = A$

    Worked example. Simplify $X = \overline{\overline{(A \cdot B)} \cdot \overline{(A + B)}}$, showing all working.

    $X = \overline{\overline{(A \cdot B)}} + \overline{\overline{(A + B)}}$ (De Morgan on the outer bar) $= A \cdot B + A + B$ (double negation) $= A + B$ (absorption, $A + AB = A$, applied with $A + B$ absorbing $AB$).

    Worked example. Simplify $(\overline{A + B}) \cdot (\overline{A} + B)$.

    $= \overline{A} \cdot \overline{B} \cdot (\overline{A} + B)$ (De Morgan) $= \overline{A}\,\overline{B}\,\overline{A} + \overline{A}\,\overline{B}\,B$ (distributive) $= \overline{A}\,\overline{B} + 0$ (idempotent, complement) $= \overline{A}\,\overline{B}$.

    Worked example. Simplify $Y = \overline{A}\,\overline{B}\,\overline{C} + \overline{A}\,\overline{B}\,C + A\,\overline{B}\,C$.

    $= \overline{A}\,\overline{B}(\overline{C} + C) + A\,\overline{B}\,C$ (distributive) $= \overline{A}\,\overline{B} + A\,\overline{B}\,C$ (complement, identity) $= \overline{B}(\overline{A} + AC)$ (distributive) $= \overline{B}(\overline{A} + C)$, using $\overline{A} + AC = (\overline{A} + A)(\overline{A} + C) = \overline{A} + C$. Applying De Morgan to a three-input term works the same way: $\overline{A + B + C} = \overline{A} \cdot \overline{B} \cdot \overline{C}$.

    Sum-of-products from a truth table. Take every row whose output is 1, write the AND of its inputs (a variable barred where it is 0), and OR the terms: a row with $A = 1, B = 0, C = 1$ gives $A\,\overline{B}\,C$. This is the sum-of-products 积之和 form the exam asks for, and it is the starting point for both algebraic simplification and the Karnaugh map.

    Tiếng Việt
    Bộ cộng nửa: XOR + AND cộng hai bit

    Đại số Boole rút gọn biểu thức Boole, những biểu thức này cũng có thể được mô tả bằng bảng chân lý. Ký hiệu: + cho OR, · cho AND (thường bị bỏ qua), gạch ngang phía trên cho NOT.

    Các định luật quan trọng bao gồm giao hoán, kết hợp và phân phối (như trong đại số thông thường), cùng:

    • định danh $A + 0 = A$, $A \cdot 1 = A$; vô hiệu $A + 1 = 1$, $A \cdot 0 = 0$.
    • lũy đẳng $A + A = A$; nghịch đảo $A + \overline{A} = 1$, $A \cdot \overline{A} = 0$.
    • Định luật De Morgan: $(A + B)' = A' \cdot B'$; $(A \cdot B)' = A' + B'$ — phủ định toàn bộ, đổi chỗ AND/OR, phủ định từng toán hạng.
    • hấp thụ: $A + AB = A$.

    Việc rút gọn làm giảm số lượng toán hạng, do đó mạch logic thu được có ít cổng hơn. Ví dụ: $Z = AB + A\overline{B} = A(B + \overline{B}) = A$.

    Các định luật kèm tên gọi (trích dẫn tên định luật ở mỗi bước khi yêu cầu "hiện thị tất cả các bước giải").

    Định luật Dạng OR Dạng AND
    định danh $A + 0 = A$ $A \cdot 1 = A$
    vô hiệu (phủ định) $A + 1 = 1$ $A \cdot 0 = 0$
    lũy đẳng $A + A = A$ $A \cdot A = A$
    bổ sung (nghịch đảo) $A + \overline{A} = 1$ $A \cdot \overline{A} = 0$
    giao hoán $A + B = B + A$ $A \cdot B = B \cdot A$
    kết hợp $A + (B + C) = (A + B) + C$ $A(BC) = (AB)C$
    phân phối $A + BC = (A + B)(A + C)$ $A(B + C) = AB + AC$
    hấp thụ $A + AB = A$ $A(A + B) = A$
    De Morgan $\overline{A + B} = \overline{A} \cdot \overline{B}$ $\overline{A \cdot B} = \overline{A} + \overline{B}$
    phủ định kép $\overline{\overline{A}} = A$

    Ví dụ có hướng dẫn. Rút gọn $X = \overline{\overline{(A \cdot B)} \cdot \overline{(A + B)}}$, hiện thị tất cả các bước giải.

    $X = \overline{\overline{(A \cdot B)}} + \overline{\overline{(A + B)}}$ (De Morgan trên vạch ngoài) $= A \cdot B + A + B$ (phủ định kép) $= A + B$ (hấp thụ, $A + AB = A$, áp dụng với $A + B$ đang hấp thụ $AB$).

    Ví dụ có hướng dẫn. Rút gọn $(\overline{A + B}) \cdot (\overline{A} + B)$.

    $= \overline{A} \cdot \overline{B} \cdot (\overline{A} + B)$ (De Morgan) $= \overline{A}\,\overline{B}\,\overline{A} + \overline{A}\,\overline{B}\,B$ (phân phối) $= \overline{A}\,\overline{B} + 0$ (lũy đẳng, bổ sung) $= \overline{A}\,\overline{B}$.

    Ví dụ có hướng dẫn. Rút gọn $Y = \overline{A}\,\overline{B}\,\overline{C} + \overline{A}\,\overline{B}\,C + A\,\overline{B}\,C$.

    $= \overline{A}\,\overline{B}(\overline{C} + C) + A\,\overline{B}\,C$ (phân phối) $= \overline{A}\,\overline{B} + A\,\overline{B}\,C$ (bổ sung, định danh) $= \overline{B}(\overline{A} + AC)$ (phân phối) $= \overline{B}(\overline{A} + C)$, sử dụng $\overline{A} + AC = (\overline{A} + A)(\overline{A} + C) = \overline{A} + C$. Áp dụng De Morgan cho một biểu thức ba đầu vào hoạt động tương tự: $\overline{A + B + C} = \overline{A} \cdot \overline{B} \cdot \overline{C}$.

    Tổng-tích từ bảng chân lý. Lấy mỗi hàng mà đầu ra là 1, viết tích AND của các đầu vào của hàng đó (biến bị gạch ngang nếu giá trị là 0), sau đó cộng OR các toán hạng: một hàng với $A = 1, B = 0, C = 1$ sẽ tạo ra $A\,\overline{B}\,C$. Đây là dạng tổng-tích mà đề thi yêu cầu, và đây là điểm xuất phát cho cả việc rút gọn đại số lẫn bản đồ Karnaugh.

    Explore · ⁨Khám phá⁩

    Boolean algebra · ⁨Đại số Boole⁩

    A·B, A+B, Ā …

    Boolean algebra is just these gates written as expressions — compare the truth tables. · ⁨Đại số Boole chỉ là các cổng logic viết dưới dạng biểu thức — hãy so sánh bảng chân lý.⁩

    Explore · ⁨Khám phá⁩

    Boolean truth tables · ⁨Bảng chân lý Boolean⁩

    Pick an operator and the inputs to build its truth table — the algebra behind logic circuits. · ⁨Chọn toán tử và đầu vào để xây dựng bảng chân lý của nó — đại số đằng sau các mạch logic.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    half adder/hɑːf ˈædə/ bộ cộng nửa
    Watch lesson · ⁨Xem bài học⁩
    15.2

    Karnaugh maps · ⁨Bản đồ Karnaugh⁩

    English

    A Karnaugh map 卡诺图 (K-map) simplifies a Boolean expression by grouping adjacent 1s from a truth table. Columns and rows use Gray code 格雷码 order (00, 01, 11, 10) so adjacent cells differ in one variable.

    Place a 1 in each cell where the output is 1. Find rectangular groups of 1s whose sides are powers of 2 (1, 2, 4, 8), wrapping around edges if it makes a bigger group. The larger the group, the simpler the term: a group of 2 drops one variable, a group of 4 drops two, and so on — variables that change within the group disappear. OR the group terms together for the simplified expression. Cover every 1 using as few, as large, groups as possible.

    Worked example. A Karnaugh map for $A$ and $B$ has 1s in the cells $\overline{A}B$ and $AB$. Simplify. The two 1s are adjacent - they share the $B=1$ column - so group them as a rectangle of 2. Inside that group $B$ stays 1 throughout while $A$ changes from 0 to 1, and any variable that changes within a group disappears. So the group leaves simply $X = B$. Compare that with the sum of products read straight off the table, $\overline{A}B + AB$: the same circuit, two gates fewer. Two rules do most of the work - make each group as large as possible (a group of 2 drops one variable, 4 drops two, 8 drops three), and remember the map wraps around its edges, so the leftmost and rightmost columns are adjacent. That wrap is the grouping most candidates miss.

    Building and reading a K-map. Label the columns $AB$ and the rows $C$ (or $CD$) in Gray-code order 00 01 11 10, so that neighbouring cells differ in one variable only. Put a 1 in every cell whose minterm appears in the expression (or whose truth-table row outputs 1). Then draw the fewest, largest loops that cover every 1: each loop must be a rectangle of $1, 2, 4$ or $8$ cells, loops may overlap, may wrap across the left–right and top–bottom edges, and the four corners together make a loop. For each loop write the variables that are constant inside it (barred if 0), and OR the loop terms: that is the optimal sum-of-products. Why use one? It gives the simplest expression without algebra, in a few steps, with less chance of error, and the same map suits three or four variables.

    Worked example. $Z = \overline{A}\,\overline{B}\,\overline{C} + \overline{A}\,\overline{B}\,C + \overline{A}\,B\,\overline{C} + \overline{A}\,B\,C + A\,\overline{B}\,\overline{C} + A\,\overline{B}\,C$.

    On the three-variable map the 1s fill columns 00, 01 and 10 in both rows. The loop of four over columns 00 and 01 has $A = 0$ throughout and $B$, $C$ both varying: term $\overline{A}$. The loop of four over columns 00 and 10 (wrapping round) has $B = 0$ throughout: term $\overline{B}$. So $Z = \overline{A} + \overline{B}$, which Boolean algebra confirms: $\overline{A}(\overline{B} + B) + \ldots = \overline{A} + \overline{B}$. Two loops of two would also be correct but not optimal; a loop is as large as the 1s allow.

    Worked example (four variables). A map has 1s only in its four corners: $\overline{A}\,\overline{B}\,\overline{C}\,\overline{D}$, $A\,\overline{B}\,\overline{C}\,\overline{D}$, $\overline{A}\,\overline{B}\,C\,\overline{D}$ and $A\,\overline{B}\,C\,\overline{D}$. Because the top and bottom rows are adjacent and so are the outer columns, the corners are one loop of four; $B = 0$ and $D = 0$ in all of them while $A$ and $C$ vary, so $Z = \overline{B}\,\overline{D}$.

    Tiếng Việt

    Một bản đồ Karnaugh (K-map) rút gọn biểu thức Boole bằng cách nhóm các số 1 kề nhau từ bảng chân lý. Các cột và hàng sử dụng thứ tự mã Gray (00, 01, 11, 10) để các ô kề nhau chỉ khác nhau ở một biến.

    Đặt số 1 vào mỗi ô mà đầu ra là 1. Tìm các nhóm hình chữ nhật gồm các số 1 có cạnh là lũy thừa của 2 (1, 2, 4, 8), có thể cuộn quanh các cạnh nếu giúp tạo thành nhóm lớn hơn. Nhóm càng lớn thì toán hạng càng đơn giản: một nhóm 2 loại bỏ một biến, nhóm 4 loại bỏ hai biến, v.v. — các biến thay đổi bên trong nhóm sẽ biến mất. Cộng OR các toán hạng nhóm lại để có biểu thức rút gọn. Bao phủ tất cả các số 1 bằng số lượng nhóm ít nhất, nhưng mỗi nhóm phải lớn nhất có thể.

    Ví dụ có hướng dẫn. Một bản đồ Karnaugh cho $A$ và $B$ có các số 1 tại các ô $\overline{A}B$ và $AB$. Rút gọn. Hai số 1 này là kề nhau - chúng chia sẻ cột $B=1$ - nên nhóm chúng thành một hình chữ nhật gồm 2. Bên trong nhóm đó $B$ luôn giữ nguyên giá trị 1 trong khi $A$ thay đổi từ 0 sang 1, và bất kỳ biến nào thay đổi bên trong một nhóm sẽ biến mất. Vậy nhóm này chỉ còn lại đơn giản là $X = B$. So sánh điều đó với tổng-tích đọc trực tiếp từ bảng, $\overline{A}B + AB$: cùng một mạch điện, nhưng ít hơn hai cổng. Hai quy tắc thực hiện hầu hết công việc - hãy tạo mỗi nhóm lớn nhất có thể (nhóm 2 loại bỏ một biến, 4 loại bỏ hai, 8 loại bỏ ba), và nhớ rằng bản đồ cuộn quanh các cạnh, nên cột trái cùng và cột phải cùng là kề nhau. Sự cuộn quanh này là phần nhóm mà hầu hết các thí sinh bỏ sót.

    Hai bản đồ Karnaugh: bản đồ ba biến cho biểu thức sáu toán hạng với vòng tròn màu đỏ gồm bốn ô dọc theo hai cột đầu tiên tạo ra not A và vòng tròn màu xanh dương gồm bốn ô cuộn quanh các cột ngoài tạo ra not B; và bản đồ bốn biến nơi bốn số 1 ở góc tạo thành một vòng cuộn quanh tạo ra not B và not D
    Vòng lặp của 1, 2, 4 hoặc 8 số một; thuật ngữ vòng lặp chỉ giữ lại các biến không thay đổi bên trong nó. Các cạnh nối lại, do đó một vòng lặp có thể quấn quanh, và bốn góc được coi là kề nhau

    Xây dựng và đọc bản đồ Karnaugh. Gán nhãn cho các cột $AB$ và các hàng $C$ (hoặc $CD$) theo thứ tự mã Gray 00 01 11 10, sao cho các ô lân cận chỉ khác nhau ở một biến duy nhất. Đặt số 1 vào mọi ô mà minterm của nó xuất hiện trong biểu thức (hoặc ô có hàng bảng chân lý tương ứng cho kết quả là 1). Sau đó vẽ số lượng ít nhất, lớn nhất các vòng bao phủ tất cả các số 1: mỗi vòng phải là hình chữ nhật gồm $1, 2, 4$ hoặc $8$ ô, các vòng có thể chồng lên nhau, có thể vòng qua các cạnh trái–phải và trên–dưới, và bốn góc cùng tạo thành một vòng. Với mỗi vòng, viết ra các biến không đổi bên trong nó (có bar nếu bằng 0), sau đó OR các thừa số của các vòng lại với nhau: đó chính là tổng của các tích tối ưu. Tại sao sử dụng? Nó mang lại biểu thức đơn giản nhất mà không cần đại số, chỉ qua vài bước, giảm thiểu sai sót, và cùng một bản đồ cũng áp dụng được cho ba hoặc bốn biến.

    Ví dụ minh họa. $Z = \overline{A}\,\overline{B}\,\overline{C} + \overline{A}\,\overline{B}\,C + \overline{A}\,B\,\overline{C} + \overline{A}\,B\,C + A\,\overline{B}\,\overline{C} + A\,\overline{B}\,C$.

    Trên bản đồ ba biến, các số 1 điền đầy các cột 00, 01 và 10 ở cả hai hàng. Vòng gồm bốn ô trên các cột 00 và 01 có $A = 0$ không đổi throughout và $B$, $C$ đều thay đổi: thừa số $\overline{A}$. Vòng gồm bốn ô trên các cột 00 và 10 (quay vòng) có $B = 0$ không đổi throughout: thừa số $\overline{B}$. Vậy $Z = \overline{A} + \overline{B}$, điều này cũng được đại số Boolean xác nhận: $\overline{A}(\overline{B} + B) + \ldots = \overline{A} + \overline{B}$. Hai vòng gồm hai ô cũng đúng nhưng không tối ưu; một vòng sẽ lớn đến mức các số 1 cho phép.

    Ví dụ minh họa (bốn biến). Một bản đồ chỉ có các số 1 ở bốn góc: $\overline{A}\,\overline{B}\,\overline{C}\,\overline{D}$, $A\,\overline{B}\,\overline{C}\,\overline{D}$, $\overline{A}\,\overline{B}\,C\,\overline{D}$ và $A\,\overline{B}\,C\,\overline{D}$. Vì hàng trên và hàng dưới liền kề, và các cột ngoài cũng liền kề, nên bốn góc tạo thành một vòng gồm bốn ô; $B = 0$ và $D = 0$ không đổi trong tất cả chúng trong khi $A$ và $C$ thay đổi, do đó $Z = \overline{B}\,\overline{D}$.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    Boolean/ˈbuːlɪən/ Boolean
    truth tables/truːθ ˈteɪblz/ bảng chân lý
    De Morgan's laws/də ˈmɔːɡənz lɔːz/ định luật De Morgan
    absorption/əbˈsɔːpʃn/ sự hấp thụ
    sum-of-products/sʌm ɒv ˈprɒdʌkts/ tổng của các tích
    Karnaugh map/ˈkɑːnɔː mæp/ bản đồ Karnaugh
    15.2

    Half adder and full adder · ⁨Bộ cộng nửa và bộ cộng đầy đủ⁩

    English

    A half adder 半加器 adds two single bits $A$ and $B$, giving a sum $S$ and a carry 进位 $C$:

    A B S C
    0 0 0 0
    0 1 1 0
    1 0 1 0
    1 1 0 1

    So $S = A \text{ XOR } B$ and $C = A \text{ AND } B$. It ignores any carry-in — hence "half".

    A full adder 全加器 adds three bits ($A$, $B$, carry-in), giving a sum and a carry-out: $S = A \text{ XOR } B \text{ XOR } C_{\text{in}}$. It can be built from two half adders plus an OR gate. Chaining full adders (each carry-out feeding the next carry-in) makes a multi-bit "ripple-carry" adder.

    The full-adder truth table. With inputs $A$, $B$ and the carry-in $C_{\text{in}}$: the sum $S$ is 1 when an odd number of inputs is 1, and the carry-out is 1 when two or more inputs are 1.

    $A$ $B$ $C_{\text{in}}$ $S$ $C_{\text{out}}$
    0 0 0 0 0
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 0 0 1 0
    1 0 1 0 1
    1 1 0 0 1
    1 1 1 1 1

    The circuit questions the exam sets. Given a circuit of an XOR and an AND gate sharing two inputs, or two half adders and an OR gate, "complete the truth table (show your working)" means adding a column for every intermediate gate output and filling the rows in order; "state the name of the circuit" is half adder or full adder; "state the purpose of each output" is the sum of the bits and the carry to the next column. Sum-of-products for the half adder: $S = \overline{A}B + A\overline{B}$, $C = AB$. A chain of full adders, each passing its carry-out to the next carry-in, adds two multi-bit numbers.

    Tiếng Việt

    Một bộ cộng nửa cộng hai bit đơn lẻ $A$ và $B$, cho ra tổng $S$ và cước $C$:

    A B S C
    0 0 0 0
    0 1 1 0
    1 0 1 0
    1 1 0 1

    Vậy $S = A \text{ XOR } B$ và $C = A \text{ AND } B$. Nó bỏ qua任何 carry-in — vì vậy gọi là "nửa".

    A half adder block with inputs A and B and outputs sum and carry, beside its circuit where A and B feed an XOR gate giving the sum and an AND gate giving the carry
    A half adder, as a block and as a circuit of an XOR and an AND gate

    Một bộ cộng đầy đủ cộng ba bit ($A$, $B$, carry-in), cho ra tổng và carry-out: $S = A \text{ XOR } B \text{ XOR } C_{\text{in}}$. Nó có thể được xây dựng từ hai bộ cộng nửa cộng với một cổng OR. Nối tiếp các bộ cộng đầy đủ (mỗi carry-out cung cấp carry-in cho bộ tiếp theo) tạo thành bộ cộng "ripple-carry" nhiều bit.

    Two half adders chained with an OR gate to add A, B and a carry-in: the first half adder takes A and B, the second adds the carry-in, and the OR gate combines the two carries into the carry-out
    A full adder is built from two half adders and an OR gate

    Bảng chân lý của bộ cộng đầy đủ. Với các đầu vào $A$, $B$ và carry-in $C_{\text{in}}$: tổng $S$ bằng 1 khi có số lượng đầu vào là lẻ bằng 1, và carry-out bằng 1 khi hai hoặc nhiều hơn đầu vào bằng 1.

    $A$ $B$ $C_{\text{in}}$ $S$ $C_{\text{out}}$
    0 0 0 0 0
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 0 0 1 0
    1 0 1 0 1
    1 1 0 0 1
    1 1 1 1 1

    Các câu hỏi mạch điện mà đề thi đưa ra. Cho một mạch gồm một cổng XOR và một cổng AND chia sẻ hai đầu vào, hoặc hai bộ cộng nửa và một cổng OR, yêu cầu "hoàn thành bảng chân lý (trình bày lời giải)" nghĩa là thêm một cột cho từng đầu ra trung gian của cổng và điền các hàng theo thứ tự; "nêu tên của mạch" là bộ cộng nửa hoặc bộ cộng đầy đủ; "nêu mục đích của từng đầu ra" là tổng của các bit và cước sang cột tiếp theo. Tổng của các tích cho bộ cộng nửa: $S = \overline{A}B + A\overline{B}$, $C = AB$. Một chuỗi các bộ cộng đầy đủ, mỗi bộ truyền carry-out của nó sang carry-in của bộ kế tiếp, để cộng hai số nhiều bit.

    Explore · ⁨Khám phá⁩

    The gates inside an adder · ⁨Các cổng bên trong máy cộng⁩

    A half-adder's sum bit is an XOR gate and its carry is an AND gate — toggle A and B and watch the truth-table row light up. · ⁨Bit tổng của máy cộng bán phần là cổng XOR và bit carry là cổng AND — hãy đảo A và B và xem hàng bảng chân lý nào sáng lên.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    carry/ˈkæri/ bật carry
    full adder/fʊl ˈædə/ cộng đầy đủ
    15.2

    Flip-flops · ⁨Flip-flop⁩

    English

    A flip-flop 触发器 is a bistable 双稳态 circuit — two stable states (0 and 1) — that remembers its state. It stores one bit and is the basic element of registers and SRAM.

    SR flip-flop

    An SR flip-flop SR触发器 has inputs S (set) and R (reset) and outputs Q and $\overline{Q}$. S=1,R=0 sets Q to 1; S=0,R=1 resets it to 0; S=0,R=0 holds; S=1,R=1 is invalid. Built from two cross-coupled NOR gates.

    "Draw a logic circuit for an SR flip-flop and label the inputs." Two NOR gates (or two NAND gates), the output of each connected back to one input of the other; the free input of one gate is S, of the other R; the outputs are $Q$ and $\overline{Q}$. The feedback is what the marks are for: without it there is no memory. "State the purpose of a flip-flop." To store one bit of data; it is the basic memory element from which registers and static RAM are built, and it holds its value until it is deliberately changed. The invalid input $S = R = 1$ makes both outputs 0, so that $\overline{Q}$ is no longer the complement of $Q$, and the state after both inputs return to 0 is unpredictable, which is the SR flip-flop's weakness.

    JK flip-flop

    A JK flip-flop JK触发器 improves on it by using the previously-invalid 1,1 input as a toggle 翻转 (the output flips). This makes it ideal for building counters 计数器 (a chain of toggling flip-flops). It is usually clocked — inputs act only on a clock edge, keeping flip-flops synchronised.

    Flip-flops are the building blocks of registers (n bits = n flip-flops), counters, and SRAM 静态RAM cells.

    JK flip-flop truth table. The clock 时钟 input decides when the J and K inputs are read, so the output changes only on a clock pulse: with $J = K = 0$ the output is held; $J = 1, K = 0$ sets $Q$ to 1; $J = 0, K = 1$ resets it to 0; $J = K = 1$ toggles it (Q becomes $\overline{Q}$). The last row is exactly the SR flip-flop's forbidden input turned into a useful one, which is why the JK is preferred: every input combination is valid, and the clocked operation makes it the building block of counters and shift registers.

    Tiếng Việt

    Một flip-flop là một mạch b ổn định — có hai trạng thái ổn định (0 và 1) — nhớ trạng thái của nó. Nó lưu trữ một bit và là phần tử cơ bản của registers và SRAM.

    Flip-flop SR

    Một flip-flop SR có đầu vào S (set) và R (reset) và các đầu ra Q và $\overline{Q}$. S=1,R=0 đặt Q về 1; S=0,R=1 đặt nó về 0; S=0,R=0 giữ nguyên; S=1,R=1 là không hợp lệ. Được xây dựng từ hai cổng NOR ghép chéo.

    An SR flip-flop built from two cross-coupled NOR gates, with S feeding one gate and R the other, each gate's output fed back to the other's input, and its truth table: hold, set, reset and the invalid state
    The SR flip-flop: two NOR gates feeding each other. With both inputs 0 the outputs hold whatever they were, which is the memory; S sets Q to 1, R resets it, and S = R = 1 is not allowed

    "Vẽ một mạch logic cho flip-flop SR và gán nhãn các đầu vào." Hai cổng NOR (hoặc hai cổng NAND), đầu ra của mỗi cổng được nối ngược lại một đầu vào của cổng kia; đầu vào còn lại của cổng này là S, của cổng kia là R; các đầu ra là $Q$ và $\overline{Q}$. Phản hồi chính là điểm đánh giá: nếu không có phản hồi thì không có bộ nhớ. "Nêu mục đích của một flip-flop." Để lưu trữ một bit dữ liệu; nó là phần tử bộ nhớ cơ bản được xây dựng từ đó các register và static RAM, và nó giữ giá trị cho đến khi bị thay đổi cố ý. Đầu vào không hợp lệ $S = R = 1$ khiến cả hai đầu ra bằng 0, do đó $\overline{Q}$ không còn là phần bổ của $Q$, và trạng thái sau khi cả hai đầu vào trở về 0 là khó dự đoán, đây là điểm yếu của flip-flop SR.

    Flip-flop JK

    Một flip-flop JK cải tiến loại này bằng cách sử dụng đầu vào trước đây không hợp lệ 1,1 làm toggle (đầu ra đảo chiều). Điều này khiến nó lý tưởng để xây dựng bộ đếm (một chuỗi các flip-flop toggle). Nó thường được đồng bộ hóa — các đầu vào chỉ tác động tại cạnh xung clock, giúp đồng bộ hóa các flip-flop.

    A JK flip-flop block symbol with J, K and clock inputs and outputs Q and Q-bar, beside its build from four cross-coupled NAND gates with the Q and Q-bar outputs fed back to the input gates
    A JK flip-flop: its symbol and a build from NAND gates

    Flip-flops là các khối xây dựng của registers (n bit = n flip-flop), bộ đếm, và các ô nhớ SRAM.

    Bảng chân lý flip-flop JK. Đầu vào clock quyết định thời điểm đọc các đầu vào J và K, do đó đầu ra chỉ thay đổi khi có xung clock: với $J = K = 0$ đầu ra được giữ nguyên; $J = 1, K = 0$ đặt $Q$ thành 1; $J = 0, K = 1$ xóa nó thành 0; $J = K = 1$ lật ngược (Q trở thành $\overline{Q}$). Dòng cuối cùng chính là đầu vào cấm của flip-flop SR được biến thành một đầu vào hữu ích, đó là lý do JK được ưu tiên: mọi tổ hợp đầu vào đều hợp lệ, và hoạt động có xung clock khiến nó trở thành khối xây dựng cơ bản của bộ đếm và thanh ghi dịch chuyển.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    flip-flop/flɪp flɒp/ flip-flop
    bistable/baɪˈsteɪbl/ lưỡng ổn định
    toggle/ˈtɒɡl/ chuyển trạng thái
    counters/ˈkaʊntəz/ bộ đếm
    SRAM/ˈesræm/ SRAM
    clock/klɒk/ đồng hồ
    SR flip-flop/ˌes ˈɑː flɪp flɒp/ Flip-flop SR
    JK flip-flop/ˌdʒeɪ ˈkeɪ flɪp flɒp/ Flip-flop JK
    15.2

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    RISC a processor with a small set of simple, fixed-length instructions, most executed in one clock cycle, using many registers and pipelining
    CISC a processor with a large set of complex, variable-length instructions, many taking several clock cycles and accessing memory directly
    pipelining dividing the fetch–execute cycle into stages so that several instructions are processed at once, each at a different stage
    SISD / SIMD / MISD / MIMD one instruction on one data item; one instruction on many data items; many instructions on one data item; many instructions on many data items
    massively parallel computer thousands of processors, each with its own memory, connected by a network and working simultaneously on one problem
    virtual machine a software emulation of a computer system running on a host computer and behaving like a separate physical computer
    hypervisor the software that creates virtual machines and shares the host's hardware between them
    truth table a table listing every combination of inputs to a logic circuit with the resulting output(s)
    sum-of-products a Boolean expression written as the OR of AND terms, one term for each input combination giving 1
    Karnaugh map a grid of the truth-table outputs, arranged in Gray-code order, in which loops of adjacent 1s give the simplified expression
    half adder a circuit that adds two bits, producing a sum and a carry
    full adder a circuit that adds two bits and a carry-in, producing a sum and a carry-out
    flip-flop a bistable circuit that stores one bit, holding its output until its inputs change it
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    RISC một bộ xử lý với tập lệnh đơn giản, độ dài cố định nhỏ, hầu hết thực hiện trong một chu kỳ đồng hồ, sử dụng nhiều thanh ghi và kỹ thuật pipeline
    CISC một bộ xử lý với tập lệnh phức tạp, độ dài biến thiên lớn, nhiều lệnh mất nhiều chu kỳ đồng hồ và truy cập bộ nhớ trực tiếp
    pipeline chia chu kỳ lấy lệnh-thực thi thành các giai đoạn sao cho nhiều lệnh được xử lý đồng thời, mỗi lệnh ở một giai đoạn khác nhau
    SISD / SIMD / MISD / MIMD một lệnh trên một dữ liệu; một lệnh trên nhiều dữ liệu; nhiều lệnh trên một dữ liệu; nhiều lệnh trên nhiều dữ liệu
    máy tính song song quy mô lớn hàng nghìn bộ xử lý, mỗi cái có bộ nhớ riêng, kết nối qua mạng và làm việc đồng thời trên cùng một bài toán
    máy ảo sự giả lập phần mềm của một hệ thống máy tính chạy trên máy chủ và hoạt động như một máy tính vật lý độc lập
    hypervisor phần mềm tạo ra các máy ảo và chia sẻ phần cứng của máy chủ giữa chúng
    bảng chân lý bảng liệt kê mọi tổ hợp đầu vào của mạch logic với đầu ra tương ứng
    tổng của tích biểu thức Boolean viết dưới dạng OR của các AND, mỗi term ứng với một tổ hợp đầu vào cho kết quả 1
    bản đồ Karnaugh lưới các đầu ra từ bảng chân lý, sắp xếp theo thứ tự Gray-code, trong đó các vòng bao gồm các số 1 liền kề giúp thu gọn biểu thức
    half adder mạch cộng hai bit, tạo ra tổng và carry
    full adder mạch cộng hai bit và carry-in, tạo ra tổng và carry-out
    flip-flop mạch hai trạng thái ổn định lưu trữ một bit, giữ nguyên đầu ra cho đến khi đầu vào thay đổi nó
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    Gray code/ɡreɪ kəʊd/ mã Gray
    15.2

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • RISC and CISC are answered as lists of features: simple, fixed, one cycle, many registers, load/store, pipelined against complex, variable, multi-cycle, fewer registers, direct memory access, microcode. Four of each.
    • Pipelining: stages, several instructions at once, one completed per cycle, higher throughput; $n + k - 1$ cycles for $n$ instructions through $k$ stages; interrupts must empty the pipeline.
    • Flynn's four categories are "how many instruction streams" by "how many data streams"; say what runs on what. Massively parallel: many processors, own memory, network, same problem.
    • Virtual machine: emulation of a computer on a host; host OS on the hardware, hypervisor sharing it, guest OS inside. Two benefits and two limitations, each a full sentence.
    • Boolean algebra: name each law as you use it; De Morgan swaps the operator and negates each term; check with a truth table if in doubt.
    • K-map: Gray-code order, largest loops of 1/2/4/8, wrapping allowed, one term per loop with the unchanging variables. State why: simplest expression with no algebra.
    • Half adder gives sum and carry; full adder also takes a carry-in; SR flip-flop is two cross-coupled NOR/NAND gates and stores one bit; JK's 1,1 input toggles.

    Common mistakes

    • Swapping the RISC and CISC feature lists, or offering "faster" as a feature; give the design features, not a verdict.
    • Describing pipelining as "running instructions in parallel on several cores"; it is stages of one processor overlapping.
    • Confusing SIMD (one instruction, many data) with MIMD (many of both), or describing MISD as the common case.
    • Defining a virtual machine as "a copy of a computer" without the word emulation or the host and guest.
    • Applying De Morgan to only part of an expression under a long bar, or dropping the bar without swapping AND for OR.
    • Looping a group of three, or a non-rectangular group, in a K-map; ordering the columns 00, 01, 10, 11 instead of Gray code.
    • Writing the carry of a half adder as XOR and the sum as AND.
    • Drawing an SR flip-flop as two gates with no feedback, or leaving out the invalid state from its truth table.
    Tiếng Việt
    • RISC và CISC được trả lời dưới dạng danh sách đặc điểm: đơn giản, cố định, một chu kỳ, nhiều thanh ghi, load/store, pipeline so với phức tạp, biến thiên, đa chu kỳ, ít thanh ghi hơn, truy cập bộ nhớ trực tiếp, microcode. Bốn đặc điểm cho mỗi loại.
    • Pipelining: các giai đoạn, nhiều lệnh cùng lúc, hoàn thành một lệnh mỗi chu kỳ, thông lượng cao hơn; $n + k - 1$ chu kỳ để xử lý $n$ lệnh qua $k$ giai đoạn; ngắt phải làm rỗng pipeline.
    • Bốn phân loại Flynn là "số luồng lệnh" theo "số luồng dữ liệu"; nói rõ cái gì chạy trên cái gì. Song song quy mô lớn: nhiều bộ xử lý, bộ nhớ riêng, mạng, cùng một bài toán.
    • Máy ảo: giả lập máy tính trên máy chủ; OS máy chủ trên phần cứng, hypervisor chia sẻ, OS khách bên trong. Hai lợi ích và hai hạn chế, mỗi câu đầy đủ.
    • Đại số Boolean: gọi tên từng luật khi áp dụng; De Morgan đảo toán tử và phủ định từng term; kiểm tra lại bằng bảng chân lý nếu không chắc chắn.
    • Bản đồ K: thứ tự Gray-code, vòng lớn nhất 1/2/4/8, phép cuộn allowed, một term cho mỗi vòng với các biến không đổi. Giải thích tại sao: biểu thức đơn giản nhất mà không cần đại số.
    • Half adder cho tổng và carry; full adder còn nhận carry-in; SR flip-flop gồm hai cổng NOR/NAND ghép chéo và lưu một bit; JK với đầu vào 1,1 sẽ chuyển trạng thái.

    Lỗi thường gặp

    • Đảo ngược danh sách đặc điểm RISC và CISC, hoặc đưa "nhanh hơn" làm đặc điểm; hãy đưa đặc điểm thiết kế, không phải phán xét.
    • Miêu tả pipeline là "chạy lệnh song song trên nhiều nhân"; thực tế là các giai đoạn của một bộ xử lý xen kẽ.
    • Nhầm lẫn SIMD (một lệnh, nhiều dữ liệu) với MIMD (nhiều cả hai), hoặc mô tả MISD là trường hợp phổ biến.
    • Định nghĩa máy ảo là "bản sao của máy tính" mà không dùng từ giả lập hay máy chủ và máy khách.
    • Áp dụng De Morgan chỉ vào một phần biểu thức nằm dưới thanh dài, hoặc bỏ thanh mà không đổi AND sang OR.
    • Vẽ vòng bao gồm ba ô, hoặc nhóm không hình chữ nhật trong bản đồ K; sắp xếp cột 00, 01, 10, 11 thay vì thứ tự Gray code.
    • Viết carry của half adder là XOR và tổng là AND.
    • Vẽ SR flip-flop làm hai cổng không có feedback, hoặc bỏ trạng thái bất hợp lệ khỏi bảng chân lý.
  • 16

    System Software · ⁨Hệ điều hành⁩

    Watch lesson · ⁨Xem bài học⁩
    16.1

    How an OS maximises use of resources

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of how an OS can maximise the use of resources
    Describe the ways in which the user interface hides the complexities of the hardware from the user
    Show understanding of process management The concept of multi-tasking and a process The process states: running, ready and blocked The need for scheduling and the function and benefits of different scheduling routines (including round robin, shortest job first, first come first served, shortest remaining time) How the kernel of the OS acts as an interrupt handler and how interrupt handling is used to manage low-level scheduling
    Show understanding of virtual memory, paging and segmentation for memory management The concepts of paging, virtual memory and segmentation The difference between paging and segmentation How pages can be replaced How disk thrashing can occur
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về cách hệ điều hành tối đa hóa việc sử dụng tài nguyên
    Mô tả cách giao diện người dùng che giấu sự phức tạp của phần cứng khỏi người dùng
    Thể hiện sự hiểu biết về quản lý tiến trình Khái niệm về đa tác vụ (multi-tasking) và tiến trình Các trạng thái tiến trình: đang chạy (running), sẵn sàng (ready) và chặn (blocked) Nhu cầu về lập lịch và chức năng cũng như lợi ích của các thuật toán lập lịch khác nhau (bao gồm round robin, ngắn nhất trước tiên (shortest job first), đầu tiên đến trước (first come first served), thời gian còn lại ngắn nhất (shortest remaining time))Kernel của hệ điều hành hoạt động như thế nào là trình xử lý ngắt và cách xử lý ngắt được sử dụng để quản lý lập mức thấp
    Thể hiện sự hiểu biết về b bộ nhớ ảo (virtual memory), phân trang (paging) và phân đoạn (segmentation) cho quản lý bộ nhớ Khái niệm về phân trang, b bộ nhớ ảo và phân đoạn Sự khác biệt giữa phân trang và phân đoạn Cách thay thế các trang Làm thế nào thrashing disk có thể xảy ra

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A computer has many resources (CPU time, memory, disk, I/O) and many programs competing for them. The OS shares them fairly and efficiently so each is well used and the system stays responsive:

    The OS shares CPU time, memory, disk and input/output between programs
    The OS shares the CPU, memory, disk and I/O between programs
    • multi-tasking 多任务 — switch the CPU quickly between processes so several seem to run at once.
    • memory management — give each process the memory it needs; use disk paging 分页 when RAM runs out.
    • spooling 假脱机 and buffering — print jobs queue on disk so the CPU never waits for the printer.
    • caching — keep recently-used disk data in cache 高速缓存 / RAM.
    A CPU (central processing unit) chip
    The processor is a key resource the OS shares between competing tasks
    Memory modules (RAM)
    The OS also manages memory (RAM), deciding what to keep in it and what to page out to disk
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    multi-tasking/ˈmʌlti ˈtæskɪŋ/ đa tác vụ
    paging/ˈpeɪdʒɪŋ/ paging
    spooling/ˈspuːlɪŋ/ giả lưu trữ
    cache/kæʃ/ cache
    16.1

    The user interface

    The user interface hides the hardware behind friendly abstractions: the user sees windows, menus and folders, not addresses or sectors. One click on an icon makes the OS find the program on disk, allocate memory, load it and start it. A CLI (command line) is powerful and scriptable for experts; a GUI (graphical) is easier to learn. Most systems offer both.

    "Describe two ways in which the complexities of the hardware are hidden from the user." (1) The user works with files and folders by name, and the OS translates them into the tracks, sectors and blocks of the disk; (2) the user runs a program with a click or a command, and the OS loads it, allocates memory and schedules it without the user knowing any addresses; (3) device drivers let the user print or save without knowing how the printer or disk is controlled; (4) a graphical interface replaces machine-level commands with icons, windows and menus. The benefit to a student, with an example: the OS makes the hardware usable without technical knowledge, for instance saving a document to a USB drive by dragging its icon.

    "Show how an OS maximises the use of resources." It schedules the processor so that it is never idle while a process is ready; it manages memory, allocating it to processes, reclaiming it and extending it with virtual memory; it manages input and output, using buffers and spooling so that fast and slow devices overlap their work; and it manages storage, keeping track of free space and files. Each point names a resource and what the OS does with it.

    16.1

    Process management

    A process 进程 is a program in execution — its code, current state, memory and open files.

    Scheduling

    The scheduler 调度器 chooses which ready process runs next, and for how long:

    • round robin 轮转 — each process gets a fixed time slice 时间片, then goes to the back of the queue.
    • first-come-first-served; shortest job first; shortest remaining time (run the job with the least work left); priority; multilevel feedback queues.

    The trade-off is responsiveness vs throughput vs fairness.

    "Describe what is meant by multi-tasking and how it benefits process management." Several processes are held in memory at the same time and the processor switches between them so quickly that they appear to run simultaneously, each given a share of processor time in turn. The benefit: the processor is never left idle while one process waits for input or output, so throughput is higher and the user can work on several programs at once. "Explain the need for scheduling." There are more processes than processors, so a decision must be made about which process runs next and for how long; scheduling makes sure every process makes progress, that the processor is fully used, that response times are acceptable, and that priorities can be respected.

    Two timelines of the same three jobs: first-come-first-served runs the long job first and the short jobs wait behind it, while shortest-job-first runs the short jobs first and cuts the average waiting time from 6.7 to 2.7 units
    The same work in a different order: shortest-job-first gets the short jobs out of the way, so most jobs wait less, at the risk of a long job waiting for ever

    The scheduling routines, as the exam wants them described.

    Routine Function Benefit Drawback
    first come first served (FCFS) processes run in the order in which they arrive in the ready queue, each to completion simple; every process is dealt with in turn, none is starved a long process holds up all the short ones behind it; poor response
    shortest job first (SJF) the ready process with the shortest estimated run time runs next, to completion minimises the average waiting time; many short jobs finish quickly run times must be known in advance; a long job may never run (starvation)
    shortest remaining time (SRT) pre-emptive 抢占式 version of SJF: if a new process arrives with less time left than the running one, it takes over short processes are served even faster; good throughput more context switches; a long job can be interrupted repeatedly and starve
    round robin (RR) each ready process gets a fixed time slice in turn; when it expires the process goes to the back of the queue fair; every process responds within a bounded time, good for interactive use context-switch overhead; a very short slice wastes time, a long one delays others
    priority the ready process with the highest priority runs first important or time-critical work is done first low-priority processes may starve unless priorities age

    Worked example. Three processes arrive together with CPU times of 8, 4 and 2 ms. Compare the average waiting time under FCFS (in arrival order A, B, C) and under shortest job first.

    FCFS: A waits 0, B waits 8, C waits 12; average $(0 + 8 + 12)/3 = 6.7\ \text{ms}$. SJF runs C, B, A: C waits 0, B waits 2, A waits 6; average $2.7\ \text{ms}$. The total work is the same 14 ms either way; the order decides who waits. Round robin with a 2 ms slice would give A, B and C each a turn in the first 6 ms, so C finishes at 6 ms, B at 12 ms and A at 14 ms: the most responsive, not the fastest on average.

    A Gantt timeline showing P1 then P2, P3, P4 run one after another from time 0 to 39, with a key giving each process's CPU burst time
    First-come-first-served scheduling of four processes
    Round-robin scheduling shown as a timeline: P1, P2, P3 each get a fixed time slice in turn, then the cycle repeats, sharing the CPU between them
    Round-robin: each process gets a fixed time slice in turn, then the next runs (unlike first-come-first-served)

    Process states

    A process is new, ready (waiting for the CPU), running, blocked 阻塞 (waiting for I/O or a lock), or terminated. When its time slice ends it goes running → ready; when it requests I/O it goes running → blocked; when the I/O finishes it goes blocked → ready.

    A state diagram: new to ready (admit), ready to running (dispatch by the scheduler), running to ready (interrupt or time-out), running to blocked (request I/O), blocked back to ready (I/O complete), running to terminated (exit)
    A process moves between the new, ready, running, blocked and terminated states

    The three states and why a process moves. Running: the process has the processor. Ready: it could run but is waiting for the processor. Blocked: it cannot run until something else happens. Reasons for each transition, which the exam asks for one at a time: running to ready when its time slice ends, or when a higher-priority process becomes ready and pre-empts it (an interrupt); running to blocked when it requests input or output or waits for a resource or another process; blocked to ready when the I/O it was waiting for completes (signalled by an interrupt); ready to running when the scheduler dispatches it. A blocked process can never go straight to running: it must become ready first.

    Process control block and context switch

    For each process the OS keeps a process control block 进程控制块 (PCB) — the saved program counter, registers, state and memory info.

    A context switch saves process A's state (its PCB) and loads process B's
    A context switch saves one process's state and loads another's
    • a context switch 上下文切换 suspends one process and starts another: it saves the state into one PCB and restores it from another. This small cost is paid on every switch.
    • the kernel 内核 (the core of the OS) acts as an interrupt handler 中断处理程序. When a device or the timer raises an interrupt, interrupt handling 中断处理 saves the running process and runs the right routine — this is what drives low-level scheduling.

    "Outline how the kernel acts as an interrupt handler" (two marks). When an interrupt is raised, the kernel saves the state of the running process (its registers and program counter, in its process control block), identifies the source and priority of the interrupt, runs the appropriate interrupt service routine, and then restores the interrupted process (or a higher-priority one) so that execution continues. This is how the timer ends a time slice and how a completed I/O operation unblocks a process.

    Inter-process communication

    Processes are isolated, so the OS provides inter-process communication 进程间通信: pipes 管道 (one program's output feeds another's input), shared memory 共享内存 (a region several processes can use), and message passing.

    Explore · ⁨Khám phá⁩

    The life of a process · ⁨Vòng đời của một tiến trình⁩

    Tap round the loop a process travels. It only runs when the scheduler picks it; needing I/O sends it to blocked, and finishing its time slice sends it back to ready — round and round until it's done. · ⁨Nhìn vào vòng lặp mà tiến trình di chuyển. Nó chỉ chạy khi trình lập lịch chọn; cần I/O thì đưa sang trạng thái chờ, và hết thời gian xử lý thì quay về trạng thái sẵn sàng — liên tục như vậy cho đến khi hoàn thành.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    process/ˈprəʊses/ quá trình (process)
    scheduler/ˈʃedjʊlə/ trình lập lịch
    round robin/raʊnd ˈrɒbɪn/ quay vòng tròn
    time slice/taɪm slaɪs/ lát cắt thời gian
    pre-emptive/priː ˈemptɪv/ tiền đề
    blocked/blɒkt/ chặn lại
    process control block/ˈprəʊses kənˈtrəʊl blɒk/ bảng điều khiển tiến trình
    context switch/ˈkɒntekst swɪtʃ/ chuyển đổi ngữ cảnh
    kernel/ˈkɜːnl/ lõi
    interrupt handler/ˈɪntərʌpt ˈhændlə/ xử lý ngắt
    interrupt handling/ˈɪntərʌpt ˈhændlɪŋ/ xử lý ngắt
    inter-process communication/ˈɪntə ˈprəʊses kəˌmjuːnɪˈkeɪʃn/ giao tiếp giữa các tiến trình
    pipes/paɪps/ pipe
    shared memory/ʃeəd ˈmeməri/ b bộ nhớ chung
    16.1

    Virtual memory, paging, segmentation

    Each process gets its own virtual address space 虚拟地址空间 — a clean, contiguous range of addresses the OS maps to physical memory. This gives each process a simple space, protects processes from each other, and lets the total memory exceed physical RAM.

    In paging, the virtual space is split into fixed-size pages 页 and physical memory into same-sized frames 页框. A page table maps each page to a frame. If an accessed page is not in RAM — a page fault 缺页 — the OS reads it from the swap file 交换文件 into a frame, evicting another page if RAM is full. Frequent faults cause thrashing 抖动 (disk thrashing), where the OS spends most of its time swapping pages instead of doing useful work.

    Logical-memory pages mapped through a page table to non-contiguous physical-memory frames
    Paging maps each page of logical memory to a frame of physical memory

    In segmentation 分段, memory is split into variable-sized logical segments (code, stack, heap), each with its own permissions. Many systems use paging within segments.

    Variable-sized logical segments (code, heap, stack) mapped through a segment table of sizes and start addresses to physical memory
    Segmentation maps variable-sized segments using a segment map table

    "Explain what is meant by virtual memory" (three marks). Secondary storage (disk) is used to extend the RAM, so that the available memory appears larger than the physical memory; the address space of a process is divided into pages, and only the pages currently needed are held in RAM while the rest wait on disk; pages are swapped between RAM and disk as required, and the OS translates each virtual address into a physical one. Why an OS needs it: the programs running may need more memory than the RAM installed; it lets more (or larger) programs run at once; a program can be larger than the physical memory; memory is used efficiently because only the active parts of programs occupy RAM.

    Paging against segmentation: the difference the exam wants. Paging divides memory into blocks of fixed size (pages and frames) chosen by the hardware, with no regard to the program's structure, and the mapping is invisible to the programmer; segmentation divides a program into variable-sized logical units (a procedure, an array, the stack) whose sizes and boundaries follow the program, so a segment can be protected or shared as a unit. "Describe the process of segmentation": the program is split into segments of different sizes, each given a segment number; a segment table records where each segment starts in memory and how long it is; a logical address is a segment number plus an offset, and the OS adds the offset to the segment's base address to find the physical location.

    "Explain what is meant by disk thrashing" and when it occurs. Disk thrashing 磁盘抖动 is the state in which pages are swapped in and out of RAM so frequently that the processor spends more time moving pages than executing instructions, and the system slows almost to a halt. It occurs when the RAM is too small for the pages the running processes need (their working sets): a page just moved out is needed again almost at once, so it is fetched back, which pushes out another page that is soon needed, and so on. Too many processes, or a program that accesses memory unpredictably, brings it on; more RAM or fewer processes cure it.

    Explore · ⁨Khám phá⁩

    What happens on a page fault · ⁨Điều gì xảy ra khi gặp lỗi phân trang⁩

    Step through a page fault. When the program touches a page that isn't in RAM, the OS quietly fetches it from disk and updates the page table — so the program sees more memory than physically exists. · ⁨Xét từng bước lỗi phân trang. Khi chương trình truy cập vào một trang chưa có trong RAM, hệ điều hành âm thầm lấy nó từ đĩa và cập nhật bảng phân trang — để chương trình thấy nhiều bộ nhớ hơn so với thể tích vật lý thực tế.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    virtual address space/ˈvɜːtʃuːəl əˈdres speɪs/ không gian địa chỉ ảo
    pages/ˈpeɪdʒɪz/ trang
    frames/freɪmz/ khung
    page fault/peɪdʒ fɒlt/ lỗi trang
    swap file/swɒp faɪl/ tập tin hoán đổi
    thrashing/ˈθræʃɪŋ/ hoán đổi quá mức
    segmentation/ˌseɡmənˈteɪʃn/ phân đoạn
    disk thrashing/dɪsk ˈθræʃɪŋ/ thrashing đĩa
    16.2

    How an interpreter runs a program

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of how an interpreter can execute programs without producing a translated version
    Show understanding of the various stages in the compilation of a program Including lexical analysis, syntax analysis, code generation and optimisation
    Show understanding of how the grammar of a language can be expressed using syntax diagrams or Backus-Naur Form (BNF) notation
    Show understanding of how Reverse Polish Notation (RPN) can be used to carry out the evaluation of expressions
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về cách trình biên dịch giải thích (interpreter) thực thi chương trình mà không tạo ra phiên bản đã dịch mã
    Thể hiện sự hiểu biết về các giai đoạn khác nhau trong quá trình biên dịch một chương trình Bao gồm phân tích từ vựng (lexical analysis), phân tích cú pháp (syntax analysis), tạo mã (code generation) và tối ưu hóa (optimisation)
    Thể hiện sự hiểu biết về cách ngữ pháp của ngôn ngữ có thể được biểu diễn bằng sơ đồ cú pháp (syntax diagrams) hoặc ký hiệu Backus-Naur Form (BNF)
    Thể hiện sự hiểu biết về cách Ký hiệu Ba Lan ngược (Reverse Polish Notation - RPN) có thể được sử dụng để thực hiện đánh giá biểu thức

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    An interpreter 解释器 translates and runs the source at the same time. For each statement it reads the line, does lexical and syntax analysis, checks types, then executes the action, and moves on. Errors are reported immediately and it usually stops; no executable is produced. The translation is redone every run (slower), but it gives fast development feedback and is portable.

    "Explain how an interpreter executes a program without producing a translated version" (three marks). The interpreter takes one statement (line) at a time, translates (analyses) it, and executes it immediately, before moving to the next; no translated version of the whole program is created or stored, so every statement is translated every time it is executed, including each pass through a loop; if a statement contains an error, execution stops there and the error is reported. This is what makes an interpreter good for developing and testing (errors are found as they are reached, and a change can be tried at once) but slower for running finished programs.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    interpreter/ɪnˈtɜːprɪtə/ interpreter
    16.2

    Stages of compilation

    A compiler 编译器 turns source into machine code 机器码 in phases:

    1. lexical analysis 词法分析 — the lexer groups characters into tokens 词法单元 (keywords, identifiers, operators, literals), discarding whitespace and comments.
    2. syntax analysis (parsing) 语法分析 — check the tokens fit the grammar and build an abstract syntax tree 抽象语法树. A missing bracket gives a syntax error 语法错误.
    3. semantic analysis 语义分析 — check the program makes sense (variables declared, types match).
    4. code generation 代码生成 — walk the tree and emit target code, choosing registers and layouts.
    5. code optimisation 代码优化 — remove redundant work, fold constants, reorder for the pipeline.

    The output is an executable.

    The phases of compilation: source code passes through lexical analysis (tokens), syntax analysis (AST), semantic analysis (checks), code generation and optimisation to produce an executable
    The phases of compilation, from source code to an optimised executable

    The purpose of each stage, in the words that score. Lexical analysis: removes white space and comments; converts the characters of the source code into tokens (keywords, identifiers, operators, constants), checking that each is valid in the language; enters identifiers into the symbol table 符号表. Syntax analysis: checks that the sequence of tokens obeys the grammar (syntax rules) of the language; builds a parse tree (abstract syntax tree); reports syntax errors; type checking and the checking of variable declarations are sometimes counted here as semantic analysis. Code generation: converts the checked tree into object code or machine code (possibly via an intermediate code), allocating memory and registers. Optimisation: makes the code run faster or use less memory, by removing redundant instructions, combining or simplifying calculations, and reorganising loops, without changing what the program does. The matching question pairs each stage with one of these descriptions.

    Explore · ⁨Khám phá⁩

    The phases of compilation · ⁨Các giai đoạn của biên dịch⁩

    Step through what a compiler does to your source. Each phase hands its output to the next — characters become tokens, tokens become a tree, the tree becomes optimised machine code. · ⁨Đi qua những gì trình biên dịch làm với mã nguồn của bạn. Mỗi giai đoạn chuyển đầu ra cho giai đoạn tiếp theo — ký tự trở thành token, token trở thành cây, cây trở thành mã máy được tối ưu hóa.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    compiler/kəmˈpaɪlə/ compiler
    machine code/məˈʃiːn kəʊd/ mã máy
    lexical analysis/ˈleksɪkl əˈnæləsɪs/ phân tích từ vựng
    tokens/ˈtəʊkənz/ tokens
    syntax analysis (parsing)/ˈsɪntæks əˈnæləsɪs/ phân tích cú pháp (parsing)
    abstract syntax tree/ˈæbstrækt ˈsɪntæks triː/ cây cú pháp trừu tượng
    syntax error/ˈsɪntæks ˈerə/ lỗi cú pháp
    semantic analysis/səˈmæntɪk əˈnæləsɪs/ phân tích ngữ nghĩa
    code generation/kəʊd ˌdʒenəˈreɪʃn/ tạo mã
    code optimisation/kəʊd ˌɒptɪmaɪˈzeɪʃn/ tối ưu hóa mã
    symbol table/ˈsɪmbl ˈteɪbl/ bảng ký hiệu
    16.2

    Grammar: BNF and syntax diagrams

    A grammar 文法 says which token sequences are valid programs.

    Backus-Naur Form 巴科斯-诺尔范式 (BNF) is textual. A production rule 产生式 has the form:

    <symbol> ::= alternative1 | alternative2 | ...
    

    Each alternative is a sequence of terminal 终结符 symbols (literal text) and non-terminal 非终结符 symbols (other rule names):

    <digit>      ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    <identifier> ::= <letter> | <identifier> <letter> | <identifier> <digit>
    

    The recursive third rule expresses "a letter followed by any number of letters or digits". An IF statement:

    <if-statement> ::= IF <condition> THEN <statement> ENDIF
                     | IF <condition> THEN <statement> ELSE <statement> ENDIF
    

    A syntax diagram 语法图 (railroad diagram) shows the same thing graphically: boxes for non-terminals, rounded boxes for terminals, arrows for valid paths, loops for repetition. The two notations are equivalent. The parser uses the grammar to decide whether a program is valid.

    A railroad diagram for an assignment: a rectangular identifier box, a rounded assignment-symbol box, then a rectangular expression box, connected left to right
    A syntax (railroad) diagram for an assignment statement
    Three syntax diagrams, for a letter, a digit and an identifier that starts with a letter and continues with any number of letters or digits, beside the BNF rules that express exactly the same grammar, with valid and invalid examples
    A syntax diagram and a BNF rule say the same thing: a choice becomes alternatives separated by bars, and a loop becomes a rule that refers to itself

    Reading the exam's diagrams. Each diagram defines one non-terminal; follow the arrows from the entry to the exit, and every path you can trace is a valid string. A choice of boxes side by side is a set of alternatives; a loop back is "repeat as many times as you like"; a box for another non-terminal means "insert anything that rule allows". "State why the string is invalid" wants the rule it breaks, in words: 9K is invalid as a variable because the first character must be a letter, not a digit; JJ90 is an invalid passcode if the rule allows only one letter before the digits, or if J is not in the set of letters listed. Always check the string against the set of characters the diagram actually allows, not against what a real language would accept.

    Writing BNF from a diagram. Each diagram becomes one rule <name> ::= ...; alternatives are separated by |; a sequence is written one symbol after another; and repetition is written with recursion, because BNF has no loop symbol: "one or more letters" is <word> ::= <letter> | <letter><word>, and "zero or more digits after a letter" is <variable> ::= <letter> | <letter><digits> with <digits> ::= <digit> | <digit><digits>.

    Worked example. Complete the BNF for a vehicle registration that must begin with two letters (from A B C) followed by one, two or three digits (from 0 1 2).

    <letter>       ::= A | B | C
    <digit>        ::= 0 | 1 | 2
    <digits>       ::= <digit> | <digit><digit> | <digit><digit><digit>
    <registration> ::= <letter><letter><digits>
    

    AB12 is valid; A12 is not (only one letter); AB1234 is not (four digits); AD1 is not (D is not a listed letter). Asked to add a constraint such as "the third character may also be a symbol", add the extra alternative to the rule for that position only, and define <symbol> with its own rule.

    Worked example. Write BNF for an expression that is a variable, followed by an operator, followed by either a variable or a number, where a variable is a single lower-case letter from a b c and an operator is + or -.

    <variable>   ::= a | b | c
    <operator>   ::= + | -
    <number>     ::= <digit> | <digit><number>
    <expression> ::= <variable><operator><variable> | <variable><operator><number>
    

    The recursive <number> rule allows any number of digits; the two alternatives of <expression> cover both cases named in the definition. Keep every non-terminal in angle brackets and every terminal without them.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    grammar/ˈɡræmə/ ngữ pháp
    Backus-Naur Form/ˈbækəs nɔː fɔːm/ Dạng Backus-Naur
    production rule/prəˈdʌkʃn ruːl/ luật sản xuất
    terminal/ˈtɜːmɪnl/ terminal
    non-terminal/nɒn ˈtɜːmɪnl/ không kết thúc
    syntax diagram/ˈsɪntæks ˈdaɪəɡræm/ sơ đồ cú pháp
    16.2

    Reverse Polish Notation (RPN)

    In infix 中缀 notation the operator sits between its operands (3 + 4 * 2), needing brackets and precedence rules. In Reverse Polish Notation 逆波兰表示法 (RPN, postfix 后缀) the operator follows its operands (3 4 2 * +), needing no brackets.

    Converting infix to RPN

    Use an operator stack 栈. Scan left to right: output an operand; for an operator, first pop any stacked operators of higher or equal precedence 优先级 to the output, then push it; push (; on ) pop to output until the matching (. At the end, pop all operators. Example: (3 + 4) * 2 → 3 4 + 2 *.

    Evaluating RPN

    Use a stack of operands. Scan left to right: push each operand; on an operator, pop the top two, apply it, and push the result. Evaluating 3 4 2 * +:

    Token Stack
    3 3
    4 3, 4
    2 3, 4, 2
    * 3, 8
    + 11

    Result: 11. RPN needs no brackets at evaluation time and suits a stack machine — which is how the JVM and many bytecode 字节码 interpreters work.

    "Explain why RPN is used to evaluate expressions" (two marks). In RPN the operators appear in the order in which they are applied, so an expression can be evaluated in a single left-to-right pass with no brackets and no precedence rules; it is therefore simpler and faster for the compiler or interpreter to process. "Identify, with reasons, a suitable data structure": a stack, because evaluation needs the most recently pushed operands first (last in, first out): each operand is pushed, and each operator pops the top two, applies itself, and pushes the result. Show the stack contents after every token when asked.

    Converting infix to RPN by hand. (1) Fully bracket the expression using the precedence rules; (2) move each operator to just after the closing bracket of its own pair; (3) remove the brackets. So $(a - b) * (a + c) / 7$ becomes $((a - b) * (a + c)) / 7$, then a b - a c + * 7 /. Note that * and / are applied left to right, so the division is the last operator, not the multiplication. More conversions: $((7 + 3) - (2 * 8)) / 6$ is 7 3 + 2 8 * - 6 /; $(7 - 2 + 8) / (9 - 5)$ is 7 2 - 8 + 9 5 - /; $a * b + b - d + 15$ is a b * b + d - 15 +; $(2 - 6) * (13 + 7) / 5$ is 2 6 - 13 7 + * 5 /.

    Converting RPN back to infix. Work through the RPN with a stack of expressions: push each operand; for each operator pop two, write them either side of it in brackets, and push the result. So a b / 4 * a b + - is $((a / b) * 4) - (a + b)$; 5 2 + 9 3 - / 3 * is $((5 + 2) / (9 - 3)) * 3$; b a c - + d b + * c / is $((b + (a - c)) * (d + b)) / c$; a b - c + c a - * d / is $(((a - b) + c) * (c - a)) / d$. Keep the brackets: dropping them can change the meaning.

    Worked example. Evaluate a b - c d + * e / when $a = 17$, $b = 5$, $c = 7$, $d = 3$ and $e = 10$, showing the stack.

    token action stack (top on the right)
    a push 17 17
    b push 5 17, 5
    - pop 5 and 17, push $17 - 5$ 12
    c push 7 12, 7
    d push 3 12, 7, 3
    + pop 3 and 7, push $7 + 3$ 12, 10
    * pop 10 and 12, push $12 \times 10$ 120
    e push 10 120, 10
    / pop 10 and 120, push $120 / 10$ 12

    Result 12. The order of the pops matters for - and /: the value popped second is the left operand, so a b - is $a - b$, not $b - a$. Two more, in the same way: d a b + * c a - / with $a = 6, b = 12, c = 15, d = 5$ gives $5 \times (6 + 12) / (15 - 6) = 90 / 9 = 10$; c a - b d + * b c + / with $a = 4, b = 12, c = 24, d = 6$ gives $(24 - 4) \times (12 + 6) / (12 + 24) = 360 / 36 = 10$.

    Worked example. Convert $(A + B) \times (C - D)$ to RPN, then evaluate $(3 + 4) \times (5 - 2)$. Scan left to right using an operator stack. Push (; output A; push +; output B; on ) pop back to the matching (, giving A B + so far. Push ×, and the second bracket behaves the same way, giving C D -. At the end pop the ×. Result: A B + C D - ×. To evaluate the numbers, use a stack of operands: push 3, push 4; + pops both and pushes 7; push 5, push 2; - pops both and pushes 3; × pops 7 and 3 and pushes 21. Two things make these reliable: the operands keep their original order through the conversion (only the operators move), and every operator acts on the two values immediately below it on the stack.

    Explore · ⁨Khám phá⁩

    Operator precedence — what RPN removes · ⁨Độ ưu tiên toán tử — điều mà RPN loại bỏ⁩

    In ordinary infix maths × and ÷ bind tighter than + and −, so you must apply rules in the right order. Reverse Polish Notation writes the operands first (3 4 2 × + 1 −), fixing the order so no precedence rules are needed. · ⁨Trong toán học infix thông thường, × và ÷ có độ liên kết chặt hơn + và −, vì vậy bạn phải áp dụng các quy tắc theo đúng thứ tự. Ký hiệu Ba Lan Reverse viết các toán hạng trước (3 4 2 × + 1 −), cố định thứ tự nên không cần quy tắc độ ưu tiên.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    infix/ˈɪnfɪks/ trung tố
    Reverse Polish Notation/rɪˈvɜːs ˈpəʊlɪʃ nəʊˈteɪʃn/ Ký hiệu Ba Lan ngược
    postfix/ˈpəʊstfɪks/ hậu tố
    stack/stæk/ stack
    precedence/ˈpresɪdəns/ độ ưu tiên
    bytecode/ˈbaɪtkəʊd/ bytecode
    16.2

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    multi-tasking several processes held in memory at once, the processor switching between them so that they appear to run simultaneously
    process a program that has been loaded into memory and is being executed (or is ready to be)
    running / ready / blocked has the processor / waiting for the processor / cannot continue until an event such as I/O completes
    scheduling deciding which ready process gets the processor next, and for how long
    pre-emptive scheduling the running process can be interrupted and moved to ready so that another process runs
    virtual memory using secondary storage to extend RAM, holding only the pages currently needed in physical memory
    paging dividing memory and programs into fixed-size pages that are moved between disk and RAM as needed
    segmentation dividing a program into variable-sized logical segments, each mapped to memory by a segment table
    disk thrashing pages being swapped between RAM and disk so often that little useful processing is done
    interpreter translates and executes a program one statement at a time, without producing a translated version
    compiler translates a whole high-level program into machine (object) code before it is run
    lexical analysis converts the source code into tokens, removing white space and comments, and builds the symbol table
    syntax analysis checks that the tokens obey the grammar of the language and builds a parse tree
    Backus–Naur Form a notation for the grammar of a language: rules of the form <name> ::= alternatives built from terminals and non-terminals
    Reverse Polish Notation a way of writing expressions with each operator after its operands, so they can be evaluated with a stack and without brackets
    16.2

    Exam tips

    • The OS questions are marked on named mechanisms: scheduling, memory management, I/O buffering and spooling, file management; for the interface, file names not addresses, clicks not commands, drivers, GUI.
    • Process states with their transitions and the reason for each; scheduling routines as function plus benefit plus drawback; the kernel saves state, identifies the interrupt, services it, restores.
    • Virtual memory: disk extends RAM, pages swapped, address translation; paging is fixed-size and invisible, segmentation is variable-size and logical; thrashing is swapping instead of working.
    • Interpreter: one statement at a time, translated then executed, nothing stored. Compiler stages: tokens and symbol table, grammar and parse tree, code, optimisation.
    • BNF: a rule per diagram, | for choice, recursion for repetition, terminals bare and non-terminals in angle brackets. Say which rule a string breaks.
    • RPN: operators after operands, evaluate with a stack, show every step; convert by fully bracketing; when converting back, keep the brackets.

    Common mistakes

    • Describing multi-tasking as "running several programs at the same time" without saying the processor switches between them.
    • Sending a blocked process straight to running, or giving "time slice ended" as the reason for running to blocked.
    • Confusing shortest job first (non-pre-emptive) with shortest remaining time (pre-emptive), or round robin with priority.
    • Defining virtual memory as "using the hard disk as RAM" with no mention of pages being swapped.
    • Saying an interpreter "converts the program to machine code and then runs it"; that is a compiler.
    • Putting syntax checking in lexical analysis, or optimisation before code generation in the matching question.
    • Writing BNF repetition as <letter>* or with an ellipsis; use recursion. Leaving angle brackets off non-terminals.
    • Reversing the operands of - or / when evaluating RPN, or writing the RPN of $a * b + c$ as a b c + *.
  • 17

    Security · ⁨An ninh⁩

    Watch lesson · ⁨Xem bài học⁩
    17.1

    How encryption works · ⁨Cách mã hóa hoạt động⁩

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of how encryption works Including the use of public key, private key, plain text, cipher text, encryption, symmetric key cryptography and asymmetric key cryptography How the keys can be used to send a private message from the public to an individual/organisation How the keys can be used to send a verified message to the public How data is encrypted and decrypted, using symmetric and asymmetric cryptography Purpose, benefits and drawbacks of quantum cryptography
    Show awareness of the Secure Socket Layer (SSL) / Transport Layer Security (TLS) Purpose of SSL/TLS Use of SSL/TLS in client-server communication Situations where the use of SSL/TLS would be appropriate
    Show understanding of digital certification How a digital certificate is acquired How a digital certificate is used to produce digital signatures
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về cách mã hóa hoạt động Bao gồm việc sử dụng khóa công khai (public key), khóa riêng tư (private key), dữ liệu rõ (plain text), dữ liệu mã hóa (cipher text), mã hóa, mã hóa khóa đối xứng (symmetric key cryptography) và mã hóa khóa bất đối xứng (asymmetric key cryptography) Cách các khóa có thể được sử dụng để gửi tin nhắn riêng tư từ công khai đến cá nhân/tổ chức Cách các khóa có thể được sử dụng để gửi tin nhắn đã xác minh đến công khai Dữ liệu được mã hóa và giải mã như thế nào, sử dụng mã hóa đối xứng và bất đối xứng Mục đích, lợi ích và nhược điểm của mã hóa lượng tử (quantum cryptography)
    Thể hiện sự nhận thức về Secure Socket Layer (SSL) / Transport Layer Security (TLS) Mục đích của SSL/TLS Sử dụng SSL/TLS trong giao tiếp client-server Các tình huống phù hợp để sử dụng SSL/TLS
    Thể hiện sự hiểu biết về chứng thực kỹ thuật số (digital certification) Cách chứng chỉ kỹ thuật số được thu thập Cách chứng chỉ kỹ thuật số được sử dụng để tạo chữ ký kỹ thuật số

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    English

    Encryption 加密 turns readable plaintext 明文 (plain text) into unreadable ciphertext 密文 (cipher text) using a maths operation that depends on a key. Only someone with the right key can reverse it — decryption 解密 — to get the plaintext back. An attacker who intercepts the ciphertext without the key sees only meaningless data, because trying every possible key would take far too long. A newer approach, quantum cryptography 量子密码学, uses quantum physics to share a key in a way that reveals any eavesdropper.

    Symmetric encryption

    Symmetric encryption 对称加密 (symmetric key cryptography) uses the same key for both encryption and decryption, so sender and receiver must both hold the secret key. It is fast and good for bulk data (a whole disk, a video stream). Its problem is key distribution 密钥分发: how do you share the key safely in the first place? Asymmetric encryption solves this.

    "Describe what is meant by symmetric key encryption" (two marks). The same key is used to encrypt the plaintext and to decrypt the ciphertext, so the key must be shared between sender and receiver and kept secret from everyone else. Two drawbacks. The key has to be exchanged before the message can be sent, and if it is intercepted in transit the interceptor can read every message; a separate key is needed for every pair of correspondents; and it gives no proof of who sent the message, because both ends hold the same key. "Give two reasons for using key cryptography": so that data is unreadable by anyone who intercepts it (confidentiality); so that the receiver can be sure the data came from the claimed sender and was not altered (authenticity and integrity 完整性). The two methods are symmetric and asymmetric key cryptography.

    Asymmetric encryption (public-key)

    Asymmetric encryption 非对称加密 (asymmetric key cryptography) gives each user a pair of related keys: a public key 公钥 they publish, and a private key 私钥 they keep secret. Data encrypted with the public key can be decrypted only with the matching private key, and vice versa.

    To send a secret message to Alice: get her published public key, encrypt with it, and send. Only Alice — holding the matching private key — can decrypt. No prior key exchange is needed. The trade-off is that it is much slower than symmetric, so it is not used for large data.

    "State what is meant by a private key." A key known only to its owner (never transmitted), used to decrypt data that was encrypted with the matching public key, and to create digital signatures. "Describe the process of asymmetric encryption" (four marks): (1) the receiver generates a pair of keys, a public key and a private key, mathematically related; (2) the public key is made available to anyone who wants to send to them; (3) the sender encrypts the plaintext with the receiver's public key; (4) the ciphertext can only be decrypted with the receiver's private key, which never leaves the receiver, so nobody who intercepts the message can read it.

    Worked example. Fred wants to send Sheila a confidential document. Explain how asymmetric encryption is used.

    Sheila has a key pair; she sends Fred her public key (or he obtains it from her certificate). Fred encrypts the document with Sheila's public key and sends the ciphertext. Only Sheila's private key can decrypt it, and only Sheila holds that, so nobody else, including Fred once it is encrypted, can read the document. The keys are used the receiver's way round: her public key to lock, her private key to unlock. An organisation that holds a key pair "to receive secure transmissions" does exactly this: it publishes the public key, keeps the private key, and decrypts what arrives.

    Two differences between symmetric and asymmetric encryption. Symmetric uses one key for both directions; asymmetric uses two related keys, one to encrypt and the other to decrypt. In symmetric encryption the key must be kept secret by both parties and exchanged securely; in asymmetric encryption the public key can be published and only the private key is secret. Symmetric encryption is much faster and suits large amounts of data; asymmetric is slower, so it is used for keys and signatures rather than bulk data.

    A private key must stay secret, so it is sometimes kept on a small hardware security key 硬件安全密钥. You plug it in or tap it to prove who you are, and the secret key never leaves the device.

    Hybrid approach (used by almost every real system)

    Use asymmetric encryption to exchange a fresh session key 会话密钥, then use that symmetric key for the data:

    1. the client makes a random session key.
    2. it encrypts the session key with the server's public key.
    3. the server decrypts it with its private key.
    4. both ends now share the session key and use fast symmetric encryption for the rest.

    This is how HTTPS and SSH work.

    The exam's version of the key-exchange problem. "A symmetric key is to be exchanged before the message is sent. Explain how the key can be exchanged securely." The sender encrypts the symmetric key with the receiver's public key and sends it; the receiver decrypts it with their private key; both now hold the symmetric key, which was never exposed in transit, and use it for the messages. Asymmetric encryption solves the distribution problem; symmetric encryption then does the fast work.

    Hashing (related, not encryption)

    A cryptographic hash 密码散列 function takes any input and gives a fixed-size digest 摘要 such that the same input always gives the same digest, it is infeasible to find two inputs with the same digest, and a tiny change in input changes the digest completely. Hashing is one-way — you cannot get the input back. It is used for storing password checks, integrity checks, and digital signatures.

    Quantum cryptography

    Quantum cryptography uses the physics of light to distribute keys: the bits of a key are sent as photons whose quantum states encode the values. "Describe its purpose": to transmit an encryption key securely, in such a way that any attempt to intercept it can be detected, because measuring a photon changes its state; an eavesdropper 窃听者 therefore leaves evidence, and the corrupted key is thrown away and a new one sent. Benefits: interception is always detectable; the key cannot be copied without being altered; it is secure against future advances in computing power (a mathematical key can eventually be cracked, a quantum one cannot be read without disturbing it). Drawbacks: it needs specialised, expensive equipment; it works only over limited distances on dedicated optical fibre (or line of sight), not across the existing internet; it distributes the key only, so ordinary encryption still protects the message; and it is a new technology with few suppliers and little experience.

    Tiếng Việt

    Mã hóa biến bản rõ (plain text) dễ đọc thành bản mã (cipher text) khó đọc thông qua một phép toán học phụ thuộc vào một khóa. Chỉ người sở hữu khóa phù hợp mới có thể đảo ngược nó — giải mã — để thu lại bản rõ. Một kẻ tấn công đánh cắp bản mã mà không có khóa chỉ thấy dữ liệu vô nghĩa, vì thử mọi khóa khả dĩ sẽ tốn quá nhiều thời gian. Một phương pháp mới hơn, mã hóa lượng tử, sử dụng vật lý lượng tử để chia sẻ khóa theo cách tiết lộ bất kỳ kẻ nghe lén nào.

    Máy mã Enigma với bàn phím và rotor của nó
    Máy Enigma đã mã hóa tin nhắn trong Thế chiến II — một thiết bị mã cơ khí sớm
    Bản rõ đi qua thuật toán mã hóa với khóa mã hóa để thành bản mã, truyền qua internet, sau đó qua thuật toán giải mã với khóa giải mã quay lại bản rõ
    Mã hóa xáo trộn bản rõ với khóa; giải mã đảo ngược quá trình này

    Mã hóa đối xứng

    Mã hóa đối xứng (mã hóa khóa đối xứng) sử dụng cùng một khóa cho cả việc mã hóa và giải mã, do đó người gửi và người nhận đều phải nắm giữ khóa bí mật. Nó nhanh và phù hợp cho dữ liệu số lượng lớn (toàn bộ ổ đĩa, luồng video). Vấn đề của nó là phân phối khóa: làm thế nào để chia sẻ khóa an toàn ngay từ đầu? Mã hóa bất đối xứng đã giải quyết vấn đề này.

    "Mô tả ý nghĩa của mã hóa khóa đối xứng" (hai điểm). Cùng một khóa được dùng để mã hóa văn bản rõ và giải mã văn bản mã, do đó khóa phải được chia sẻ giữa người gửi và người nhận và được giữ bí mật khỏi mọi người khác. Hai hạn chế. Khóa phải được trao đổi trước khi tin nhắn có thể được gửi đi, và nếu bị đánh cắp trong quá trình truyền tải thì kẻ đánh cắp có thể đọc được mọi tin nhắn; cần một khóa riêng biệt cho mỗi cặp người giao tiếp; và nó không cung cấp bằng chứng về ai đã gửi tin nhắn, vì cả hai đầu đều nắm giữ cùng một khóa. "Nêu hai lý do sử dụng mã hóa khóa:" để dữ liệu không thể đọc được bởi bất kỳ ai đánh cắp nó (tính bảo mật); để người nhận có thể chắc chắn rằng dữ liệu đến từ người gửi được nêu và không bị thay đổi (tính xác thực và tính toàn vẹn). Hai phương pháp là mã hóa khóa đối xứng và mã hóa khóa bất đối xứng.

    Mã hóa đối xứng sử dụng cùng một khóa ở hai đầu, khóa này phải được chia sẻ một cách bí mật
    Mã hóa đối xứng sử dụng cùng một khóa bí mật ở hai đầu

    Mã hóa bất đối xứng (khóa công khai)

    Mã hóa bất đối xứng (mã hóa khóa bất đối xứng) cung cấp cho mỗi người dùng một cặp khóa liên quan: một khóa công khai họ công bố, và một khóa riêng tư họ giữ bí mật. Dữ liệu được mã hóa bằng khóa công khai chỉ có thể được giải mã duy nhất bằng khóa riêng tư tương ứng, và ngược lại.

    Tom và Meera mỗi người có một khóa công khai để chia sẻ và một khóa riêng tư giữ bí mật; Meera gửi Tom khóa công khai của cô ấy
    Mỗi người dùng có một khóa công khai để chia sẻ và một khóa riêng tư để giữ bí mật

    Để gửi tin nhắn bí mật cho Alice: lấy khóa công khai công bố của cô ấy, mã hóa bằng khóa đó, và gửi đi. Chỉ có Alice — người nắm giữ khóa riêng tư tương ứng — mới có thể giải mã. Không cần trao đổi khóa trước. Sự đánh đổi là nó chậm hơn nhiều so với mã hóa đối xứng, nên không được dùng cho dữ liệu lớn.

    "Nêu ý nghĩa của khóa riêng tư." Một khóa chỉ được biết bởi chủ sở hữu (báo cáo), dùng để giải mã dữ liệu đã được mã hóa bằng khóa công khai tương ứng, và để tạo chữ ký số. "Mô tả quy trình mã hóa bất đối xứng" (bốn điểm): (1) người nhận tạo ra một cặp khóa, một khóa công khai và một khóa riêng tư, liên quan về mặt toán học; (2) khóa công khai được đưa ra cho bất kỳ ai muốn gửi tin đến cho họ; (3) người gửi mã hóa văn bản rõ bằng khóa công khai của người nhận; (4) văn bản mã chỉ có thể được giải mã bằng khóa riêng tư của người nhận, người mà khóa này không bao giờ rời khỏi, do đó không ai đánh cắp tin nhắn có thể đọc được nó.

    Ví dụ minh họa. Fred muốn gửi Sheila một tài liệu nhạy cảm. Giải thích cách mã hóa bất đối xứng được sử dụng.

    Sheila có một cặp khóa; cô ấy gửi Fred khóa công khai của mình (hoặc Fred lấy nó từ chứng thư của cô ấy). Fred mã hóa tài liệu bằng khóa công khai của Sheila và gửi văn bản mã đi. Chỉ có khóa riêng tư của Sheila mới có thể giải mã nó, và chỉ có Sheila mới nắm giữ khóa đó, nên không ai khác, kể cả Fred sau khi đã mã hóa, có thể đọc tài liệu. Các khóa được sử dụng theo cách của người nhận: khóa công khai của cô ấy để khóa, khóa riêng tư để mở. Một tổ chức nắm giữ một cặp khóa "để nhận các truyền thông an toàn" sẽ làm đúng điều này: họ công bố khóa công khai, giữ khóa riêng tư, và giải mã những gì nhận được.

    Hai điểm khác biệt giữa mã hóa đối xứng và bất đối xứng. Mã hóa đối xứng sử dụng một khóa cho cả hai chiều; mã hóa bất đối xứng sử dụng hai khóa liên quan, một để mã hóa và một để giải mã. Trong mã hóa đối xứng, khóa phải được giữ bí mật bởi cả hai bên và trao đổi an toàn; trong mã hóa bất đối xứng, khóa công khai có thể được công bố và chỉ có khóa riêng tư là bí mật. Mã hóa đối xứng nhanh hơn nhiều và phù hợp với lượng dữ liệu lớn; mã hóa bất đối xứng chậm hơn, nên được dùng cho khóa và chữ ký thay vì dữ liệu số lượng lớn.

    Khóa riêng tư phải luôn giữ bí mật, nên đôi khi nó được lưu trên một thiết bị phần cứng bảo mật nhỏ. Bạn cắm hoặc chạm vào nó để chứng minh danh tính, và khóa bí mật không bao giờ rời khỏi thiết bị.

    Một thiết bị phần cứng bảo mật màu đen trên nền trắng, có một cảm biến chạm tròn màu vàng ở giữa và đầu nối USB màu vàng ở một đầu
    Thiết bị phần cứng bảo mật lưu khóa bí mật để chứng minh danh tính của bạn

    Phương pháp lai (được sử dụng bởi hầu hết mọi hệ thống thực tế)

    Sử dụng mã hóa bất đối xứng để trao đổi một khóa phiên mới, sau đó sử dụng khóa đối xứng đó cho dữ liệu:

    1. client tạo một khóa phiên ngẫu nhiên.
    2. nó mã hóa khóa phiên bằng khóa công khai của server.
    3. server giải mã nó bằng khóa riêng tư của mình.
    4. cả hai đầu giờ đây cùng nắm giữ khóa phiên và sử dụng mã hóa đối xứng nhanh chóng cho phần còn lại.

    Đây là cách HTTPS và SSH hoạt động.

    Phiên bản bài thi về vấn đề trao đổi khóa. "Một khóa đối xứng sẽ được trao đổi trước khi tin nhắn được gửi. Giải thích làm thế nào khóa có thể được trao đổi an toàn." Người gửi mã hóa khóa đối xứng bằng khóa công khai của người nhận và gửi đi; người nhận giải mã nó bằng khóa riêng tư của họ; cả hai giờ đây nắm giữ khóa đối xứng, vốn chưa từng bị lộ trong quá trình truyền tải, và sử dụng nó cho các tin nhắn. Mã hóa bất đối xứng giải quyết vấn đề phân phối; mã hóa đối xứng sau đó thực hiện công việc nhanh chóng.

    Client mã hóa một khóa phiên bằng khóa công khai của server và gửi đi; chỉ có khóa riêng tư của server mới có thể mở nó; sau đó cả hai đầu sử dụng mã hóa đối xứng nhanh với khóa phiên chung
    Cách tiếp cận lai: mã hóa bất đối xứng chia sẻ một khóa phiên một lần, sau đó mã hóa đối xứng nhanh bảo vệ dữ liệu

    Bấm mã hash (liên quan, không phải mã hóa)

    Hàm hash mã hóa nhận bất kỳ đầu vào nào và tạo ra một bản tóm tắt có kích thước cố định sao cho cùng một đầu vào luôn tạo ra cùng một bản tóm tắt, không khả thi để tìm hai đầu vào khác nhau có cùng bản tóm tắt, và một thay đổi nhỏ ở đầu vào sẽ làm thay đổi hoàn toàn bản tóm tắt. Hashing là một chiều — bạn không thể thu hồi lại đầu vào ban đầu. Nó được dùng để kiểm tra mật khẩu lưu trữ, kiểm tra tính toàn vẹn, và chữ ký số.

    Một hàm hash mã hóa ánh xạ đầu vào hello thành một bản tóm tắt và đầu vào hellp, với một chữ cái bị thay đổi, thành một bản tóm tắt hoàn toàn khác; hashing không thể đảo ngược
    Một hàm hash mã hóa tạo ra một bản tóm tắt cố định; một thay đổi nhỏ ở đầu vào làm thay đổi hoàn toàn nó, và nó không thể đảo ngược

    Mã hóa lượng tử

    Mã hóa lượng tử sử dụng vật lý của ánh sáng để phân phối khóa: các bit của khóa được gửi dưới dạng photon mà trạng thái lượng tử của chúng mã hóa giá trị. "Mô tả mục đích của nó": truyền một khóa mã hóa an toàn, theo cách mà mọi nỗ lực can thiệp để đánh cắp đều có thể bị phát hiện, vì việc đo lường một photon sẽ thay đổi trạng thái của nó; do đó, kẻ nghe lén để lại dấu vết, và khóa bị hỏng bị loại bỏ cũng như một khóa mới được gửi đi. Lợi ích: việc can thiệp luôn có thể phát hiện được; khóa không thể bị sao chép mà không bị thay đổi; nó an toàn trước những tiến bộ trong tương lai về sức mạnh tính toán (khóa toán học cuối cùng có thể bị phá vỡ, nhưng khóa lượng tử thì không thể đọc được mà không gây xáo trộn). Nhược điểm: nó cần thiết bị chuyên dụng, đắt tiền; nó chỉ hoạt động trong khoảng cách giới hạn trên sợi quang riêng (hoặc đường nhìn thẳng), không chạy trên mạng internet hiện tại; nó chỉ phân phối khóa, nên mã hóa thông thường vẫn bảo vệ tin nhắn; và đây là công nghệ mới với ít nhà cung cấp và ít kinh nghiệm.

    Explore · ⁨Khám phá⁩

    Hashing and the avalanche effect · ⁨Băm và hiệu ứng tuyết lở⁩

    A hash is one-way: easy to compute, practically impossible to reverse. A tiny change in the input flips a large, unpredictable part of the output — the avalanche effect that makes hashes good for passwords. · ⁨Một hàm băm là một chiều: dễ tính toán, gần như không thể đảo ngược. Một thay đổi nhỏ trong đầu vào lật ngược một phần lớn, khó dự đoán của đầu ra — hiệu ứng tuyết lở khiến hàm băm tốt cho mật khẩu.⁩

    Explore · ⁨Khám phá⁩

    The Caesar cipher · ⁨Mã Caesar⁩

    Shift each letter to encrypt the message. A simple cipher shows the idea of a key — and why a small key is easy to break. · ⁨Xê dịch mỗi chữ cái để mã hóa tin nhắn. Một mã đơn giản minh họa khái niệm về khóa — và vì sao khóa nhỏ dễ bị phá mã.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    encryption/enˈkrɪpʃn/ mã hóa
    plaintext/ˈpleɪntekst/ văn bản rõ
    ciphertext/ˈsaɪfətekst/ văn bản mã hóa
    decryption/dɪˈkrɪpʃn/ giải mã
    quantum cryptography/ˈkwɒntəm krɪpˈtɒɡrəfi/ mật mã lượng tử
    eavesdropper/ˈiːvzdrɒpə/ kẻ thính lén
    symmetric encryption/sɪˈmetrɪk enˈkrɪpʃn/ mã hóa đối xứng
    key distribution/kiː ˌdɪstrɪˈbjuːʃn/ phân phối khóa
    asymmetric encryption/ˌeɪsɪˈmetrɪk enˈkrɪpʃn/ mã hóa bất đối xứng
    integrity/ɪnˈteɡrɪti/ tính toàn vẹn
    public key/ˈpʌblɪk kiː/ khóa công khai
    private key/ˈpraɪvət kiː/ khóa riêng tư
    17.1

    SSL / TLS

    English

    TLS 传输层安全 (Transport Layer Security, the successor to the Secure Socket Layer, SSL) is a protocol that gives encryption and authentication for data sent over a network. It encrypts the data in transit, authenticates the server with a certificate, and provides integrity (detecting tampering).

    Outline of a TLS handshake:

    1. the client connects and proposes cipher options.
    2. the server picks one and sends its digital certificate (with its public key) — issuing and validating these certificates is digital certification.
    3. the client checks the certificate.
    4. the two ends exchange a fresh session key using asymmetric crypto.
    5. all later traffic uses fast symmetric encryption with the session key.

    The result is an encrypted, authenticated, integrity-checked tunnel for higher-level protocols (HTTP, SMTP). It is appropriate wherever sensitive information is sent: HTTPS web browsing, online banking and payments, secure email, and VPNs.

    "Describe the purpose of SSL/TLS" and "state two functions." The purpose is to provide secure communication between a client and a server over a network. Its functions: it encrypts the data sent, so that it cannot be read if intercepted; it authenticates 认证 the server (and optionally the client) by means of a digital certificate, so the client knows it is talking to the genuine site; and it checks the integrity of the data, so that changes in transit are detected. Two examples of where it is appropriate: online banking and online shopping (card payments); also logins, private email, file transfer, VoIP and instant messaging: any transaction in which private data crosses the internet.

    The two protocols that make up TLS. The handshake 握手 protocol sets up the session: it agrees the encryption algorithms (cipher suite), authenticates the server with its certificate, and exchanges the session key. The record protocol then carries the data: it encrypts each message with the session key, adds an integrity check, and passes it to the transport layer.

    "Explain how SSL/TLS is used when client–server communication is initiated" (six marks). (1) The client (browser) sends a request to the server for a secure connection, saying which encryption methods it supports. (2) The server sends back its digital certificate, which contains its public key. (3) The client checks the certificate is valid (issued by a trusted Certificate Authority, not expired, for the right domain). (4) The client generates a session key, encrypts it with the server's public key and sends it. (5) The server decrypts the session key with its private key. (6) Both sides now hold the session key and all further data is sent using symmetric encryption with it. Give the steps in this order; the marks are for the certificate, the public key, the session key and the switch to symmetric encryption.

    Tiếng Việt

    TLS (Transport Layer Security, người kế nhiệm của Secure Socket Layer, SSL) là một giao thức cung cấp mã hóa và xác thực cho dữ liệu được gửi qua mạng. Nó mã hóa dữ liệu khi đang truyền, xác thực máy chủ bằng chứng chỉ số, và cung cấp tính toàn vẹn (phát hiện can thiệp).

    Phác thảo quá trình bắt tay TLS:

    1. CLIENT kết nối và đề xuất các tùy chọn mã hóa.
    2. SERVER chọn một phương án và gửi chứng chỉ số của mình (kèm khóa công khai) — việc cấp và xác minh các chứng chỉ này là chứng thực số.
    3. CLIENT kiểm tra chứng chỉ.
    4. Hai đầu trao đổi một khóa phiên mới sử dụng mã hóa bất đối xứng.
    5. Tất cả lưu lượng truy cập sau đó sử dụng mã hóa đối xứng nhanh với khóa phiên.

    Kết quả là một đường hầm được mã hóa, đã xác thực và kiểm tra tính toàn vẹn cho các giao thức cấp cao hơn (HTTP, SMTP). Nó phù hợp ở mọi nơi dữ liệu nhạy cảm được gửi đi: duyệt web HTTPS, ngân hàng trực tuyến và thanh toán, email an toàn, và VPN.

    "Mô tả mục đích của SSL/TLS" và "nêu hai chức năng." Mục đích là cung cấp giao tiếp an toàn giữa CLIENT và SERVER qua mạng. Các chức năng của nó: nó mã hóa dữ liệu được gửi đi, khiến nó không thể đọc được nếu bị chặn; nó xác thực SERVER (và tùy chọn là CLIENT) thông qua chứng chỉ số, giúp CLIENT biết rằng mình đang giao tiếp với trang web chính hãng; và nó kiểm tra tính toàn vẹn của dữ liệu, giúp phát hiện các thay đổi trong quá trình truyền tải. Hai ví dụ về nơi áp dụng phù hợp: ngân hàng trực tuyến và mua sắm trực tuyến (thanh toán thẻ); cũng như đăng nhập, email riêng tư, chuyển tập tin, VoIP và nhắn tin tức thời: bất kỳ giao dịch nào trong đó dữ liệu riêng tư vượt qua internet.

    Hai giao thức cấu thành nên TLS. Giao thức bắt tay thiết lập phiên: nó thống nhất các thuật toán mã hóa (bộ mã hóa), xác thực SERVER bằng chứng chỉ số của nó, và trao đổi khóa phiên. Sau đó, giao thức bản ghi vận chuyển dữ liệu: nó mã hóa từng tin nhắn với khóa phiên, thêm kiểm tra tính toàn vẹn, và truyền xuống lớp vận chuyển.

    Sơ đồ tuần tự giữa CLIENT và SERVER: CLIENT yêu cầu kết nối an toàn, SERVER phản hồi bằng chứng chỉ số số và khóa công khai, CLIENT kiểm tra chứng chỉ, tạo khóa phiên và gửi nó đã mã hóa bằng khóa công khai của SERVER, SERVER giải mã nó bằng khóa riêng tư, và cả hai bên sau đó giao tiếp bằng mã hóa đối xứng
    Cách một phiên an toàn bắt đầu: chứng chỉ chứng minh ai là SERVER, khóa công khai của SERVER bảo vệ khóa phiên trên đường truyền, và khóa phiên bảo vệ tất cả những gì xảy ra sau đó

    "Giải thích cách SSL/TLS được sử dụng khi giao tiếp CLIENT–SERVER được khởi tạo" (sáu điểm). (1) CLIENT (trình duyệt) gửi yêu cầu đến SERVER để thiết lập kết nối an toàn, nêu rõ các phương pháp mã hóa mà nó hỗ trợ. (2) SERVER gửi lại chứng chỉ số của mình, chứa khóa công khai. (3) CLIENT kiểm tra chứng chỉ xem có hợp lệ không (do cơ quan Chứng thực Cert Authority cấp, chưa hết hạn, dành cho tên miền đúng). (4) CLIENT tạo ra một khóa phiên, mã hóa nó bằng khóa công khai của SERVER và gửi đi. (5) SERVER giải mã khóa phiên bằng khóa riêng tư của mình. (6) Cả hai bên giờ đây đều có khóa phiên và tất cả dữ liệu tiếp theo được gửi bằng mã hóa đối xứng với khóa đó. Đưa ra các bước theo thứ tự này; các điểm được chấm cho chứng chỉ, khóa công khai, khóa phiên và sự chuyển đổi sang mã hóa đối xứng.

    Explore · ⁨Khám phá⁩

    The TLS handshake · ⁨Quy trình bắt tay TLS⁩

    Step through what happens before a padlock appears. The slow public-key crypto is used only to agree a shared key; the actual page then travels under fast symmetric encryption. · ⁨Xem xét những gì xảy ra trước khi biểu tượng ổ khóa xuất hiện. Mã hóa khóa công khai chậm chỉ được sử dụng để thống nhất khóa chung; trang web thực tế sau đó truyền tải dưới sự bảo vệ của mã hóa đối xứng nhanh.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    TLS/ˌtiː el ˈes/ TLS
    authentication/ɔːˌθentɪˈkeɪʃn/ xác thực
    authenticates/ɔːˈθentɪkeɪts/ xác thực
    handshake/ˈhændʃeɪk/ vấn tay
    17.1

    Digital certificates · ⁨Chứng chỉ số⁩

    English

    A digital certificate 数字证书 binds an identity (a domain, an organisation) to a public key, and is signed by a trusted Certificate Authority 证书颁发机构 (CA). It contains the subject (who it identifies), the subject's public key, the issuer (the CA), a validity period, and the CA's signature over all of it.

    To verify one, the client (which holds a list of trusted root CAs):

    1. checks the expiry dates.
    2. checks the subject name matches the URL.
    3. checks it is signed by a trusted CA, using the CA's public key to verify the signature.
    4. follows the certificate chain up to a trusted root.

    If anything fails, the browser shows the "Your connection is not private" warning. When it verifies cleanly, the client knows the identity was vetted by a trusted CA, the public key really belongs to that identity, and the certificate is current.

    "Describe what is meant by a digital certificate" (two marks). An electronic document, issued by a Certificate Authority, that verifies the identity of its owner (a person, organisation or website) and contains the owner's public key. Items found in one: the serial number; the name of the owner (subject) and, for a website, its domain; the owner's public key; the name of the issuing CA; the validity period (dates); the signature algorithm used; and the CA's digital signature of the whole certificate.

    "Explain how an organisation acquires a digital certificate" (four marks). (1) The organisation generates its own key pair, a public key and a private key. (2) It sends a request containing its public key and its identity details to a Certificate Authority. (3) The CA verifies the identity (checks that the applicant really is the organisation or owns the domain). (4) The CA creates the certificate containing the public key and the identity, signs it with the CA's own private key, and returns it. (5) The organisation installs the certificate on its server so that it can be sent to clients. The private key never leaves the organisation.

    "Explain why a digital certificate is required to validate a digital signature." To check a signature the receiver needs the sender's public key, and needs to be sure that the key really belongs to the claimed sender; the certificate supplies the public key together with the identity, and because the certificate is signed by a trusted CA the receiver can trust that binding. Without it an impostor could publish a public key in someone else's name and sign messages as them. The same reasoning answers "what should be included with a program downloaded from the internet to prove it is genuine": a digital signature, checked against the publisher's certificate.

    Tiếng Việt

    Một chứng chỉ số liên kết danh tính (một tên miền, một tổ chức) với khóa công khai, và được ký bởi một Cơ quan Chứng thực (CA) đáng tin cậy. Nó chứa chủ thể (người/đơn vị được xác định), khóa công khai của chủ thể, người cấp (CA), khoảng thời gian hiệu lực, và chữ ký của CA trên toàn bộ nội dung.

    Một người dùng gửi yêu cầu kèm theo danh tính và khóa công khai của họ đến một Cơ quan Chứng thực (CA), nơi xác minh danh tính và cấp chứng nhận kỹ thuật số có chữ ký chứa khóa công khai, thông tin CA, ID người dùng, chữ ký kỹ thuật số và các thông tin khác
    Một Cơ quan Chứng thực cấp chứng nhận kỹ thuật số liên kết danh tính với khóa công khai

    Để xác minh, khách hàng (người giữ danh sách các CA gốc được tin cậy):

    1. kiểm tra ngày hết hạn.
    2. kiểm tra tên chủ thể khớp với URL.
    3. kiểm tra chứng nhận có được chữ ký bởi một CA được tin cậy hay không, sử dụng khóa công khai của CA để xác minh chữ ký.
    4. truy vết chuỗi chứng nhận lên đến một CA gốc được tin cậy.

    Nếu bất kỳ bước nào thất bại, trình duyệt sẽ hiển thị cảnh báo "Kết nối của bạn không phải là riêng tư". Khi xác minh thành công, khách hàng biết rằng danh tính đã được thẩm định bởi một CA được tin cậy, khóa công khai thực sự thuộc về danh tính đó, và chứng nhận vẫn còn hiệu lực.

    "Mô tả ý nghĩa của chứng nhận kỹ thuật số" (hai điểm). Một tài liệu điện tử do Cơ quan Chứng thực cấp, xác minh danh tính của chủ sở hữu (một cá nhân, tổ chức hoặc trang web) và chứa khóa công khai của chủ sở hữu. Các mục tìm thấy trong đó: số seri; tên chủ sở hữu (chủ thể) và, đối với trang web, tên miền; khóa công khai của chủ sở hữu; tên của CA cấp; thời hạn hiệu lực (ngày tháng); thuật toán chữ ký được sử dụng; và chữ ký kỹ thuật số của CA trên toàn bộ chứng nhận.

    "Giải thích cách một tổ chức thu được chứng nhận kỹ thuật số" (bốn điểm). (1) Tổ chức tạo ra cặp khóa của riêng mình, bao gồm một khóa công khai và một khóa riêng tư. (2) Họ gửi một yêu cầu chứa khóa công khai và chi tiết danh tính của họ đến một Cơ quan Chứng thực. (3) CA xác minh danh tính (kiểm tra xem người申请 thực sự là tổ chức hoặc sở hữu tên miền đó). (4) CA tạo chứng nhận chứa khóa công khai và danh tính, ký bằng khóa riêng tư của chính CA, và trả lại cho họ. (5) Tổ chức cài đặt chứng nhận vào máy chủ của mình để có thể gửi đến khách hàng. Khóa riêng tư không bao giờ rời khỏi tổ chức.

    "Giải thích tại sao cần chứng nhận kỹ thuật số để xác thực chữ ký kỹ thuật số." Để kiểm tra chữ ký, người nhận cần khóa công khai của người gửi, và phải chắc chắn rằng khóa đó thực sự thuộc về người gửi được nêu; chứng nhận cung cấp khóa công khai cùng với danh tính, và vì chứng nhận được ký bởi một CA được tin cậy, người nhận có thể tin tưởng vào mối liên kết này. Nếu không, kẻ giả mạo có thể công bố khóa công khai dưới danh ai đó và ký các tin nhắn thay mặt họ. Lập luận tương tự trả lời câu hỏi "nên bao gồm gì trong một chương trình tải từ internet để chứng minh tính hợp lệ": một chữ ký kỹ thuật số, được kiểm tra đối chiếu với chứng nhận của nhà phát hành.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    digital certificate/ˈdɪdʒɪtl səˈtɪfɪkət/ chứng chỉ số
    Certificate Authority/səˈtɪfɪkət əˈθɒrɪti/ Cấp chứng thực
    man-in-the-middle/mæn ɪnðə ˈmɪdl/ người đứng giữa
    17.1

    Digital signatures · ⁨Chữ ký số⁩

    English

    A digital signature 数字签名 proves who signed a message and that it was not changed. To sign:

    1. compute a cryptographic hash of the message.
    2. encrypt the hash with the sender's private key — that is the signature.
    3. send the message and the signature.

    To verify: compute the hash of the received message; decrypt the signature with the sender's public key to get the sender's hash; compare. If they match, the message was signed by the holder of the private key (authentication 身份验证) and was not changed (integrity). A signature does not hide the message — for confidentiality as well, encrypt and sign.

    "Explain the role of a digital certificate in creating a digital signature" (three marks). The sender's certificate was issued by a CA and contains the sender's public key together with the sender's identity; the sender produces the signature by hashing the message and encrypting the hash with their private key, the partner of the key in the certificate; the receiver uses the public key from the certificate to decrypt the hash and, because the certificate binds that key to the sender, the signature proves who signed.

    "Explain how a digital signature is used to verify a message" (four marks). (1) The receiver decrypts the signature with the sender's public key (taken from the sender's certificate), which yields the hash that the sender computed. (2) The receiver hashes the received message with the same hash algorithm. (3) The two hashes are compared. (4) If they match, the message came from the holder of the private key (authentic) and has not been altered since it was signed (integrity); if they differ, the message is rejected. A banker receiving confidential data with a signature does exactly this before trusting it; the data itself may separately be encrypted with the banker's public key for confidentiality.

    Putting it together

    A secure request to https://www.bank.com: the server sends its certificate; the client verifies it against trusted CAs; the client uses the server's public key to exchange a session key; then data flows encrypted with that key. Encryption stops eavesdroppers, the certificate proves the server's identity, and integrity checks stop a man-in-the-middle 中间人攻击 altering the data.

    Worked example. Alice sends Bob a contract. She wants Bob to be certain it came from her and was not altered, and she wants nobody else to be able to read it. Which keys does she use, and in which direction? These are two different jobs needing two different key pairs. For the signature (authentication and integrity): Alice hashes the contract and encrypts that hash with her own private key; Bob decrypts it with Alice's public key and compares it against his own hash of the message. Only Alice holds her private key, so only she could have produced it. For confidentiality: Alice encrypts the contract itself with Bob's public key, so only Bob's private key can open it. One rule keeps all four straight: you sign with your own private key and encrypt with the recipient's public key. A signature on its own does not hide the message.

    Tiếng Việt

    Một chữ ký kỹ thuật số chứng minh ai đã ký tin nhắn và rằng nó không bị thay đổi. Để ký:

    1. tính toán hàm băm mật mã của tin nhắn.
    2. mã hóa giá trị băm bằng khóa riêng tư của người gửi — đó chính là chữ ký.
    3. gửi tin nhắn và chữ ký.

    Để xác minh: tính hàm băm của tin nhắn nhận được; giải mã chữ ký bằng khóa công khai của người gửi để lấy giá trị băm của người gửi; so sánh. Nếu chúng khớp, tin nhắn đã được ký bởi người giữ khóa riêng tư (xác thực) và không bị thay đổi (toàn vẹn). Chữ ký không ẩn tin nhắn — để bảo mật, hãy mã hóa và ký đồng thời.

    Người gửi băm tin nhắn thành giá trị digest và mã hóa nó bằng khóa riêng tư của mình để tạo chữ ký; người nhận tính lại hash của tin nhắn và giải mã chữ ký bằng khóa công khai của người gửi, sau đó so sánh hai giá trị digest
    Ký hash tin nhắn và mã hóa digest bằng khóa riêng tư; người nhận kiểm tra bằng khóa công khai

    "Giải thích vai trò của chứng nhận kỹ thuật số trong việc tạo chữ ký kỹ thuật số" (ba điểm). Chứng nhận của người gửi do CA cấp và chứa khóa công khai của người gửi cùng với danh tính của họ; người gửi tạo chữ ký bằng cách hash tin nhắn và mã hóa giá trị hash bằng khóa riêng tư của họ, là cặp khóa tương ứng với khóa trong chứng nhận; người nhận sử dụng khóa công khai từ chứng nhận để giải mã giá trị hash, và vì chứng nhận liên kết khóa đó với người gửi, chữ ký chứng minh ai đã ký.

    "Giải thích cách chữ ký kỹ thuật số được sử dụng để xác thực tin nhắn" (bốn điểm). (1) Người nhận giải mã chữ ký bằng khóa công khai của người gửi (lấy từ chứng nhận của người gửi), điều này mang lại giá trị hash mà người gửi đã tính toán. (2) Người nhận hash tin nhắn nhận được bằng cùng thuật toán hash. (3) Hai giá trị hash được so sánh. (4) Nếu chúng trùng khớp, tin nhắn đến từ người giữ khóa riêng tư (hợp lệ) và không bị thay đổi kể từ khi được ký (toàn vẹn); nếu khác nhau, tin nhắn sẽ bị bác bỏ. Một ngân hàng nhận dữ liệu nhạy cảm có chữ ký sẽ làm đúng quy trình này trước khi tin tưởng; bản thân dữ liệu có thể được mã hóa riêng biệt bằng khóa công khai của ngân hàng để đảm bảo tính bí mật.

    Tổng hợp

    Một yêu cầu an toàn đến https://www.bank.com: máy chủ gửi chứng nhận của nó; khách hàng xác minh đối chiếu với các CA được tin cậy; khách hàng sử dụng khóa công khai của máy chủ để trao đổi khóa phiên; sau đó dữ liệu truyền qua được mã hóa bằng khóa đó. Mã hóa ngăn chặn việc nghe lén, chứng nhận xác minh danh tính máy chủ, và kiểm tra toàn vẹn ngăn chặn một kẻ nghe lén ở giữa thay đổi dữ liệu.

    Ví dụ minh họa. Alice gửi cho Bob một hợp đồng. Cô muốn Bob chắc chắn rằng hợp đồng đến từ cô và không bị thay đổi, và cô cũng muốn không ai khác có thể đọc được nội dung đó. Alice sẽ sử dụng những khóa nào và theo hướng nào? Đây là hai công việc riêng biệt cần hai cặp khóa riêng biệt. Đối với chữ ký số (xác thực và toàn vẹn): Alice tạo mã hash của hợp đồng và mã hóa mã hash đó bằng khóa riêng tư của chính cô; Bob giải mã nó bằng khóa công khai của Alice và so sánh với mã hash mà chính Bob tự tạo ra từ tin nhắn. Chỉ có Alice nắm giữ khóa riêng tư của mình, nên chỉ có cô mới có thể tạo ra nó. Đối với tính bảo mật: Alice mã hóa trực tiếp hợp đồng bằng khóa công khai của Bob, do đó chỉ có khóa riêng tư của Bob mới mở được nó. Một quy tắc giúp phân biệt rõ ràng cả bốn yếu tố: bạn ký bằng khóa riêng tư của bản thân và mã hóa bằng khóa công khai của người nhận. Chữ ký số đơn thuần thì không che giấu nội dung tin nhắn.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    digital signature/ˈdɪdʒɪtl ˈsɪɡnɪtʃə/ chữ ký số
    hardware security key/ˈhɑːdweə sɪˈkjʊərɪti kiː/ khóa bảo mật phần cứng
    session key/ˈseʃn kiː/ khóa phiên
    cryptographic hash/ˌkrɪptəˈɡræfɪk hæʃ/ hàm băm mật mã
    digest/ˈdaɪdʒest/ đoạn digest
    17.1

    Definitions the examiner accepts · ⁨Các định nghĩa mà giám khảo chấp nhận⁩

    English

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    encryption converting plaintext into ciphertext using an algorithm and a key so that it cannot be understood if intercepted
    plaintext / ciphertext the original readable data / the encrypted, unreadable form of it
    symmetric key cryptography the same secret key is used to encrypt and to decrypt, so it must be shared securely by both parties
    asymmetric key cryptography a pair of related keys is used: the public key encrypts and only the matching private key decrypts
    public key a key made available to anyone, used to encrypt messages to its owner and to verify the owner's signatures
    private key a key known only to its owner, used to decrypt messages encrypted with the public key and to sign
    SSL/TLS protocols that provide secure (encrypted, authenticated, integrity-checked) communication between a client and a server
    digital certificate an electronic document issued by a Certificate Authority that verifies the owner's identity and contains their public key
    digital signature a hash of a message encrypted with the sender's private key, proving who sent it and that it is unaltered
    Certificate Authority a trusted organisation that verifies identities and issues and signs digital certificates
    quantum cryptography the use of quantum states of photons to distribute keys so that any interception is detected
    Tiếng Việt

    Câu hỏi định nghĩa được chấm dựa trên văn phong cố định. Hãy học thuộc những định nghĩa này và chỉ đưa ra một đáp án duy nhất.

    Thuật ngữ Định nghĩa
    mã hóa chuyển đổi văn bản gốc thành văn bản mã hóa thông qua thuật toán và khóa để đảm bảo không thể hiểu được nếu bị chặn截
    văn bản gốc / văn bản mã hóa dữ liệu có thể đọc được ban đầu / dạng đã mã hóa, không thể đọc được của nó
    mật mã khóa đối xứng cùng một khóa bí mật được sử dụng để mã hóa và giải mã, do đó phải được chia sẻ an toàn bởi cả hai bên
    mật mã khóa bất đối xứng sử dụng một cặp khóa liên quan: khóa công khai dùng để mã hóa và chỉ có khóa riêng tư tương ứng mới giải mã được
    khóa công khai khóa được cung cấp cho mọi người, dùng để mã hóa tin nhắn gửi chủ sở hữu và xác minh chữ ký số của chủ sở hữu
    khóa riêng tư khóa chỉ được biết bởi chủ sở hữu, dùng để giải mã tin nhắn đã mã hóa bằng khóa công khai và dùng để ký
    SSL/TLS các giao thức cung cấp kết nối an toàn (đã mã hóa, xác thực, kiểm tra toàn vẹn) giữa máy khách và máy chủ
    chứng chỉ số tài liệu điện tử do Cơ quan Chứng thực phát hành nhằm xác minh danh tính chủ sở hữu và chứa khóa công khai của họ
    chữ ký số mã hash của tin nhắn được mã hóa bằng khóa riêng tư của người gửi, chứng minh ai là người gửi và tin nhắn chưa bị thay đổi
    Cơ quan Chứng thực tổ chức đáng tin cậy xác minh danh tính và phát hành, ký vào các chứng chỉ số
    mật mã lượng tử sử dụng trạng thái lượng tử của photon để phân phối khóa sao cho mọi sự chặn截 đều bị phát hiện
    17.1

    Exam tips · ⁨Mẹo làm bài thi⁩

    English
    • Symmetric: one shared secret key, fast, key exchange is the weakness. Asymmetric: public key to encrypt, private key to decrypt, slow, no exchange problem. Two differences, two drawbacks, two reasons: the exam asks for them in pairs.
    • Confidentiality uses the receiver's keys (public to lock, private to unlock); a signature uses the sender's keys (private to sign, public to check). Say whose key every time.
    • The TLS start-up is six steps: request, certificate with public key, check, session key encrypted with the public key, decrypted with the private key, symmetric encryption from then on.
    • A certificate is identity plus public key, signed by a CA; acquisition is key pair, request, verification, signing, installation. It is needed to validate a signature because it proves whose public key it is.
    • A signature is a hash encrypted with the private key; verification is decrypt, re-hash, compare. Integrity and authenticity are the two things it proves.
    • Quantum cryptography distributes keys and detects eavesdropping; its limits are cost, distance and novelty.

    Common mistakes

    • Saying a message is encrypted with the sender's public key; the receiver's public key encrypts, the receiver's private key decrypts.
    • Describing a signature as "encrypting the message with the private key" instead of encrypting its hash.
    • Claiming a certificate contains the private key; it holds the public key and the identity, signed by the CA.
    • Listing "the server sends its private key" in the TLS handshake; only the public key travels, inside the certificate.
    • Giving "SSL/TLS makes the connection faster" as a function; its functions are encryption, authentication and integrity.
    • Confusing hashing with encryption: a hash cannot be reversed and has no key; encryption is reversible with the key.
    • Answering "why is a certificate needed for a signature" with "to encrypt it"; it is needed to trust the public key.
    Tiếng Việt
    • Đối xứng: một khóa bí mật chung, tốc độ nhanh, nhưng trao đổi khóa là điểm yếu. Bất đối xứng: khóa công khai để mã hóa, khóa riêng tư để giải mã, tốc độ chậm, không gặp vấn đề trao đổi. Hai điểm khác biệt, hai nhược điểm, hai lý do: đề thi yêu cầu trả lời chúng theo từng cặp.
    • Tính bảo mật sử dụng khóa của người nhận (công khai để khóa, riêng tư để mở); chữ ký số sử dụng khóa của người gửi (riêng tư để ký, công khai để kiểm tra). Luôn nói rõ là khóa của ai mỗi khi.
    • Khởi động TLS gồm sáu bước: yêu cầu, chứng chỉ kèm khóa công khai, kiểm tra, khóa phiên bản được mã hóa bằng khóa công khai, giải mã bằng khóa riêng tư, sau đó chuyển sang mã hóa đối xứng.
    • Chứng chỉ bao gồm danh tính plus khóa công khai, được ký bởi CA; quy trình thu nhận là tạo cặp khóa, yêu cầu, xác minh, ký, cài đặt. Chứng chỉ cần thiết để xác thực chữ ký số vì nó chứng minh khóa công khai đó thuộc về ai.
    • Chữ ký số là mã hash được mã hóa bằng khóa riêng tư; quá trình xác minh bao gồm: giải mã, tạo lại mã hash, so sánh. Toàn vẹn và xác thực là hai điều nó chứng minh.
    • Mật mã lượng tử phân phối khóa và phát hiện việc nghe lén; hạn chế của nó là chi phí, khoảng cách và tính mới lạ.

    Lỗi thường gặp

    • Nói rằng tin nhắn được mã hóa bằng khóa công khai của người gửi; thực tế là khóa công khai của người nhận mới dùng để mã hóa, khóa riêng tư của người nhận dùng để giải mã.
    • Mô tả chữ ký số là "mã hóa tin nhắn bằng khóa riêng tư" thay vì mã hóa mã hash của nó.
    • Khẳng định chứng chỉ chứa khóa riêng tư; thực tế chứng chỉ chứa khóa công khai và danh tính, được ký bởi CA.
    • Liệt kê "máy chủ gửi khóa riêng tư của nó" trong quá trình bắt tay TLS; thực tế chỉ có khóa công khai di chuyển, nằm bên trong chứng chỉ.
    • Đưa ra "SSL/TLS làm tăng tốc độ kết nối" như một chức năng; các chức năng thực tế của nó là mã hóa, xác thực và toàn vẹn.
    • Nhầm lẫn giữa hàm băm (hashing) và mã hóa: hàm băm không thể đảo ngược và không có khóa; mã hóa thì có thể đảo ngược nếu có khóa.
    • Trả lời câu hỏi "tại sao cần chứng chỉ cho chữ ký số" bằng "để mã hóa nó"; thực tế chứng chỉ cần thiết để tin tưởng vào khóa công khai.
  • 18

    Artificial Intelligence (AI) · ⁨Trí tuệ nhân tạo (AI)⁩

    Watch lesson · ⁨Xem bài học⁩
    18.1

    What AI is

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of how graphs can be used to aid Artificial Intelligence (AI) Purpose and structure of a graph Use A algorithm* and Dijkstra’s algorithm to perform searches on a graph Candidates will not be required to write algorithms to set up, access, or perform searches on graphs
    Show understanding of how artificial neural networks have helped with machine learning
    Show understanding of Deep Learning, Machine Learning and Reinforcement Learning and the reasons for using these methods. Understand machine learning categories, including supervised learning, unsupervised learning
    Show understanding of back propagation of errors and regression methods in machine learning
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về cách đồ thị có thể được sử dụng để hỗ trợ Trí tuệ Nhân tạo (AI) Mục đích và cấu trúc của đồ thị Sử dụng thuật toán A* và thuật toán Dijkstra để thực hiện tìm kiếm trên đồ thị Học sinh sẽ không yêu cầu viết thuật toán để thiết lập, truy cập hoặc thực hiện tìm kiếm trên đồ thị
    Thể hiện sự hiểu biết về cách mạng nơ-ron nhân tạo đã giúp đỡ học máy (machine learning)
    Thể hiện sự hiểu biết về Deep Learning, Machine Learning và Reinforcement Learning cũng như lý do sử dụng các phương pháp này. Hiểu được các phân loại của machine learning, bao gồm supervised learning và unsupervised learning.
    Thể hiện sự hiểu biết về back propagation of errors và các regression methods trong machine learning.

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Artificial intelligence 人工智能 (AI) builds systems that do tasks normally needing human intelligence — recognising speech and images, translating, playing games, driving, generating text. Most modern AI uses machine learning 机器学习 — algorithms that learn patterns from data instead of being programmed step by step. Within it, deep learning 深度学习, using neural networks 神经网络 with many layers, has been dominant since the 2010s.

    A humanoid robot 人形机器人 puts many of these abilities into one body: it uses AI to see faces, understand speech and move its face and arms in a lifelike way.

    A grey humanoid robot with a lifelike face looking upward, its mechanical neck, chest and arms exposed, on a white background
    A humanoid robot uses AI to see, listen and respond like a person
    Three nested rounded boxes: Artificial Intelligence contains Machine Learning, which contains Deep Learning, each with a short note
    Deep learning is part of machine learning, which is part of AI
    Explore · ⁨Khám phá⁩

    AI learning type lab · ⁨Phòng thí nghiệm loại học AI⁩

    Classify AI examples by the type of learning or concern involved. · ⁨Phân loại các ví dụ về AI dựa trên loại hình học hoặc vấn đề liên quan.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    artificial intelligence/ˌɑːtɪˈfɪʃl ɪnˈtelɪdʒəns/ trí tuệ nhân tạo
    machine learning/məˈʃiːn ˈlɜːnɪŋ/ học máy
    deep learning/diːp ˈlɜːnɪŋ/ học sâu
    neural networks/ˈnjuːrəl ˈnetwɜːks/ mạng nơ-ron
    humanoid robot/ˈhjuːmənɔɪd ˈrəʊbɒt/ robot hình người
    18.1

    Graphs in AI

    Many AI problems sit on a graph 图 — nodes 节点 (states, places) joined by edges 边 (moves, relationships).

    • pathfinding: roads form a graph; the shortest route is a graph search (Dijkstra's algorithm, the A* algorithm).
    • game playing: each board position is a node, each move an edge; minimax 极小化极大 with alpha-beta pruning searches the game tree.
    • state-space search: a planning problem is moving between states by applying operators to reach a goal.
    • knowledge representation: a semantic network 语义网络 has concepts as nodes and relationships as edges ("dog IS-A animal"); a knowledge graph 知识图谱 stores facts about the world for search engines and assistants.
    A weighted graph of nodes A to G; the shortest path from A to G via B and E is highlighted in orange
    AI problems often sit on a graph; here the shortest path is highlighted

    Standard tools for navigating graphs include breadth-first search 广度优先搜索 and depth-first search 深度优先搜索.

    "Describe the purpose and structure of a graph in an AI system." Purpose: to represent a problem as a set of states (or places) and the possible moves between them, so that an algorithm can search it for a solution, such as the shortest or cheapest route, or the best next move. Structure: a set of nodes (vertices), each representing a state, location or item, joined by edges representing the connections between them; each edge may carry a weight (a cost, distance or time), and edges may be directed (one-way) or undirected. "Explain the use of graphs to aid AI": the graph is the model on which the AI's search algorithms run: A* and Dijkstra's algorithm find optimal paths through it (navigation, routing), game positions form a tree searched for the best move, and knowledge stored as a graph lets a system reason about how facts are related.

    A weighted graph of six nodes from H to G with distances on the edges and a heuristic estimate to the goal written in red at each node, used for the Dijkstra and A-star worked examples The graph used below: the edge numbers are real distances; the red numbers are each node's heuristic 启发式 estimate of how far the goal still is, which only A uses*

    Dijkstra's algorithm. It finds the shortest distance from the start to every node. Keep a table of the best distance found so far to each node (start 0, all others infinity). Repeatedly take the unvisited node with the smallest distance, mark it visited, and for each neighbour check whether going through this node gives a shorter distance; if so, update it and record where it came from. Stop when every node is visited (or the target is).

    Worked example. Find the shortest distances from H to every other node in the graph above.

    step visit H A B C D G
    start 0 ∞ ∞ ∞ ∞ ∞
    1 H (0) 0 4 (H) 3 (H) ∞ ∞ ∞
    2 B (3) 0 4 (H) 3 ∞ 9 (B) ∞
    3 A (4) 0 4 3 9 (A) 8 (A) ∞
    4 D (8) 0 4 3 9 (A) 8 10 (D)
    5 C (9) 0 4 3 9 8 10 (D)
    6 G (10)

    Shortest distances: A 4, B 3, D 8, C 9, G 10, and the path to G is H–A–D–G (read the "came from" labels backwards). At step 3, A offers D a distance of $4 + 4 = 8$, better than the 9 found through B, so D is updated; at step 5, C could reach G at $9 + 3 = 12$, worse than 10, so nothing changes. Showing these comparisons is the "working" the question asks for.

    The A* algorithm. Dijkstra explores in every direction. A* adds a heuristic $h$, an estimate of the distance still to go, and always expands the node with the smallest $f = g + h$, where $g$ is the distance travelled so far. With a sensible heuristic (never over-estimating), it finds the same shortest path while looking at far fewer nodes, which is why satnavs and games use it. The exam gives $h$ for each node and a table to fill in.

    Worked example. Find a path from H to G with A*, showing the working.

    node expanded $g$ so far $h$ $f = g + h$ neighbours added (node: $g$, $h$, $f$)
    H 0 7 7 A: 4, 5, 9; B: 3, 6, 9
    B (tie with A; either) 3 6 9 D via B: 9, 2, 11
    A 4 5 9 C: 9, 3, 12; D via A: 8, 2, 10 (better than 11, keep)
    D 8 2 10 G: 10, 0, 10; C via D: 9 (no better)
    G 10 0 10 goal reached

    Path H–A–D–G, length 10, the same as Dijkstra's, but C was never expanded. Each time a node is reached by a second route, keep the smaller $g$; the search ends when the goal is the node with the smallest $f$. State the $g$, $h$ and $f$ values in every row: those are the marks.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    graph/ɡræf/ đồ thị
    nodes/nəʊdz/ nút
    edges/ˈedʒɪz/ cạnh
    minimax/ˈmɪnɪmæks/ minimax
    semantic network/səˈmæntɪk ˈnetwɜːk/ mạng ngữ nghĩa
    knowledge graph/ˈnɒlɪdʒ ɡræf/ biểu đồ tri thức
    breadth-first search/bredθ fɜːst sɜːtʃ/ tìm kiếm theo độ sâu
    depth-first search/depθ fɜːst sɜːtʃ/ tìm kiếm theo chiều rộng
    heuristic/hjuːˈrɪstɪk/ phương tiện heuristic
    18.1

    Artificial neural networks (ANNs)

    An ANN is inspired by the brain's neurons. An artificial neuron 人工神经元:

    • takes several input values, multiplies each by a weight 权重, and adds them up with a bias term 偏置项.
    • applies an activation function 激活函数 (a non-linear function such as ReLU) to the sum.
    • outputs the result, which feeds neurons further on.
    A single artificial neuron: three inputs each multiplied by a weight, summed with a bias, passed through an activation function, giving one output value
    A single neuron: each input times its weight, summed with a bias, then an activation function

    Neurons sit in layers: an input layer, one or more hidden layers 隐藏层 (where useful internal patterns are learned), and an output layer. With many hidden layers it is a deep neural network 深度神经网络, and training it is deep learning.

    Circles in four columns: an input layer of three nodes, two hidden layers of five nodes each, and one output node, all connected
    A neural network with an input layer, two hidden layers and an output layer

    ANNs let models learn complex patterns straight from raw data (pixels, audio, text) without hand-designed features — driving breakthroughs in image recognition 图像识别, speech recognition 语音识别, machine translation 机器翻译, and game playing. They do well with large amounts of data, noisy or very complex input, and patterns too hard to capture with explicit rules.

    "Explain what is meant by an artificial neural network." A model of the brain's network of neurons, made of layers of connected nodes: an input layer, one or more hidden layers and an output layer. Each connection has a weight; each node sums its weighted inputs and passes the result through an activation function to the next layer. "Explain how ANNs enable machine learning" (three marks): the network is trained on many examples; for each example the output is compared with the expected result and the error is used to adjust the weights (back propagation) so that the error falls; after enough examples the weights encode the patterns in the data, and the network can then classify or predict for new data it has never seen. "State the reason for multiple hidden layers": each additional layer combines the features found by the layer before it into more complex, more abstract features, so the network can learn more complex relationships (edges, then shapes, then objects); that is what makes a network deep.

    Explore · ⁨Khám phá⁩

    Tap the parts of a neural network · ⁨Nhấn vào các thành phần của mạng nơ-ron⁩

    Explore the layers. Data flows left to right: the input layer takes the features, the hidden layers learn patterns, and the output layer gives the answer — with every connection carrying a weight that training adjusts. · ⁨Khám phá các lớp. Dữ liệu chảy từ trái sang phải: lớp đầu vào nhận đặc trưng, các lớp ẩn học các mẫu, và lớp đầu ra đưa ra câu trả lời — với mỗi kết nối đều mang theo trọng số mà quá trình huấn luyện điều chỉnh.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    weight/weɪt/ trọng lực
    artificial neuron/ˌɑːtɪˈfɪʃl ˈnjuːrɒn/ nơ-ron nhân tạo
    bias term/ˈbaɪəs tɜːm/ hệ số lệch
    activation function/ˌæktɪˈveɪʃn ˈfʌŋkʃn/ hàm kích hoạt
    hidden layers/ˈhɪdn ˈleɪəz/ lớp ẩn
    deep neural network/diːp ˈnjuːrəl ˈnetwɜːk/ mạng nơ-ron sâu
    image recognition/ˈɪmɪdʒ ˌrekəɡˈnɪʃn/ nhận dạng hình ảnh
    speech recognition/spiːtʃ ˌrekəɡˈnɪʃn/ nhận dạng giọng nói
    machine translation/məˈʃiːn trænˈsleɪʃn/ dịch máy
    18.1

    Machine learning, deep learning, reinforcement learning

    Machine learning

    The umbrella term — any algorithm that learns from data. Three paradigms:

    • supervised learning 监督学习 — the data has labels 标签 (images tagged "cat"/"dog"); the algorithm learns input → label. Used for classification 分类 (a category) and regression.
    • unsupervised learning 无监督学习 — no labels; the algorithm finds structure, e.g. a cluster 聚类 of similar customers.
    • reinforcement learning (below).

    Use ML when explicit rules would be impractical (spam filters, recommendations, fraud detection).

    Two scatter plots: in supervised learning every training point is labelled cat or dog and the model learns a boundary between them; in unsupervised learning the points are unlabelled and the model finds two clusters by itself
    The same data seen two ways: with labels, the task is to learn what separates the classes; without labels, the task is to discover that there are groups at all

    "Describe supervised learning and unsupervised learning" (the marked wordings). Supervised learning: the algorithm is trained on labelled training data 训练数据, each example paired with the correct output (the target); it learns the relationship between inputs and outputs and uses it to classify or predict for new inputs; the answers are known while training, so the error can be measured. Unsupervised learning: the data is unlabelled, with no correct answers given; the algorithm looks for patterns, structure or groupings in the data by itself (clustering similar items, finding associations); the output is a set of categories or relationships that were not defined in advance. How they differ: labelled against unlabelled data; known outputs against discovered structure; supervised is used to predict (classification, regression), unsupervised to explore (clustering, anomaly detection). Both are categories of machine learning; the third is reinforcement learning.

    A pipeline: labelled training data trains a model, the trained model classifies new unlabelled data, and outputs how many of each type were found
    Supervised learning: a model is trained on labelled data, then recognises new data

    Deep learning

    A subset of ML using deep neural networks. Lower layers learn simple patterns (edges, phonemes), higher layers combine them into abstract concepts. It needs lots of data and lots of compute (GPUs); for small datasets, simpler ML methods often do better.

    "Explain what is meant by deep learning" (three marks). Machine learning that uses artificial neural networks with many hidden layers (deep networks); the network is trained on very large amounts of data, and each layer extracts features from the output of the layer below, so that the network learns the features it needs by itself rather than having them specified by the programmer. Reasons for using it: it can solve problems too complex for hand-written rules or shallow models (recognising faces, understanding speech, translating text); it improves as more data becomes available; it removes the need for human feature engineering; and it can handle unstructured data such as images, sound and text. How it is made more effective: more (and better-labelled) training data; more layers or nodes, within the limits of overfitting; more processing power (GPUs) and training time; tuning the learning rate and other parameters. Examples: speech recognition in voice assistants, image recognition in medical scans and self-driving cars, machine translation, recommendation systems.

    Reinforcement learning

    In reinforcement learning 强化学习, an agent 智能体 acts in an environment; each action changes the state and returns a reward 奖励. The agent learns a policy 策略 (a strategy) that maximises the total reward over time, by trial and error with no labels up front. Used for sequential-decision problems — games, robot control, autonomous driving.

    "Explain what is meant by reinforcement learning" (three marks). An agent learns by interacting with its environment: it takes an action, the environment moves to a new state and returns a reward (or penalty), and the agent adjusts its behaviour so as to maximise the total reward over time. There is no labelled data: the agent learns by trial and error, discovering which actions are good from the rewards it collects, and gradually forms a policy that says what to do in each state. Used where the right answer is not known in advance but the result of an action can be scored: game playing (chess, Go), robot control, traffic-light timing, resource allocation. A computer playing a board game against a user learns in this way, or searches the game tree with minimax to choose the move whose worst outcome is best.

    A loop between two boxes: the agent sends an action to the environment, which returns a new state and a reward back to the agent
    Reinforcement learning: the agent acts, the environment returns a new state and a reward, and the agent learns from it

    A self-driving car 自动驾驶汽车 is a real example. Lidar 激光雷达 and camera sensors (the spinning unit on the roof) build a live picture of the road, and a learned policy decides how to steer, speed up and brake safely.

    A white Waymo self-driving car on a city street, with a spinning lidar sensor unit on its roof and extra cameras at the front corners
    A self-driving car uses cameras and lidar sensors to see the road around it
    Several orange industrial robot arms welding a car body as it moves along a factory production line
    Industrial robot arms on a production line: reinforcement learning can teach a robot to control its movements
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    labels/ˈleɪblz/ nhãn
    reinforcement learning/ˌriːɪnˈfɔːsmənt ˈlɜːnɪŋ/ học tăng cường
    supervised learning/ˈsuːpəvaɪzd ˈlɜːnɪŋ/ học có giám sát
    classification/ˌklæsɪfɪˈkeɪʃn/ phân loại
    unsupervised learning/ʌnˈsuːpəvaɪzd ˈlɜːnɪŋ/ học không có giám sát
    cluster/ˈklʌstə/ cụm
    training data/ˈtreɪnɪŋ ˈdeɪtə/ dữ liệu huấn luyện
    self-driving car/self ˈdraɪvɪŋ kɑː/ xe tự lái
    agent/ˈeɪdʒənt/ tác nhân
    reward/rɪˈwɔːd/ thưởng
    policy/ˈpɒlɪsi/ chính sách
    lidar/ˈlaɪdɑː/ lidar
    18.1

    Training an ANN: backpropagation

    Training adjusts the weights so outputs match the targets. The standard method is backpropagation 反向传播 (back propagation of errors) with gradient descent 梯度下降. For each training example:

    1. forward pass — feed the input through to the output.
    2. compute the error with a loss function 损失函数 (a single number for how wrong the output is).
    3. backward pass — propagate the error backwards, finding each weight's gradient (how much it contributed to the error) using the chain rule.
    4. update the weights by a small step (set by the learning rate 学习率) that reduces the error.

    Repeat over many examples and many passes (epochs 训练轮次) until the error stops shrinking. The name "back" comes from step 3: the error flows from the output back towards the input, so every weight's gradient is found in one sweep. After training, a new input needs only one forward pass to get a prediction.

    "Describe the back propagation of errors method" (four marks). (1) An input is fed forward through the network and its output is compared with the expected (target) output; (2) the difference is the error; (3) the error is passed backwards through the network, layer by layer from the output to the input, and each weight's share of the error is calculated; (4) the weights are adjusted in proportion to their contribution, in the direction that reduces the error; (5) the process is repeated with many examples until the error is as small as required. The point of the method is that a network with hidden layers has no direct way of knowing which internal weight caused an output error; back propagation apportions the blame.

    A U-shaped curve of squared error against weight, with steps moving downhill towards the minimum error
    Training adjusts the weights to reach the minimum error
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    learning rate/ˈlɜːnɪŋ reɪt/ tốc độ học tập
    backpropagation/ˌbækprəpəˈɡeɪʃn/ truyền ngược
    gradient descent/ˈɡreɪdɪənt dɪˈsent/ giảm độ dốc
    loss function/lɒs ˈfʌŋkʃn/ hàm mất mát
    epochs/ˈiːpɒks/ epochs
    18.1

    Regression

    Some tasks predict a number (a house price, tomorrow's temperature) — regression 回归, as opposed to classification (a category).

    Linear regression 线性回归 fits a straight line (or hyperplane):

    $$y = m_{1} x_{1} + m_{2} x_{2} + \ldots + m_{n} x_{n} + c.$$

    Choose the coefficients to minimise the sum of squared errors against the training data. Use it when the relationship looks roughly linear and you want an interpretable model. For curved data, use polynomial, decision-tree, or neural-network regression methods — same idea: define a model, define a loss, and adjust the parameters to minimise it. Regression and classification are both supervised; the choice depends on whether the answer is a number or a category.

    "Describe regression methods in machine learning" (two marks). Statistical methods that find the relationship between input variables and a continuous output, by fitting a function (a line or curve) to the training data with the smallest total error; the fitted function is then used to predict the output for new inputs. Linear regression fits a straight line; other methods fit curves. Regression predicts a value (a price, a temperature, a time); classification predicts a category, which is the distinction the exam asks for.

    A scatter of points with a straight best-fit line through them; dashed vertical lines show the error between each point and the line
    Linear regression fits the line that makes the total squared error (the dashed gaps) as small as possible
    Explore · ⁨Khám phá⁩

    Fitting a regression line · ⁨Phù hợp đường hồi quy⁩

    Drag the controls. Linear regression draws the straight line that makes the squared distances to the data points as small as possible — then it predicts a number for any new input. · ⁨Kéo các điều khiển. Hồi quy tuyến tính vẽ đường thẳng làm cho tổng bình phương khoảng cách đến các điểm dữ liệu là nhỏ nhất — sau đó nó dự đoán một con số cho bất kỳ đầu vào mới nào.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    regression/rɪˈɡreʃn/ hồi quy
    linear regression/ˈlɪnɪə rɪˈɡreʃn/ hồi quy tuyến tính
    18.1

    How AI is used in a real scenario

    Many exam scenarios use the same pattern — a deep-learning model trained on labelled data, often several combined into a pipeline:

    • customer identification at an automated shop: the system is trained on labelled face images; a camera captures a face; image recognition extracts a representation; it is matched against registered customers; the closest match identifies the person.
    • reading text from images: image recognition finds text regions; optical character recognition 光学字符识别 extracts the characters; machine translation converts them; text-to-speech 文本转语音 reads them aloud.
    • checkout item-detection: object-detection AI, trained on labelled product images, sees which items go into a basket and charges the account.

    By the time a user interacts with the system, the model is fast — it only does forward-pass inference; the intelligence is in the patterns learned during training.

    Model answers for the scenario questions. A car-park camera reads registration numbers: the camera captures an image; an AI trained on many labelled images of number plates locates the plate in the image; character recognition (a deep-learning classifier, again trained on labelled characters) converts the plate into text; the text is stored with the time and matched when the car leaves. A CCTV system detects and tracks a person: image-recognition software trained on labelled images of people identifies a person in each frame; the system compares successive frames to follow their movement; unusual movement can trigger an alert. Speech turned into commands: speech recognition trained on many recorded voices converts the sound into text; the system matches the text to a set of known commands; it improves as it is corrected. A camera that focuses on faces: a face-detection model trained on labelled faces finds the face region, and the lens is adjusted to bring that region into focus. A bank's face-recognition login: the app captures the face, a deep network extracts its features, and they are compared with the stored features for that customer. In every case the pattern is: trained on labelled examples, extracts features, matches or classifies new input.

    Worked example. For each task, say whether it needs regression or classification, and what the output layer of an ANN would look like: (a) predict tomorrow's temperature; (b) decide whether an email is spam. Ask what kind of thing is being predicted. (a) A temperature is a number on a continuous scale, so this is regression, and the output layer is a single neuron holding that value. (b) Spam or not-spam is a category, so this is classification, and the output gives a probability per class. Both are supervised learning: each needs labelled examples to train on, and training adjusts the weights by backpropagation to reduce the error. The deciding question is simply number-or-category - not how difficult the task feels.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    optical character recognition/ˈɒptɪkl ˈkærɪktə ˌrekəɡˈnɪʃn/ nhận dạng ký tự quang học
    text-to-speech/tekst tə spiːtʃ/ chuyển đổi văn bản thành giọng nói
    18.1

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    graph (in AI) a set of nodes representing states or places, joined by edges representing connections, often weighted, that a search algorithm can explore
    Dijkstra's algorithm finds the shortest distance from a start node to every other node by always visiting the unvisited node with the smallest distance so far
    A* algorithm a shortest-path search that expands the node with the smallest total of distance so far plus a heuristic estimate of the distance to the goal
    artificial neural network a model of the brain's neurons: layers of nodes joined by weighted connections, trained by adjusting the weights
    machine learning algorithms that learn from data and improve with experience rather than following fixed rules
    supervised learning learning from labelled training data in which the correct output for each input is known
    unsupervised learning learning from unlabelled data by finding patterns, groupings or structure in it
    reinforcement learning an agent learns by trial and error, choosing actions in an environment to maximise the rewards it receives
    deep learning machine learning using neural networks with many hidden layers, trained on large amounts of data, each layer extracting features from the one below
    back propagation of errors comparing the network's output with the target, passing the error back through the layers and adjusting each weight to reduce it
    regression fitting a function to training data in order to predict a continuous output value from inputs
    18.1

    Exam tips

    • Graph answers name nodes, edges and weights, and what they represent; then the algorithm. Dijkstra: table of distances, visit the smallest, update neighbours. A*: $g$, $h$ and $f = g + h$ in every row, expand the smallest $f$.
    • ANN answers name the layers, the weighted connections and training; deep learning adds many hidden layers, large data and automatic feature extraction, with a reason and an example.
    • The three categories in one line each: labelled data and known outputs; unlabelled data and discovered structure; agent, environment, actions and rewards.
    • Back propagation: compare with the target, error backwards through the layers, adjust weights to reduce it, repeat. Regression predicts a value; classification predicts a category.
    • Scenario questions want the pipeline: trained on labelled examples, extracts features, recognises or classifies new input; name the type of AI (image recognition, speech recognition, deep learning).

    Common mistakes

    • Describing a graph as "a chart"; in AI it is nodes and edges.
    • Running Dijkstra by picking the nearest neighbour of the current node rather than the smallest overall distance not yet visited; or forgetting to update a node when a shorter route appears.
    • Adding $h$ into $g$ for the next step in A*; $g$ is only the real distance, $h$ is recomputed from the table.
    • Saying deep learning is "learning a lot"; it is the many hidden layers.
    • Confusing unsupervised learning with reinforcement learning; the first finds structure in data, the second learns from rewards.
    • Describing back propagation without the comparison with the expected output or without saying the weights are adjusted.
    • Calling a prediction of a price "classification"; a continuous value is regression.
  • 19

    Computational thinking and Problem-solving · ⁨Tư duy tính toán và giải quyết vấn đề⁩

    Watch lesson · ⁨Xem bài học⁩
    19.1

    Searching algorithms

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of linear search and binary search methods Write an algorithm to implement a linear search Write an algorithm to implement a binary search The conditions necessary for the use of a binary search How the performance of a binary search varies according to the number of data items
    Show understanding of insertion sort and bubble sort methods Write an algorithm to implement an insertion sort Write an algorithm to implement a bubble sort Performance of a sorting routine may depend on the initial order of the data and the number of data items
    Show understanding of and use Abstract Data Types (ADT) Write algorithms to find an item in each of the following: linked list, binary tree Write algorithms to insert an item into each of the following: stack, queue, linked list, binary tree Write algorithms to delete an item from each of the following: stack, queue, linked list Show understanding that a graph is an example of an ADT. Describe the key features of a graph and justify its use for a given situation. Candidates will not be required to write code for a graph structure
    Show how it is possible for ADTs to be implemented from another ADT Describe the following ADTs and demonstrate how they can be implemented from appropriate built-in types or other ADTs: stack, queue, linked list, dictionary, binary tree
    Show understanding that different algorithms which perform the same task can be compared by using criteria (e.g. time taken to complete the task and memory used) Including use of Big O notation to specify time and space complexity
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về phương pháp linear search và binary search. Viết thuật toán để thực hiện linear search. Viết thuật toán để thực hiện binary search. Các điều kiện cần thiết để sử dụng binary search. Hiệu suất của binary search thay đổi theo số lượng mục dữ liệu như thế nào.
    Thể hiện sự hiểu biết về phương pháp insertion sort và bubble sort. Viết thuật toán để thực hiện insertion sort. Viết thuật toán để thực hiện bubble sort. Hiệu suất của một thủ tục sắp xếp có thể phụ thuộc vào thứ tự ban đầu của dữ liệu và số lượng mục dữ liệu.
    Thể hiện sự hiểu biết và sử dụng Abstract Data Types (ADT). Viết thuật toán để tìm kiếm một mục trong mỗi cấu trúc sau: linked list, binary tree. Viết thuật toán để chèn một mục vào mỗi cấu trúc sau: stack, queue, linked list, binary tree. Viết thuật toán để xóa một mục khỏi mỗi cấu trúc sau: stack, queue, linked list. Thể hiện sự hiểu biết rằng một graph là một ví dụ về ADT. Mô tả các đặc điểm chính của một graph và biện giải việc sử dụng nó cho một tình huống cụ thể. thí sinh không yêu cầu viết mã cho cấu trúc graph.
    Thể hiện cách mà các ADTs có thể được triển khai từ một ADT khác. Mô tả các ADT sau và chứng minh cách chúng có thể được triển khai từ các kiểu dựng sẵn hoặc các ADT phù hợp: stack, queue, linked list, dictionary, binary tree.
    Thể hiện sự hiểu biết rằng các thuật toán khác nhau thực hiện cùng một tác vụ có thể được so sánh bằng các tiêu chí (ví dụ: thời gian hoàn thành tác vụ và bộ nhớ sử dụng). Bao gồm cả việc sử dụng Big O notation để chỉ định độ phức tạp về thời gian và không gian.

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Big O: how algorithms scale
    Insertion sort: slide each card into place
    Bubble sort, pass by pass
    Binary search: halve and conquer

    A search finds a target value in a collection (often an array 数组) and returns its position, or "not found".

    An open telephone directory
    Searching a sorted list, like a phone book, is far faster than checking every entry one by one

    Linear search

    A linear search 线性查找 walks from start to end, comparing each element with the target:

    FOR i ← 1 TO n
        IF A[i] = target THEN
            RETURN i
        ENDIF
    NEXT i
    RETURN -1   // not found
    

    No preparation is needed, so it works on any list. Worst case O($n$) (target at the end or absent); best case 1 comparison. Use it on unsorted data or small lists. (The returned -1 is a sentinel value — an impossible position that means "not found"; the caller tests IF result = -1.)

    The exam's version. Paper 3 asks you to complete a linear search written with a flag and a WHILE loop, and Paper 4 to write a function that returns the index or a count. Both look like this:

    FUNCTION LinearSearch(Data : ARRAY OF INTEGER, Target : INTEGER) RETURNS INTEGER
        DECLARE Index, Count : INTEGER
        Count ← 0
        FOR Index ← 1 TO 100
            IF Data[Index] = Target THEN
                Count ← Count + 1
            ENDIF
        NEXT Index
        RETURN Count          // how many times Target occurs; 0 means not found
    ENDFUNCTION
    

    To stop at the first match instead, use a WHILE Index <= 100 AND NOT Found loop that sets Found ← TRUE and remembers the index. The marks are for the loop over every element, the comparison, and what is returned when the value is absent.

    A row of alphabet cells A to Z; cells A to V are shaded as checked and W is highlighted as the match, with a pointer below W
    Linear search checks every letter in turn — 23 comparisons to find W

    Binary search

    A binary search 二分查找 needs the data sorted. Look at the middle element; if it is the target, done; if the target is smaller, search the left half, else the right half — halving the range each time:

    low ← 1
    high ← n
    WHILE low <= high DO
        mid ← (low + high) DIV 2
        IF A[mid] = target THEN
            RETURN mid
        ENDIF
        IF A[mid] < target THEN
            low ← mid + 1
        ELSE
            high ← mid - 1
        ENDIF
    ENDWHILE
    RETURN -1
    

    Worst case O($\log_{2} n$) — for a million items, about 20 comparisons. Much faster than linear search on large sorted arrays, but you must sort first (a one-off O($n \log n$) cost), worth it if you search many times.

    "State the condition necessary for a binary search." The data must be in order (sorted, ascending or descending, on the key being searched). "Describe how to perform a binary search" (three marks): (1) find the middle item of the list (or of the current range) and compare it with the target; (2) if it matches, the search ends; if the target is smaller, repeat on the lower half, if larger, on the upper half; (3) keep halving the range until the item is found or the range is empty, which means it is not present.

    The exam's version, with the bounds and a flag, is the one to reproduce when asked to complete the algorithm:

    DECLARE Lower, Upper, Mid : INTEGER
    DECLARE Found : BOOLEAN
    Lower ← 0
    Upper ← 99
    Found ← FALSE
    WHILE Lower <= Upper AND NOT Found
        Mid ← (Lower + Upper) DIV 2
        IF Names[Mid] = Target THEN
            Found ← TRUE
        ELSE
            IF Names[Mid] < Target THEN
                Lower ← Mid + 1
            ELSE
                Upper ← Mid - 1
            ENDIF
        ENDIF
    ENDWHILE
    IF Found THEN
        OUTPUT Mid
    ELSE
        OUTPUT "Not found"
    ENDIF
    

    "Explain how the performance varies with the number of items." Each comparison halves the number of items left, so the maximum number of comparisons is about $\log_{2} n$: doubling the size of the list adds only one more comparison. This is O($\log n$). "Compare linear and binary search": a linear search needs up to $n$ comparisons (O($n$)) and, on average, half that, but works on unsorted data; a binary search needs at most $\log_{2} n$ (O($\log n$)) and is far faster for large lists, but the data must first be sorted and it must allow direct access to the middle item (an array, not a linked list). For $1000$ items: $1000$ against $10$ comparisons.

    Three rows showing binary search on the sorted alphabet; the active low-to-high range halves each step as the middle letter M, then T, then W is compared with W
    Binary search halves the range each step (low / mid / high) — just 3 comparisons to find W
    A library card catalogue: a wall of small wooden drawers, one pulled open to show the cards filed in order
    A card catalogue: sorted records are what make a binary search possible — halve, look, halve again
    Explore · ⁨Khám phá⁩

    Linear vs binary search · ⁨Tìm kiếm tuyến tính so với tìm kiếm nhị phân⁩

    Search for a value. Binary search halves the list each step (only on sorted data); linear search checks one by one. · ⁨Tìm kiếm một giá trị. Tìm kiếm nhị phân chia đôi danh sách ở mỗi bước (chỉ áp dụng trên dữ liệu đã sắp xếp); tìm kiếm tuyến tính kiểm tra từng phần tử một.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    binary search/ˈbaɪnəri sɜːtʃ/ tìm kiếm nhị phân
    array/əˈreɪ/ mảng (array)
    linear search/ˈlɪnɪə sɜːtʃ/ tìm kiếm tuyến tính
    19.1

    Sorting algorithms

    Bubble sort

    A bubble sort 冒泡排序 repeatedly walks the array, swapping adjacent pairs that are out of order, so the largest "bubbles" to the end each pass:

    FOR pass ← 1 TO n - 1
        swapped ← FALSE
        FOR i ← 1 TO n - pass
            IF A[i] > A[i + 1] THEN
                temp ← A[i]
                A[i] ← A[i + 1]
                A[i + 1] ← temp
                swapped ← TRUE
            ENDIF
        NEXT i
        IF swapped = FALSE THEN      // already sorted
            EXIT FOR
        ENDIF
    NEXT pass
    

    Best case O($n$) (already sorted, with the early exit); average/worst O($n^{2}$). Simple but slow for large $n$.

    Insertion sort

    An insertion sort 插入排序 builds a sorted prefix from the left, inserting each new element into place by shifting larger ones right:

    FOR i ← 2 TO n
        key ← A[i]
        j ← i - 1
        WHILE j >= 1 AND A[j] > key DO
            A[j + 1] ← A[j]
            j ← j - 1
        ENDWHILE
        A[j + 1] ← key
    NEXT i
    

    Best case O($n$) (already sorted); worst O($n^{2}$). Good for small or nearly-sorted arrays. It sorts in place 原地 and is stable 稳定 (keeps the order of equal elements).

    Tracing a sort

    A common task is to show the array after each outer pass. For [D, T, H, R] with insertion sort: pass 1 (key T) no change; pass 2 (key H) → [D, H, T, R]; pass 3 (key R) → [D, H, R, T].

    Writing a sort from scratch. "Write pseudocode to sort DataArray[1:1000] into ascending order" is answered by a complete bubble sort with the early-exit flag, or an insertion sort, declared and indented; either scores full marks if it works for every input:

    DECLARE Pass, Index, Temp : INTEGER
    DECLARE Swapped : BOOLEAN
    Pass ← 1
    REPEAT
        Swapped ← FALSE
        FOR Index ← 1 TO 1000 - Pass
            IF DataArray[Index] > DataArray[Index + 1] THEN
                Temp ← DataArray[Index]
                DataArray[Index] ← DataArray[Index + 1]
                DataArray[Index + 1] ← Temp
                Swapped ← TRUE
            ENDIF
        NEXT Index
        Pass ← Pass + 1
    UNTIL Swapped = FALSE OR Pass = 1000
    

    For descending order change > to <; to sort records or a 2D array by one field, compare that field but swap the whole record (or every column). Asked to write an insertion sort "that performs the same task" as a given bubble sort, keep the same array name and direction and reproduce the insertion sort above with the comparison reversed if the order is descending.

    "Describe two ways the performance of a sort is affected by the data" (two marks). (1) The number of items: an $O(n^{2})$ sort takes four times as long for twice as many items. (2) How far the data is already in order: a bubble sort with a flag, or an insertion sort, finishes in one pass over already-sorted data ($O(n)$) and does the most work on data in reverse order; the number of swaps depends on how many pairs are out of order. (Also accepted: the range or number of duplicate values, and whether the items are large records that are expensive to move.) Bubble and insertion sort are both O($n^{2}$) in the worst and average cases and O($n$) at best; quicksort and merge sort are O($n \log n$), which is why they are used for large data.

    Rows tracing an insertion sort of D, T, H, R across three passes; the sorted prefix is shaded and arrows show each larger element shifting right to let the key drop in
    An insertion sort of [D, T, H, R], shifting each key into its place pass by pass
    Explore · ⁨Khám phá⁩

    Watch a sort run · ⁨Xem quá trình sắp xếp chạy⁩

    Step through a sort and watch the bars settle into order — how a sorting algorithm works pass by pass. · ⁨Bước qua quá trình sắp xếp và xem các thanh dữ liệu định vị theo thứ tự — cách hoạt động của thuật toán sắp xếp qua từng lượt.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    insertion sort/ɪnˈsɜːʃn sɔːt/ insertion sort
    bubble sort/ˈbʌbl sɔːt/ bubble sort
    in place/ɪn pleɪs/ ngay tại chỗ
    stable/ˈsteɪbl/ ổn định
    19.1

    ADTs in algorithms

    The Abstract Data Types (ADTs) from Topic 10 appear inside many algorithms: a stack 栈 drives depth-first traversal and undo; a queue 队列 drives breadth-first traversal and print ordering; a linked list 链表 lets data grow and shrink.

    ADTs can be built from other ADTs, not just from arrays: a queue from two stacks; a stack from a linked list (push = prepend a head node 节点); a queue from a linked list with head and tail pointers 指针; a binary tree 二叉树 from nodes with two child pointers; a dictionary 字典 stores key→value pairs (often on a hash table). Layering this way separates concerns — the algorithm using the ADT need not know how it is built.

    The ADTs the exam asks you to describe and implement

    Stack (last in, first out): items are added (pushed) and removed (popped) at the same end, the top; a pointer TopOfStack holds the index of the top item. Implemented with an array and that one pointer: push checks the stack is not full, increments the pointer and stores the item; pop checks it is not empty, returns the top item and decrements the pointer.

    FUNCTION Push(Item : INTEGER) RETURNS BOOLEAN
        IF TopOfStack = 9 THEN      // full (array 0 to 9)
            RETURN FALSE
        ENDIF
        TopOfStack ← TopOfStack + 1
        StackData[TopOfStack] ← Item
        RETURN TRUE
    ENDFUNCTION
    FUNCTION Pop() RETURNS INTEGER
        IF TopOfStack = -1 THEN      // empty
            RETURN -1
        ENDIF
        TopOfStack ← TopOfStack - 1
        RETURN StackData[TopOfStack + 1]
    ENDFUNCTION
    

    Queue (first in, first out): items join at the rear (enqueue) and leave from the front (dequeue); two pointers and a count. In a linear queue the front pointer creeps along the array until the space at the start is wasted; a circular queue 循环队列 wraps both pointers round with MOD, so every cell is reused.

    A circular queue of six array cells holding three items in cells 3 to 5, with the front pointer at 3 and the rear at 5, and a dashed arrow showing that the next item wraps round into cell 0
    A circular queue: the rear and front pointers step forward with MOD, so the array's first cells are reused once their items have left
    FUNCTION Enqueue(Item : STRING) RETURNS BOOLEAN
        IF Count = 6 THEN      // full
            RETURN FALSE
        ENDIF
        Rear ← (Rear + 1) MOD 6
        QueueArray[Rear] ← Item
        Count ← Count + 1
        RETURN TRUE
    ENDFUNCTION
    FUNCTION Dequeue() RETURNS STRING
        IF Count = 0 THEN      // empty
            RETURN ""
        ENDIF
        DECLARE Item : STRING
        Item ← QueueArray[Front]
        Front ← (Front + 1) MOD 6
        Count ← Count - 1
        RETURN Item
    ENDFUNCTION
    

    Linked list: a sequence of nodes, each holding a data item and a pointer to the next node; a start pointer gives the first node and a null pointer (0 or $-1$) ends the list. In an array implementation two parallel arrays hold the data and the pointers, and unused cells are chained into a free list 空闲列表 so that an insertion knows where to put the new node.

    Two parallel arrays Data and Pointer implementing a linked list of the names Ann, Ben and Dan: the start pointer is 1, the pointers chain 1 to 3 to 2 to 0, and the unused cells 4, 5 and 6 form the free list
    A linked list in two arrays: the order of the list is in the pointers, not in the positions; inserting a name means taking a cell from the free list and re-linking two pointers
    FUNCTION FindInList(Target : STRING) RETURNS INTEGER   // index, or 0 if absent
        DECLARE Current : INTEGER
        Current ← Start
        WHILE Current <> 0
            IF Data[Current] = Target THEN
                RETURN Current
            ENDIF
            Current ← Pointer[Current]
        ENDWHILE
        RETURN 0
    ENDFUNCTION
    

    To insert into an ordered list: take the first free cell (NewNode ← FreeList, FreeList ← Pointer[FreeList]), store the item, then walk the list with a Previous and Current pointer until Data[Current] > Item or the end; set Pointer[NewNode] ← Current and Pointer[Previous] ← NewNode (or Start ← NewNode if it goes first). To delete, re-link the previous node past the deleted one and return the cell to the free list.

    Binary tree: a root node, each node holding data, a left pointer to a subtree of smaller values and a right pointer to a subtree of larger values. Implemented as a 2D array (or three 1D arrays) Tree[Index, 0..2] for left pointer, data, right pointer, with a root pointer and a next-free pointer.

    FUNCTION FindInTree(Target : INTEGER) RETURNS INTEGER   // index, or -1
        DECLARE Current : INTEGER
        Current ← Root
        WHILE Current <> -1
            IF Tree[Current, 1] = Target THEN
                RETURN Current
            ENDIF
            IF Target < Tree[Current, 1] THEN
                Current ← Tree[Current, 0]      // go left
            ELSE
                Current ← Tree[Current, 2]      // go right
            ENDIF
        ENDWHILE
        RETURN -1
    ENDFUNCTION
    

    To insert: store the item in the next free node with both pointers $-1$; if the tree is empty make it the root; otherwise walk down from the root, going left or right by comparison, until the pointer you would follow is $-1$, and set that pointer to the new node. An ADT from another ADT: a stack is a linked list where push and pop both work at the start; a queue is a linked list with a start and an end pointer; a queue can be made from two stacks (push onto one, pop from the other, moving everything across when the second is empty); a binary tree's nodes are records or objects linked by pointers, so it is built from a linked structure of nodes. Say which operations of the new ADT map onto which operations of the old one.

    A binary tree with root 27, a left subtree of 19, 16, 21 and 17, and a right subtree of 36, 42, 89 and 55, with the root, the left and right pointers, and a leaf node labelled
    A binary tree: each node has up to two child nodes
    A binary search tree with root 4 (left subtree 2 over 1 and 3, right subtree 6 over 5 and 7); pre-order visits 4 2 1 3 6 5 7, in-order 1 2 3 4 5 6 7 (sorted), post-order 1 3 2 5 7 6 4
    Three depth-first traversals of a binary tree: pre-order, in-order (sorted order) and post-order
    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    linked list/lɪŋkt lɪst/ danh sách liên kết
    stack/stæk/ stack
    queue/kjuː/ queue
    node/nəʊd/ nút
    pointers/ˈpɔɪntəz/ con trỏ
    binary tree/ˈbaɪnəri triː/ cây nhị phân
    dictionary/ˈdɪkʃənəri/ từ điển
    circular queue/ˈsɜːkjʊlə kjuː/ hàng đợi vòng tròn
    free list/friː lɪst/ danh sách tự do
    19.1

    Comparing algorithms

    Time complexity

    Time complexity 时间复杂度 is how the running time grows with input size $n$, written in Big-O notation 大O表示法 (the dominant term): O(1) constant, O($\log n$) binary search, O($n$) linear search, O($n \log n$) good sorts, O($n^{2}$) bubble/insertion sort. A smaller order is better at scale, even if another algorithm is faster for small $n$.

    To make that concrete: to sort a million items, an $O(n \log n)$ sort finishes in a fraction of a second, while an $O(n^{2})$ sort can take minutes.

    Worked example. A sorted list holds $1000$ items. How many comparisons does each search need in the worst case?

    A linear search checks items one at a time, so it may need up to $1000$ comparisons — this is $O(n)$. A binary search halves the list each step, so it needs at most $\lceil \log_2 1000 \rceil = 10$ comparisons — this is $O(\log n)$. Doubling the list to $2000$ items adds only one comparison to the binary search, but up to another $1000$ to the linear search — which is why the order of growth, not raw speed, decides the winner at scale.

    Describing an order. O(1): the time is constant, independent of the number of items (pushing onto a stack, reading an array element). O($\log n$): the time grows with the logarithm of the number of items, so doubling the data adds only a fixed extra step (binary search). O($n$): the time grows in proportion to the number of items (linear search, one pass through a list). O($n \log n$): a little worse than linear (efficient sorts). O($n^{2}$): the time grows with the square of the number of items, so doubling the data quadruples the time (bubble and insertion sort). "State the Big O of a binary search of Names[0:99]" is answered $O(\log n)$, and "describe its meaning" as above; Big O measures how the time or memory scales, not the actual time.

    A graph of running time against input size n for the common orders: O(1) and O(log n) stay almost flat, O(n) rises gently, O(n log n) more steeply, and O(n squared) climbs away fastest
    How the common orders of growth compare: a smaller order wins at scale
    A line graph of running time against the number of elements n: bubble sort and insertion sort rise steeply as O(n squared), while quick sort stays low as O(n log n)
    How sorting time grows with the number of elements $n$: $O(n^2)$ sorts climb away from an $O(n\log n)$ sort

    Space complexity

    Space complexity 空间复杂度 is the extra memory needed. Bubble and insertion sort use O(1) extra (in place); merge sort uses O($n$); recursion uses stack memory proportional to its depth. There is often a time–memory trade-off.

    Other criteria

    Simplicity (easier to code and maintain), stability, and adaptiveness (faster on nearly-sorted data). The right algorithm depends on the data and the constraints.

    Explore · ⁨Khám phá⁩

    How running time grows with n · ⁨Thời gian chạy tăng trưởng theo n như thế nào⁩

    Slide n upward and compare the curves: O(1) and O(log n) stay almost flat, O(n) rises steadily, O(n²) explodes. This is why Big-O — not a stopwatch — is how we compare algorithms on large inputs. · ⁨Trượt n lên cao hơn và so sánh các đường cong: O(1) và O(log n) giữ gần như phẳng, O(n) tăng đều đặn, O(n²) bùng nổ. Đây là lý do tại sao Big-O — chứ không phải đồng hồ bấm giờ — là cách chúng ta so sánh các thuật toán trên đầu vào lớn.⁩

    Explore · ⁨Khám phá⁩

    Big-O growth · ⁨Tăng trưởng Big-O⁩

    Change the input size n and compare how fast each algorithm's work grows — the idea behind time complexity. · ⁨Thay đổi kích thước đầu vào n và so sánh tốc độ tăng công việc của từng thuật toán — ý tưởng nền tảng về độ phức tạp thời gian.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    time complexity/taɪm kəmˈpleksɪti/ độ phức tạp thời gian
    Big-O notation/bɪɡ əʊ nəʊˈteɪʃn/ Ký hiệu Big-O
    space complexity/speɪs kəmˈpleksɪti/ độ phức tạp không gian
    19.2

    Recursion

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Show understanding of recursion Essential features of recursion How recursion is expressed in a programming language Write and trace recursive algorithms When the use of recursion is beneficial
    Show awareness of what a compiler has to do to translate recursive programming code Use of stacks and unwinding
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Thể hiện sự hiểu biết về recursion. Các đặc điểm thiết yếu của recursion. Cách recursion được biểu diễn trong ngôn ngữ lập trình. Viết và theo dõi các recursive algorithms. Khi nào việc sử dụng recursion mang lại lợi ích.
    Thể hiện nhận thức về những gì trình biên dịch phải làm để dịch mã lập trình recursive. Sử dụng stacks và cơ chế unwinding.

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    Recursion: the call stack winds up and unwinds

    Recursive algorithms use recursion 递归: the routine calls itself with a smaller version of the same problem, until a base case 基本情形 ends the chain. It has two parts: the base case (small enough to solve directly — without it the recursion never stops) and the recursive case 递归情形 (reduce the input and call itself).

    Factorial 阶乘:

    FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
        IF n = 0 OR n = 1 THEN
            RETURN 1
        ELSE
            RETURN n * Factorial(n - 1)
        ENDIF
    ENDFUNCTION
    

    Recursion is natural for self-similar problems: trees, divide-and-conquer 分治 (binary search, merge sort), and nested data. When it is a poor fit, a loop is usually cleaner.

    "Describe what is meant by recursion" (two marks). A function or procedure that is defined in terms of itself: it calls itself from within its own body, with a smaller version of the problem each time, until a base case is reached. "State three essential features of recursion": (1) a base case (stopping condition) that returns a value without a further call; (2) a general case 一般情形 in which the routine calls itself; (3) each call moves the problem closer to the base case (the parameter is reduced), so that the recursion terminates. Some schemes add: values are returned as the calls unwind.

    "Describe when the use of recursion is beneficial, and give an example." When the problem is naturally defined in terms of smaller versions of itself, so that the recursive solution is shorter, clearer and closer to the mathematical definition than a loop would be: a factorial or Fibonacci number, a binary search, traversing a binary tree, merge sort or quicksort, and processing nested structures such as folders within folders. It is a poor choice when the depth is large (the stack may overflow) or when the same sub-problem is computed many times (naive Fibonacci).

    Tracing a recursive call

    For Factorial(4): the calls go down to Factorial(1)=1, then unwinding multiplies back up: 2*1=2, 3*2=6, 4*6=24. Final result 24. Track each pending call on a stack.

    Worked example. The function below is given without an explanation. Trace Unknown(3, 5) and state its output and return value.

    FUNCTION Unknown(BYVAL X, BYVAL Y : INTEGER) RETURNS INTEGER
        IF X < Y THEN
            OUTPUT X + Y
            RETURN Unknown(X + 1, Y - 1) + 1
        ELSE
            RETURN 0
        ENDIF
    ENDFUNCTION
    

    Call 1: $X = 3, Y = 5$: $3 < 5$, output 8, call Unknown(4, 4). Call 2: $4 < 4$ is false, return 0. Unwinding: call 1 returns $0 + 1 = 1$. Output 8, return value 1. Write the trace as a table with a row per call (parameters, condition, output, what it returns), and do the returns from the deepest call upwards: that is the unwinding the mark scheme looks for.

    Worked example (Fibonacci). Fib(n) returns n when n < 2, otherwise Fib(n - 1) + Fib(n - 2). Find Fib(5).

    Fib(5) = Fib(4) + Fib(3); Fib(4) = Fib(3) + Fib(2); Fib(3) = Fib(2) + Fib(1); Fib(2) = Fib(1) + Fib(0) = 1 + 0 = 1. So Fib(3) = 1 + 1 = 2, Fib(4) = 2 + 1 = 3, Fib(5) = 3 + 2 = 5. The base case is reached many times (Fib(2) is computed three times), which is why this version is slow: it makes 15 calls for $n = 5$ and roughly doubles the calls for every increase in $n$.

    Converting recursion to iteration. Every recursive routine can be rewritten with a loop, which uses less memory and is faster: keep a running result and loop from the base case upwards. Factorial as a loop:

    FUNCTION Factorial(N : INTEGER) RETURNS INTEGER
        DECLARE Result, Count : INTEGER
        Result ← 1
        FOR Count ← 2 TO N
            Result ← Result * Count
        NEXT Count
        RETURN Result
    ENDFUNCTION
    

    Asked to change a recursive insertion sort or search into an iterative one, replace the self-call with a loop over the index that the recursion was stepping through, and turn the base case into the loop's exit condition.

    The call stack for Factorial(4): each call pushes a frame down to the base case Factorial(1)=1, then the stack unwinds, returning 2 = 2 times 1, 6 = 3 times 2 and 24 = 4 times 6
    Recursion uses the call stack: calls push frames down to the base case, then returns unwind back up

    Risks

    • infinite recursion if the base case is missed — crashes with a stack overflow 栈溢出.
    • high memory use for deep recursion.
    • slow if it repeats work (naive Fibonacci is exponential — use a loop or memoisation 记忆化).
    Explore · ⁨Khám phá⁩

    Recursion unwinds from the leaves up · ⁨Đệ quy mở rộng từ các lá lên trên⁩

    Step through fib(4) in the order the calls actually finish: the leaves (base cases) resolve first, then each parent combines its children. Notice fib(2) is computed twice — that repeated work is why naive recursion is slow. · ⁨Bước qua fib(4) theo thứ tự các lời gọi thực sự hoàn thành: các lá (trường hợp cơ bản) được giải quyết trước, sau đó mỗi cha kết hợp con cái của nó. Lưu ý fib(2) được tính hai lần — công việc lặp lại đó là lý do tại sao đệ quy thô sơ lại chậm.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    recursion/rɪˈkɜːʃn/ đệ quy
    base case/beɪs keɪs/ trường hợp cơ sở
    recursive case/rɪˈkɜːsɪv keɪs/ trường hợp đệ quy
    factorial/fækˈtɔːrɪəl/ giả thừa
    divide-and-conquer/dɪˈvaɪd ænd ˈkɒŋkə/ chia để trị
    general case/ˈdʒenərəl keɪs/ trường hợp tổng quát
    stack overflow/stæk ˌəʊvəˈfləʊ/ vượt quá ngăn xếp
    memoisation/ˌmeməʊaɪˈzeɪʃn/ ghi nhớ
    19.2

    What the compiler does for recursive code

    Recursion needs each call to have its own copy of its parameters 参数 and local variables 局部变量. The compiler keeps these on the call stack 调用栈. For each call it pushes a stack frame 栈帧 holding the parameters, the local variables, and the return address 返回地址 (where to resume in the caller). When the function returns, the return value is handed back, the frame is popped, and control resumes at the return address.

    Because each call has its own frame, recursive calls don't trample each other's variables. The stack can grow large for deep recursion, which is why very deep recursion may overflow it. This is the same call-and-return mechanism used for ordinary (non-recursive) calls — there is no special "recursion mechanism".

    "Explain why a stack is suitable for implementing recursion" (three marks). Each recursive call must save its return address, its parameters and its local variables, and the calls are completed in the reverse order to that in which they were made (the last call made is the first to finish), which is exactly the last in, first out behaviour of a stack: each new call pushes a frame, and each return pops the most recent frame, restoring the caller's state and telling it where to continue. This is the compiler's job when it translates recursive code: it generates the push of a stack frame on every call and the pop on every return, and the frames are unwound as the results come back.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    call stack/kɔːl stæk/ ngăn xếp gọi
    parameters/pəˈræmɪtəz/ tham số
    local variables/ˈləʊkl ˈveərɪəblz/ biến cục bộ
    stack frame/stæk freɪm/ khung ngăn xếp
    return address/rɪˈtɜːn əˈdres/ địa chỉ trả về
    19.2

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    linear search checking each item in turn from the start until the target is found or the end is reached
    binary search repeatedly comparing the target with the middle item of a sorted list and discarding the half that cannot contain it
    bubble sort repeatedly passing through the list, swapping adjacent items that are in the wrong order, until a pass makes no swaps
    insertion sort taking each item in turn and inserting it into its correct place among the items already sorted
    abstract data type a collection of data and the operations that can be performed on it, defined independently of how it is stored
    stack a last-in-first-out structure with push and pop at the top
    queue a first-in-first-out structure with items added at the rear and removed from the front
    linked list a sequence of nodes, each holding data and a pointer to the next node, with a start pointer
    binary tree nodes each holding data and pointers to a left subtree of smaller values and a right subtree of larger values
    Big O notation a way of classifying the time (or memory) an algorithm needs by how it grows with the size of the input
    recursion a routine that calls itself with a smaller version of the problem until a base case stops the calls
    base case the condition under which a recursive routine returns without calling itself
    unwinding the returns of a chain of recursive calls, from the deepest call back to the first, as the stack frames are popped
    19.2

    Exam tips

    • Searches: linear needs no order and O($n$); binary needs a sorted array, halves each time and is O($\log n$). Know both algorithms by heart, including the bounds and the flag.
    • Sorts: bubble with a swapped flag, insertion with a key that shifts larger items right; both O($n^{2}$) worst, O($n$) on sorted data. Performance depends on the number of items and how ordered they are.
    • ADT implementations are pointer bookkeeping: a top pointer; front, rear and count with MOD; start, pointers and a free list; root with left and right pointers. Always check for full and empty.
    • Big O is about scaling: constant, logarithmic, linear, square. Say "doubling the data adds one comparison" for a binary search.
    • Recursion: base case, general case, progress towards the base case; beneficial when the problem is defined in terms of itself; a stack holds the return addresses and variables because calls return in reverse order. Trace with a table and unwind from the deepest call.

    Common mistakes

    • Using a binary search on unsorted data, or on a linked list; and setting Lower ← Mid instead of Mid + 1, which loops for ever.
    • A bubble sort inner loop that runs to the end of the array every pass, or a swap without a temporary variable.
    • A push or enqueue that does not test for full, or a pop or dequeue that does not test for empty.
    • Moving the queue's front pointer without MOD in a circular queue, or treating front = rear as always meaning empty.
    • Inserting into a linked list by shifting the array contents; only the pointers change.
    • A recursive function with no base case, or one whose recursive call does not make the problem smaller.
    • Tracing a recursive call but forgetting to add the pending work on the way back up.
    • Answering "why a stack" with "because it is fast"; the reason is the last-in-first-out order of the returns.
  • 20

    Further Programming · ⁨Lập trình nâng cao⁩

    Watch lesson · ⁨Xem bài học⁩
    20.1

    Programming paradigms

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Understanding what is meant by a programming paradigm
    Show understanding of the characteristics of a number of programming paradigms:
    • Low-level Low-level Programming: • understanding of and ability to write low-level code that uses various addressing modes: immediate, direct, indirect, indexed and relative
    • Imperative (Procedural) Imperative (Procedural) programming: • Assumed knowledge and understanding of Structural Programming (see details in AS content section 11.3) • understanding of and ability to write imperative (procedural) programming code that uses variables, constructs, procedures and functions. See details in AS content
    • Object Oriented Object-Oriented Programming (OOP): • understanding of the terminology associated with OOP (including objects, properties/attributes, methods, classes, inheritance, polymorphism, containment (aggregation), encapsulation, getters, setters, instances) • understanding of how to solve a problem by designing appropriate classes • understanding of and ability to write code that demonstrates the use of OOP
    • Declarative Declarative programming: • understanding of and ability to solve a problem by writing appropriate facts and rules based on supplied information • understanding of and ability to write code that can satisfy a goal using facts and rules
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Hiểu rõ ý nghĩa của một programming paradigm.
    Thể hiện sự hiểu biết về các đặc điểm của nhiều programming paradigms:
    • Low-level Low-level Programming: • hiểu biết và khả năng viết mã mức thấp sử dụng các addressing modes khác nhau: immediate, direct, indirect, indexed và relative.
    • Nhân lệnh (Thủ tục) Lập trình Nhân lệnh (Thủ tục): • Kiến thức và sự hiểu biết về Lập trình Cấu trúc (xem chi tiết trong phần nội dung AS 11.3) • Hiểu và có khả năng viết mã lập trình nhân lệnh (thủ tục) sử dụng biến, cấu trúc, thủ tục và hàm. Xem chi tiết trong phần nội dung AS
    • Hướng đối tượng Lập trình Hướng đối tượng (OOP): • Hiểu các thuật ngữ liên quan đến OOP (bao gồm đối tượng, thuộc tính/đặc điểm, phương thức, lớp, kế thừa, đa hình, sự chứa đựng (gộp), bao bọc, getter, setter, thực thể) • Hiểu cách giải quyết vấn đề bằng cách thiết kế các lớp phù hợp • Hiểu và có khả năng viết mã thể hiện việc sử dụng OOP
    • Khẳng định Lập trình Khẳng định: • Hiểu và có khả năng giải quyết vấn đề bằng cách viết các sự thật và luật lệ phù hợp dựa trên thông tin đã cung cấp • Hiểu và có khả năng viết mã có thể thỏa mãn một mục tiêu bằng cách sử dụng sự thật và luật lệ

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    A programming paradigm 编程范式 is a style of programming — a way of structuring programs, with its own ideas and language features. Four programming paradigms are in this syllabus.

    "Describe what is meant by an imperative (procedural) language" (two marks). A language in which the program is a sequence of instructions that are executed in order and that change the program's state; the programmer says how the task is done, using procedures, sequence, selection and iteration. "Describe what is meant by a declarative language": the program states facts and rules (what is known and what is wanted) and the language's inference engine works out how to find the answer; the programmer does not give the sequence of steps.

    Identify the paradigm from a code sample (a regular Paper 3 question): LDD 200, ADD #5, STO 201 is low-level (mnemonics, registers, memory addresses); FOR Count ← 1 TO 10 … NEXT Count with procedures and assignments is imperative; CLASS Dog … PRIVATE Name : STRING … PUBLIC PROCEDURE NEW(…) is object-oriented; type(lion, wild). and dangerous(X) IF type(X, wild) is declarative (logic). In the matching question: low-level pairs with "mnemonics that correspond directly to machine instructions", imperative with "a sequence of statements that change the state", OOP with "objects that combine attributes and methods", declarative with "facts and rules, with no order of execution given".

    Four paradigms: low-level, imperative, object-oriented and declarative
    Four paradigms: low-level, imperative, object-oriented and declarative

    Low-level programming

    Programming close to the hardware in machine code 机器码 or assembly language 汇编语言, where each instruction maps to what the CPU runs. It gives direct access to registers 寄存器 and memory addresses 内存地址, using different addressing modes 寻址方式 (immediate, direct, indirect, indexed and relative). It is very fast and compact, but architecture-specific, tedious, and hard to maintain. This is low-level 低级 programming, used for device drivers, firmware and bootloaders.

    The five addressing modes. The syllabus asks for low-level code that uses each addressing mode (the instruction set is in Topic 4). The operand of a load instruction can be read five ways, and the exam gives you the memory contents and asks what the accumulator holds:

    A memory table with addresses 105, 106, 107, 27 and 145 and their contents, beside five rows showing what the accumulator receives from LDM #105, LDD 105, LDI 105, LDX 105 with IX = 2, and a relative jump
    The same operand, 105, read five ways: as a value, as an address, as the address of an address, as an address plus the index register, and as an offset from the current instruction
    • immediate (LDM #105): the operand is the value; ACC becomes 105.
    • direct (LDD 105): the operand is the address of the value; ACC becomes the contents of 105, here 27.
    • indirect (LDI 105): the operand is the address of an address; ACC becomes the contents of 27, here 91. Used for pointers and for data whose position is decided at run time.
    • indexed (LDX 105): the address is the operand plus the index register IX; with IX = 2, ACC becomes the contents of 107. Used to step through an array by incrementing IX.
    • relative (JMR +65): the target is an offset from the address of the current instruction, which makes the code relocatable.

    Worked example. Memory: 105 holds 27, 106 holds 64, 200 holds 0. Write code to add the contents of 105 and 106, store the result in 200 and output it. LDD 105 (ACC = 27), ADD 106 (ACC = 91), STO 200, OUT. To double the value in 105 instead: LDD 105, ADD 105, STO 105. State the register contents after each line when asked to trace.

    Imperative (procedural) programming

    In imperative programming 命令式编程 the programmer writes a sequence of commands that change the program's state — assignments, conditionals, loops, function calls. Variables 变量 hold state; statements change it; code is organised into procedures and functions (also called structured or structural programming). This is the style of Topics 9 and 11 (Python, C). Strong when the algorithm has clear sequential steps.

    Object-oriented programming (OOP)

    In object-oriented programming 面向对象编程 programs are built from objects 对象 — units combining data (attributes 属性) and operations (methods 方法). Objects are instances 实例 of classes 类. The four pillars:

    • encapsulation 封装 — an object's data is hidden behind its methods; outside code uses the public methods only, not the data directly. This protects the object and lets its internals change without breaking callers. For example, a BankAccount hides its balance; you change it only through deposit() and withdraw(), which can enforce a rule like "never go below zero".
    • inheritance 继承 — a subclass 子类 specialises a superclass 父类, inheriting its attributes and methods and adding or overriding 重写 them. Models "is-a" ("a Manager is an Employee").
    • polymorphism 多态 — different objects respond to the same method call differently; the caller need not know the exact type. Every Shape has Area(), and a Circle and a Rectangle each implement it their own way.
    • abstraction 抽象 — show a simple interface and hide the implementation.

    Other terms:

    • a constructor 构造函数 is a special method run when an object is created, to set up its attributes.
    • getters and setters read and write an object's attributes (its properties) through methods.
    • aggregation 聚合 and containment 包含 build an object from other objects (a "has-a" relationship).

    OOP is used for large systems, GUIs, simulations and games.

    The same call shape.Area() runs different code for each object: a Circle computes pi r squared, a Rectangle computes width times height
    Polymorphism: the same method call runs each object's own code
    A UML class diagram for Shape: a three-part box with the class name, private attributes (Name, Area, Perimeter, marked with minus) and public methods (SetShape, calculateArea, calculatePerimeter, marked with plus)
    A class diagram for a Shape: private attributes and public methods
    A UML inheritance diagram: the employee superclass at the top, with partTime and fullTime subclasses below, each joined to the superclass by a hollow-triangle generalisation arrow and adding its own attributes and methods
    Inheritance: partTime and fullTime are subclasses of employee
    A BankAccount object with a private balance reached only through the public methods deposit() and withdraw(); outside code cannot touch the data directly
    Encapsulation: an object's data is private, reached only through its public methods

    OOP as the examiner marks it

    Definitions. Class: a template (blueprint) that defines the attributes and methods of the objects of that type. Object: an instance of a class, created from it, with its own values for the attributes ("an occurrence of an object" is the exam's phrase for an instance). Attribute (property): a data item belonging to a class. Method: a procedure or function belonging to a class that acts on its attributes. Encapsulation: combining the attributes and methods in one class and restricting external access to the data: the attributes are private and can only be read or changed through public methods. Inheritance: a subclass acquires the attributes and methods of its parent (super) class and can add its own or override them. Polymorphism: methods with the same name that behave differently in different classes; typically a subclass redefines a method of its parent, and the right version runs for each object. Containment: a class has an object of another class as an attribute (a car has an engine). "Identify the feature that restricts external access to the data" is encapsulation; "the term for an occurrence of an object" is instance.

    "Outline the structure of a class" (three marks): attributes (properties) that hold the object's data, usually declared private; methods (procedures and functions) that act on those attributes, usually public; and a constructor, a method that runs when an object is created to initialise the attributes. "Give three benefits of OOP": code is reused through inheritance; data is protected by encapsulation, so it can only be changed by the class's own methods; a large program is split into classes that are written and tested independently, so it is easier to maintain and extend; classes model real-world entities, so the design is easier to understand; polymorphism lets the same call work for different objects.

    The class in pseudocode, as Paper 3 sets it:

    CLASS Car
        PRIVATE Registration : STRING
        PRIVATE Year : INTEGER
        PRIVATE Mileage : INTEGER
        PUBLIC PROCEDURE NEW(NewReg : STRING, NewYear : INTEGER)
            Registration ← NewReg
            Year ← NewYear
            Mileage ← 0
        ENDPROCEDURE
        PUBLIC FUNCTION GetMileage() RETURNS INTEGER
            RETURN Mileage
        ENDFUNCTION
        PUBLIC PROCEDURE AddMileage(Extra : INTEGER)
            Mileage ← Mileage + Extra
        ENDPROCEDURE
    ENDCLASS
    

    An object is created with MyCar ← NEW Car("AB12 CDE", 2020) and used with MyCar.AddMileage(150) and OUTPUT MyCar.GetMileage(). A subclass reuses the parent's constructor through SUPER:

    CLASS ElectricCar INHERITS Car
        PRIVATE BatteryCapacity : REAL
        PUBLIC PROCEDURE NEW(NewReg : STRING, NewYear : INTEGER, NewCapacity : REAL)
            SUPER.NEW(NewReg, NewYear)
            BatteryCapacity ← NewCapacity
        ENDPROCEDURE
    ENDCLASS
    

    The same class in Python, as Paper 4 expects it: attributes are made private with a double underscore, the constructor is __init__, and a subclass names its parent in brackets and calls super().__init__(…):

    class Car:
        def __init__(self, reg, year):
            self.__registration = reg
            self.__year = year
            self.__mileage = 0
        def get_mileage(self):
            return self.__mileage
        def add_mileage(self, extra):
            self.__mileage = self.__mileage + extra
    
    class ElectricCar(Car):
        def __init__(self, reg, year, capacity):
            super().__init__(reg, year)
            self.__capacity = capacity
    
    cars = []
    cars.append(Car("AB12 CDE", 2020))
    cars.append(ElectricCar("EV21 XYZ", 2023, 75.0))
    cars[1].add_mileage(150)
    print(cars[1].get_mileage())
    

    In Java the same ideas are private/public fields, a constructor with the class's name, extends and super(…); in VB.NET Private/Public, Sub New, Inherits and MyBase.New. A polymorphic method is written in the parent and overridden in the child with the same name; a call through a parent-type variable runs the child's version.

    Data structures as objects. Paper 4 builds a stack, linked list or binary tree from a Node class whose attributes are the data and one or two references to other nodes; a Tree (or LinkedList) class holds the root (or start) and the methods.

    A binary tree of Node objects: the Tree object's Root points to the node 15, whose Left and Right references point to the nodes 8 and 19, and so on, with None for empty references
    A binary tree built from objects: each Node holds Data plus Left and Right references, and the Tree holds the Root; inserting walks down the references
    CLASS Node
        PUBLIC Data : INTEGER
        PUBLIC Left : Node          // NULL when there is no child
        PUBLIC Right : Node
        PUBLIC PROCEDURE NEW(NewData : INTEGER)
            Data ← NewData
            Left ← NULL
            Right ← NULL
        ENDPROCEDURE
    ENDCLASS
    
    CLASS Tree
        PRIVATE Root : Node
        PUBLIC PROCEDURE Insert(NewData : INTEGER)
            DECLARE NewNode, Current : Node
            DECLARE Placed : BOOLEAN
            NewNode ← NEW Node(NewData)
            IF Root = NULL THEN
                Root ← NewNode
            ELSE
                Current ← Root
                Placed ← FALSE
                WHILE NOT Placed
                    IF NewData < Current.Data THEN
                        IF Current.Left = NULL THEN
                            Current.Left ← NewNode
                            Placed ← TRUE
                        ELSE
                            Current ← Current.Left
                        ENDIF
                    ELSE
                        IF Current.Right = NULL THEN
                            Current.Right ← NewNode
                            Placed ← TRUE
                        ELSE
                            Current ← Current.Right
                        ENDIF
                    ENDIF
                ENDWHILE
            ENDIF
        ENDPROCEDURE
    ENDCLASS
    

    A find method walks the same path and returns TRUE when Current.Data = Target, FALSE when it reaches NULL; an in-order output method is recursive: output the left subtree, the node, then the right subtree. For a linked list the node has one reference, Next, and the list class holds Start; for a stack built from a list, push and pop both work at Start.

    Worked example. A game has characters. Each has a name, health (starting at 100) and a position given by X and Y. Write a class Character with a constructor and a method Move(DX, DY); then a subclass Wizard that adds Mana (starting at 50) and a method CastSpell() that takes 10 mana and returns TRUE if there was enough.

    CLASS Character
        PRIVATE Name : STRING
        PRIVATE Health : INTEGER
        PRIVATE X : INTEGER
        PRIVATE Y : INTEGER
        PUBLIC PROCEDURE NEW(NewName : STRING, StartX : INTEGER, StartY : INTEGER)
            Name ← NewName
            Health ← 100
            X ← StartX
            Y ← StartY
        ENDPROCEDURE
        PUBLIC PROCEDURE Move(DX : INTEGER, DY : INTEGER)
            X ← X + DX
            Y ← Y + DY
        ENDPROCEDURE
    ENDCLASS
    
    CLASS Wizard INHERITS Character
        PRIVATE Mana : INTEGER
        PUBLIC PROCEDURE NEW(NewName : STRING, StartX : INTEGER, StartY : INTEGER)
            SUPER.NEW(NewName, StartX, StartY)
            Mana ← 50
        ENDPROCEDURE
        PUBLIC FUNCTION CastSpell() RETURNS BOOLEAN
            IF Mana >= 10 THEN
                Mana ← Mana - 10
                RETURN TRUE
            ELSE
                RETURN FALSE
            ENDIF
        ENDFUNCTION
    ENDCLASS
    

    The marks are for private attributes, a constructor that sets every attribute, the inheritance line, the call to the parent's constructor, and a method that uses and changes the object's own data. When the question asks for a class diagram, draw a box in three parts (name; attributes with - for private; methods with + for public) and join a subclass to its parent with an arrow pointing at the parent.

    Declarative programming

    In declarative programming 声明式编程 you say what to compute, not how — the runtime works out the steps. Two kinds:

    • functional programming 函数式编程 — built from pure functions 纯函数 (no side effects 副作用; same input always gives the same output) composed together. Examples: Haskell, Lisp.
    • logic programming 逻辑编程 — state facts and rules; the engine answers a goal (query) by inference. Example: Prolog.

    A familiar declarative example is SQL 结构化查询语言: SELECT * FROM Customer WHERE Country = 'UK' says what you want, not how to walk the records.

    Facts, rules and goals are what the exam tests in the declarative paradigm. Given these facts 事实 (statements that are true) and a rule 规则 (a conclusion that holds when its conditions hold):

    01 type(leopard, wild).
    02 type(lion, wild).
    03 type(tabby, domestic).
    04 size(leopard, large).
    05 size(lion, large).
    06 size(tabby, small).
    07 dangerous(X) IF type(X, wild) AND size(X, large).
    

    "Write the result of the goal type(X, wild)": X = leopard, X = lion. The engine matches the goal against each fact in turn; every match is a solution, and a capital letter is a variable that the match fills in. "Write a fact to show that a cheetah is wild": type(cheetah, wild). "Explain what line 07 does": it defines a rule with the conclusion dangerous(X), which is true for any X that is both wild and large, so dangerous(A) returns A = leopard, A = lion. "Write a rule: a feature F may be available for a body style B if F is a feature and B is a body style and F is not unavailable for B": may_be_available(F, B) IF feature(F) AND body_style(B) AND NOT unavailable(F, B). Copy the exact predicate names and argument order used in the question's facts; a new fact ends with a full stop, and a rule's conditions are joined with AND.

    Comparing paradigms

    Paradigm Strength Typical languages
    Low-level maximum control, speed assembly
    Imperative direct, intuitive C, Python
    Object-oriented modular, models entities Java, C#, Python
    Functional clear, no side effects Haskell, F#
    Logic inference, rules Prolog
    Database data queries SQL

    Modern languages often mix paradigms — Python supports all of procedural, OOP and functional. The right one depends on the problem.

    Explore · ⁨Khám phá⁩

    Programming concept lab · ⁨Phòng thí nghiệm khái niệm lập trình⁩

    Connect examples to the programming idea they show.

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    programming paradigm/ˈprəʊɡræmɪŋ ˈpærədaɪm/ paradigm lập trình
    facts/fækts/ sự thật
    rule/ruːl/ quy tắc
    low-level/ləʊ ˈlevl/ cấp thấp
    registers/ˈredʒɪstəz/ thanh ghi
    memory addresses/ˈmeməri əˈdresɪz/ địa chỉ bộ nhớ
    objects/ˈɒbdʒekts/ đối tượng
    attributes/ˈætrɪbjuːts/ thuộc tính
    methods/ˈmeθədz/ phương thức
    machine code/məˈʃiːn kəʊd/ mã máy
    assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ ngôn ngữ assembly
    addressing modes/əˈdresɪŋ məʊdz/ chế độ địa chỉ hóa
    imperative programming/ɪmˈperətɪv ˈprəʊɡræmɪŋ/ lập trình mệnh lệnh
    Variables/ˈveərɪəblz/ Biến (Variables)
    object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ lập trình hướng đối tượng
    instances/ˈɪnstənsɪz/ thể hiện
    classes/ˈklæsɪz/ lớp
    encapsulation/ɪnˌkæpsjʊˈleɪʃn/ encapsulation
    inheritance/ɪnˈherɪtəns/ di sản
    subclass/ˈsʌbklæs/ lớp con
    superclass/ˈsuːpəklæs/ siêu lớp
    overriding/ˌəʊvəˈraɪdɪŋ/ ghi đè
    polymorphism/ˈpɒlɪmɔːfɪzəm/ đa hình
    abstraction/əbˈstrækʃn/ trừu tượng hóa
    constructor/kənˈstrʌktə/ constructor
    aggregation/ˌæɡrɪˈɡeɪʃn/ tổng hợp
    containment/kənˈteɪnmənt/ bao hàm
    declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ lập trình khai báo
    functional programming/ˈfʌŋkʃənl ˈprəʊɡræmɪŋ/ lập trình hàm
    pure functions/pjʊə ˈfʌŋkʃnz/ hàm thuần túy
    side effects/saɪd ɪˈfekts/ tác dụng phụ
    logic programming/ˈlɒdʒɪk ˈprəʊɡræmɪŋ/ lập trình logic
    SQL/ˌes kjuː ˈel/ SQL
    20.2

    File processing

    Syllabus · ⁨Chương trình⁩
    English
    Candidates should be able to: Notes and guidance
    Write code to perform file-processing operations Open (in read, write, append mode) and close a file Read a record from a file and write a record to a file Perform file-processing operations on serial, sequential, random files
    Show understanding of an exception and the importance of exception handling Know when it is appropriate to use exception handling Write program code to use exception handling
    Tiếng Việt
    Thí sinh cần có thể: Ghi chú và hướng dẫn
    Viết mã để thực hiện các thao tác xử lý tập tin Mở (ở chế độ đọc, ghi, kéo dài) và đóng tập tin Đọc một bản ghi từ tập tin và ghi một bản ghi vào tập tin Thực hiện các thao tác xử lý tập tin trên các tập tin dãy, liên tiếp, ngẫu nhiên
    Thể hiện sự hiểu biết về ngoại lệ và tầm quan trọng của xử lý ngoại lệ Biết khi nào thích hợp để sử dụng xử lý ngoại lệ Viết mã chương trình để sử dụng xử lý ngoại lệ

    Source: Cambridge International syllabus · ⁨Nguồn: Chương trình Cambridge International⁩

    This extends the file 文件 handling from Topic 10, processing serial, sequential and random (direct-access) files. Pseudocode operations: OPENFILE name FOR READ | WRITE | APPEND (READ opens an existing file, WRITE creates/overwrites, APPEND adds to the end); READFILE name, line; WRITEFILE name, value; CLOSEFILE name; and EOF(name) which is TRUE at the end.

    Read a whole file:

    OPENFILE "names.txt" FOR READ
    WHILE NOT EOF("names.txt") DO
        READFILE "names.txt", thisName
        OUTPUT thisName
    ENDWHILE
    CLOSEFILE "names.txt"
    

    Search a file (stop when found):

    found ← FALSE
    OPENFILE "people.txt" FOR READ
    WHILE NOT EOF("people.txt") AND NOT found DO
        READFILE "people.txt", line
        IF line = target THEN
            found ← TRUE
        ENDIF
    ENDWHILE
    CLOSEFILE "people.txt"
    

    Updating a file in place

    Most languages can't edit a text file in place. Instead: open the original for READ and a temporary file for WRITE; for each line, write the new version if it should change, else the original; close both; then replace the original with the temp file. The same pattern handles deleting lines (skip them) and inserting lines.

    Updating a file in place: read the original file, write the changed lines to a temp file, then replace the original with the temp file
    Updating a file in place: read the original, write changes to a temp file, then replace the original

    Records and random-access files

    Opening modes. READ: the file must exist and reading starts at the beginning. WRITE: a new file is created, and an existing file of that name is overwritten. APPEND: writing adds to the end of an existing file. Every file that is opened is closed with CLOSEFILE, and EOF(name) is TRUE when the last item has been read.

    Three file organisations. In a serial file the records are in the order they were added; in a sequential file they are in key order; both are read from the start. A random file 随机文件 (direct-access file) stores each record at an address calculated from its key by a hashing 哈希 function, so one record is found without reading the others. Records are declared as a user-defined type:

    TYPE AccountRecord
        DECLARE AccNo : INTEGER
        DECLARE Name : STRING
        DECLARE Balance : REAL
        DECLARE Active : BOOLEAN
    ENDTYPE
    
    A key 2317 hashed with MOD 1000 to the address 317, then SEEK and GETRECORD on the file Acc.dat, shown as a row of equal-size record slots with slot 317 highlighted
    Finding one record in a random file: the key is hashed to an address, the file pointer seeks straight to that slot and the record is read; no other record is touched

    The random-file operations in pseudocode are OPENFILE "Acc.dat" FOR RANDOM, SEEK "Acc.dat", Address (move the file pointer to that record), GETRECORD "Acc.dat", Rec (read the record there) and PUTRECORD "Acc.dat", Rec (write the record there). Finding a customer by account number, as Paper 3 sets it:

    DECLARE Rec : AccountRecord
    DECLARE Target, Address : INTEGER
    INPUT Target
    Address ← Target MOD 1000              // the hashing function
    OPENFILE "Acc.dat" FOR RANDOM
    SEEK "Acc.dat", Address
    GETRECORD "Acc.dat", Rec
    WHILE Rec.AccNo <> Target AND Rec.AccNo <> 0    // 0 marks an empty slot
        Address ← Address + 1               // a collision: try the next slot
        SEEK "Acc.dat", Address
        GETRECORD "Acc.dat", Rec
    ENDWHILE
    IF Rec.AccNo = Target THEN
        OUTPUT Rec.Name, Rec.Balance
    ELSE
        OUTPUT "No such account"
    ENDIF
    CLOSEFILE "Acc.dat"
    

    To store a record, hash its key, SEEK to the address and PUTRECORD, stepping on past any slot already occupied. Marks go to the hash, the SEEK before the GET or PUT, the comparison with the target, the handling of a collision, and closing the file.

    Worked example. ActiveFile.dat holds AccountRecord records. Write pseudocode that copies every record whose Active field is FALSE to the end of ArchiveFile.dat.

    DECLARE Rec : AccountRecord
    OPENFILE "ActiveFile.dat" FOR READ
    OPENFILE "ArchiveFile.dat" FOR APPEND
    WHILE NOT EOF("ActiveFile.dat")
        READFILE "ActiveFile.dat", Rec
        IF Rec.Active = FALSE THEN
            WRITEFILE "ArchiveFile.dat", Rec
        ENDIF
    ENDWHILE
    CLOSEFILE "ActiveFile.dat"
    CLOSEFILE "ArchiveFile.dat"
    

    Text files in Python (Paper 4): file = open("HighScore.txt", "r"), then for line in file: with line.strip() and line.split(",") to separate the fields, int(…) to convert a score, and file.close(); to write, open(name, "w") (or "a" to append) and file.write(str(score) + "\n"). A high-score table is read into a list of records, the new score inserted at its place, and the whole list written back. The examiner marks the open with the correct mode, a loop that reads every line, the conversion of text to numbers, and the close.

    Pitfalls

    Forgetting to close a file (data may be lost); opening for WRITE when you meant APPEND (overwrites everything); reading past EOF; hard-coded paths — a path like /Users/Admin/data.txt breaks on another machine, so use a relative constant such as DataFile = "./data/scores.txt".

    Explore · ⁨Khám phá⁩

    File access route · ⁨Đường dẫn truy cập tập tin⁩

    Follow a file from storage to program and back safely. · ⁨Theo dõi tập tin từ bộ lưu trữ đến chương trình và trở lại an toàn.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    file/faɪl/ tệp
    random file/ˈrændəm faɪl/ tệp ngẫu nhiên
    hashing/ˈhæʃɪŋ/ hashing
    20.2

    Exception handling

    An exception 异常 is an error or unexpected condition during execution — divide by zero, file not found, network failure, an array 数组 index out of range. Exception handling 异常处理 lets a program detect it and respond gracefully instead of crashing.

    It matters because real programs face errors that cannot be prevented up front (files moved, networks down, bad input); without it, every operation needs its own IF check; and it separates the normal flow from the error handling, so the main path reads cleanly. For example, a file may be deleted by another user between your program checking it exists and actually opening it — you cannot prevent that, only handle the failure when it happens.

    "Describe, with an example, what is meant by an exception" (two marks). An unexpected event or error that occurs during the execution of a program (at run time) and interrupts its normal flow; for example dividing by zero, opening a file that does not exist, converting non-numeric input to an integer, an array index out of range, or running out of memory. "Identify two possible causes of exceptions" is answered from that list, plus "a device or network is not available" and "invalid data type entered".

    "State the reasons for including exception handling" (three marks). To stop the program crashing (terminating unexpectedly); to output a meaningful message to the user rather than a system error; to allow the program to recover and continue, for example by asking for the input again, or to close files safely before it ends; and because some errors cannot be predicted when the program is written. "Describe how program termination due to an exception can be avoided": put the statements that might raise the exception inside a TRY block; write an EXCEPT (catch) block for that exception that handles it, for example by outputting a message, so that execution continues after the block instead of stopping. "Explain what is meant by exception handling": detecting an exception when it occurs and running code (the handler) that deals with it so that the program continues.

    Pattern

    TRY
        OPENFILE "data.txt" FOR READ
        READFILE "data.txt", line
        OUTPUT line
        CLOSEFILE "data.txt"
    EXCEPT FileNotFound
        OUTPUT "Sorry, the file does not exist."
    EXCEPT ReadError
        OUTPUT "Sorry, error reading the file."
    ENDTRY
    

    The TRY block holds the code that might fail; the first matching EXCEPT block runs. Real languages also have a catch-all EXCEPT and a FINALLY block that runs whether or not an exception happened — useful for cleanup (closing files).

    Exception flow: if the TRY block raises an exception, control jumps to the matching EXCEPT; with no exception it is skipped. Either way the FINALLY block runs, then the program continues
    Exception flow: an exception jumps to the matching EXCEPT; FINALLY always runs before the program continues

    Raising an exception

    A subroutine that detects an error can raise 抛出 an exception so the caller handles it:

    PROCEDURE Divide(a : INTEGER, b : INTEGER) RETURNS INTEGER
        IF b = 0 THEN
            RAISE DivideByZero
        ENDIF
        RETURN a DIV b
    ENDPROCEDURE
    

    Where to handle exceptions

    Handle them close to the error if the response is simple (a message, a retry), or higher up the call stack 调用栈 if only the outer code knows what to do (a top-level GUI loop logs the error and shows a friendly dialog). Don't swallow exceptions silently — at least log them, or debugging becomes impossible.

    Common exceptions: FileNotFound, IOError, DivisionByZero, IndexOutOfRange, InvalidArgument, NullReference, OutOfMemory. Wrapping each failing operation in a TRY with the right EXCEPT handlers gives a program that degrades gracefully instead of crashing.

    Worked example (Paper 4). Write a function that reads whole numbers, one per line, from a file whose name is passed as a parameter and returns them in a list. It must not crash if the file does not exist or a line is not a whole number.

    def read_scores(filename):
        scores = []
        try:
            file = open(filename, "r")
            for line in file:
                scores.append(int(line))
            file.close()
        except FileNotFoundError:
            print("The file", filename, "does not exist")
        except ValueError:
            print("A line in the file was not a whole number")
        return scores
    

    The try block holds the code that can fail (the open and the conversion); each except names one exception and does something useful; the function still returns a list, so the caller continues. In Java the same shape is try { … } catch (FileNotFoundException e) { … } catch (NumberFormatException e) { … }; in VB.NET Try … Catch ex As FileNotFoundException … End Try. Marks: the risky statements inside the try, the correct exception names, a message for each, and the program continuing afterwards; a catch-all except: gets the crash mark but not the "appropriate exception" mark.

    Worked example. A text file of members needs one member's phone number changed. Why can the program not simply overwrite that line, and what is the pattern? A text file's lines are different lengths, and the file has no gaps to absorb a difference: a longer replacement would run into the next record, and a shorter one would leave part of the old line behind. So the pattern is to open the original for READ and a temporary file for WRITE, read every line in turn, writing the new version for the line that changes and the original line for all the others, close both, then replace the original with the temporary file. The same shape handles deleting (skip the line) and inserting (write the extra line). Note that every line gets written, not only the changed one - writing just the new record and losing the rest of the file is the classic slip.

    Explore · ⁨Khám phá⁩

    How exception handling flows · ⁨Cách xử lý ngoại lệ vận hành⁩

    Step through what happens when code fails. The exception jumps out of the normal flow to a handler, FINALLY cleans up either way, and the program carries on instead of crashing. · ⁨Trình tự những gì xảy ra khi mã thất bại. Ngoại lệ nhảy ra khỏi luồng bình thường sang một trình xử lý, FINALLY làm sạch dù có hay không có lỗi, và chương trình tiếp tục thay vì sập.⁩

    Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
    English Tiếng Việt
    array/əˈreɪ/ mảng (array)
    exception/ekˈsepʃn/ trạng thái ngoại lệ
    exception handling/ekˈsepʃn ˈhændlɪŋ/ xử lý trạng thái ngoại lệ
    raise/reɪz/ tăng
    call stack/kɔːl stæk/ ngăn xếp gọi
    20.2

    Definitions the examiner accepts

    A definition question is marked against fixed wording. Learn these exactly, and give one answer only.

    Term Definition
    programming paradigm a style or way of programming, with its own way of structuring a program
    imperative language the program is a sequence of statements that change the program's state; the programmer says how the task is done
    declarative language the program states facts and rules and the inference engine works out how to find the answer
    class a template defining the attributes and methods of the objects of that type
    object (instance) an occurrence of a class, with its own values for the attributes
    attribute a data item that belongs to a class
    method a procedure or function that belongs to a class and acts on its attributes
    encapsulation keeping the attributes and methods together in a class and restricting external access to the data, so that it is changed only through public methods
    inheritance a subclass acquires the attributes and methods of its parent class and can add or override them
    polymorphism methods with the same name that behave differently for different classes
    constructor a method that runs when an object is created and initialises its attributes
    containment a class has an object of another class as one of its attributes
    fact a statement in a declarative program that is true
    rule a conclusion that holds when its conditions are true
    serial, sequential, random file records in the order added; records in key order; each record at an address calculated from its key
    exception an unexpected error or event during execution that interrupts the normal flow
    exception handling detecting an exception when it occurs and running code that deals with it so that the program continues
    20.2

    Exam tips

    • Paradigms: know the one-line description of each and be ready to name the paradigm from a code sample; low-level questions want the five addressing modes and what the accumulator receives.
    • OOP definitions come up every session: class, object, attribute, method, encapsulation, inheritance, polymorphism, constructor. Write a class in pseudocode with PRIVATE attributes, a PUBLIC NEW and getters; a subclass with INHERITS and SUPER.NEW.
    • Declarative: a goal with a variable returns every matching fact; a rule is a conclusion IF conditions joined with AND; copy the question's predicate names exactly.
    • Files: the three modes and what each does to an existing file; READFILE in a WHILE NOT EOF loop; random files use a hash, SEEK, GETRECORD and PUTRECORD, with a step-on for collisions.
    • Exceptions: definition with an example, three reasons for handling them, and TRY with a named EXCEPT that lets the program continue.

    Common mistakes

    • Describing a declarative program as "a sequence of steps that gives the answer"; it states what is true and what is wanted, not how.
    • Confusing an object with a class, or an instance with an attribute; the question "an occurrence of an object" wants instance.
    • Declaring the attributes PUBLIC, or reaching them from outside the class instead of through a getter, which loses the encapsulation marks.
    • A subclass constructor that sets the parent's attributes directly instead of calling SUPER.NEW.
    • Explaining polymorphism as "many objects"; it is the same method name behaving differently for different classes.
    • Opening a file FOR WRITE to add a record, which destroys the existing contents; use APPEND.
    • Reading a random file from the start; SEEK to the hashed address first.
    • Putting the exception handler around code that cannot fail, or catching everything with no message, or describing exception handling as "checking the input with IF".

Log in or create account · ⁨Đăng nhập hoặc tạo tài khoản⁩

IGCSE, A-Level & AP