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

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

IGCSE Computer Science · ⁨Информатика IGCSE⁩ · Topic 7 · ⁨Тема 7⁩

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

Жизненный цикл разработки программ

Каждое приложение на вашем телефоне было написано кем-то вроде этого. Но они не начинали с набора кода. До первой строки проблема изучалась, решение разрабатывалось…

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

Syllabus · ⁨Программа⁩
English
Candidates should be able to: Notes and guidance
1 Understand the program development life cycle, limited to: analysis, design, coding and testing • Including identifying each stage and performing these tasks for each stage: – analysis: abstraction, decomposition of the problem, identification of the problem and requirements – design: decomposition, structure diagrams, flowcharts, pseudocode – coding: writing program code and iterative testing – testing: testing program code with the use of test data
2 (a) Understand that every computer system is made up of sub-systems, which are made up of further sub-systems (b) Understand how a problem can be decomposed into its component parts • Including: – inputs – processes – outputs – storage
(c) Use different methods to design and construct a solution to a problem • Including: – structure diagrams – flowcharts – pseudocode
3 Explain the purpose of a given algorithm • Including: – stating the purpose of an algorithm – describing the processes involved in an algorithm
4 Understand standard methods of solution • Limited to: – linear search – bubble sort – totalling – counting – finding maximum, minimum and average values
5 (a) Understand the need for validation checks to be made on input data and the different types of validation check • Including: – range check – length check – type check – presence check – format check – check digit
(b) Understand the need for verification checks to be made on input data and the different types of verification check • Including: – visual check – double entry check
6 Suggest and apply suitable test data • Limited to: – normal – abnormal – extreme – boundary • Extreme data is the largest/smallest acceptable value • Boundary data is the largest/smallest acceptable value and the corresponding smallest/largest rejected value
7 Complete a trace table to document a dry-run of an algorithm • Including, at each step in an algorithm: – variables – outputs – user prompts
8 Identify errors in given algorithms and suggest ways of correcting these errors
9 Write and amend algorithms for given problems or scenarios, using: pseudocode, program code and flowcharts • Precision is required when writing algorithms, e.g. x > y is acceptable but x is greater than y is not acceptable • See section 4 for flowchart symbols • See section 4 for pseudocode
Русский
Кандидаты должны уметь: Примечания и рекомендации
1 Понимание цикла разработки программ, ограниченного: анализом, проектированием, написанием кода и тестированием • Включает определение каждого этапа и выполнение соответствующих задач: – анализ: абстрагирование, декомпозиция задачи, identification of the problem and requirements (выявление проблемы и требований) – проектирование: декомпозиция, структурные диаграммы, блок-схемы, псевдокод – написание кода: написание программного кода и итеративное тестирование – тестирование: тестирование программного кода с использованием тестовых данных
2 (a) Понимание того, что каждая компьютерная система состоит из подсистем, которые в свою очередь состоят из дальнейших подсистем (b) Понимание того, как задача может быть декомпозирована на составные части • Включая: – входные данные – процессы – выходные данные – хранение
(c) Использование различных методов для проектирования и создания решения задачи • Включая: – структурные диаграммы – блок-схемы – псевдокод
3 Объяснение назначения заданного алгоритма • Включая: – указание назначения алгоритма – описание процессов, участвующих в алгоритме
4 Понимание стандартных методов решения • Ограничено: – линейный поиск – сортировка пузырьком – суммирование – подсчет – нахождение максимального, минимального и среднего значений
5 (a) Понимание необходимости проведения проверок корректности (валидации) входных данных и различных видов таких проверок • Включая: – проверка диапазона – проверка длины – проверка типа – проверка наличия – проверка формата – контрольная цифра
(b) Понимание необходимости проведения проверок верификации входных данных и различных видов таких проверок • Включая: – визуальная проверка – двойной ввод
6 Предложение и применение подходящих тестовых данных • Ограничено: – нормальные – нестандартные (неправильные) – экстремальные – граничные • Экстремальные данные — это наибольшее/наименьшее допустимое значение • Граничные данные — это наибольшее/наименьшее допустимое значение и соответствующее наименьшее/наибольшее отклоняемое значение
7 Заполнение таблицы трассировки для документирования ручного прогона алгоритма • Включая, на каждом шаге алгоритма: – переменные – выходные данные – запросы пользователя
8 Выявление ошибок в заданных алгоритмах и предложения по их исправлению
9 Написание и редактирование алгоритмов для заданных задач или ситуаций, используя: псевдокод, программный код и блок-схемы • Требуется точность при написании алгоритмов, например, x > y допустимо, но «x больше y» недопустимо • См. раздел 4 для символов блок-схем • См. раздел 4 для псевдокода

