Skip to content · ⁨Перейти к содержанию⁩

Algorithm Design and Problem-solving · ⁨Проектирование алгоритмов и решение задач⁩

A-Level Computer Science · ⁨A-Level Информатика⁩ · Topic 9 · ⁨Тема 9⁩

Video lesson for this topic · ⁨Видеоурок по этой теме⁩ Open the video page · ⁨Открыть страницу видео⁩
14:52

Вычислительное мышление

Вот задача: создать систему для управления всем складом магазина — каждым товаром, каждой продажей, каждой поставкой, каждым отчетом. Как одна огромная проблема, она слишком велика, чтобы…

English narration · English + 中文 subtitles burned in · ⁨Английское озвучивание · Английский + китайские субтитры (встроенные)⁩

9.1

Computational thinking · ⁨Вычислительное мышление⁩

Syllabus · ⁨Программа⁩
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)
Русский
Кандидаты должны уметь: Примечания и рекомендации
Проявить понимание абстракции Необходимость и преимущества использования абстракции Описать цель абстракции Создать абстрактную модель системы, включив только существенные детали
Описать и использовать декомпозицию Разбивать задачи на подзадачи, ведущие к понятию модуля программы (процедура / функция)

Source: Cambridge International syllabus · ⁨Источник: Программа 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.

Русский

Вычислительное мышление — это набор ментальных инструментов для анализа проблемы и проектирования решения, которое может выполнить компьютер. Два ключевых из них — абстракция и декомпозиция.

Частично собранная пазл
Вычислительное мышление разбивает большую проблему на меньшие, более простые части — как решение пазла

Абстракция

Абстракция означает сохранение существенных особенностей проблемы и игнорирование несущественных деталей, создавая более простую модель.

Примеры:

  • карта железнодорожной сети сохраняет станции и линии, но игнорирует географию.
  • класс в объектно-ориентированном программировании сохраняет только атрибуты и методы, необходимые системе.
  • функция скрывает кусок работы за именем.

Полная модель любой реальной проблемы была бы слишком большой для анализа, поэтому абстракция необходима.

Экзаменатор просит объяснить цель абстракции и её преимущества. Цель: создание упрощённой модели задачи, содержащей только необходимые детали для её решения. Преимущества: задачу легче понять и запрограммировать; программа получается меньше, быстрее пишется и тестируется; одну и ту же модель можно использовать для аналогичных задач. Когда вас просят создать абстрактную модель системы, перечисляйте только данные и действия, необходимые для выполнения задания. Для школьного расписания это означает классы, аудитории, учителей и уроки; оно не включает цвет аудиторий или возраст учителей.

Абстракция превращает запутанную реальную географию (извилистый маршрут со случайными зданиями) в чистую карту метро — равномерно расположенные круглые станции на прямой линии, сохраняя станции и линии, но исключая географию
Абстракция сохраняет главное (станции и линии) и отбрасывает несущественные детали (географию)

Декомпозиция

Декомпозиция означает разбиение большой задачи на более мелкие подзадачи, каждую из которых проще решить, и решение их по очереди.

  1. найдите основные части задачи.
  2. разбейте каждую на более мелкие подзадачи.
  3. продолжайте, пока каждая не станет достаточно маленькой для непосредственного проектирования.
  4. решите мелкие задачи и объедините результаты.

Для контроля запасов: "управление запасами" → "фиксация продаж", "фиксация поставок", "составление отчетов" → ("фиксация продаж") "поиск товара", "уменьшение количества товара", "сохранение транзакции". Декомпозиция делает большие задачи выполнимыми, позволяет команде разделить работу и дает модульный код — каждый модуль становится процедурой или функцией.

