Информатика и цифровые технологии
Играем с исполнителем Водолей
Некоторые считают, что программирование появилось с изобретением компьютеров. Это не так. Умение работать с современными компьютерами и современным программным обеспечением — важное, но не главное умение программиста. Более важна способность к алгоритмическому мышлению, иногда ещё называемому вычислительным или цифровым. Эта способность означает уметь и быть готовым в любой ситуации размышлять, планировать свои действия, предусматривать различные обстоятельства, возникающие при выполнении планов, и поступать соответственно с ними. Все эти умения и способности понадобились людям задолго до того, как был изготовлен первый компьютер. Само слово «алгоритм» происходит от имени средневекового учёного Мухаммеда ибн Мусы аль-Хорезми (787—850), жившего в Средней Азии. В XIII веке, когда труды аль-Хорезми были переведены с арабского языка на латынь, его имя записали так: Algorithmus. Но, конечно, люди изобретали алгоритмы и до Мухаммеда ибн Мусы. Например, все математики знают так называемый алгоритм Евклида, а Евклид жил больше двух тысяч лет назад!
Главное, что отличает специалиста по программированию, — это умение ясно мыслить. Его планы будущей деятельности — предусматривать все возможности для развития событий настолько ясно и подробно, чтобы их можно было изложить в форме программы и переложить выполнение планов на компьютер.
Вот такой ясности мысли мы с вами и будем учиться, начав с математических и логических игр и головоломок по управлению разными воображаемыми исполнителями команд.

При этом на отдельных этапах этой учёбы мы могли бы обойтись вообще без компьютеров. Но с применением компьютеров учёба идет быстрее и веселее. Предположим, что вы придумали решение какой-то головоломки и рассказываете решение приятелю. Если вы недостаточно чётко изложили решение, то приятель может догадаться, что вы имели в виду, хотя вы и не изложили это во всех деталях. В итоге слушатель-человек может счесть правильным ваше неполное решение или даже неверное решение. А вот компьютер абсолютно послушен и безынициативен и ничего от себя добавлять к вашему решению не будет. Поэтому именно компьютер оказывается идеальным окончательным судьёй в том, достигли ли вы полной ясности в решении задачи или в предложенном решении ещё остались какие-то туманные моменты.
1. Исполнитель Водолей. Первое знакомство
Исполнитель Водолей распоряжается несколькими сосудами для воды и умеет по командам наполнять эти сосуды, переливать воду из одного сосуда в другой. С помощью этих переливаний Водолей старается точно отмерить заданный ему объём воды.
Трудно ли отмерить ровно один литр воды? Ответ зависит от того, какие сосуды есть в распоряжении Водолея. Если у Водолея есть литровый сосуд А (латинская буква «а»), то решение будет состоять из одного шага. Мы командуем Водолею:

наполни А

и задача решена. Немного усложним задание. Представим себе, что Водолей распоряжается двумя сосудами: двухлитровый сосуд А и трехлитровый сосуд B (латинская буква «бэ») и оба сосуда пусты. Это задание в игре «Водолей» имеет номер 1.

Литрового сосуда у Водолея нет, но отмерить ровно 1 литр можно тремя командами:

наполни B
перелей из B в А
вылей А