Source: Cambridge International syllabus · ⁨Источник: Программа Cambridge International⁩

7.1

The program development life cycle · ⁨Цикл разработки программного обеспечения⁩

English

The program development life cycle 程序开发生命周期 is the set of stages used to make a program. There are four stages.

Stage What you do
analysis 分析 study the problem and work out what is needed
design 设计 plan how the program will work
coding 编码 write the program code and test it as you go
testing 测试 run the finished program with test data to find errors

Analysis

In analysis you understand the problem. Two key skills help:

  • abstraction 抽象 — keep only the important details and ignore the rest;
  • decomposition 分解 — break a big problem into smaller, easier parts.

Design

In design you plan the solution, often using decomposition. You can show the parts as sub-systems 子系统 in a structure diagram 结构图 (a chart that splits a system into smaller boxes).

Coding and testing

In coding you write the program code. You use iterative testing 迭代测试 — test small parts again and again as you build them. In testing you run the whole program with test data 测试数据 to check it works.

Русский

Цикл разработки программного обеспечения — это набор этапов, используемых для создания программы. Существует четыре этапа.

Программист печатает код за компьютером
Программное обеспечение пишется программистами, которые следуют циклу разработки
Этап Что нужно делать
анализ изучить проблему и определить, что требуется
проектирование спланировать, как будет работать программа
написание кода написать код программы и тестировать его по мере создания
тестирование запустить готовую программу с тестовыми данными для выявления ошибок
Четыре этапа подряд — анализ, проектирование, написание кода, тестирование — со стрелкой обратной связи от тестирования к проектированию
Четыре этапа разработки программы; тестирование дает обратную связь для исправления и уточнения проекта
Блок-схема программы с прямоугольниками процессов и ромбами решений
Блок-схема программы описывает шаги и решения программы на этапе проектирования

Анализ

На этапе анализа вы понимаете проблему. Две ключевые навыки помогают:

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

Проектирование

На этапе проектирования вы планируете решение, часто используя декомпозицию. Вы можете показать части как подсистемы в диаграмме структуры (график, который делит систему на меньшие блоки).

Написание кода и тестирование

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

Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
program development life cycle/ˈprəʊɡræm dɪˈveləpmənt laɪf ˈsaɪkl/ цикл разработки программного обеспечения
analysis/əˈnæləsɪs/ анализ
design/dɪˈzaɪn/ проектирование
coding/ˈkəʊdɪŋ/ написание кода
testing/ˈtestɪŋ/ тестирование
abstraction/əbˈstrækʃn/ абстракцией
decomposition/ˌdiːkɒmpəˈzɪʃn/ разложение
sub-systems/sʌb ˈsɪstəmz/ подсистемы
structure diagram/ˈstrʌktʃə ˈdaɪəɡræm/ диаграмма структуры
iterative testing/ˈɪtərətɪv ˈtestɪŋ/ итеративное тестирование
test data/test ˈdeɪtə/ тестовые данные
flowchart/ˈfləʊtʃɑːt/ блок-схема
7.2

Design tools · ⁨Инструменты проектирования⁩

English

You can plan a solution in three main ways.

  • a structure diagram — shows the parts of a system and how they fit together;
  • a flowchart 流程图 — a diagram using boxes and arrows to show the steps in order;
  • pseudocode 伪代码 — steps written in simple, code-like English (not a real language).
Русский

Вы можете спланировать решение тремя основными способами.

  • диаграмма структуры — показывает части системы и то, как они связаны друг с другом;
  • блок-схема — диаграмма, использующая прямоугольники и стрелки для показа шагов по порядку;
  • псевдокод — шаги, записанные простым языком, похожим на код (не настоящим языком программирования).