Вопрос "Объясните, почему используется декомпозиция" имеет фиксированную структуру и оценивается в три балла. Назовите три отдельных преимущества: каждая подзадача настолько мала, что ее можно спроектировать, закодировать и протестировать отдельно; разные программисты могут работать над разными модулями одновременно; существующий модуль (или библиотечная процедура) можно переиспользовать, а ошибку легче найти, так как она находится внутри одного модуля. Структурная схема (тема 12) — это диаграмма декомпозиции: программа сверху, её модули снизу и данные, передаваемые между ними.

Дерево с «Управление запасами» вверху, разветвляющееся на модули «Запись продаж», «Запись поставок» и «Составление отчетов», при этом «Запись продаж» делится на подзадачи «Поиск товара», «Уменьшение количества на складе» и «Сохранение транзакции»
Декомпозиция программы на модули и подмодули
Explore · ⁨Исследовать⁩

Solving a problem the computational way · ⁨Решение задачи вычислительным способом⁩

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. · ⁨Пройдите через четыре основы в том порядке, в каком их следует применять — разбейте задачу на части, найдите повторяющиеся элементы, отбросьте несущественное, затем запишите шаги.⁩

Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ вычислительное мышление
abstraction/əbˈstrækʃn/ абстракцией
decomposition/ˌdiːkɒmpəˈzɪʃn/ разложение
sub-problem/sʌb ˈprɒbləm/ подзадача
procedure/prəˈsiːdʒə/ процедура
modules/ˈmɒdjuːlz/ модули
algorithm/ˈælɡərɪθəm/ алгоритм
sequence/ˈsiːkwəns/ последовательность
unambiguous/ʌnæmˈbɪɡjuːəs/ однозначный
deterministic/dɪˌtɜːmɪˈnɪstɪk/ детерминистическое
9.2

Algorithms · ⁨Алгоритмы⁩

Syllabus · ⁨Программа⁩
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
Русский
Кандидаты должны уметь: Примечания и рекомендации
Проявить понимание того, что алгоритм — это решение задачи, выраженное в виде последовательности определенных шагов
Использовать подходящие имена идентификаторов для представления данных, используемых задачей, и отображать их с помощью таблицы идентификаторов
Написать псевдокод, содержащий ввод, обработку и вывод
Писать псевдокод, используя три основных конструкта: последовательность, выбор и итерация (повторение)
Документировать простой алгоритм с помощью структурированного английского описания, блок-схемы или псевдокода
Написать псевдокод на основе: • структурированного английского описания • блок-схемы
Нарисовать блок-схему на основе: • структурированного английского описания • псевдокода
Описать и использовать процесс пошаговой детализации для выражения алгоритма до уровня детализации, достаточного для программирования задачи
Использовать логические высказывания для определения частей решения алгоритма

Source: Cambridge International syllabus · ⁨Источник: Программа 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.

Русский
Сортировка пузырьком, проход за проходом

Алгоритм — это решение, выраженное последовательностью определенных шагов. Каждый шаг однозначен (имеет одно значение), детерминирован (одинаковый вход → одинаковый выход), конечен (шаги завершаются) и осуществим (каждый можно выполнить). Алгоритм говорит что делать, независимо от используемого языка программирования для его реализации.

Explore · ⁨Исследовать⁩

Selection: follow the IF / ELSE branches · ⁨Выбор: следуйте веткам 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. · ⁨Перетащите счет и посмотрите, какая ветка выполняется. Выбор последовательно проверяет каждое условие и выбирает ПЕРВОЕ истинное — именно так работает конструкция IF … ELSE IF … ELSE.⁩

Watch lesson · ⁨Смотреть урок⁩
9.2

Identifier table · ⁨Таблица идентификаторов⁩

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.

Русский

При начале алгоритма перечислите все данные в таблице идентификаторов — их идентификатор (название переменной), тип данных и описание. Таблица в экзамене содержит ровно эти три столбца:

Идентификатор Тип данных Описание
Category STRING категория продукта
SaleDate DATE дата продажи товара
ItemCost REAL стоимость товара
InStock BOOLEAN TRUE если есть в наличии
Sales ARRAY[1:30] OF REAL последние 30 суточных итогов продаж

