Сейчас разберемся, что за программу нам дали и что она будет делать!
Перед нами программа, которая управляет роботом на сетке. Робот стартует в верхнем левом углу.
Алгоритм программы:
- использовать Робот - Начинаем работу с роботом.
- алг - Начало алгоритма.
- нач - Тоже начало, видимо, для ясности.
- если слева свободно - Робот проверяет, свободно ли поле слева от него.
- ..то влево - Если слева свободно, робот поворачивает налево.
- ..закрасить - Робот закрашивает текущую клетку.
- все - Похоже, это команда для выполнения действия для всех возможных случаев или до конца.
- . закрасить - Робот закрашивает текущую клетку (это действие выполняется, если условие в строке 4 не выполнилось, т.е. слева не свободно).
- . влево - Робот поворачивает налево (это действие тоже выполняется, если слева не свободно).
- кон - Конец алгоритма.
Моделирование работы робота:
Давай представим, как робот будет двигаться по сетке. Наша сетка 5x5, и робот начинает в самой верхней левой клетке, лицом внутрь квадрата (на восток, если представить карту).
- Старт: Робот в клетке (1,1) (верхний левый угол), смотрит на восток.
- Строка 4: "если слева свободно". Слева от робота (то есть на север) - стена. Значит, условие ЛОЖЬ.
- Строка 8: Выполняется действие "закрасить". Робот закрашивает клетку (1,1).
- Строка 9: Выполняется действие "влево". Робот поворачивает налево (теперь он смотрит на север).
- Цикл "все": Программа повторяет блок команд.
- Строка 4: "если слева свободно". Слева от робота (на запад) - стена. Условие ЛОЖЬ.
- Строка 8: "закрасить". Робот закрашивает клетку (1,1) (она уже закрашена, ничего не меняется).
- Строка 9: "влево". Робот поворачивает налево (теперь он смотрит на запад).
- Строка 4: "если слева свободно". Слева от робота (на юг) - свободно. Условие ИСТИНА.
- Строка 5: "то влево". Робот поворачивает налево (теперь он смотрит на юг).
- Строка 6: "закрасить". Робот закрашивает клетку (1,1) (уже закрашена).
- Строка 4: "если слева свободно". Слева от робота (на восток) - свободно. Условие ИСТИНА.
- Строка 5: "то влево". Робот поворачивает налево (теперь он смотрит на восток).
- Строка 6: "закрасить". Робот закрашивает клетку (1,1) (уже закрашена).
В чем загвоздка?
В том, что команда "все" (строка 7) находится после блока 4-6, но перед блоком 8-9. И похоже, что вся конструкция "если-то" (4-6) выполняется только один раз, а потом происходит "закрасить" и "влево" (8-9), и цикл "все" (7) повторяет только этот последний блок.
Давайте перечитаем программу внимательно:
- использовать Робот
- алг
- нач
- если слева свободно
- ..то влево
- ..закрасить
- все
- . закрасить
- . влево
- кон
Похоже, что структура такая:
алг нач
если слева свободно ТО
влево
закрасить
все // Здесь, похоже, команда