8. Счётчики.
В будущем предполагается расширить язык за счёт введения счётчиков. Стёпа предложил организовать счётчик в виде сосуда, в который кладутся шарики. Вопрос об обозначении счётчика на блок-схеме пока не решён. От операторов типа, „"i = 1“ я твёрдо решил отказаться. Сначала у меня была идея обозначить счётчик треугольником с буквой; в блок-схеме приход к треугольнику с буквой А означает: «положить один шарик в баночку с надписью, „А“». Стёпа сказал, что лучше сделать не треугольник, а фигурку, напоминающую по форме тот сосуд, куда кладут шарики. Мысль хорошая, но все баночки и скляночки, оказавшиеся в доступности, имеют цилиндрическую форму, что приводит опять к прямоугольнику. Сейчас я склоняюсь к третьему варианту: на обыкновенном квадрате 3 см X 3 см нарисовать баночку с надписью „А“, шарик и стрелку, показывающую, куда этот шарик класть. Если потребуются операции вычитания из счётчика единицы (извлечение шарика из баночки), то её легко изобразить точно так же (раньше я думал переворачивать треугольник вверх ногами). Оба варианта, и старый и новый, показаны на рис. 61.Рис. 61.
Введение счётчиков также требует введения новых логических условий: „А = 4“, „А > Б“ и т. д. Только предварительно надо познакомить ребят со значками =, >, < и проч. Никакой другой арифметики (даже сложения) в языке не предполагается.
* * *
Теперь можно, наконец, вернуться к рассказу о занятии, который я прервал на полуслове.
Сначала, когда я поставил на стол коробку со всеми карточками и стрелочками, дети совершенно затопили меня вопросами, так что я едва успевал вставить слово. Всё же постепенно мне удалось объяснить им следующее.
Сначала я объяснил им, что робот — это механический человек; он может делать разные действия, но, в отличие от человека, у него нет своего ума; поэтому он делает только то, что ему велят, и ничего больше; зато он идеально послушный.
Потом я показал им те действия, которые может делать робот. Выяснилось, что они плохо отличают повороты направо и налево от поворота кругом. Пришлось построиться в шеренгу и поупражняться в военных командах; тогда оказалось, что они правую и левую стороны тоже путают. Однако при выполнении тех же команд с роботом ошибок было меньше, так как направление поворота показывали стрелки.
После этого я объяснил им, что у робота нет глаз (так как механические глаза сделать вообще-то можно, но очень трудно), поэтому он может только протянуть руку и пощупать, нет ли стены рядом с ним. Мы взяли ромбики с условиями и стали для разных положений робота проверять, верно или нет изображённое в ромбике условие. Дима очень к месту подсказал, что условие «стена справа» выполняется и тогда, когда стена с другой стороны, но и робот (стрелка) повёрнут в противоположную сторону по сравнению с ромбиком (рис. 62). Забавно: это означает, что инвариантную (относительно поворотов) структуру понятий «левое» и «правое» он уже усвоил, но пока не может запомнить, что с какой стороны.
Рис. 62.
Наконец, я сформулировал задание для робота: дойти до стены и остановиться. Тут же наступила неразбериха: один схватил робота и стал им шагать по «комнате»; другой стал раскладывать карточки по клеткам комнаты; никто ничего не понимал; ещё кто-то приставал ко мне, зачем всё-таки нужна такая длинная стрелка.
С большим трудом мне удалось восстановить порядок, объяснить, что блок-схему надо выкладывать не на клетках комнаты, а отдельно на столе, что последовательность действий надо изображать стрелками и что начинать надо с «начала» и заканчивать «концом».
Тогда они мне выложили схему, показанную на рис. 63, имея в виду неформально следующие действия: «начать и идти до конца». Я показал им, что при такой программе робот иногда доходит до стены, иногда не доходит, а иногда вообще расшибает нос.
Рис. 63.
Тогда Дима закричал:
— А, я знаю, нужно столько вот этих штучек (показал на карточку с шагом), сколько нужно шагов; сейчас скажу: раз, два, три… — пять штук!