Используйте описательные имена (ItemCost, а не x): идентификатор начинается с буквы, не содержит пробелов и пишется одинаково при каждом появлении. Распространенные типы — INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE, а также массивы. Таблица заставляет вас назвать каждое данные перед написанием кода, а вопрос "дополнить таблицу идентификаторов" дает один балл за правильный тип данных или описание, поэтому указывайте тип точно так, как в руководстве по псевдокоду.

Таблица идентификаторов, перечисляющая каждую переменную с её именем, типом данных и описанием; например, ItemCost как REAL для стоимости товара *Таблица идентификаторов называет все элементы данных перед написанием кода

Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
identifier table/aɪˈdentɪfaɪə ˈteɪbl/ таблица идентификаторов
identifier/aɪˈdentɪfaɪə/ идентификатор
Boolean/ˈbuːlɪən/ Boolean
9.2

Pseudocode — the three basic constructs · ⁨Псевдокод — три основных конструкции⁩

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:

Русский

Псевдокод — это структурированный, независимый от языка способ описания алгоритмов.

Три основных конструктива в виде мини-блок-схем: последовательность выполняет шаг A, затем B, затем C; ветвление проверяет условие и выполняет X или Y; цикл повторяет тело, пока выполняется условие, возвращаясь к началу
Три базовых блока любого алгоритма: последовательность, выбор и итерация

1. Последовательность

Шаги выполняются друг за другом (последовательность):

INPUT Name
INPUT Age
OUTPUT "Hello", Name

2. Выбор

Выбор того, какие шаги выполнять, на основе условия (выбор):

IF Age >= 18 THEN
    OUTPUT "Adult"
ELSE
    OUTPUT "Minor"
ENDIF

Для большего количества вариантов используйте CASE OF ... ENDCASE.

3. Итерация

Повторение блока (итерация, цикл):

FOR i ← 1 TO 10
    OUTPUT i
NEXT i

Цикл WHILE проверяет условие перед каждым проходом (может выполниться ноль раз); цикл REPEAT...UNTIL проверяет условие после каждого прохода (всегда выполняется хотя бы один раз).

WHILE Total < 100 DO
    INPUT Value
    Total ← Total + Value
ENDWHILE

REPEAT
    INPUT Mark
UNTIL Mark >= 0 AND Mark <= 100
Две блок-схемы рядом. WHILE сначала проверяет условие, поэтому тело может не выполниться ни разу: ромб находится над телом, а ответ «Нет» покидает цикл. REPEAT UNTIL сначала выполняет тело, а затем проверяет условие, поэтому тело всегда выполняется хотя бы один раз: тело находится над ромбом, а ответ «Нет» возвращает его к выполнению
Цикл WHILE проверяет до выполнения тела; цикл REPEAT ... UNTIL проверяет после, поэтому его тело всегда выполняется хотя бы один раз

Выбор цикла сам по себе является оценочным моментом: FOR когда вы знаете количество повторений (цикл с управляемым счетчиком); WHILE когда цикл может не выполниться вообще (цикл с предусловием); REPEAT ... UNTIL когда он должен выполниться хотя бы один раз, как при проверке ввода (цикл с постусловием). Ответ "опишите конструкцию итерации" называет конструкцию, указывает, где проверяется условие, и приводит следствие (ноль раз или хотя бы один раз).

Распространенные операции

  • присваивание: x ← 5 (стрелка; = используется для сравнения).
  • ввод/вывод: INPUT variable, OUTPUT expression.
  • сравнения =, <>, <, >, <=, >=; логика AND, OR, NOT.
  • арифметика + - * /, сложение DIV (целочисленное деление) и MOD (остаток от деления).
  • строки: LENGTH, LEFT, RIGHT, MID и & для конкатенации (объединения).

Псевдокод, который ожидается на экзамене

Каждый ответ по псевдокоду оценивается в соответствии с опубликованным руководством Cambridge. Пишите эти формы точно:

Конструкция Псевдокод
Переменная 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
Цикл WHILE WHILE Total < 100 DO ... ENDWHILE
Цикл REPEAT REPEAT ... UNTIL Mark >= 0
Целочисленная арифметика 17 DIV 5 = 3
17 MOD 5 = 2
Строки LENGTH(S), LEFT(S, 3), RIGHT(S, 2)
MID(S, 2, 4), UCASE(S), LCASE(S)
Преобразования 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) дает вещественное число от 0 до (но не включая) 100. INT(RAND(100)) + 1 дает целое число от 1 до 100.

Два навыка приносят баллы за каждый вопрос: декларировать каждую используемую переменную, указывая тип из таблицы идентификаторов, и инициализировать каждый счетчик и сумму (Count ← 0, Total ← 0) перед циклом, который их изменяет.

Ввод → Обработка → Вывод

Каждая программа имеет эту структуру:

INPUT Length
INPUT Width
Area ← Length * Width
OUTPUT "Area = ", Area

Перечисление входов и выходов делает алгоритм чище.

Разобранный пример. Напишите псевдокод, который вводит 100 целых чисел и выводит, сколько из них, и общую сумму тех, что находятся в диапазоне от 10 до 20 включительно.

Таблица идентификаторов: 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

Если затем вопрос просит "определить две конструкции и указать, как используется каждая", отвечайте в той же форме: итерация — цикл FOR повторяет ввод 100 раз; выбор — оператор IF добавляет значение только тогда, когда оно находится в диапазоне.

Разобранный пример. Программа выбирает секретное целое число от 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 является правильным выбором, так как пользователь должен угадать хотя бы один раз. Баллы начисляются за: случайное число в правильном диапазоне, цикл, завершающийся на верном угадывании, счетчик, начинающийся с нуля и увеличивающийся внутри цикла, два сообщения при правильных условиях и финальный вывод.

Блок-схема игры в угадайку: Старт, затем установить Secret случайным целым числом от 1 до 100 и Tries равным 0, затем ввести попытку, прибавить 1 к Tries, проверить, равен ли угаданный номер секретному (Да ведет к выводу Tries и Стоп), иначе проверить, меньше ли угаданный номер (Да выводит Слишком мало, Нет выводит Слишком много), и оба вывода возвращаются к вводу
Та же игра в угадайку в виде блок-схемы: два ромба решений — это два оператора 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 · ⁨Исследовать⁩

IF … ELSE selection · ⁨IF … ELSE (выбор)⁩

Change the value and watch which branch runs — how a program makes a decision. · ⁨Измените значение и посмотрите, какой ветвь выполнит программа — как программа принимает решение.⁩

Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
variable/ˈveərɪəbl/ переменной
data type/ˈdeɪtə taɪp/ тип данных
pseudocode/ˈsuːdəʊkəʊd/ псевдокод
flowchart/ˈfləʊtʃɑːt/ блок-схема
selection/sɪˈlekʃn/ выбор
iteration/ˌɪtəˈreɪʃn/ итерации
loop/luːp/ цикла
count-controlled loop/kaʊnt kənˈtrəʊld luːp/ цикл с числовым управлением
pre-condition loop/priː kənˈdɪʃn luːp/ цикл с предварительным условием
post-condition loop/pəʊst kənˈdɪʃn luːp/ цикл с последующим условием
assignment/əˈsaɪnmənt/ присваиванием
concatenation/kənˌkætəˈneɪʃn/ конкатенацией
initialise/ɪˈnɪʃəlaɪz/ инициализировать
counter/ˈkaʊntə/ контрпример
structured English/ˈstrʌktʃəd ˈɪŋɡlɪʃ/ структурированный английский
stepwise refinement/ˈstepwaɪz rɪˈfaɪnmənt/ пошаговое уточнение
logic statement/ˈlɒdʒɪk ˈsteɪtmənt/ логическое выражение
precedence/ˈpresɪdəns/ приоритет
De Morgan's law/də ˈmɔːɡənz lɔː/ закон де Моргана
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