Блок-схема для сложения чисел от 1 до n, со символами начала/конца, ввода/вывода, процесса и решения, плюс легенда с названиями каждой фигуры
Блок-схема для алгоритма суммы, использующая стандартные символы (начало/конец, ввод/вывод, процесс, решение)
7.3

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

English
Bubble sort, pass by pass

An algorithm 算法 is a set of steps, in the right order, that solves a problem. Every algorithm can be split into three parts:

  • input 输入 — the data that goes in;
  • processing 处理 — the work done on the data;
  • output 输出 — the result that comes out.

This is called decomposition into inputs, processes and outputs. For example, for "find the average of three marks": the inputs are the three marks; the processing is adding them and dividing by 3; the output is the average.

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

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

  • входные данные — данные, которые поступают;
  • обработка — работа, выполняемая над данными;
  • выходные данные — результат, который получается.

Это называется декомпозицией на входы, процессы и выходы. Например, для «найти среднее арифметическое трех оценок»: входные данные — три оценки; обработка — их сложение и деление на 3; выход — среднее значение.

Три блока — ВХОД (3 оценки), ОБРАБОТКА (сложить, разделить на 3), ВЫХОД (среднее) — соединенные стрелками
Любой алгоритм распадается на вход, обработку и выход — здесь, нахождение среднего арифметического трех оценок
Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
bubble sort/ˈbʌbl sɔːt/ пузырьковая сортировка
totalling/ˈtəʊtəlɪŋ/ суммирование
counting/ˈkaʊntɪŋ/ подсчет
maximum/ˈmæksɪməm/ максимальная
minimum/ˈmɪnɪməm/ минимуму
7.4

Validation and verification · ⁨Валидация и верификация⁩

English

When data is entered, you check it to reduce mistakes.

Validation 验证 checks that the data is sensible and follows the rules. It cannot check that the data is true, only that it is allowed.

Validation check What it checks
range check 范围检查 the value is between a lowest and highest allowed value
length check 长度检查 the number of characters is allowed (e.g. a password ≥ 8)
type check 类型检查 the data is the right type (e.g. a number, not letters)
presence check 存在性检查 something has actually been entered (not left blank)
format check 格式检查 the data is in the right pattern (e.g. a date as dd/mm/yyyy)
check digit 校验码 an extra digit confirms a number was entered correctly

Verification 核实 checks that data was copied or entered correctly (no mistakes while typing it in). Two methods:

  • visual check 目视检查 — a person compares the typed data with the original;
  • double entry 双重输入 — the data is entered twice and the two copies are compared.
Русский

При вводе данных вы проверяете их, чтобы сократить количество ошибок.

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

Проверка валидации Что проверяется
проверка диапазона значение находится между минимально и максимально допустимыми значениями
проверка длины количество символов допустимо (например, пароль ≥ 8)
проверка типа данные имеют правильный тип (например, число, а не буквы)
проверка наличия действительно введено что-либо (а не оставлено пустым)
проверка формата данные находятся в правильном формате (например, дата как dd/mm/yyyy)
контрольная цифра дополнительная цифра подтверждает, что номер введен правильно

Верификация проверяет, что данные были скопированы или введены правильно (без ошибок при наборе). Два метода:

  • визуальная проверка — человек сравнивает набранные данные с оригиналом;
  • двойной ввод — данные вводятся дважды, и две копии сравниваются.
7.5

Trace tables · ⁨Таблицы трассировки⁩

English

A trace table 追踪表 records the value of each variable as an algorithm runs, step by step. It helps you:

  • check that an algorithm works correctly;
  • work out what an algorithm does by following it with given data.

Example: trace this algorithm with the input 5.

i total OUTPUT
1 1
2 3
3 6
4 10
5 15 15

The trace shows the algorithm adds up 1 to n. With input 5 the output is 15.

Worked example. Trace this algorithm and give the output.

DIV gives only the whole-number part of a division. Take one row per pass: x becomes 10 (count 1), then 5 (count 2), then 2 (count 3), then 1 (count 4). Now x > 1 is false, so the loop stops and the output is 4. Two habits protect these marks: test the condition before each pass rather than after, and write a new row for every pass - trying to hold the values in your head is what makes traces go wrong.