После выполнения первой команды в сосуде B будет 3 литра воды, а на втором шаге Водолей переливает 2 литра воды из B в пустой сосуд A, после чего в B остается 1 литр воды. И после выливания воды из A остается один непустой сосуд, в котором ровно один литр воды. Казалось бы, последнюю команду Водолею можно было бы и не давать. Но программисты, разработчики игры «Водолей», предложили уточнить, дополнить условие достижения успеха в игре. А именно, они предложили потребовать, чтобы в одном сосуде «Водолей» получил нужное количество воды, а другие сосуды сделал пустыми. Это требование упрощает проверку правильности решения задачи и потому введено в игру «Водолей» как обязательное. Профессиональные программисты часто предлагают заказчикам уточнить условие решаемой задачи, и заказчики часто с такими предложениями соглашаются. Именно это и случилось при разработке игры «Водолей» по заказу авторов учебника.
Дадим теперь более подробное описание Водолея и его команд.
Прежде всего, мы предполагаем, что в распоряжении Водолея, кроме сосудов, есть неограниченный резервуар с водой. Из этого резервуара Водолей будет брать нужную ему воду. Дальше нужно заметить, что слово Водолей отсылает не к конкретному исполнителю, а к целому классу однотипных исполнителей с похожими командами и правилами работы. Чтобы задать конкретного Водолея, нужно указать, сколькими сосудами он распоряжается и каков объём каждого из этих сосудов. У нас, как правило, будут Водолеи, распоряжающиеся двумя или тремя сосудами, и мы будем обозначать эти сосуды латинскими буквами A, B, C. В игре «Водолей» на каждом уровне игры (в каждом задании) речь идёт о конкретном Водолее, то есть задаются и вместимости сосудов, и их содержимое в начальный момент. Задаётся и цель данного уровня – количество литров воды, которое нужно отмерить. На рисунке показано, как объёмы сосудов и их содержимое изображаются на экране игры «Водолей».
Водолей распоряжается тремя сосудами A, B, C объёмом 8 литров, 5 литров и 13 литров соответственно. Показано, что сосуд A содержит 5 литров воды, сосуд B — 2 литра и сосуд C —13 литров.
Команды Водолея бывают трёх видов.
Первый вид:
наполни А (или B, C, …)
В результате выполнения этой команды соответствующий сосуд наполняется до краев. Цель Водолея при выполнении этой команды, добиться того, чтобы сосуд был наполнен до краев, независимо от того, сколько воды в нем было до выполнения команды. Исходя из этой цели, Водолей без возражений выполнит команду наполни А и в случае, когда сосуд А уже наполнен до краев.

Команд такого вида столько же, сколько сосудов.

В компьютерной игре «Водолей» команды задаются и словами, и картинками. Эти картинки называются пиктограммами.

Вот пиктограмма команды наполни А
Сосуд А изображён треугольником с написанной на нём буквой А. Идущая сверху вниз к изображению сосуда стрелка подсказывает, что изображена команда наливания (сверху) воды в указанный сосуд.
Сосуды A, B и C на экране раскрашены в жёлтый, голубой и зелёный цвета соответственно. Буквы A, B и C на пиктограммах изображаются на фоне треугольника соответствующего цвета. Даже если бы на этих цветных треугольниках не были написаны буквы, по цвету треугольника можно догадаться, какой сосуд будет наполняться по данной команде.
Второй вид:
вылей из А (или B, C, …)
В результате выполнения этой команды соответствующий сосуд становится пустым. Число таких команд также равно числу сосудов.

Вот как выглядят пиктограммы для команд второго вида:
Цель Водолея при выполнении команды второго вида — добиться того, чтобы сосуд стал пустым. Исходя из этой цели, Водолей без возражений выполнит команду вылей из А и в случае, когда сосуд А уже пуст.
Третий вид:
перелей из А в B (или из В в С, …)
Опишем результат выполнения этой команды в зависимости от того, достаточно ли в сосуде B свободного объёма для всей воды из сосуда А. Если объёма достаточно, то сосуд А становится пустым, а в B оказывается вся вода, которая была в А и B вместе до переливания. Если же объёма в B недостаточно, то B становится полным, а в А остаётся столько воды, сколько не поместилось в B. Возможна и ситуация, когда для наполнения B до краев нужно ровно столько воды, сколько налито в А. В этом случае после выполнения команды сосуд А окажется пустым, а сосуд B наполненным до краёв.

Иначе говоря, цель Водолея при выполнении команды третьего вида перелей из А в B: сохраняя общий объём воды в А и B, добиться выполнения хотя бы одного из двух условий: сосуд А пуст или сосуд B наполнен до краёв. В соответствии с этой целью Водолей без возражений выполнит команду перелей из А в B даже если сосуд А изначально пуст или сосуд B наполнен до краёв, или одновременно выполнено и то и другое.

Число команд третьего вида равно числу пар различных сосудов. Для трёх сосудов число этих команд равно 6.
Подведём итоги описания команд Водолея для двух сосудов.
У Водолея с двумя сосудами А и B число команд всех видов равно 6:
перелей из А в B
перелей из B в А
наполни А
наполни В
вылей из А
вылей из В


Сколько команд будет у Водолея с тремя сосудами? Перечисли все команды.

Замечание. Легко проверить, что после выполнения любой команды Водолея есть либо пустой сосуд, либо сосуд, наполненный до краёв.

Смотреть пиктограмму команд
2. Компьютерная игра «Водолей»
Решать задачи для Водолея можно в уме, можно на бумаге, можно в практикуме «Водолей» системы КуМир, которую можно загрузить на компьютер по ссылке. А можно запустить онлайн компьютерную игру «Водолей» на любом планшете или компьютере, имеющем выход в интернет.

