"Информатика", Горячев А.В., Суворова Н.И.
Чтобы проверить алгоритм и понять, откуда взялся его результат, полезно проследить выполнение каждой команды. Для этого записывают исходные данные, отмечают изменения переменных и фиксируют вывод. Такая пошаговая запись называется трассировкой. Она помогает не перепутать старые и новые значения, правильно выбрать ветвь при проверке условия и учесть каждое повторение цикла. Главное — выполнять команды в заданном порядке.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Выполнение алгоритма — последовательное выполнение его команд исполнителем. Результат зависит от исходных данных: при других начальных значениях те же команды могут дать другой ответ. Важен и порядок команд, потому что последующие действия используют результаты предыдущих.
Промежуточный результат — значение переменной или вывод, полученный на отдельном шаге выполнения алгоритма. Он ещё не обязательно является окончательным ответом. Запись таких результатов позволяет увидеть, как именно меняется состояние алгоритма.
Трассировка алгоритма — пошаговое прослеживание выполнения команд с записью изменений и полученных результатов. При трассировке не пытаются угадать ответ заранее, а последовательно применяют каждую команду. Это помогает проверить ход работы и заметить место возможной ошибки.
Таблица трассировки — таблица, в которой фиксируют шаги алгоритма, значения переменных и выводимые данные. В ней удобно сопоставлять команду с тем, что изменилось после её выполнения. Такая запись особенно полезна для алгоритмов с условиями и циклами, где легко пропустить шаг.
Перед выполнением алгоритма определяют исходные данные и начальные значения переменных. Иначе неизвестно, с чего начинает работу исполнитель, а значит, нельзя правильно вычислить результат первой команды. Например, команда x := x + 1 требует знать начальное значение x. Его записывают до начала трассировки, чтобы отличать исходное состояние от последующих изменений.
Команды выполняют строго по порядку, потому что результат одного шага может стать данными для следующего. В команде присваивания сначала вычисляют выражение справа от знака :=, а затем записывают полученное значение в переменную слева. После этого переменная содержит новое значение, а прежнее больше не используют как её текущее значение. Поэтому в таблице полезно указывать состояние после каждой команды, а не переносить старое значение дальше.
При ветвлении алгоритм проверяет условие, которое может оказаться истинным или ложным. Запиши результат проверки, чтобы было ясно, почему исполнитель пошёл именно по этому пути. Затем выполни только команды выбранной ветви: другая ветвь при этой проверке не выполняется. Такой порядок не даёт случайно объединить команды из двух разных вариантов.
В цикле одни и те же команды выполняются несколько раз, поэтому каждое повторение следует отмечать отдельно. После выполнения тела цикла запиши новые значения переменных и проверь условие продолжения ещё раз. Это нужно, чтобы не пропустить изменение счётчика или другой переменной, от которой зависит остановка. Если состояние на итерациях записывать последовательно, легче увидеть, сколько повторений уже произошло.
Когда алгоритм завершился, отдели итоговый результат от значений, которые встречались по пути. Переменная в конце может содержать ответ, но промежуточные значения сами по себе обычно не являются выводом алгоритма. Сначала проверь, что выполнены все необходимые команды и условие остановки сработало. Затем запиши конечные значения и отдельно укажи данные, которые алгоритм выводит.
| Момент выполнения | Команда или проверка | Значения переменных | Вывод |
|---|---|---|---|
| Начало: исходные данные и начальные значения | Начальные условия | Исходное состояние | Пока отсутствует |
| Выполнение команды присваивания | Присваивание | Новое значение после команды | Если команда выводит данные |
| Проверка условия и выбор ветви | Условие, результат проверки | Состояние перед выбранной ветвью | Если предусмотрен вывод |
| Очередное повторение цикла | Команды тела и проверка условия | Изменения на этой итерации | Если предусмотрен вывод |
| Завершение: итоговые значения и результат | Остановка алгоритма | Конечное состояние | Итоговый вывод |
Заполняй строки по мере выполнения, а не заранее: так каждая запись будет соответствовать реальному шагу. В столбце значений указывай состояние после команды или проверки, а вывод записывай только тогда, когда алгоритм действительно выводит данные. Для циклов можно добавлять отдельную строку на каждое повторение.
Задача 1. Для алгоритма x := 4; y := x + 3 запиши значения переменных после каждой команды. Сначала нужно понять, какие значения заданы в начале и какие вычисляются позже. В алгоритме две команды, поэтому проследим их по очереди.
Ответ: после первой команды x = 4, после второй x = 4 и y = 7. Значение x сохраняется, поскольку вторая команда меняет только y. Именно поэтому выражение для y вычисляется с уже полученным значением x.
Задача 2. Проследи алгоритм: n := 7; если n > 5, то n := n - 2, иначе n := n + 2. Нужно сначала проверить условие, а не выполнять обе команды из ветвей. После этого останется проследить только выбранную команду и найти конечное значение.
Ответ: условие истинно, выполняется ветвь «то», конечное значение n = 5. Проверка перед выбором ветви не позволяет ошибочно прибавить 2 после вычитания. В таблице полезно записать отдельно исходное n, результат проверки и новое значение.
Задача 3. Для алгоритма s := 0; i := 1; пока i ≤ 4: s := s + i; i := i + 1 запиши трассировку и итоговые значения s и i. Здесь s накапливает сумму, а i показывает очередное число. После каждой итерации нужно обновить обе переменные и снова проверить условие цикла.
Ответ: итоговые значения — s = 10 и i = 5. Счётчик i равен 5, потому что он увеличивается и в последней итерации, после прибавления 4 к сумме. Запись проверки после этого изменения показывает, почему цикл завершился.
Новое значение переменной иногда записывают до выполнения команды. Так путают состояние до шага и после него: например, считают, что x уже изменился, хотя команда ещё не выполнена. Проверяй порядок строк в трассировке: сначала команда, затем результат её выполнения. Полезно мысленно спросить себя, какое значение переменная содержит непосредственно перед этой командой.
Присваивание принимают за проверку равенства, хотя это команда, которая изменяет переменную. Ошибка возникает из-за похожей на математическое равенство записи, но знак := указывает именно на присваивание. Чтобы проверить себя, спроси, вычисляется ли выражение и сохраняется ли его значение в переменной. Если да, нужно записать новое состояние, а не отмечать истинность равенства.
При условной команде иногда выполняют обе ветви или выбирают одну без проверки условия. Это происходит, когда ученик торопится перейти к вычислениям и пропускает шаг сравнения. Сначала запиши, истинно ли условие, и только потом отмечай выбранную ветвь. У противоположной ветви не должно быть изменений в таблице для этой проверки.
В цикле можно забыть обновить переменную или неверно посчитать число повторений. Тогда условие проверяется не для того состояния, и итог отличается от правильного; иногда кажется, что цикл продолжается бесконечно. После каждой итерации отдельно сверяй команды тела и новые значения переменных. Затем проверь условие ещё раз — так станет понятно, нужно продолжать цикл или остановиться.
Для трассировки нужно уметь читать запись алгоритма, соблюдать порядок команд и понимать, как работают переменные и присваивание. Если эти основы неясны, будет трудно определить, какое значение используется на очередном шаге. Пошаговая запись, в свою очередь, помогает проверять алгоритмы с ветвлениями и циклами. С её помощью можно найти место ошибки и обосновать, почему получен именно такой результат.
Зачем записывать выполнение алгоритма по шагам?
Пошаговая запись показывает, как команды изменяют переменные и приводят к результату. По ней проще обнаружить пропущенный шаг или ошибку в вычислениях.
Какие значения переменных нужно вносить в таблицу?
Записывай исходные значения, а после каждой команды присваивания — новое значение изменённой переменной. При необходимости отмечай также проверку условия и данные, которые выводит алгоритм.
Когда следует записывать новое значение переменной?
Новое значение записывают после выполнения команды присваивания. До этого момента в переменной хранится прежнее значение.
Как отмечать в таблице выполнение условия и выбор ветви?
Сначала запиши условие и результат его проверки: истина или ложь. Затем укажи, какая ветвь выполняется, и внеси изменения после её команд.
Как понять, что цикл завершился и можно записать результат?
После очередного изменения переменных проверь условие цикла ещё раз. Если оно больше не выполняется, цикл остановлен; запиши итоговые значения и вывод алгоритма.
§ 5. Запись результатов выполнения алгоритма