Skip to content · ⁨Перейти к содержанию⁩
Subjects · ⁨Предметы⁩
  • 1 Style and layout · ⁨Стиль и макет⁩
    1.1

    Ключевые слова и регистр

    English

    Pseudocode 伪代码 is the language Cambridge writes algorithms 算法 in. It is not a real programming language — no computer runs it — but the exam marks it as if it were, so the form matters.

    Every keyword 关键字 is written in upper case: IF, REPEAT, PROCEDURE, OUTPUT.

    • Write IF, never if or If.
    • A keyword can never be used as a name of your own: you may not call a variable FOR.

    Common mistakes

    • Lower-case keywords. The mark scheme expects upper case.
    • Inventing keywords. Only the words in this handout are in the syllabus.
    Русский

    Псевдокод — это язык, которым Cambridge пишет алгоритмы. Это не настоящий язык программирования — его не выполняет компьютер — но экзамен оценивает его так, будто он есть, поэтому форма имеет значение.

    Каждое ключевое слово пишется заглавными буквами: IF, REPEAT, PROCEDURE, OUTPUT.

    DECLARE Count : INTEGER
    Count ← 3
    IF Count > 0
      THEN
        OUTPUT "Ready"
    ENDIF
    
    • Пишите IF, никогда не if и не If.
    • Ключевое слово никогда нельзя использовать как имя: вы не можете назвать переменную FOR.

    Распространенные ошибки

    • Строчные ключевые слова. Схема оценивания ожидает заглавные буквы.
    • Выдуманные ключевые слова. Только слова в этом раздаточном материале входят в программу.
    1.2

    Идентификаторы

    English

    An identifier 标识符 is the name you give a variable 变量, a constant 常量, a procedure 过程 or a function 函数.

    Four rules, all from the syllabus:

    • It must start with a capital letter: Count, not count.
    • It may hold only letters and digits — no spaces, no punctuation.
    • It is not case-sensitive 不区分大小写, so Count and COUNT are the same name. Pick one spelling and keep it.
    • Make it mean something. NumberOfPlayers earns the reader's time; N does not.

    Common mistakes

    • count ← 0 — a lower-case start. 0478 requires the capital.
    • Number of players — spaces are not allowed inside a name.
    Русский

    Идентификатор — это имя, которое вы присваиваете переменной, константе, процедуре или функции.

    DECLARE NumberOfPlayers : INTEGER
    NumberOfPlayers ← 4
    OUTPUT NumberOfPlayers
    

    Четыре правила, все из программы:

    • Оно должно начинаться с заглавной буквы: Count, а не count.
    • Оно может содержать только буквы и цифры — без пробелов и знаков препинания.
    • Оно не различает регистр, поэтому Count и COUNT — одно и то же имя. Выберите одну орфографию и придерживайтесь её.
    • Придайте ему смысл. NumberOfPlayers заслуживает время читателя; N нет.

    Распространенные ошибки

    • count ← 0 — начало со строчной буквы. Для 0478 требуется заглавная буква.
    • Number of players — пробелы внутри имени запрещены.
    1.3

    Комментарии и отступы

    English

    A comment 注释 starts with // and runs to the end of the line. It is for the human reader; the algorithm ignores it.

    Indentation 缩进 shows which statements are inside a structure. The syllabus asks for four spaces per level, with one exception you must know:

    • THEN and ELSE are indented two spaces from their IF.
    • The statements under them are indented four.
    • ENDIF lines up with its own IF.

    Common mistakes

    • Putting THEN on the IF line. That is the A-Level 9618 layout — see topic 11.
    • No indentation at all. A marker has to see the structure to award the structure marks.
    Русский

    Комментарий начинается со // и идет до конца строки. Он предназначен для человеческого читателя; алгоритм его игнорирует.

    // Swap the values of X and Y
    DECLARE X, Y, Temp : INTEGER
    X ← 1
    Y ← 2
    Temp ← X   // temporarily store X
    X ← Y
    Y ← Temp
    OUTPUT X, " ", Y
    

    Отступы показывают, какие операторы находятся внутри структуры. Программа требует четыре пробела на уровень, за исключением одного исключения, которое нужно знать:

    DECLARE X, Y : INTEGER
    X ← 7
    Y ← 3
    IF X > Y
      THEN
        OUTPUT "X is bigger"
      ELSE
        OUTPUT "Y is bigger or equal"
    ENDIF
    
    • THEN и ELSE имеют отступ два пробела от своего IF.
    • Операторы под ними имеют отступ четыре.
    • Строки ENDIF выровнены со своим собственным IF.

    Распространенные ошибки

    • Размещение THEN на строке IF. Это макет A-Level 9618 — см. тему 11.
    • Никаких отступов вообще. Эксперт должен видеть структуру, чтобы начислить баллы за нее.
  • 2 Variables, constants and types · ⁨Переменные, константы и типы⁩
    2.1

    Пять типов данных

    English

    0478 pseudocode has exactly five data types 数据类型. Learn the list — naming a type that is not on it loses the mark.

    Type Holds Example
    INTEGER a whole number 整数 42, -7
    REAL a number with a decimal part 小数 3.14, -0.5
    CHAR a single character 单个字符 'A'
    STRING a sequence of characters 字符串 "Hello"
    BOOLEAN TRUE or FALSE 布尔值 TRUE
    • A STRING is written in double quotes, a CHAR in single quotes.
    • TRUE and FALSE are keywords, so they are upper case and carry no quotes.

    Common mistakes

    • Writing FLOAT, DOUBLE or BOOL. Those are real languages, not this syllabus.
    • 'Hello' for a string — single quotes hold one character only.
    Русский

    В псевдокоде 0478 ровно пять типов данных. Выучите список — указание типа которого нет в нем, лишает балла.

    Тип Хранит Пример
    INTEGER целое число 42, -7
    REAL число с дробной частью 3.14, -0.5
    CHAR один символ 'A'
    STRING последовательность символов "Hello"
    BOOLEAN TRUE или FALSE TRUE
    DECLARE Age : INTEGER
    DECLARE Price : REAL
    DECLARE Grade : CHAR
    DECLARE Name : STRING
    DECLARE Passed : BOOLEAN
    Age ← 17
    Price ← 2.50
    Grade ← 'A'
    Name ← "Mei"
    Passed ← TRUE
    OUTPUT Name, " is ", Age, " and passed: ", Passed
    
    • STRING пишется в двойных кавычках, а CHAR — в одинарных.
    • TRUE и FALSE — ключевые слова, поэтому они пишутся заглавными буквами и не берутся в кавычки.

    Распространенные ошибки

    • Написание FLOAT, DOUBLE или BOOL. Это реальные языки, а не эта программа.
    • 'Hello' для строки — одинарные кавычки удерживают только один символ.
    2.2

    DECLARE (ОБЪЯВЛЕНИЕ)

    English

    DECLARE names a variable 变量 and fixes its type before you use it.

    Several names of one type go on a single line, separated by commas:

    • Declare a variable before its first use, near the top of the algorithm.
    • A variable keeps its type for the whole algorithm — an INTEGER never holds "Mei".

    Common mistakes

    • Leaving out the colon: DECLARE Counter INTEGER.
    • Using a variable that was never declared. The exam expects the declaration.
    Русский

    DECLARE называет переменную и фиксирует её тип до использования.

    DECLARE <identifier> : <data type>
    
    DECLARE Counter : INTEGER
    DECLARE TotalToPay : REAL
    Counter ← 1
    TotalToPay ← 19.99
    OUTPUT "Item ", Counter, " costs ", TotalToPay
    

    Несколько имен одного типа помещаются на одной строке, разделенные запятыми:

    DECLARE Length, Width, Area : INTEGER
    Length ← 6
    Width ← 4
    Area ← Length * Width
    OUTPUT "Area = ", Area
    
    • Объявите переменную до первого использования, в начале алгоритма.
    • Переменная сохраняет свой тип на весь алгоритм — INTEGER никогда не хранит "Mei".

    Распространенные ошибки

    • Пропуск двоеточия: DECLARE Counter INTEGER.
    • Использование переменной, которая никогда не была объявлена. На экзамене ожидается объявление.
    2.3

    CONSTANT (КОНСТАНТА)

    English

    A constant 常量 is a value that is fixed for the whole algorithm — a tax rate, π, the size of a class. Naming it once means a change is made in one place.

    • In 0478 the arrow is used, exactly as for an assignment.
    • The value must be a literal 字面量 — a number, a string, TRUE — never a calculation and never another variable.
    • A constant can never be given a new value later. That is the whole point of it.

    Common mistakes

    • CONSTANT TaxRate = 0.20. The = form is the A-Level 9618 spelling — see topic 11.
    • Assigning to a constant further down the algorithm.
    Русский

    Константа — это значение, которое неизменно на весь алгоритм — ставка налога, π, размер класса. Назначение имени означает, что изменение вносится в одном месте.

    CONSTANT <identifier> ← <value>
    
    CONSTANT TaxRate ← 0.20
    DECLARE Price, Tax : REAL
    Price ← 50.00
    Tax ← Price * TaxRate
    OUTPUT "Tax to pay: ", Tax
    
    • В 0478 используется стрелка, точно так же, как при присваивании.
    • Значение должно быть литералом — числом, строкой, TRUE — никогда вычислением и никогда другой переменной.
    • Константе никогда нельзя присвоить новое значение позже. В этом и состоит её суть.

    Распространенные ошибки

    • CONSTANT TaxRate = 0.20. Форма = — это написание A-Level 9618 — см. тему 11.
    • Присваивание константе далее по алгоритму.
  • 3 Assignment, input and output · ⁨Присваивание, ввод и вывод⁩
    3.1

    Стрелка присваивания

    English

    The assignment 赋值 operator is ←, a left-pointing arrow. It means take the value on the right and put it in the box on the left.

    Counter ← Counter + 1 looks impossible as mathematics and is ordinary as an instruction: work out the right-hand side with the value the box holds now, then store the result back.

    • If you cannot type ←, write <-. Both are accepted, here and in the exam.
    • The left side must be a single identifier or one array element. Never a calculation.

    Common mistakes

    • Counter = 0. In pseudocode = is a comparison, not an assignment — and confusing the two is the single commonest syntax error in this paper.
    • Counter + 1 ← Counter. The arrow points at the thing being changed.
    Русский

    Оператор присваивания — это ←, стрелка влево. Она означает взять значение справа и поместить его в ячейку слева.

    <identifier> ← <value>
    
    DECLARE Counter : INTEGER
    Counter ← 0
    Counter ← Counter + 1
    Counter ← Counter + 1
    OUTPUT Counter
    

    Counter ← Counter + 1 выглядит невозможным как математика и является обычной инструкцией: вычислите правую часть со значением, которое сейчас содержит ячейка, затем сохраните результат обратно.

    • Если вы не можете напечатать ←, напишите <-. Оба варианта принимаются здесь и на экзамене.
    • Левая сторона должна быть одним идентификатором или одним элементом массива. Никогда вычисление.

    Распространенные ошибки

    • Counter = 0. В псевдокоде = — это сравнение, а не присваивание — и путаница между ними — единичная наиболее частая синтаксическая ошибка в этом экзамене.
    • Counter + 1 ← Counter. Стрелка указывает на объект изменения.
    3.2

    INPUT (ВВОД) и OUTPUT (ВЫВОД)

    English

    INPUT reads a value from the user into a variable. OUTPUT displays one or more values.

    • INPUT takes exactly one variable, and that variable must already be declared.
    • OUTPUT takes any number of items separated by commas; they are printed one after another with nothing between them.
    • A literal 字面量 string in an OUTPUT goes in double quotes; a variable does not.

    Prompting the user

    An INPUT on its own shows nothing on screen, so a well-written algorithm prints a prompt 提示 first:

    Common mistakes

    • INPUT "Enter a number", X — the prompt is a separate OUTPUT statement.
    • OUTPUT "Total: " + Total. 0478 joins output items with a comma; + is arithmetic and & belongs to A-Level 9618 (topic 11).
    • Forgetting the quotes: OUTPUT Hello looks for a variable called Hello.
    Русский

    INPUT считывает значение от пользователя в переменную. OUTPUT отображает одно или несколько значений.

    DECLARE Name : STRING
    DECLARE Age : INTEGER
    INPUT Name
    INPUT Age
    OUTPUT "Hello ", Name
    OUTPUT "Next year you will be ", Age + 1
    
    • INPUT принимает ровно одну переменную, и эта переменная уже должна быть объявлена.
    • OUTPUT принимает любое количество элементов, разделенных запятыми; они выводятся друг за другом, другим без ничего между ними.
    • Буквальная строка в OUTPUT берётся в двойные кавычки; переменная — нет.

    Запрос ввода от пользователя

    Сама по себе команда INPUT не выводит ничего на экран, поэтому хорошо написанный алгоритм сначала печатает приглашение: сначала:

    DECLARE Radius : REAL
    OUTPUT "Enter the radius: "
    INPUT Radius
    OUTPUT "The diameter is ", Radius * 2
    

    Распространенные ошибки

    • INPUT "Enter a number", X — приглашение является отдельным оператором вывода ⟨OUTPUT⟩.
    • OUTPUT "Total: " + Total. Команда 0478 соединяет элементы вывода через запятую; ⟨+⟩ — это арифметика и, ⟨&⟩ относится к программе A-Level 9618 (тема 11).
    • Забывание кавычек: OUTPUT Hello ищет переменную с именем Hello.
  • 4 Arithmetic and logic · ⁨Арифметика и логика⁩
    4.1

    Арифметические операторы

    English

    Five arithmetic 算术 operators, in the order a calculator uses them.

    Operator Meaning A is 7, B is 2
    + add 加 A + B is 9
    - subtract 减 A - B is 5
    * multiply 乘 A * B is 14
    / divide 除 A / B is 3.5
    ^ raise to a power 幂 A ^ B is 49

    Brackets come first, then ^, then * and /, then + and - — the usual precedence 优先级. Use brackets whenever the reader would have to stop and think.

    Common mistakes

    • Expecting / to give a whole number. 7 / 2 is 3.5, not 3; for a whole number use DIV.
    • Writing A x B or A ÷ B. Use * and /.
    Русский

    Пять арифметических операторов в порядке их выполнения калькулятором.

    Оператор Значение A равно 7, B равно 2
    + сложение A + B равно 9
    - вычитание A - B равно 5
    * умножение A * B равно 14
    / деление A / B это 3.5
    ^ возведение в степень A ^ B равно 49
    DECLARE A, B : INTEGER
    A ← 7
    B ← 2
    OUTPUT "Sum: ", A + B
    OUTPUT "Product: ", A * B
    OUTPUT "Quotient: ", A / B
    OUTPUT "Power: ", A ^ B
    

    Скобки выполняются первыми, затем ^, затем * и /, затем + и - — стандартный приоритет . Используйте скобки всякий раз, когда читателю пришлось бы остановиться и подумать.

    DECLARE Total : REAL
    Total ← (12 + 18) / 2
    OUTPUT "Mean: ", Total
    

    Распространенные ошибки

    • Ожидается, что / вернет целое число. 7 / 2 это 3.5, а не 3; для получения целого числа используйте DIV.
    • Написание A x B или A ÷ B. Используйте ⟨*⟩ и ⟨/⟩.
    4.2

    DIV и MOD

    English

    Integer division 整数除法 answers two different questions, and 0478 writes each of them as a function 函数, with the two values in brackets.

    • DIV(a, b) — how many whole times b goes into a, the quotient 商.
    • MOD(a, b) — what is left over, the remainder 余数.

    Both take integers, and both return an integer.

    What they are for

    MOD is the standard test for divides exactly, which makes it the way to ask whether a number is even 偶数:

    DIV converts a total into whole units — seconds into minutes, pence into pounds:

    Common mistakes

    • 10 MOD 3. That is the A-Level 9618 form; 0478 uses the function form MOD(10, 3).
    • Mixing the two up. DIV gives the whole part; MOD gives what does not fit.
    Русский

    Целочисленное деление отвечает на два разных вопроса, и 0478 записывает каждый из них как функцию, принимая два значения в скобках.

    • ⟨DIV(a, b)⟩ — сколько раз целиком b помещается в a, частное.
    • ⟨MOD(a, b)⟩ — что осталось, остаток.
    OUTPUT DIV(10, 3)
    OUTPUT MOD(10, 3)
    OUTPUT DIV(17, 5)
    OUTPUT MOD(17, 5)
    

    Оба принимают целые числа и оба возвращают целое число.

    Для чего они нужны

    MOD — стандартная проверка делится без остатка, что позволяет спросить, является ли число четным:

    DECLARE Number : INTEGER
    Number ← 12
    IF MOD(Number, 2) = 0
      THEN
        OUTPUT Number, " is even"
      ELSE
        OUTPUT Number, " is odd"
    ENDIF
    

    DIV преобразует общую величину в целые единицы — секунды в минуты, пенни в фунты:

    DECLARE Seconds : INTEGER
    Seconds ← 200
    OUTPUT DIV(Seconds, 60), " minutes and ", MOD(Seconds, 60), " seconds"
    

    Распространенные ошибки

    • ⟨10 MOD 3⟩. Это форма A-Level 9618; 0478 использует форму функции ⟨MOD(10, 3)⟩.
    • Перепутать их местами. ⟨DIV⟩ дает целую часть; ⟨MOD⟩ дает то, что не поместилось.
    4.3

    Реляционные и логические операторы

    English

    A relational operator 关系运算符 compares two values and produces TRUE or FALSE.

    Operator Means
    = is equal to 等于
    <> is not equal to 不等于
    > is greater than 大于
    < is less than 小于
    >= is greater than or equal to 大于等于
    <= is less than or equal to 小于等于

    The three logic operators 逻辑运算符 join conditions:

    • AND — both sides must be TRUE.
    • OR — at least one side must be TRUE.
    • NOT — turns TRUE into FALSE and back.

    Common mistakes

    • <> is the not equal sign here — not !=, which belongs to other languages.
    • IF Age >= 15 AND <= 18. Each side of AND needs its own complete comparison: Age >= 15 AND Age <= 18.
    • Calling these comparison operators in an answer. The syllabus term is relational.
    Русский

    Реляционный оператор сравнивает два значения и производит TRUE или FALSE.

    Оператор Означает
    = равно
    <> не равно
    > больше
    < меньше
    >= больше или равно
    <= меньше или равно
    DECLARE Mark : INTEGER
    Mark ← 55
    OUTPUT "Pass: ", Mark >= 50
    OUTPUT "Perfect: ", Mark = 100
    OUTPUT "Not zero: ", Mark <> 0
    

    Три логических оператора объединяют условия:

    • ⟨AND⟩ — обе стороны должны быть TRUE.
    • ⟨OR⟩ — хотя бы одна сторона должна быть TRUE.
    • ⟨NOT⟩ — превращает TRUE в FALSE и обратно.
    DECLARE Age : INTEGER
    DECLARE HasTicket : BOOLEAN
    Age ← 16
    HasTicket ← TRUE
    IF Age >= 15 AND HasTicket = TRUE
      THEN
        OUTPUT "Admitted"
    ENDIF
    IF NOT (Age > 18)
      THEN
        OUTPUT "Still a student rate"
    ENDIF
    

    Распространенные ошибки

    • ⟨<>⟩ здесь обозначает не равно — не ⟨!=⟩, который принадлежит другим языкам.
    • ⟨IF Age >= 15 AND <= 18⟩. Каждая сторона ⟨AND⟩ требует своего собственного полного сравнения: Age >= 15 AND Age <= 18.
    • Называть эти операторы операторами сравнения в ответе. Термин учебной программы — реляционный.
  • 5 String operations · ⁨Строковые операции⁩
    5.1

    LENGTH, UCASE и LCASE

    English

    0478 publishes four string 字符串 routines and no others. Three of them are here.

    LENGTH(<identifier>) returns how many characters 字符 a string holds — spaces included.

    UCASE(<identifier>) returns the string in upper case 大写, LCASE(<identifier>) in lower case 小写. Neither changes the original 原值 — each hands back a new value.

    That last line still prints Happy: to keep the change you must assign it back.

    Comparing without worrying about case

    UCASE on both sides is the standard way to accept an answer however it was typed:

    Common mistakes

    • Expecting UCASE(Name) to change Name. Assign the result back.
    • LENGTH counts characters, not words. LENGTH("Happy Days") is 10.
    Русский

    0478 публикует четыре строковые подпрограммы и никаких других. Три из них здесь.

    LENGTH(<identifier>) возвращает количество символов, содержащихся в строке — включая пробелы.

    OUTPUT LENGTH("Happy Days")
    OUTPUT LENGTH("")
    

    UCASE(<identifier>) возвращает строку в верхнем регистре, ⟨LCASE(<identifier>)⟩ в нижнем регистре. Ни один из них не изменяет оригинал — каждый возвращает новое значение.

    DECLARE Name : STRING
    Name ← "Happy"
    OUTPUT UCASE(Name)
    OUTPUT LCASE(Name)
    OUTPUT Name
    

    Эта последняя строка все еще выводит ⟨Happy⟩: чтобы сохранить изменение, нужно присвоить результат обратно.

    DECLARE Name : STRING
    Name ← "Happy"
    Name ← UCASE(Name)
    OUTPUT Name
    

    Сравнение без учета регистра

    Применение ⟨UCASE⟩ к обеим сторонам — стандартный способ принять ответ, независимо от того, как он был набран:

    DECLARE Answer : STRING
    Answer ← "yes"
    IF UCASE(Answer) = "YES"
      THEN
        OUTPUT "Accepted"
    ENDIF
    

    Распространенные ошибки

    • Ожидание, что ⟨UCASE(Name)⟩ изменит ⟨Name⟩. Присвойте результат обратно.
    • LENGTH считает символы, а не слова. LENGTH("Happy Days") это 10.
    5.2

    SUBSTRING

    English

    SUBSTRING(<identifier>, <start>, <length>) pulls a piece out of a string — starting at position start, taking length characters.

    ⚠️ Counting starts at 1, not 0. The first character of "Happy Days" is at position 1.

    Taking one character, and the rest

    LENGTH inside SUBSTRING is what makes the last two lines work for a word of any size — hard-coding 8 would break the moment the word changed.

    Reading a string one character at a time

    Common mistakes

    • Starting at 0. Position 1 is the first character.
    • Reading the third argument as an end position. It is a count — SUBSTRING(W, 2, 3) takes three characters beginning at the second.
    • Asking for more characters than the string has.
    Русский

    SUBSTRING(<identifier>, <start>, <length>) извлекает кусок из строки — начиная с позиции start, беря length символов.

    OUTPUT SUBSTRING("Happy Days", 1, 5)
    OUTPUT SUBSTRING("Happy Days", 7, 4)
    

    ⚠️ Нумерация начинается с 1, а не с 0. Первый символ ⟨"Happy Days"⟩ находится на позиции 1.

    Извлечение одного символа и всего остального

    DECLARE Word : STRING
    Word ← "Computer"
    OUTPUT "First letter: ", SUBSTRING(Word, 1, 1)
    OUTPUT "Last letter: ", SUBSTRING(Word, LENGTH(Word), 1)
    OUTPUT "Without the first: ", SUBSTRING(Word, 2, LENGTH(Word) - 1)
    

    LENGTH внутри ⟨SUBSTRING⟩ — это то, благодаря чему последние две строки работают для слова любого размера — жесткая привязка ⟨8⟩ сломалась бы в тот момент, когда слово изменится.

    Чтение строки по одному символу

    DECLARE Word : STRING
    DECLARE Index : INTEGER
    Word ← "Cat"
    FOR Index ← 1 TO LENGTH(Word)
        OUTPUT SUBSTRING(Word, Index, 1)
    NEXT Index
    

    Распространенные ошибки

    • Начиная с 0. Позиция 1 — это первый символ.
    • Чтение третьего аргумента как конечной позиции. Это счет — ⟨SUBSTRING(W, 2, 3)⟩ берет три символа, начиная со второго.
    • Запрос большего количества символов, чем есть в строке.
  • 6 Selection · ⁨Выбор⁩
    6.1

    IF, THEN, ELSE, ENDIF

    English

    Selection 选择 runs one group of statements or another, depending on a condition 条件.

    Add ELSE for the other case. Exactly one of the two branches 分支 runs — never both, never neither.

    The layout is the one part students lose marks on, so learn it as a shape:

    • IF and its condition on one line, nothing after the condition.
    • THEN and ELSE on their own lines, indented two spaces.
    • The statements indented four.
    • ENDIF back at the column of its IF.

    Nesting 嵌套

    An IF inside an IF handles more than two outcomes. Each one needs its own ENDIF.

    Common mistakes

    • Forgetting ENDIF. Every IF closes, and a missing one is a syntax error 语法错误 the marker will see at a glance.
    • IF Mark >= 50 THEN OUTPUT "Pass" on one line. No such form exists in either syllabus; write the three lines.
    • IF Mark = 50 THEN written as IF Mark ← 50. The arrow assigns; = compares.
    Русский

    Выбор (Selection) выполняет одну группу инструкций или другую в зависимости от условия.

    IF <condition>
      THEN
        <statements>
    ENDIF
    
    DECLARE Mark : INTEGER
    Mark ← 72
    IF Mark >= 50
      THEN
        OUTPUT "Pass"
    ENDIF
    

    Добавьте ⟨ELSE⟩ для другого случая. Точно одна из двух ветвей выполняется — никогда ни обе, ни ни одна. Макет — это та часть, которая приводит к потере баллов студентами, поэтому выучите его как форму:

    DECLARE Mark : INTEGER
    Mark ← 41
    IF Mark >= 50
      THEN
        OUTPUT "Pass"
      ELSE
        OUTPUT "Fail"
    ENDIF
    

    Макет — это та часть, из-за которой студенты теряют баллы, поэтому выучите его как форму:

    • IF и его условие на одной строке, ничего после условия.
    • THEN и ELSE на отдельных строках, отступ два пробела.
    • Инструктуи, отступ четыре пробела.
    • ENDIF возвращается в колонку своего IF.

    Вложенность

    Конструкция IF внутри конструкции IF обрабатывает более двух вариантов. Каждый из них требует собственного оператора ENDIF.

    DECLARE Mark : INTEGER
    Mark ← 85
    IF Mark >= 80
      THEN
        OUTPUT "Distinction"
      ELSE
        IF Mark >= 50
          THEN
            OUTPUT "Pass"
          ELSE
            OUTPUT "Fail"
        ENDIF
    ENDIF
    

    Распространенные ошибки

    • Забывание оператора ENDIF. Каждая конструкция IF закрывается, и отсутствие закрывающего элемента является синтаксической ошибкой, маркер заметит мгновенно.
    • IF Mark >= 50 THEN OUTPUT "Pass" на одной строке. Такой формы не существует ни в одном из учебников; напишите три строки.
    • IF Mark = 50 THEN записывается как IF Mark ← 50. Стрелка присваивает; = сравнивает.
    6.2

    СЛУЧАЙ

    English

    When one variable is tested against several single values, CASE OF says it far more clearly than a stack of nested IFs.

    • Each branch is a value, a colon, then what to do.
    • OTHERWISE catches everything the listed values missed. It is optional, and writing one is good practice — it is what happens when the user types something unexpected.
    • The first matching branch runs, and the rest are skipped.

    A range, and a character

    Common mistakes

    • Using CASE OF for a condition. It tests one variable against values; Mark >= 50 needs an IF.
    • Forgetting ENDCASE.
    • Leaving out OTHERWISE and then wondering why an unexpected value does nothing at all.
    Русский

    яснее, чем стопка вложенных ⟨CASE OF⟩. яснее, чем стопка вложенных IF.

    CASE OF <identifier>
        <value 1> : <statement>
        <value 2> : <statement>
        OTHERWISE <statement>
    ENDCASE
    
    DECLARE Choice : INTEGER
    Choice ← 2
    CASE OF Choice
        1 : OUTPUT "You chose north"
        2 : OUTPUT "You chose south"
        3 : OUTPUT "You chose east"
        4 : OUTPUT "You chose west"
        OTHERWISE OUTPUT "That is not a direction"
    ENDCASE
    
    • Каждая ветвь — это значение, двоеточие, затем действия.
    • OTHERWISE перехватывает всё, что пропустили перечисленные значения. Она необязательна, и написание одной является хорошей практикой — это то, что происходит, когда пользователь вводит неожиданные данные.
    • Выполняется первая подходящая ветвь, остальные пропускаются.

    Диапазон и символ

    DECLARE Grade : CHAR
    Grade ← 'B'
    CASE OF Grade
        'A' : OUTPUT "Excellent"
        'B' : OUTPUT "Good"
        'C' : OUTPUT "Satisfactory"
        OTHERWISE OUTPUT "Unclassified"
    ENDCASE
    

    Распространенные ошибки

    • Использование CASE OF для условия. Оно проверяет одну переменную на соответствие значениям; Mark >= 50 требует IF.
    • Забывание про ENDCASE.
    • Пропуск OTHERWISE, а затем недоумение, почему неожиданный результат ничего не дает.
  • 7 Iteration · ⁨Итерация⁩
    7.1

    FOR, цикл с подсчетом

    English

    Iteration 迭代 repeats statements. Use a FOR loop when you know before you start how many times — a count-controlled 计数控制 loop.

    The counter 计数器 starts at the first value, and the loop runs once for every value up to and including the second. 1 TO 5 runs five times.

    STEP

    STEP changes the size of each jump. A negative step counts down.

    Running totals

    The commonest use: a variable outside the loop that the loop adds to.

    Total ← 0 must sit before the loop. Inside, it would reset on every pass.

    Common mistakes

    • NEXT naming the wrong counter. Nested loops must close in the reverse order they opened: the inner NEXT first.
    • Assuming 1 TO 5 runs four times. Both ends are included.
    • Changing the counter inside the loop. Let FOR own it.
    Русский

    Итерация повторяет операторы. Используйте цикл FOR, когда знаете до начала сколько раз — это цикл с управлением счетом.

    FOR <identifier> ← <value1> TO <value2>
        <statements>
    NEXT <identifier>
    
    DECLARE Index : INTEGER
    FOR Index ← 1 TO 5
        OUTPUT "Line ", Index
    NEXT Index
    

    Счетчик начинается с первого значения, и цикл выполняется один раз для каждого значения до и включая второе. 1 TO 5 выполняется пять раз.

    STEP

    STEP изменяет размер каждого шага. Отрицательный шаг означает обратный отсчет.

    DECLARE Index : INTEGER
    FOR Index ← 2 TO 10 STEP 2
        OUTPUT Index
    NEXT Index
    FOR Index ← 3 TO 1 STEP -1
        OUTPUT "Countdown ", Index
    NEXT Index
    

    Накопленная сумма

    Наиболее распространенное применение: переменная вне цикла, к которой цикл прибавляет значения.

    DECLARE Index, Total : INTEGER
    Total ← 0
    FOR Index ← 1 TO 10
        Total ← Total + Index
    NEXT Index
    OUTPUT "Sum of 1 to 10 is ", Total
    

    Total ← 0 должна находиться перед циклом. Внутри она бы сбрасывалась на каждой итерации.

    Распространенные ошибки

    • NEXT с неверным названием счетчика. Вложенные циклы должны завершаться в обратном порядке по отношению к тому, открытием: сначала внутренний NEXT.
    • Предположение, что 1 TO 5 выполнится четыре раза. Оба конца включены.
    • Изменение счетчика внутри цикла. Доверьте его FOR.
    7.2

    WHILE, цикл с предварительным условием

    English

    A WHILE loop tests before each pass, so it can run zero times. Use it when the number of repeats depends on something that happens while the loop runs.

    Something inside the loop must eventually make the condition false, or the loop never ends — an infinite loop 无限循环.

    Common mistakes

    • Forgetting to change the variable the condition tests, giving an infinite loop.
    • Leaving out DO or ENDWHILE.
    • Using WHILE where the count is known. A FOR says what you mean in one line.
    Русский

    Цикл WHILE проверяет условие перед каждой итерацией, поэтому может выполниться ноль раз. Используйте его, когда количество повторений зависит от того, что происходит во время выполнения цикла.

    WHILE <condition> DO
        <statements>
    ENDWHILE
    
    DECLARE Total : INTEGER
    Total ← 1
    WHILE Total < 100 DO
        Total ← Total * 2
    ENDWHILE
    OUTPUT "First power of two past 100: ", Total
    

    Что-то внутри цикла со временем должно сделать условие ложным, иначе цикл никогда не закончится — это бесконечный цикл.

    DECLARE Count : INTEGER
    Count ← 5
    WHILE Count > 0 DO
        OUTPUT Count
        Count ← Count - 1
    ENDWHILE
    OUTPUT "Lift off"
    

    Распространенные ошибки

    • Забыть изменить переменную, которую проверяет условие, что приводит к бесконечному циклу.
    • Пропустить DO или ENDWHILE.
    • Использовать WHILE, когда счет известен. Цикл FOR выражает смысл одной строкой.
    7.3

    REPEAT, цикл с постусловием

    English

    A REPEAT loop tests after each pass, so it always runs at least once.

    That "at least once" is the reason to choose it: validating 验证 input, where you must ask before you can judge the answer.

    ⚠️ UNTIL states the condition that stops the loop; WHILE states the one that keeps it going. They are opposites, and swapping them is the classic error.

    Tests Runs at least once? Condition means
    FOR a counter no (an empty range runs zero times) —
    WHILE before no keep going while this is true
    REPEAT after yes stop when this becomes true

    Common mistakes

    • Writing UNTIL Number < 100 when you mean UNTIL Number >= 100.
    • Using REPEAT where the body must be able to run zero times.
    • Forgetting that UNTIL ends the structure — there is no ENDREPEAT.
    Русский

    Цикл REPEAT проверяет условие после каждой итерации, поэтому он всегда выполняется как минимум один раз.

    REPEAT
        <statements>
    UNTIL <condition>
    

    Это «как минимум один раз» — причина выбора именно его: проверка ввода, где нужно запросить данные, прежде чем можно оценить ответ.

    DECLARE Number : INTEGER
    Number ← 0
    REPEAT
        Number ← Number + 25
        OUTPUT "Trying ", Number
    UNTIL Number >= 100
    OUTPUT "Reached ", Number
    

    ⚠️ UNTIL указывает условие, которое останавливает цикл; WHILE указывает то, которое продолжает его работу. Они противоположны, и их замена — классическая ошибка.

    Проверка Выполняется ли хотя бы один раз? Значение условия
    FOR счетчик нет (пустой диапазон выполняется ноль раз) —
    WHILE перед нет продолжать, пока это истинно
    REPEAT после да остановить, когда это станет истинным

    Распространенные ошибки

    • Написать UNTIL Number < 100 вместо того, чтобы написать UNTIL Number >= 100.
    • Использовать REPEAT там, где тело может выполнить ноль раз.
    • Забыть, что UNTIL завершает структуру — нет ключевого слова ENDREPEAT.
  • 8 Arrays · ⁨Массивы⁩
    8.1

    Одномерные массивы

    English

    An array 数组 holds many values of one type under one name. Each value sits at an index 下标.

    • The bounds 边界 are written lower:upper, and both are included — [1:3] has three elements 元素.
    • Cambridge arrays normally start at 1, not 0.
    • Every element has the same type, fixed by OF.

    Filling and reading with a FOR loop

    An array and a counted loop belong together: the counter is the index.

    Finding the largest

    Start Largest at the first element, never at 0 — with negative data, 0 would win and the answer would be wrong.

    Common mistakes

    • Reading Scores[6] from an array declared [1:5]. That is out of bounds 越界.
    • Writing Scores(3). Arrays use square brackets; round brackets call a function.
    • Declaring [1:5] and then looping 0 TO 4.
    Русский

    Массив хранит множество значений одного типа под одним именем. Каждое значение находится по индексу.

    DECLARE <identifier> : ARRAY[<lower>:<upper>] OF <data type>
    
    DECLARE Names : ARRAY[1:3] OF STRING
    Names[1] ← "Mei"
    Names[2] ← "Sam"
    Names[3] ← "Ana"
    OUTPUT Names[2]
    
    • Границы записываются lower:upper, и обе включены — [1:3] имеет три элемента.
    • Массивы Cambridge обычно начинаются с 1, а не с 0.
    • Каждый элемент имеет тот же тип, определяемый OF.

    Заполнение и чтение с помощью цикла FOR

    Массив и цикл с подсчетом идут вместе: счетчик является индексом.

    DECLARE Scores : ARRAY[1:5] OF INTEGER
    DECLARE Index, Total : INTEGER
    FOR Index ← 1 TO 5
        Scores[Index] ← Index * 10
    NEXT Index
    Total ← 0
    FOR Index ← 1 TO 5
        Total ← Total + Scores[Index]
    NEXT Index
    OUTPUT "Total: ", Total
    OUTPUT "Mean: ", Total / 5
    

    Поиск наибольшего значения

    DECLARE Scores : ARRAY[1:5] OF INTEGER
    DECLARE Index, Largest : INTEGER
    Scores[1] ← 42
    Scores[2] ← 17
    Scores[3] ← 93
    Scores[4] ← 8
    Scores[5] ← 55
    Largest ← Scores[1]
    FOR Index ← 2 TO 5
        IF Scores[Index] > Largest
          THEN
            Largest ← Scores[Index]
        ENDIF
    NEXT Index
    OUTPUT "Largest: ", Largest
    

    Начните Largest с первого элемента, а не с 0 — при отрицательных данных 0 победил бы, и ответ был бы неверным.

    Распространенные ошибки

    • Чтение Scores[6] из массива, объявленного как [1:5]. Это выход за пределы границ.
    • Запись Scores(3). Массивы используют квадратные скобки; круглые скобки вызывают функцию.
    • Объявление [1:5] и последующий цикл 0 TO 4.
    8.2

    Двумерные массивы

    English

    A 2-D array 二维数组 is a table: rows and columns, two indexes.

    The first index is the row 行, the second the column 列.

    Nested loops walk a table

    One loop per dimension 维度. The inner loop finishes a whole row before the outer moves on.

    ⚠️ The inner NEXT closes the inner counter. NEXT Row before NEXT Col crosses the loops over and is nonsense — a marker spots it instantly.

    Common mistakes

    • Swapping row and column. Grid[2,3] is row 2, column 3.
    • Grid[Row][Col]. Cambridge writes one pair of brackets with a comma inside.
    • Crossing the NEXT lines over, as above.
    Русский

    2-D массив — это таблица: строки и столбцы, два индекса.

    DECLARE <identifier> : ARRAY[<lower1>:<upper1>, <lower2>:<upper2>] OF <data type>
    
    DECLARE Grid : ARRAY[1:2, 1:3] OF INTEGER
    Grid[1,1] ← 1
    Grid[1,2] ← 2
    Grid[1,3] ← 3
    Grid[2,1] ← 4
    Grid[2,2] ← 5
    Grid[2,3] ← 6
    OUTPUT Grid[2,3]
    

    Первый индекс обозначает строку, второй — столбец.

    Вложенные циклы обходят таблицу

    По одному циклу на каждую размерность. Внутренний цикл завершает всю строку, прежде чем внешний перейдет дальше.

    DECLARE Grid : ARRAY[1:2, 1:3] OF INTEGER
    DECLARE Row, Col : INTEGER
    FOR Row ← 1 TO 2
        FOR Col ← 1 TO 3
            Grid[Row, Col] ← Row * Col
        NEXT Col
    NEXT Row
    FOR Row ← 1 TO 2
        FOR Col ← 1 TO 3
            OUTPUT "Grid[", Row, ",", Col, "] = ", Grid[Row, Col]
        NEXT Col
    NEXT Row
    

    ⚠️ Внутренний NEXT закрывает внутренний счетчик. NEXT Row перед NEXT Col пересекает циклы, и это бессмысленно — компилятор мгновенно это обнаружит.

    Распространенные ошибки

    • Поменять местами строку и столбец. Grid[2,3] означает строку 2, столбец 3.
    • Grid[Row][Col]. Cambridge использует одну пару скобок с запятой внутри.
    • Пересечение NEXT строк, как описано выше.
  • 9 Procedures and functions · ⁨Процедуры и функции⁩
    9.1

    PROCEDURE and CALL

    English

    A procedure 过程 is a named block of statements. Writing one once and calling it from several places is decomposition 分解 — the idea the whole of paper 2 rests on.

    A procedure is called by name, with the keyword CALL:

    • The definition 定义 does nothing on its own. Only CALL runs it.
    • Control returns to the line after the CALL when the procedure ends.
    • A procedure does not give a value back. If you need one, you want a function.

    Common mistakes

    • Writing DefaultLine on its own to run it. 0478 requires CALL.
    • Leaving out ENDPROCEDURE.
    • Expecting the procedure's own variables to exist outside it.
    Русский

    A procedure 过程 is a named block of statements. Writing one once and calling it from several places is decomposition 分解 — the idea the whole of paper 2 rests on.

    PROCEDURE <identifier>
        <statements>
    ENDPROCEDURE
    

    A procedure is called by name, with the keyword CALL:

    PROCEDURE DefaultLine
        OUTPUT "------------------------------"
    ENDPROCEDURE
    
    CALL DefaultLine
    OUTPUT "Report"
    CALL DefaultLine
    
    • The definition 定义 does nothing on its own. Only CALL runs it.
    • Control returns to the line after the CALL when the procedure ends.
    • A procedure does not give a value back. If you need one, you want a function.

    Common mistakes

    • Writing DefaultLine on its own to run it. 0478 requires CALL.
    • Leaving out ENDPROCEDURE.
    • Expecting the procedure's own variables to exist outside it.
    9.2

    FUNCTION and RETURN

    English

    A function 函数 is a procedure that hands a value back. It is written where that value is needed — inside an OUTPUT, on the right of an assignment, inside a condition.

    • RETURNS <data type> on the header says what type comes back. It is not optional.
    • RETURN ends the function immediately — nothing after it runs.
    • A function is never called with CALL; it is used wherever its value belongs.

    A function inside a condition

    Common mistakes

    • CALL SumSquare(10, 20) — that throws the answer away.
    • A function with no RETURN on some path. Every route out must return a value.
    • Leaving RETURNS INTEGER off the header.
    Русский

    A function 函数 is a procedure that hands a value back. It is written where that value is needed — inside an OUTPUT, on the right of an assignment, inside a condition.

    FUNCTION <identifier>(<parameters>) RETURNS <data type>
        <statements>
        RETURN <value>
    ENDFUNCTION
    
    FUNCTION SumSquare(Number1 : INTEGER, Number2 : INTEGER) RETURNS INTEGER
        RETURN Number1 * Number1 + Number2 * Number2
    ENDFUNCTION
    
    OUTPUT "Sum of squares = ", SumSquare(10, 20)
    
    • RETURNS <data type> on the header says what type comes back. It is not optional.
    • RETURN ends the function immediately — nothing after it runs.
    • A function is never called with CALL; it is used wherever its value belongs.

    A function inside a condition

    FUNCTION IsEven(Number : INTEGER) RETURNS BOOLEAN
        RETURN MOD(Number, 2) = 0
    ENDFUNCTION
    
    DECLARE Index : INTEGER
    FOR Index ← 1 TO 6
        IF IsEven(Index)
          THEN
            OUTPUT Index, " is even"
        ENDIF
    NEXT Index
    

    Common mistakes

    • CALL SumSquare(10, 20) — that throws the answer away.
    • A function with no RETURN on some path. Every route out must return a value.
    • Leaving RETURNS INTEGER off the header.
    9.3

    Parameters

    English

    A parameter 参数 is a value a procedure or function is given when it is called. Each one carries its own type.

    Several parameters are separated by commas, and the order at the call must match the order in the definition:

    ⚠️ In 0478 every parameter is passed by value 传值: the procedure works on a copy, so changing it inside changes nothing outside. To get a value back, use a FUNCTION and RETURN it. (A-Level 9618 adds BYREF for the other behaviour — topic 11.)

    Common mistakes

    • PROCEDURE Line(Size) with no type.
    • Calling with the arguments in the wrong order — Greet(2, "Mei") is a type error.
    • Expecting a procedure to change the variable you passed in. In 0478 it cannot.
    Русский

    A parameter 参数 is a value a procedure or function is given when it is called. Each one carries its own type.

    PROCEDURE Line(Size : INTEGER)
        DECLARE Index : INTEGER
        FOR Index ← 1 TO Size
            OUTPUT "-"
        NEXT Index
    ENDPROCEDURE
    
    CALL Line(5)
    CALL Line(20)
    

    Several parameters are separated by commas, and the order at the call must match the order in the definition:

    PROCEDURE Greet(Name : STRING, Times : INTEGER)
        DECLARE Index : INTEGER
        FOR Index ← 1 TO Times
            OUTPUT "Hello ", Name
        NEXT Index
    ENDPROCEDURE
    
    CALL Greet("Mei", 2)
    CALL Greet("Sam", 1)
    

    ⚠️ In 0478 every parameter is passed by value 传值: the procedure works on a copy, so changing it inside changes nothing outside. To get a value back, use a FUNCTION and RETURN it. (A-Level 9618 adds BYREF for the other behaviour — topic 11.)

    FUNCTION Doubled(Number : INTEGER) RETURNS INTEGER
        RETURN Number * 2
    ENDFUNCTION
    
    DECLARE Value : INTEGER
    Value ← 7
    Value ← Doubled(Value)
    OUTPUT Value
    

    Common mistakes

    • PROCEDURE Line(Size) with no type.
    • Calling with the arguments in the wrong order — Greet(2, "Mei") is a type error.
    • Expecting a procedure to change the variable you passed in. In 0478 it cannot.
  • 10 File handling · ⁨Работа с файлами⁩
    10.1

    Запись в файл

    English

    A file 文件 keeps data after the program ends. 0478 uses four commands, and every one names the file it works on.

    Three file modes 文件模式:

    Mode What it does
    WRITE start a new file — anything already there is lost
    APPEND add to the end of what is there 追加
    READ read from the start
    • One WRITEFILE writes one line.
    • CLOSEFILE is not optional. An unclosed file can lose the data still waiting to be written, and that is a stock exam answer.

    Common mistakes

    • FOR WRITE when you meant FOR APPEND, which silently destroys the old contents.
    • Forgetting CLOSEFILE.
    • Opening a file that is already open.
    Русский

    Файл хранит данные после завершения программы. 0478 использует четыре команды, и каждая из них указывает на файл, с которым работает.

    OPENFILE <file identifier> FOR WRITE
    WRITEFILE <file identifier>, <data>
    CLOSEFILE <file identifier>
    
    OPENFILE "names.txt" FOR WRITE
    WRITEFILE "names.txt", "Mei"
    WRITEFILE "names.txt", "Sam"
    CLOSEFILE "names.txt"
    OUTPUT "Saved"
    

    Три режима работы с файлом:

    Режим Что он делает
    WRITE создать новый файл — все существующие данные будут потеряны
    APPEND добавить в конец имеющихся данных
    READ читать с начала
    OPENFILE "log.txt" FOR WRITE
    WRITEFILE "log.txt", "first"
    CLOSEFILE "log.txt"
    OPENFILE "log.txt" FOR APPEND
    WRITEFILE "log.txt", "second"
    CLOSEFILE "log.txt"
    OUTPUT "Both lines saved"
    
    • Один WRITEFILE записывает одну строку.
    • CLOSEFILE необязателен. Закрытый файл может потерять данные, все еще ожидающие записи. записать, и это стандартный ответ на экзамене.

    Распространенные ошибки

    • FOR WRITE, когда вы имели в виду FOR APPEND, который молча уничтожает старое содержимое.
    • Забывание про CLOSEFILE.
    • Открытие файла, который уже открыт.
    10.2

    Чтение файла до конца

    English

    READFILE takes one line into a variable. The variable must be declared first.

    Normally you do not know how many lines there are, so you read until the end of the file — which is what the EOF function reports.

    EOF("names.txt") is TRUE once every line has been read, so WHILE NOT EOF(...) means while there is still something to read.

    Counting while reading

    Common mistakes

    • A WHILE EOF(...) loop — that runs only when there is nothing left. You want NOT.
    • Reading past the end because the loop has no EOF guard.
    • Opening FOR READ a file that was never written.
    Русский

    READFILE считывает одну строку в переменную. Переменная должна быть объявлена заранее.

    OPENFILE <file identifier> FOR READ
    READFILE <file identifier>, <variable>
    CLOSEFILE <file identifier>
    

    Обычно вы не знаете, сколько всего строк, поэтому читаете до конца файла — именно об этом сообщает функция EOF.

    OPENFILE "names.txt" FOR WRITE
    WRITEFILE "names.txt", "Mei"
    WRITEFILE "names.txt", "Sam"
    WRITEFILE "names.txt", "Ana"
    CLOSEFILE "names.txt"
    
    DECLARE Line : STRING
    OPENFILE "names.txt" FOR READ
    WHILE NOT EOF("names.txt") DO
        READFILE "names.txt", Line
        OUTPUT Line
    ENDWHILE
    CLOSEFILE "names.txt"
    

    EOF("names.txt") становится TRUE, когда все строки прочитаны, поэтому WHILE NOT EOF(...) означает пока есть что-то для чтения.

    Подсчет во время чтения

    OPENFILE "marks.txt" FOR WRITE
    WRITEFILE "marks.txt", 40
    WRITEFILE "marks.txt", 65
    WRITEFILE "marks.txt", 88
    CLOSEFILE "marks.txt"
    
    DECLARE Mark, Count, Total : INTEGER
    Count ← 0
    Total ← 0
    OPENFILE "marks.txt" FOR READ
    WHILE NOT EOF("marks.txt") DO
        READFILE "marks.txt", Mark
        Count ← Count + 1
        Total ← Total + Mark
    ENDWHILE
    CLOSEFILE "marks.txt"
    OUTPUT Count, " marks, mean ", Total / Count
    

    Распространенные ошибки

    • Цикл WHILE EOF(...) — он выполняется только тогда, когда ничего не осталось. Вам нужен NOT.
    • Чтение за пределами конца из-за отсутствия в циклеEOF проверки.
    • Открытие FOR READ файла, который никогда не записывался.
  • 11 A-Level 9618: what changes · ⁨A-Level 9618: что изменилось⁩
    11.1

    Разметка и операторы

    English

    Cambridge publishes two pseudocode specifications, and they disagree. Everything in topics 1-10 is IGCSE 0478. A-Level 9618 changes the details below — and a student who studies both loses marks by writing one in the other's paper.

    IGCSE 0478 A-Level 9618
    THEN on its own line, indented 2 on the IF line
    constants CONSTANT Pi ← 3.142 CONSTANT Pi = 3.142
    DIV / MOD functions: DIV(10, 3) operators: 10 DIV 3
    joining strings commas in OUTPUT the & operator
    identifiers must start with a capital mixed case allowed 混合大小写
    NEXT must name its counter good practice
    ROUND, RANDOM() both published neither exists

    This is the 0478 form, and it runs here:

    The 9618 form of the same algorithm is written like this — note THEN on the IF line, = in the CONSTANT, and MOD between its two values:

    ⚠️ Which one is right depends only on which paper you are sitting. Neither is a mistake; each is a mistake in the other's exam. The playground on this page runs the 0478 rules, so a 9618 construct is refused with a message naming the syllabus it belongs to — which is a quick way to check your own habits.

    Common mistakes

    • Writing THEN on the IF line in an 0478 answer, because that is what a textbook or a website showed. It is the single commonest cross-syllabus slip.
    • 10 MOD 3 in 0478. There it is MOD(10, 3).
    • ROUND(3.14159, 2) in a 9618 answer. 9618 has no ROUND at all.
    Русский

    Cambridge публикует две спецификации псевдокода, и они расходятся. Все в темах 1-10 относится к IGCSE 0478. A-Level 9618 меняет детали ниже — и студент, изучающий оба курса, теряет баллы, используя один вариант в билете другого.

    IGCSE 0478 A-Level 9618
    THEN на отдельной строке, с отступом 2 на той же IF строке
    константы CONSTANT Pi ← 3.142 CONSTANT Pi = 3.142
    DIV / MOD функции: DIV(10, 3) операторы: 10 DIV 3
    склейка строк запятые в OUTPUT оператор &
    идентификаторы должны начинаться с заглавной разрешен смешанный регистр
    NEXT должен явно указывать счетчик хорошая практика
    ROUND, RANDOM() оба опубликованы ни один не существует

    Это форма 0478, и вот как она работает здесь:

    DECLARE Total : REAL
    CONSTANT Rate ← 0.5
    Total ← 10
    IF MOD(7, 2) = 1
      THEN
        OUTPUT "Odd, half rate ", Total * Rate
    ENDIF
    

    Форма 9618 того же алгоритма пишется так — обратите внимание на THEN на строке IF, = в CONSTANT, и MOD между его двумя значениями:

    DECLARE Total : REAL
    CONSTANT Rate = 0.5
    Total ← 10
    IF 7 MOD 2 = 1 THEN
        OUTPUT "Odd, half rate " & STR(Total * Rate)
    ENDIF
    

    ⚠️ Правильный вариант зависит исключительно от того, какой билет вам достался. Ни один из них не является ошибкой; каждый представляет собой ошибку в экзамене другого формата. Песочница на этой странице использует правила 0478, поэтому конструкция 9618 будет отклонена с сообщением, указывающим на соответствующую программу — это быстрый способ проверить свои собственные привычки.

    Распространенные ошибки

    • Написание THEN на строке IF в ответе 0478, потому что это то, что учебник или веб-сайте. Это самая частая ошибка при пересечении программ.
    • 10 MOD 3 в 0478. Там он MOD(10, 3).
    • ROUND(3.14159, 2) в ответе 9618. 9618 вообще не имеет ROUND.
    11.2

    Параметры: BYVAL и BYREF

    English

    0478 passes every parameter by value 传值 (topic 9). 9618 lets you choose, and says so in the header.

    • BYVAL — the procedure gets a copy. Changing it changes nothing outside. This is the default when neither word is written.
    • BYREF — the procedure works on the caller's own variable 引用, so a change is visible after the call.

    This is 9618 only. It does not run here, and it is not accepted in an 0478 answer:

    The 0478 way to get a value back

    Use a FUNCTION and assign what it returns. This is the whole of the 0478 answer, and it runs:

    Common mistakes

    • Writing BYREF in an 0478 answer. The keyword is not in that syllabus.
    • Expecting a plain 9618 parameter to behave like BYREF. Without the word it is BYVAL.
    Русский

    0478 передает каждый параметр по значению (тема 9). 9618 позволяет выбрать и указывает это в заголовке.

    • BYVAL — процедура получает копию. Изменение её ничего не меняет снаружи. Это по умолчанию, если ни одно из слов не указано.
    • BYREF — процедура работает с собственной переменной вызывающего кода, поэтому изменение видно после вызова.

    Это касается только 9618. Здесь это не работает, и не принимается в ответе 0478:

    PROCEDURE Increase(BYREF Value : INTEGER)
        Value ← Value + 1
    ENDPROCEDURE
    
    DECLARE Count : INTEGER
    Count ← 5
    CALL Increase(Count)
    OUTPUT Count      // prints 6
    

    Способ 0478 получить значение обратно

    Используйте FUNCTION и присвойте возвращаемое значение. Это весь ответ 0478, и он работает:

    FUNCTION Increased(Value : INTEGER) RETURNS INTEGER
        RETURN Value + 1
    ENDFUNCTION
    
    DECLARE Count : INTEGER
    Count ← 5
    Count ← Increased(Count)
    OUTPUT Count
    

    Распространенные ошибки

    • Написание BYREF в ответе 0478. Ключевое слово отсутствует в этой программе обучения.
    • Ожидание, что простой параметр 9618 будет вести себя как BYREF. Без этого слова он является BYVAL.
    11.3

    Записи и другие типы

    English

    9618 has data structures 数据结构 that 0478 does not. You will meet them only at A-Level, and none of them runs under the 0478 rules of this page.

    A record 记录 groups fields of different types under one name (9618 section 4):

    An enumerated type 枚举类型 lists the only values a variable may take:

    9618 also adds a DATE data type, random-access files (OPENFILE … FOR RANDOM), pointers, and classes with CLASS … ENDCLASS for its object-oriented paper.

    ⚠️ 0478 has five data types and arrays, and nothing else (topic 2). A 0478 answer that declares a record is answering a different syllabus.

    Common mistakes

    • Using a record in an 0478 answer. Use parallel arrays instead — one array per field, sharing an index.
    • Thinking TYPE means the same as DECLARE. TYPE defines a new type; DECLARE creates a variable of an existing one.
    Русский

    9618 имеет структуры данных, которых нет в 0478. Вы встретите их только на уровне A-Level, и ни одна из них не работает по правилам 0478 этой страницы.

    Запись группирует поля разных типов под одним именем (раздел 9618 раздел 4):

    TYPE Student
        DECLARE Name : STRING
        DECLARE Mark : INTEGER
    ENDTYPE
    
    DECLARE Candidate : Student
    Candidate.Name ← "Mei"
    Candidate.Mark ← 91
    OUTPUT Candidate.Name, " scored ", Candidate.Mark
    

    Перечисляемый тип перечисляет единственные значения, которые может принимать переменная:

    TYPE Vehicle = (Car, Bus, Taxi)
    DECLARE MyRide : Vehicle
    MyRide ← Taxi
    

    9618 также добавляет тип данных DATE, файлы с произвольным доступом (OPENFILE … FOR RANDOM), указатели, и классы с CLASS … ENDCLASS для его объектно-ориентированной части.

    ⚠️ 0478 имеет пять типов данных и массивов, и ничего больше (тема 2). Ответ на вопрос о 0478 объединенных общим индексом.

    Распространенные ошибки

    • Использование структуры в ответе на вопрос о 0478. Вместо этого используйте параллельные массивы — по одному массиву на каждое поле; создает переменную существующего типа.
    • Считание того, что TYPE означает то же самое, что и DECLARE. TYPE определяет новый тип; DECLARE Python выполняет ваш код построчно. Каждая строка — это команда. Программа — это просто список команд, выполняемых сверху вниз.

Log in or create account · ⁨Войти или создать аккаунт⁩

IGCSE, A-Level & AP