Русский

Один и тот же алгоритм можно записать тремя способами.

  • структурированный английский — естественный язык с отступами и фиксированными ключевыми словами; подходит для описания высокого уровня.
  • блок-схема — диаграмма со стандартными формами:
Форма Значение
Закругленный прямоугольник Старт / Стоп
Параллелограмм Ввод / Вывод
Прямоугольник Обработка
Ромб Решение
Стрелка Поток управления
  • псевдокод — нотация с ключевыми словами выше; ближе всего к коду.

Вы должны уметь преобразовывать между любой парой: каждый IF — это ромб решения, каждый цикл — стрелка назад, а последовательность — стопка прямоугольников.

IF ... THEN ... ELSE ... ENDIF

Блок-схема усреднения чисел: закругленные терминалы Старт и Стоп, параллелограммы ввода/вывода, прямоугольники обработки и ромб решения «count < n?», ветвь Да которого возвращается для чтения следующего значения
Блок-схема усреднения списка чисел, использующая стандартные формы
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".

Русский

Пошаговое уточнение начинается с высокоуровневого плана и раскрывает каждый шаг до тех пор, пока он не станет достаточно малым для кодирования. Для среднего значения $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; проверить, что он содержит хотя бы одну цифру; вывести «accepted», если оба условия выполнены, иначе вывести «rejected».

Пошаговое уточнение: план Уровня 1 (считать числа, вычислить среднее, вывести среднее) раскрывается в детальный псевдокод Уровня 2 с циклом ввода и делением
Постепенное уточнение: раскройте каждый высокоуровневый шаг в детальный псевдокод
Explore · ⁨Исследовать⁩

Stepwise refinement: outline to code · ⁨Пошаговая декомпозиция: от плана коду⁩

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. · ⁨Спускайтесь по уровням. Вы начинаете со всей задачи в одной строке и постоянно расширяете каждый шаг на меньшие — пока каждый шаг не станет простым для прямого кодирования.⁩

9.2

Logic statements · ⁨Логические выражения⁩

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.

Русский

Логическое выражение — это булево условие, управляющее ветвлением, состоящее из сравнений (x > 10), логических связок (AND, OR, NOT) и скобок. Используйте его как условие для IF, WHILE или REPEAT...UNTIL:

WHILE attempts < 3 AND NOT loggedIn DO
    INPUT password
    IF password = correctPassword THEN
        loggedIn ← TRUE
    ELSE
        attempts ← attempts + 1
    ENDIF
ENDWHILE

Приоритет (от наивысшего к наименьшему): NOT, затем AND, затем OR. При сомнениях используйте скобки. Частые ошибки:

  • a = 1 OR 2 неверно — пишите a = 1 OR a = 2.
  • NOT a > 5 означает NOT (a > 5), то есть a <= 5.
  • NOT (A AND B) равно (NOT A) OR (NOT B) (закон де Моргана) — удобно для упрощения условий.

Перевод предложения в логическое выражение — навык, который проверяют напрямую. «Билет бесплатный для всех, кому меньше 5 или больше 65» превращается в Age < 5 OR Age > 65. «Отметка действительна, если это целое число от 0 до 100» превращается в Mark >= 0 AND Mark <= 100. «Цикл останавливается, когда файл закончен или прочитано десять записей» превращается в UNTIL EOF(File) OR Count = 10. Записывайте каждое сравнение полностью: Age > 65 и Age < 5, никогда не Age > 65 OR < 5.

Дерево разбора для "attempts < 3 AND NOT loggedIn": NOT применяется к loggedIn сначала, затем AND объединяет это с attempts < 3 *Приоритет: NOT связывается с loggedIn сначала, затем AND объединяет две стороны