Как правило, задания в этой компьютерной игре состоят в том, чтобы, командуя Водолеем, в распоряжении которого имеются сосуды заданного объёма, точно отмерить заданное число литров воды. Это количество требуется получить в любом из сосудов. Напомним, что в игре накладывается дополнительное условие — остальные сосуды должны быть сделаны пустыми. Если в одном сосуде уже получено нужное число литров воды, то обеспечить выполнение этого дополнительного условия ничего не стоит. Нужно просто вылить воду из остальных сосудов. Не забывайте, однако, если это дополнительно условие не выполнено, задача не будет считаться решённой.

Условие задачи отображается на экране: указываются объёмы сосудов Водолея и число литров воды, которое нужно отмерить.

Задача 1 (задание 7 игры «Водолей»). Отмерь 1 литр воды с помощью одного 5-литрового сосуда и одного 3-литрового сосуда.

Условие задачи на экране игры «Водолей»
Сначала мы подумаем над решением задачи без компьютера, а потом проверим решение на компьютере в игре «Водолей». Придумать решение этой задачи можно таким способом. Если бы у Водолея были 5-литровый сосуд и 6-литровый сосуд, то мы наполнили бы 6-литровый сосуд и перелили бы его содержимое в пустой 5-литровый сосуд. Тогда в 6-литровом сосуде остался бы как раз один литр. Но у нас в задаче 5-литровый сосуд есть, а вместо 6-литрового сосуда у нас 3-литровый сосуд В. Ничего страшного, 6 литров — это два раза по 3 литра. Сначала наполним 3-литровый сосуд и перельём его в 5-литровый. Затем снова наполним 3-литровый сосуд и после, переливания его в 5-литровый, в 3-литровом сосуде В останется ровно один литр. Мы уже отмерили все, что нужно, но по правилам игры «Водолей» нужно ещё опустошить сосуд А. Таким образом, отмерить 1 литр можно, дав Водолею 5 команд:

наполни B
перелей из B в A
наполни B
перелей из B в A
вылей из A


Для того чтобы лучше понять, что происходит при выполнении этой цепочки команд, заполним таблицу. Заполняя её по строкам, мы увидим, что происходит с сосудами.
Задача решена. Её решением является цепочка из 5 команд, которые нужно одна за одной давать Водолею, чтобы отмерить требуемое число литров.

Введём эту цепочку в виде программы на алгоритмическом языке в игре «Водолей» — так мы увидим наглядно, как Водолей выполняет запланированные нами переливания.

Правила ввода и выполнения программ в игре «Водолей».

После входа в игру вы увидите список всех заданий:
Для выбора задания 7 сдвинь экран влево и кликни на нужное задание. Для вставки команды в программу, перетащи пиктограмму команды на серое поле программы между строчками нач и кон. После такого перетаскивания пиктограмма превратится в текст команды. Ошибочно введённую команду можно выбросить, перетащив её за пределы поля программы.
Выше программы расположены 4 кнопки управления — они нужны, чтобы запустить или остановить выполнение программы:
Введём программу из нашего решения задачи 1 и для проверки запустим её выполнение — нажмём зелёную кнопку. Программа на наших глазах выполнится, и мы увидим, что она правильная — получен нужный результат, в сосуде B отмерен 1 литр:
3. Алгоритмическое (вычислительное) мышление. Пример решения задачи «с конца»
В XXI веке перед человеком всё чаще возникают задачи, которые «непонятно, как решать». Наверное, такие задачи вам тоже встречались и в курсе математики, и в жизни. Это — хорошо, надо привыкать к решению таких задач, тренироваться. При этом человек приобретает опыт и в использовании некоторых общих подходов, методов решения задач, применимых в различных ситуациях.
Такие подходы занимают важное место в алгоритмическом (вычислительном) мышлении.

Проиллюстрируем наши общие соображения на примере.

Попробуй решить следующую задачу, сначала — без компьютера:

Задача 2. Имеются 8-литровый сосуд A и 5-литровый сосуд В. Отмерь 4 л воды.

Возможны следующие варианты:
1. Вы уже решали похожие задачи раньше, используя свой опыт, вы быстро находите решение. Очень хорошо, что вы получили это решение, надеемся, что оно верное. Но при этом мало что добавилось к вашему опыту решения совсем новых, неожиданных задач.

2. Попробовав разные варианты, вы постепенно нащупали решение. Опять-таки, надеемся, что решение — правильное. Вероятно, вы получили при этом больше удовольствия, чем, скажем, при решении примера «78302 х 239 =?». И очень важно, что вы приобрели опыт решения чего-то нового.

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

