РУҚА
Тапсырмалар № 6, 16 · ОГЭ

Трассировка программы

Как пошагово проверять значения переменных и находить результат работы алгоритма
6 мин чтенияҚиындық: Обновлено 29 қыркүйек 2026

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

Что такое трассировка

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

D
Определение

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

Состояние программы — это набор текущих значений всех переменных, которые влияют на дальнейшее выполнение. Например, при наличии переменных \(a\), \(b\) и \(s\) состояние можно записать как \((a,b,s)\). При трассировке не обязательно записывать постоянные переменные, но на экзамене безопаснее сначала включить в таблицу все используемые величины.

ШагКоманда или действиеabРезультат проверки
0Начальные значения———
1Присваивание......—
2Условие......истина/ложь
3Следующая команда......—

Как составить таблицу трассировки

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

  1. Прочитайте программу целиком и определите, с какой команды начинается выполнение.
  2. Выпишите начальные значения переменных, если они заданы.
  3. Выполните текущую команду, используя значения, которые были получены на предыдущем шаге.
  4. Запишите новые значения переменных в таблицу.
  5. Для условия отдельно определите значение логического выражения: истина или ложь.
  6. Если условие ложно, пропустите тело условной команды; если истинно — выполните его.
  7. В цикле после каждой итерации снова проверьте условие и занесите результат в таблицу.
  8. После завершения программы прочитайте именно тот результат, который требуется вывести.
\[\text{новое значение переменной} = \text{значение выражения справа после подстановки текущих значений}\]
T
Правило присваивания

В команде \(x := E\) сначала вычисляется выражение \(E\) по старым значениям переменных, затем полученный результат записывается в \(x\). Поэтому в команде \(x := x+1\) правая часть использует прежнее значение \(x\), а не уже увеличенное.

Например, последовательность a := b; b := a не меняет местами значения. После первой команды \(a\) получает старое значение \(b\), а во второй команде это новое значение \(a\) записывается в \(b\). Для обмена обычно используют дополнительную переменную.

Условия, ветвления и циклы

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

Приём для условий

Записывайте условие в отдельном столбце. Например, для if x > 3 занесите не только \(x\), но и результат проверки: «истина» или «ложь». Это снижает риск выполнить не ту ветвь.

В цикле while условие проверяется до выполнения тела. Если оно сразу ложно, тело не выполняется ни разу. В цикле for удобно составить отдельные строки для начального значения счётчика, каждой итерации и изменения счётчика.

\[\text{число повторений while} = \text{число раз, когда условие перед телом оказалось истинным}\]
Микро-проверка

Какое значение будет у \(x\) после выполнения команд x := 4; y := x + 3; x := y - 1?

Разобранный пример с циклом

Рассмотрим программу. Она накапливает сумму квадратов чисел от 1 до 4. Важно после каждой итерации записывать и значение счётчика, и накопленную сумму.

Python
1s = 0\ni = 1
2while i <= 4:
3    s = s + i * i
4    i = i + 1
5print(s)
№
Что требуется получить

Нужно определить значение, которое будет выведено командой print(s). Начальное состояние: \(s=0\), \(i=1\).

1
До первой проверки цикла заданы начальные значения.
\(\displaystyle s=0,\quad i=1\)
2
Проверяем условие: \(1\le4\), оно истинно. Выполняем тело: \(s=0+1\cdot1=1\), затем \(i=1+1=2\).
\(\displaystyle s=1,\quad i=2\)
3
Проверяем \(2\le4\). Условие истинно: \(s=1+2\cdot2=5\), затем \(i=3\).
\(\displaystyle s=5,\quad i=3\)
4
Проверяем \(3\le4\). Условие истинно: \(s=5+3\cdot3=14\), затем \(i=4\).
\(\displaystyle s=14,\quad i=4\)
5
Проверяем \(4\le4\). Условие истинно: \(s=14+4\cdot4=30\), затем \(i=5\).
\(\displaystyle s=30,\quad i=5\)
6
Проверяем \(5\le4\). Условие ложно, поэтому тело цикла больше не выполняется.
\(\displaystyle s=30,\quad i=5,\quad 5\le4\;\text{— ложь}\)
7
Команда вывода печатает текущее значение \(s\).
\(\displaystyle \boxed{30}\)
Перед проверкойУсловиеs после телаi после тела
s=0, i=11 ≤ 4 — истина12
s=1, i=22 ≤ 4 — истина53
s=5, i=33 ≤ 4 — истина144
s=14, i=44 ≤ 4 — истина305
s=30, i=55 ≤ 4 — ложь305

В задачах с несколькими ветвями сначала проследите путь выполнения, а не все возможные пути сразу. Для анализа сложных фрагментов полезно отдельно выписывать значения логических выражений и возвращаемые значения функций. Если программа содержит вызов функции, временно рассматривайте его как отдельный блок: определите аргументы, выполните тело функции и подставьте результат обратно.

Трассировка строковых и логических алгоритмов

В задачах со строками переменная обычно не изменяется «частично»: после операции ей присваивается новая строка. При замене фрагмента строки записывайте результат полностью, чтобы не перепутать старую и новую длину. Если используется разбиение строки, фиксируйте получившийся список или количество элементов.

В логических выражениях соблюдайте приоритет операций: сначала выполняются действия в скобках, затем отрицание not, затем and, затем or — если язык не задаёт иной порядок. При сомнении расставьте скобки явно. В задачах на несколько условий удобно использовать отдельные столбцы для промежуточных сравнений.

!
Частые ошибки

1. Использовать новое значение переменной при вычислении той же команды присваивания. 2. Выполнить тело цикла, не проверив условие. 3. Забыть последнюю проверку, которая заканчивает цикл. 4. Перепутать = как присваивание и сравнение в конкретном языке. 5. Изменить значение счётчика не там, где это делает программа. 6. Вывести промежуточную переменную вместо той, которая указана в команде вывода.

Запомнить

Каждая команда читается слева направо только в том смысле, который установлен языком. Главное правило трассировки: сначала вычислить правую часть по текущему состоянию, затем изменить левую часть.

Связь с другими способами анализа

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

Если алгоритм содержит вызов процедуры, процедура может изменить переданные переменные или выполнить вывод. В рекурсивных и вложенных вызовах важно учитывать стек вызовов: сначала завершается самый последний начатый вызов, затем управление возвращается к предыдущему.

Q
Жылдам тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · присваивание
Что нужно сделать перед вычислением команды \(x := x+5\)?
Главное за минуту

Главное

  • Трассировка — пошаговая жазба значений переменных и результатов проверок.
  • В присваивании сначала вычисляют правую часть по старым значениям, затем меняют левую.
  • В цикле нужно фиксировать каждую итерацию и отдельную последнюю проверку, завершившую цикл.
  • Для условий записывайте результат «истина» или «ложь», чтобы не перепутать ветвь.
  • Трассировка показывает выполнение для конкретных входных данных; для других входов нужны дополнительные тесты.