Разобранная задача. Составьте таблицу идентификаторов и псевдокод для чтения 10 чисел и вывода наибольшего. Таблица идентификаторов называет каждую переменную, указывая её тип данных и назначение: Count : INTEGER (счетчик цикла), Num : REAL (только что прочитанное число), Max : REAL (наибольшее на данный момент).

Max ← -999999
FOR Count ← 1 TO 10
    INPUT Num
    IF Num > Max THEN
        Max ← Num
    ENDIF
NEXT Count
OUTPUT Max

Ключевое решение, приносящее баллы, — инициализация Max: она должна начинаться ниже любого возможного ввода — или, еще безопаснее, устанавливаться равным первому прочитанному числу. Инициализация его значением 0 приведет к тому, что алгоритм ошибочно вернет 0 для списка отрицательных чисел; эта ошибка выявляется трассировкой только тогда, когда тестовые данные содержат отрицательные значения.

9.2

Definitions the examiner accepts · ⁨Определения, принимаемые экзаменатором⁩

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
Русский

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

Термин Определение
абстракция сохранение существенных деталей задачи и исключение несущественных
декомпозиция разбиение задачи на более мелкие подзадачи, каждая из которых может решаться отдельно
алгоритм решение задачи, выраженное последовательностью определенных шагов
таблица идентификаторов таблица, перечисляющая каждый идентификатор, используемый в алгоритме, с указанием его типа данных и описания назначения
псевдокод структурированный, независимый от языка способ записи шагов алгоритма
блок-схема диаграмма, показывающая шаги и решения алгоритма с использованием стандартных символов, соединенных стрелками
последовательность инструкции, выполняемые одна за другой в указанном порядке
выбор (выборочный оператор) выбор того, какие инструкции выполнять, согласно условию
итерация (цикл) повторение группы инструкций, пока выполняется условие или до тех пор, пока оно истинно
постепенное уточнение разбиение каждого шага плана на более мелкие шаги, многократно, пока каждый шаг нельзя будет закодировать напрямую
логическое выражение условие, составленное из сравнений и операторов AND, OR и NOT, которое вычисляется как TRUE или FALSE
9.2

Exam tips · ⁨Советы для экзамена⁩

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.
Русский
  • Определите алгоритм как неоднозначную, конечную, детерминированную последовательность шагов, независимую от языка программирования.
  • Правильно используйте три конструкции — последовательность, выбор, итерацию — и ведите таблицу идентификаторов с типами данных.
  • Разбивайте задачу с помощью декомпозиции и абстракции, затем применяйте постепенное уточнение.
  • Пишите псевдокод, который мог бы реально работать: объявляйте переменные и следуйте стилю псевдокода экзамена.

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

  • Использование = для присваивания значения. Присваивание обозначается как ←; = является сравнением.
  • Забывание ENDIF, ENDWHILE, ENDCASE или NEXT. Каждая конструкция закрывается, и закрывающее слово — это место, где проверяется балл за конструкцию.
  • Неинициализация суммы или счетчика перед циклом, из-за чего алгоритм прибавляет к значению, которого никогда не существовало.
  • Использование цикла FOR, когда количество повторений неизвестно. Чтение до специального значения или получения правильного ответа требует WHILE или REPEAT ... UNTIL.
  • Написание Age > 65 OR < 5. Каждая сторона OR и AND должна быть полным сравнением.
  • Ответ на вопрос «объясните, почему используется декомпозиция» одним преимуществом, написанным тремя способами. Три балла требуют трех разных преимуществ.

Interactive lessons on this topic · ⁨Интерактивные уроки по этой теме⁩

Work through it step by step, with instant-check exercises. · ⁨Пройдите его шаг за шагом с упражнениями мгновенной проверки.⁩

Past Papers · ⁨Архив экзаменационных работ⁩

More topics in A-Level Computer Science · ⁨A-Level Информатика⁩ · ⁨Больше тем в A-Level Computer Science · ⁨A-Level Информатика⁩⁩

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

IGCSE, A-Level & AP