Русский

Таблица трассировки фиксирует значение каждой переменной по мере выполнения алгоритма шаг за шагом. Она помогает вам:

Таблица трассировки со столбцами count, total, output
Таблица трассировки фиксирует значения всех переменных во время выполнения программы
  • убедиться, что алгоритм работает корректно;
  • определить что делает алгоритм, проследив его выполнение на заданных данных.

Пример: выполните трассировку этого алгоритма с входным значением 5.

INPUT N
Total ← 0
FOR I ← 1 TO N
    Total ← Total + I
NEXT I
OUTPUT Total
i total ВЫХОД
1 1
2 3
3 6
4 10
5 15 15

Трассировка показывает, что алгоритм суммирует числа от 1 до n. При входном значении 5 выход равен 15.

Разобранный пример. Выполните трассировку этого алгоритма и укажите результат.

X ← 20
Count ← 0
WHILE X > 1
    X ← DIV(X, 2)
    Count ← Count + 1
ENDWHILE
OUTPUT Count

DIV дает только целую часть деления. Запишите одну строку за каждую итерацию: x становится равным 10 (счетчик 1), затем 5 (счетчик 2), затем 2 (счетчик 3), затем 1 (счетчик 4). Теперь x > 1 ложно, поэтому цикл останавливается, и результат составляет 4. Две привычки защищают эти баллы: проверяйте условие перед каждой итерацией, а не после, и записывайте новую строку для каждой итерации — попытка удерживать значения в голове приводит к ошибкам в трассировках.

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

A trace table · ⁨Таблица трассировки⁩

Step through the loop and fill in the trace table, one row per pass. · ⁨Пройдите по циклу и заполните таблицу трассировки, по одной строке на каждый проход.⁩

Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
pseudocode/ˈsuːdəʊkəʊd/ псевдокод
algorithm/ˈælɡərɪθəm/ алгоритм
input/ˈɪnpʊt/ входные данные
processing/ˈprəʊsesɪŋ/ обработка
output/ˈaʊtpʊt/ вывода
validation/ˌvælɪˈdeɪʃn/ валидация
range check/reɪndʒ tʃek/ проверкой диапазона
length check/leŋθ tʃek/ проверка длины
type check/taɪp tʃek/ проверка типов
presence check/ˈprezəns tʃek/ проверкой наличия
format check/ˈfɔːmæt tʃek/ форматной проверкой
check digit/tʃek ˈdɪdʒɪt/ контрольной цифрой
verification/ˌverɪfɪˈkeɪʃn/ верификация
visual check/ˈvɪʒuːəl tʃek/ визуальная проверка
double entry/ˈdʌbl ˈentri/ двойной ввод
trace table/treɪs ˈteɪbl/ трассировочная таблица
normal/ˈnɔːml/ нормаль
abnormal/əbˈnɔːml/ ненормальный, аномальный
extreme/ekˈstriːm/ крайний; предельный
boundary/ˈbaʊndəri/ граница
7.6

Test data · ⁨Тестовые данные⁩

English

Test data is data you use to test a program. There are four types you must know.

Type Meaning Example (age 0–120 allowed)
normal 正常数据 sensible data that should be accepted 25
abnormal 异常数据 wrong data that should be rejected -4 or "cat"
extreme 极端数据 the largest and smallest values still allowed 0 and 120
boundary 边界数据 the values on each side of a limit (one allowed, one not) 120 and 121
Русский

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

Тип Значение Пример (допустимый возраст 0–120)
нормальные разумные данные, которые должны быть приняты 25
аномальные неверные данные, которые должны быть отклонены -4 или "cat"
экстремальные наибольшее и наименьшее значения, которые все еще допустимы 0 и 120
граничные значения по обе стороны от предела (одно допустимо, другое нет) 120 и 121
7.7

Standard methods of solution · ⁨Стандартные методы решения⁩

English

You must know these common algorithms.

Linear search

A linear search 线性查找 checks each item in a list, one by one, until it finds the value it wants or reaches the end.