Теперь мы расскажем вам об одном общем подходе к решению самых разных задач, совсем не обязательно из информатики. Вот в чём он состоит:
• Предположите, что задача уже решена. В нашем случае —
что нужное количество воды отмерено, то есть состояние
наших сосудов — требуемое.
• Подумайте, какое состояние могло быть до этого, из которого
можно перейти в требуемое. Сделайте мысленный «шаг назад»
(чтобы сделать «шаг вперёд», может потребоваться несколько
команд).
• Подумайте, из какого состояния можно попасть в то, которое
вы себе представили.
• И т. д.

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

Может быть, вы уже знали этот способ или изобрели его в ходе решения задачи (что ещё лучше).

Можно представить себе наш ход мысли и несколько иначе. Мы можем, не сумев сразу решить какую-то задачу, свести её к другой, которая кажется нам более простой. «Свести» означает, что если мы решим более простую задачу, то решим и первоначальную.

Давайте попробуем так решать нашу задачу о переливании.

0. Наша исходная задача — получить 4 л в любом сосуде, например, в сосуде B.
1. Глядя на наши сосуды, мы видим, что достаточно получить 7 литров в сосуде A. После этого надо выполнить пару команд:
наполни B
перелей из B в A

При переливании из B в A сосуд A вместит дополнительно только 1 л
(7+1=8), а 5–1=4 л останется в сосуде B,и исходная задача решена.

2. Как получить 7 литров в сосуде A? Можно, например, сначала получить 2 л в сосуде A. Если в сосуде A 2 л воды, то после выполнения команд
наполни B
перелей из B в A

в сосуде A окажется 2+5=7 л воды.

3. Задача получения 2 л в сосуде A сводится к задаче получить 2 л в сосуде B. Если в сосуде B 2 л, то нужно выполнить пару команд:
вылей из А
перелей из B в A


4. А как можно получить 2 л в сосуде B? Эта задача сводится к задаче получить 5 л в сосуде A. Если в сосуде А 5 л, то нужно выполнить пару команд:
наполни B
перелей из B в A

При переливании из B в A сосуд A заполнится до краёв и в B останется 2 л.

5. А задача получить 5 л в A совсем простая и решается так: если сосуд A пуст, то достаточно выполнить две команды:
наполни B
перелей из B в A

Но в начальный момент, по условию задачи, сосуд A пуст.

Проверим, привёл ли наш способ сведения задач и хода в обратную сторону к решению.
Итак, в условии задачи дано, что в начальный момент сосуд A пуст. Поэтому:
– выполнение в начальный момент пары команд из п. 5 решит задачу
получить 5 литров в сосуде A;
– последующее выполнение пары команд из п. 4 решит задачу
получить 2 литра в сосуде B;
– последующее выполнение пары команд из п. 3 решит задачу
получить 2 литра в сосуде A;
– последующее выполнение пары команд из п. 2 решит задачу
получить 7 литров в сосуде A;
– последующее выполнение пары команд из п. 1 решит исходную задачу
получить 4 литра в сосуде B.

Таким образом, исходная задача получить 4 л в сосуде B решается такой последовательностью из 10 команд:
наполни B
перелей из B в A
наполни B
перелей из B в A
вылей из А
перелей из B в A
наполни B
перелей из B в A
наполни B
перелей из B в A

Чтобы проверить эту программу в игре «Водолей», нужно еще по завершении программы опустошить сосуд A, то есть добавить в конец программы команду

вылей из А

Проверим это решение на компьютере. Компьютер подтверждает, что всё правильно (см. рисунок на следующей странице).
Итак, мы познакомились с одним из приёмов алгоритмического мышления — это решение задачи «с конца». Мы представляем себе цель, дальше понимаем, что цель будет достигнута, если мы дойдём до предыдущей цели и т. д. Этот приём является частным случаем более общего подхода: мы выделяем некоторую промежуточную цель, о которой можем не знать точно, а только надеяться, что она достижима. И дальше мы решаем уже две задачи: как достичь промежуточной цели и как из промежуточной достичь конечной.

Наконец, и этот подход можно обобщить: можно по исходной задаче создать систему новых задач, решение которых может нас привести к искомой цели. По ходу дела некоторые новые задачи могут оказаться нерешаемыми или ненужными, а заключительную цель приходится менять. Но в конце концов мы находим решение исходной задачи. И это всё — алгоритмическое мышление! Конечно, в алгоритмическом мышлении есть и другие элементы. О них будет идти речь на протяжении всего нашего учебника.
4. Алгоритмическое (вычислительное) мышление. Как можно проверить программу
Предположим, нам дали решение задачи «отмерить», показанное на рисунке выше:

наполни B
перелей из B в A
наполни B
перелей из B в A
вылей из А
перелей из B в A
наполни B
перелей из B в A
наполни B
перелей из B в A
вылей из А


Как проверить, что это решение правильное?

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

Заполнять эту таблицу будем последовательно, сверху вниз. Заполним строку 1. До выполнения команды наполни B оба сосуда были пусты. После выполнения команды сосуд A останется пустым, сосуд B наполнится до краёв, значит, вносим в таблицу в строку 1 числа 0 и 5. Повторяя эти действия, получаем такую таблицу:

Из таблицы видно, что после выполнения последней команды программы в сосуде B будет 4 л, а сосуд A будет пуст. Таким образом, таблица доказывает, что наша программа действительно даёт нужное решение задачи.

При составлении таблицы человек мог допустить ошибку. Как проверить, правильно ли составлена таблица? Можно попробовать составить её ещё раз и потом сравнить, что получилось. Можно поступить иначе. А именно, попросим кого-нибудь (но можем сделать это и сами) прочитать состояние сосудов в каждой строке (начиная с нулевой). Например (какая там команда — неважно):
Затем прочитать в следующей строке команду и состояние сосудов:
Теперь выполним команду. Видим, что состояние сосудов в следующей строке записано правильно: мы из B перелили в A 3 л, больше в A не поместилось, сосуд A заполнился, в B осталось 2 л. Значит, строка 4 заполнена правильно.
Проверь правильность строки 5 и строки 6.

Сейчас мы выявили ещё один важный элемент алгоритмического (вычислительного) мышления. Бывает так, что нам нужно проверить правильность конструкции или работы чего-то большого, например, машины, программы, космического корабля или даже какой-то системы общественного управления, природной системы. Иногда оказывается, что для этого достаточно проверить правильность работы каждого отдельного элемента системы и каждого взаимодействия связанных элементов. То есть правильность глобального (большого) объекта установлена, если мы установили правильность всех его элементов (локальную правильность). Это — очень ценная возможность, и часто большие объекты создаются так, чтобы возможность такой проверки имелась. Некоторые проверки можно делать в определённом порядке, а некоторые — параллельно.
5. Сколько нужно ресурсов: как Водолей расходует воду
При решении задачи 2 Водолей израсходовал 20 л воды из резервуара и вылил 16 л воды. А 4 л остались в сосуде B в качестве результата работы. Чтобы отмерить 4 л, мы израсходовали целых 20 л воды. Если бы мы попробовали получить 4 л с помощью сосудов 8 л и 7 л, то, как показывают эксперименты, пришлось бы израсходовать ещё больше воды (потребовалось бы не меньше 40 л). А что, если Водолей не будет выливать воду на землю, а будет аккуратненько возвращать её в тот резервуар, откуда он воду берёт? Оказывается, в этом случае удастся обойтись гораздо меньшим количеством воды. А именно, если в начальный момент у Водолея два пустых рабочих сосуда A и B и в резервуаре запасено ровно столько воды, сколько нужно для одновременного заполнения A и B, то Водолей может спокойно проводить все операции с сосудами A и B, не беспокоясь о том, что в резервуаре не хватит воды.

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

