1. У Водолея есть банки объёмом 3 литра (банка А) и 5 литров (банка В). Напишите программу, выполнив которую Водолей получит в одном из сосудов 1 литр воды.
Для решения задачи с двумя банками объёмом 3 литра и 5 литров, можно воспользоваться классической задачей о переливании воды. Программа будет состоять из нескольких шагов, чтобы точно получить 1 литр воды в одном из сосудов.
Шаги для получения 1 литра воды:
Наполнить 5-литровую банку (банка В). Перелить воду из 5-литровой банки в 3-литровую (банка А), пока 3-литровая банка не станет полной. В 5-литровой банке останется 2 литра воды. Вылить воду из 3-литровой банки. Перелить 2 литра из 5-литровой банки в 3-литровую. Наполнить 5-литровую банку снова. Перелить воду из 5-литровой банки в 3-литровую до тех пор, пока в 3-литровой банке не будет 1 литр воды. Алгоритм:
Наполнить банку В (5 литров). Перелить в банку А (3 литра), в банке В остаётся 2 литра. Вылить воду из банки А. Перелить оставшиеся 2 литра из банки В в банку А. Наполнить банку В снова (5 литров). Перелить в банку А, в результате в банке А останется 1 литр.
2. Для предыдущего задания сравните два решения: то, в котором 1 литр получается в банке А, и то, в котором 1 литр получается в банке В. Какое из них короче?
Решение с 1 литром в банке А (3 литра): это решение требует 6 шагов. Решение с 1 литром в банке В (5 литров): возможно, оно будет включать дополнительные этапы для распределения воды, но оно не сможет быть короче, так как изначально требуется получить 1 литр, что потребует не меньше количества шагов. Поэтому, решение, где 1 литр получается в банке А, будет короче, так как банки меньшего объёма проще заполнить до нужного количества.
3. Как вы думаете, если записать команду для Робота с ошибкой (например, вместо направо написать направа или вправо), то поймет ли её Робот? А человек?
Если команда для Робота будет записана с ошибкой (например, "направа" или "вправо" вместо "направо"), Робот, скорее всего, не сможет понять команду, так как программа будет настроена на чёткие ключевые слова. В то время как человек сможет понять, что имелось в виду, даже если слово написано с ошибкой, Робот будет следовать строго заданному алгоритму и не сможет выполнить команду.
4. Напишите решение задачи 2, в котором нет ни одной команды вперёд. Какое решение, по-вашему, лучше? Почему?
Чтобы решить задачу без использования команды "вперёд", можно воспользоваться другим способом, например, менять направление робота с помощью команд "налево" и "направо", а также использовать команды для манипуляции предметами или перемещения. Такое решение будет более сложным и потребует больше шагов, но оно тоже возможно. В общем случае, решение без команды "вперёд" будет менее удобным и более громоздким, потому что задача будет решаться через дополнительные повороты и более сложное управление.
5. Докажите, что программа 3 в тексте параграфа линейная.
Программа является линейной, потому что она состоит из последовательности команд, которые выполняются одна за другой. Каждая команда выполняется в фиксированном порядке, без каких-либо циклов, условий или параллельных ветвлений. Это означает, что выполнение программы происходит шаг за шагом от первой команды к последней. В результате мы имеем чёткую последовательность действий, и программа не изменяет свою структуру в зависимости от условий, то есть она линейная.
6. Какие две строчки в программе 3 можно поменять местами? Почему результат от этого не изменится?
назад поверни налево посади вперёд посади вперёд посади поверни направо вперёд
Результат работы программы не изменится, потому что Робот всё равно выполнит все действия в нужной последовательности, только с изменённым порядком команд.
7. Напишите решение задачи 3, в котором не используется команда назад. Какое решение, по-вашему, лучше? Почему?
поверни направо поверни направо вперёд посади поверни налево вперёд посади вперёд посади поверни направо вперёд
С командой "назад" программа лучше, так как используется меньше команд.
8. Исправьте все ошибки в программе 4 и проверьте её работу в тренажёре.
назад посади поверни налево вперёд посади вперёд посади поверни направо вперёд