Алгоритмы: исполнители, ветвление, циклы и анализ программ
Трассировка программы по шагам и обратный ход от результата к исходному значению — ядро заданий 5, 6 и 14.
Задания 5 и 6 всегда решаются одним и тем же приёмом — построением таблицы трассировки. Не пытайтесь угадать ответ: заполните таблицу переменных по шагам, и решение станет механическим.
Следование — команды выполняются по очереди. Ветвление (if/else) — выполняется ровно одна из двух ветвей. Цикл (while/for) — тело повторяется, пока условие истинно. В цикле while обязательно должна быть команда, изменяющая условие, иначе цикл бесконечен.
Трассировка программы при s = 13
| Проход | Условие s > 0 | s после | n после |
|---|---|---|---|
| старт | — | 13 | 0 |
| 1 | 13 > 0 истина | 10 | 2 |
| 2 | 10 > 0 истина | 7 | 4 |
| 3 | 7 > 0 истина | 4 | 6 |
| 4 | 4 > 0 истина | 1 | 8 |
| 5 | 1 > 0 истина | -2 | 10 |
| 6 | -2 > 0 ложь | -2 | 10 |
Условие: ниже записана программа. При каком наименьшем введённом значении переменной s программа выведет число 10? s = int(input()) n = 0 while s > 0: s = s - 3 n = n + 2 print(n) Решение. Каждый проход цикла увеличивает n на 2, значит вывод 10 означает ровно 5 проходов. 1) После 4-го прохода цикл должен продолжиться: s - 12 > 0, то есть s > 12, значит s ≥ 13. 2) После 5-го прохода цикл должен закончиться: s - 15 ≤ 0, то есть s ≤ 15. 3) Подходят 13, 14, 15. Требуется наименьшее — это 13. Проверка по таблице трассировки выше: при s = 13 программа печатает 10. В бланк: 13
Условие: у исполнителя Вычислитель две команды, которым присвоены номера: 1 — прибавь 3, 2 — умножь на 2. Составьте алгоритм получения из числа 1 числа 25, содержащий не более 5 команд. В ответе запишите только номера команд. Решение. Идём от результата назад: 25 нечётное, значит последняя команда — «прибавь 3», до неё было 22. 22 чётное — делим на 2, получаем 11. 11 нечётное — вычитаем 3, получаем 8. 8 : 2 = 4. 4 - 3 = 1 — пришли к началу. Восстанавливаем прямой порядок: 1 →(+3) 4 →(×2) 8 →(+3) 11 →(×2) 22 →(+3) 25. Это команды 1, 2, 1, 2, 1 — ровно 5 команд. В бланк: 12121 (цифры подряд, без пробелов и запятых)
Если в условии спрашивают наименьшее значение, а вы нашли диапазон 13–15, ответом будет 13, а при вопросе о наибольшем — 15. Проверяйте обе границы подстановкой. Вторая ловушка — операции // и %: в Python // это целочисленное деление (7 // 2 = 3), а % — остаток (7 % 2 = 1). Третья: range(1, 5) даёт числа 1, 2, 3, 4 — правая граница не включается.
- ✓Построена таблица трассировки, а не догадка
- ✓Условие цикла while проверено перед каждым проходом, а не после
- ✓Определено, наименьшее или наибольшее значение требуется
- ✓Обе границы найденного диапазона проверены подстановкой
- ✓Для исполнителя проверено ограничение на число команд
- ✓Ответ — цифры подряд без разделителей