Bubble sort

A bubble sort 冒泡排序 puts a list in order. It compares each pair of side-by-side items and swaps them if they are in the wrong order. It repeats this until no more swaps are needed.

Totalling and counting

  • totalling 求和 — keep adding values to a running total (Total ← Total + Value).
  • counting 计数 — add 1 to a counter each time something happens (Count ← Count + 1).

Maximum, minimum and average

  • to find the maximum 最大值: keep the largest value seen so far.
  • to find the minimum 最小值: keep the smallest value seen so far.
  • to find the average 平均值: divide the total by how many values there are.
Русский

Вы должны знать эти распространенные алгоритмы.

Линейный поиск

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

Found ← FALSE
FOR I ← 0 TO 9
    IF List[I] = SearchValue
      THEN
        Found ← TRUE
    ENDIF
NEXT I
OUTPUT Found
Список из восьми чисел, сканируемых слева направо, поиск значения 5; первые четыре не совпадают, пятое найдено
Линейный поиск последовательно проверяет каждый элемент начиная с начала, пока не найдет значение

Пузырьковая сортировка

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

FOR I ← 0 TO 8
    IF List[I] > List[I + 1]
      THEN
        Temp ← List[I]
        List[I] ← List[I + 1]
        List[I + 1] ← Temp
    ENDIF
NEXT I
Список, где первая пара 5 и 2 расположена неверно, показана замена на 2 и 5, с примечанием повторить для каждой пары
Пузырьковая сортировка сравнивает каждую пару соседних элементов и меняет их местами, если они расположены неверно, повторяя процесс до полной сортировки

Подсчет суммы и подсчет количества

  • подсчет суммы — непрерывно прибавлять значения к общей сумме (Total ← Total + Value).
  • подсчет количества — прибавлять 1 к счетчику каждый раз, когда происходит событие (Count ← Count + 1).

Максимум, минимум и среднее

  • чтобы найти максимум: хранить самое большое значение, встреченное на данный момент.
  • чтобы найти минимум: хранить самое маленькое значение, встреченное на данный момент.
  • чтобы найти среднее: разделить сумму на количество значений.
Total ← 0
FOR I ← 0 TO 9
    Total ← Total + List[I]
NEXT I
Average ← Total / 10
OUTPUT Average
Vocabulary · ⁨Словарь⁩ Train · ⁨Тренировать⁩
English Русский
linear search/ˈlɪnɪə sɜːtʃ/ линейный поиск
average/ˈævrɪdʒ/ среднее значение
7.8

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

English
  • Learn the four life-cycle stages: analysis → design → coding → testing. Abstraction keeps only the important details; decomposition breaks a problem into smaller parts.
  • Validation checks data is sensible (range, length, type, presence, format checks); verification checks it was copied correctly (a visual check or double entry).
  • Learn the four test-data types: normal (accepted), abnormal (rejected), extreme (the largest/smallest still allowed), boundary (the values either side of a limit).
  • To work out what an algorithm does, fill in a trace table — write down every variable's value at each step.
  • Know the standard algorithms: linear search (check each item in turn) and bubble sort (swap side-by-side pairs until no swaps are needed).
Русский
  • Выучите четыре этапа жизненного цикла: анализ → проектирование → кодирование → тестирование. Абстрагирование оставляет только важные детали; декомпозиция разбивает проблему на более мелкие части.
  • Валидация проверяет, что данные разумны (проверки диапазона, длины, типа, наличия, формата); верификация проверяет, что они были скопированы правильно (визуальная проверка или двойной ввод).
  • Выучите четыре типа тестовых данных: нормальные (принимаются), аномальные (отклоняются), экстремальные (наибольшее/наименьшее все еще допустимое), граничные (значения по обе стороны от предела).
  • Чтобы определить, что делает алгоритм, заполните таблицу трассировки — запишите значение каждой переменной на каждом шаге.
  • Знать стандартные алгоритмы: линейный поиск (проверка каждого элемента по очереди) и пузырьковая сортировка (обмен соседних пар до тех пор, пока обмен не потребуется больше).

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

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

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

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

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

IGCSE, A-Level & AP