Вы уже понимаете, что анализ ресурсов, необходимых для выполнения той или иной задачи, тоже — часть алгоримического (вычислительного) мышления.
6. Вопросы и упражнения
Если в условии задачи этого раздела не указано начальное количество воды в сосудах, то это означает, что все сосуды пусты.
Заполни таблицу переливаний, указав количество воды в каждом сосуде после выполнения каждой команды следующей программы:
Дана таблица переливаний для неизвестной программы из 9 команд, правая часть таблицы заполнена.
а) Догадайся, какая это была программа, и внеси её в таблицу.
б) Попробуй дописать программу так, чтобы в одном из сосудов получилось 5 л.
Восстанови недостающие элементы таблицы переливаний некоторой программы из 12 команд.
Задачи 4–14 предназначены для тех, кто хочет взяться за решение следующей сложной проблемы:
В распоряжении Водолея два сосуда А и В известных объёмов. Вначале оба сосуда пусты. При каких объёмах сосудов можно написать такую программу, чтобы в результате её выполнения в одном из сосудов оказался 1 л воды?
Конечно, для некоторых объёмов сосудов сразу ясно, что программу написать можно, а для некоторых — сразу ясно, что программу написать нельзя. Например, если объём сосуда А равен 1 л, а объём сосуда В равен 2 л, то программа будет состоять из одной команды наполни А. А вот если объём каждого сосуда равен 2 л или объёмы сосудов будут 2 и 4 л, то 1 л отмерить не удастся.
Пусть объём сосуда А равен 3 л, а объём сосуда В — 2 л.
а) Напиши программу из трёх команд, в результате выполнения которой в сосуде А окажется 1 л воды, а сосуд В будет пуст.
б) Для сосудов каких других объёмов годится та же программа?
в) Напишите программу, в результате выполнения которой в сосуде В окажется 1 л воды.
Водолей взял 9-литровый и 2-литровый сосуды. Напиши программу, выполняя которую Водолей отмерит 1 л.
Водолей взял 5-литровый и 3-литровый сосуды. Напиши программу, выполняя которую Водолей отмерит 1 л. Постарайся придумать самую короткую программу.
Водолей взял 7-литровый и 5-литровый сосуды. Напиши программу, выполняя которую Водолей отмерит 1 л. Постарайся придумать самую короткую программу.
Водолей взял 6-литровый и 4-литровый сосуды. Может ли Водолей отмерить 1 л? Обоснуй свой ответ.
Водолей взял 2-литровый сосуд А. Какой объём может иметь сосуд В, чтобы Водолей мог отмерить 1 л воды? Как описать все возможные значения этого объёма? Обоснуй свой ответ.
Водолей взял 4-литровый сосуд А. Какой объём может иметь сосуд В, чтобы Водолей мог отмерить 1 л воды? Как описать все возможные значения этого объёма? Обоснуй свой ответ.
Объём сосуда А равен 6 литрам, а объём сосуда B равен 9 л. Сможет ли Водолей отмерить 1 л?
Водолей взял 3-литровый сосуд А. Какой объём может иметь сосуд В, чтобы Водолей мог отмерить 1 л воды? Как описать все возможные значения этого объёма? Обоснуй свой ответ.
Водолей взял 6-литровый сосуд А. Какой объём может иметь сосуд В, чтобы Водолей мог отмерить 1 л воды? Как описать все возможные значения этого объёма? Обоснуй свой ответ.
Итак, если объёмы сосудов А и В имеют общий делитель, больший, чем единица, то отмерить 1 литр с их помощью невозможно.
Попробуй обосновать как можно более строго, что последний вывод верен.

Мы ещё не в состоянии сказать, можно ли отмерить 1 л, если объёмы сосудов взаимно просты (не имеют общих делителей, больших единицы). Пока во всех задачах это получалось, но не ясно, будет ли так всегда. К этому вопросу мы вернёмся в следующих параграфах. А сейчас перейдём к другим задачам.
Сосуд А имеет объём 16 л, а сосуд В — 5 л.
Как отмерить:
а) 9 литров;
б) 8 литров?
У Водолея есть 3 сосуда вместимостью 6, 12 и 15 л.
Может ли он отмерить 1 литр? 2 литра? 3 литра?
У Водолея есть 3 сосуда вместимостью 6, 10 и 15 л.
Может ли он отмерить:
а) 1 литр;
б) 7 литров?
Если может, то напиши соответствующие программы.
У Водолея есть 6-литровый сосуд А, в котором налито 4 литра молока, пустой сосуд В вместимостью 1 л и 6-литровый сосуд С с 4 л воды. Водолей выполнил следующую программу:
перелей из A в B
перелей из B в C
перелей из C в B
перелей из B в A

Он сделал это так быстро, что никто даже не заметил, успело ли равномерно перемешаться молоко в воде или нет после второй команды. Чего больше — молока в воде или воды в молоке? Обоснуй свой ответ.
В программе для Водолея в каком-то месте идут подряд две строки:
перелей из A в B
перелей из B в A


Петя решил упростить программу и выбросил эти две строки. Вася объяснил Пете, что новая программа работает не так, как работала исходная. Приведи пример такой программы, указав объёмы сосудов А и В.
У Водолея есть три сосуда А, В и С, в каждый из которых налито какое-то количество воды. Верно ли, что после выполнения указанной ниже программы количество воды в каждом из сосудов окажется тем же самым, что до выполнения? Ответ обоснуй.
перелей из A в B
перелей из B в C
перелей из C в A