ДРоботландский Университет 
2000/2001 учебный год
Курс 31 "Азы программирования"
-------------------------------------------------
     Р О Б О Т Л А Н Д С К О Е  П Р О Г Р А М М И Р О В А Н И Е

                                   (C) А.А. Дуванов

                                      Под редакцией
                                      Ю.А. Первина

                                      Пособие   распространяется
                                      только в рамках  Роботлан-
                                      дских  Курсов  и  является
                                      объектом авторского права.

Глава 2. Вася экономит свой труд

1. Ток - это кот задом наперед

   Петя. Знаешь ли Вася, чем будет кот задом наперед?
   Вася. Кот - он и в огороде кот. Не понял вопроса!
   Петя. А  будет кот задом наперед совсем не  котом, а тем, что
заставляет работать наш компьютер.
   Вася. Процессором что ли?
   Петя. Чудак, если слово  кот  прочитать с конца, то получится
слово...
   Вася. А, понял, получится слово "ток".
   Петя. Так вот, давай заставим Кукарачу превратить кота в ток:
              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │К │О │Т │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │# │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           5 │  │  │  │  │  │  │  │  │  │  │

   Вася. Надо  переставить  первую  и последнюю буквы. Записываю
алгоритм:
      1. Букву К во вторую строку
      2. Букву К в клетку (2,4)
      3. Букву К на место
      4. Букву Т в клетку (4,2)
      5. Букву Т на место

     Теперь записываю команды:

┌──────────────────────────┬────────┬──────────────────────────┐
│ Шаги алгоритма           │Команды │ Среда исполнителя        │
├──────────────────────────┼────────┼──────────────────────────┤
│1. Букву К во вторую стро-│ВВЕРХ   │   1  2  3  4  5          │
│ку.                       │        │  ┌──┬──┬──┬──┬──┬        │
│                          │        │1 │  │  │  │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │2 │  │К │  │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │3 │  │# │О │Т │  │        │
│                          │        │  ├──┼┼─┼──┼──┼──┼        │
│                          │        │4 │  ││ │  │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │                          │
│2. Букву К в клетку (2,4) │ВЛЕВО   │   1  2  3  4  5          │
│                          │ВВЕРХ   │  ┌──┬──┬──┬──┬──┬        │
│                          │ВПРАВО  │1 │  │  │  │  │  │        │
│                          │ВПРАВО  │  ├──┼──┼──┼──┼──┼        │
│                          │        │2 │ ┌┼──┼# │К │  │        │
│                          │        │  ├─┼┼──┼──┼──┼──┼        │
│                          │        │3 │ └┼─ │О │Т │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │4 │  │  │  │  │  │        │
│                          │        │                          │
│3. Букву К на место       │ВВЕРХ   │   1  2  3  4  5          │
│                          │ВПРАВО  │  ┌──┬──┬──┬──┬──┬        │
│                          │ВНИЗ    │1 │  │  │┌─┼┐ │  │        │
│                          │        │  ├──┼──┼┼─┼┼─┼──┼        │
│                          │        │2 │  │  ││ │# │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │3 │  │  │О │К │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │4 │  │  │  │Т │  │        │
│                          │        │                          │
│4. Букву Т в клетку (4,2) │ВПРАВО  │   1  2  3  4  5          │
│                          │ВНИЗ    │  ┌──┬──┬──┬──┬──┬        │
│                          │ВНИЗ    │1 │  │  │  │  │  │        │
│                          │ВЛЕВО   │  ├──┼──┼──┼──┼──┼        │
│                          │ВЛЕВО   │2 │  │  │  │ ─┼─┐│        │
│                          │        │  ├──┼──┼──┼──┼─┼┼        │
│                          │        │3 │  │  │О │К │ ││        │
│                          │        │  ├──┼──┼──┼──┼─┼┼        │
│                          │        │4 │  │Т │#─┴──┴─┘│        │
│                          │        │                          │
│5. Букву Т на место       │ВНИЗ    │   1  2  3  4  5          │
│                          │ВЛЕВО   │  ┌──┬──┬──┬──┬──┬        │
│                          │ВВЕРХ   │1 │  │  │  │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┼        │
│                          │        │2 │  │  │  │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┤        │
│                          │        │3 │  │Т │О │К │  │        │
│                          │        │  ├──┼──┼──┼──┼──┤        │
│                          │        │4 │  │# ││ │  │  │        │
│                          │        │  ├──┼┼─┼┼─┼──┼──┤        │
│                          │        │5 │  │└─┼┘ │  │  │        │
│                          │        │  ├──┼──┼──┼──┼──┤        │
└──────────────────────────┴────────┴──────────────────────────┘

   Петя. Прекрасно! Кукарача вернулся на то самое место, с кото-
рого начал свою работу. Это значит, что если  мы сейчас повторим
все команды с самого начала и до конца, то...
   Вася. Ток опять  превратится в кота, но только снова набирать
все 16 команд я бы поленился ради удовольствия вернуть хвостато-
го на  место. В конце концов  перед нами компьютер,  у которого,
как ты сам мне говорил, есть память. Почему мы ее не используем,
а вместо этого эксплуатируем мой детский труд?

Вопросы и задания
   1. Изменится ли среда, если Петя и  Вася захотят переставлять
местами буквы Н и С в слове СОН? Изменится ли программа? Почему?
Заставьте Кукарачу сделать требуемую перестановку.
     2. Потребуется ли новая программа, когда Петя и Вася захо-
тят переставить первую и последнюю буквы в слове СОРТ? Почему?

2. У компьютера есть память, и это хорошо
   На идею эксплуатации Васиного труда Петя отреагировал так.
   Петя. Ну, ну, Вася, не заводись. Я всегда говорил, что лень -
это двигатель  прогресса.  Что касается компьютерной памяти, тут
ты прав. Я сейчас покажу тебе, как можно  ее использовать, решая
кукарачины задачи. Вот справа на экране большое поле. Это редак-
тор программ.
   В него можно один  раз  записать программу, а затем запускать
ее на выполнение столько раз, сколько потребуется, не набирая ее
заново.
   Вася. Хорошо, я наберу в этом поле программу, но как это сде-
лать?
   Петя. Войти в редактор программ можно, как всегда, щелкнув по
его изображению мышкой, а программа записывается так:

                          ЭТО Имя
                           ...
                           команды
                           ...
                          КОНЕЦ

   Слова ЭТО и  КОНЕЦ называют КЛЮЧЕВЫМИ словами. Между ними за-
писываются команды.
   Вася. А что за имя я должен написать после слова ЭТО?
   Петя. Имя твоей программы.  Это  имя становится как бы именем
новой команды для Кукарачи, хотя такая команда, понятно, не вхо-
дит в его СКИ. Написав программу, ты можешь запустить ее  на вы-
полнение, задав ее имя в редакторе команд.
   Вася. Хорошо!  Я как бы  учу Кукарачу новым командам. А какое
имя ты посоветуешь мне сейчас написать?
   Петя. Имя может быть любым, только оно не  должно совпадать с
именами команд из СКИ  и  ключевыми словами. Внутри имени нельзя
писать пробелы.  Назови  программу  Перевертыш, ведь исполнитель
переворачивает слово задом наперед.
   Вася согласился с братом  и  набрал в редакторе программ свой
текст. Петя попросил Васю писать КОММЕНТАРИИ при записи програм-
мы. Он  объяснил, что комментарии не обрабатываются компьютером,
они  записываются  для удобства  программиста.  С  комментариями
программа становится более понятной: человеку ее  легче читать и
отлаживать. Для записи комментариев в кукарачиных программах ис-
пользуют две косых  черты "//". Они  сами и все,  что  находится
правее них  до конца строки,  не принимаются во внимание при вы-
полнении программы.
┌─────────────────────────────────────────────────────────────────────────────┐
│                             К У К А Р А Ч А  9 7                            │
├─────────────────────────────────────────────────────────────────────────────┤
│                                         ┌─────────────────────────────────┐ │
│   1  2  3  4  5  6  7  8  9  10         │ЭТО Имя                          │ │
│  ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐        │ ВВЕРХ                           │ │
│1 │  │  │  │  │  │  │  │  │  │  │        │ // 2. Букву К в клетку (2,5)    │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВЛЕВО                           │ │
│2 │  │  │  │  │  │  │  │  │  │  │        │ ВВЕРХ                           │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВПРАВО                          │ │
│3 │  │Т │О │К │  │  │  │  │  │  │        │ ВПРАВО                          │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ // 3. Букву К на место          │ │
│4 │  │# │  │  │  │  │  │  │  │  │        │ ВВЕРХ                           │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВПРАВО                          │ │
│5 │  │  │  │  │  │  │  │  │  │  │        │ ВНИЗ                            │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ // 4. Букву Т в клетку (4,3)    │ │
│6 │  │  │  │  │  │  │  │  │  │  │        │ ВПРАВО                          │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВНИЗ                            │ │
│7 │  │  │  │  │  │  │  │  │  │  │        │ ВНИЗ                            │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВЛЕВО                           │ │
│8 │  │  │  │  │  │  │  │  │  │  │        │ ВЛЕВО                           │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ // 5. Букву Т на место          │ │
│9 │  │  │  │  │  │  │  │  │  │  │        │ ВНИЗ                            │ │
│  ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤        │ ВЛЕВО                           │ │
│10│  │  │  │  │  │  │  │  │  │  │        │ ВВЕРХ                           │ │
│  └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘        │КОНЕЦ                            │ │
│                                         └─────────────────────────────────┘ │
│                               ┌───┐┌──┐┌─────────────────────────────┐      │
│                               │ - ││GO││Перевертыш                   │      │
│                               └───┘└──┘└─────────────────────────────┘      │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘
   Петя. Ну вот,  программа  записана. Теперь набери в редакторе
команд ее имя и нажми на кнопку GO.
   Вася. Записываю Перевертыш, нажимаю GO. Да, здорово, Кукарача
как заводная игрушка  трудится на поле, и, что удивительно, дей-
ствительно возвращает кота на место.
   Петя. Можно снова нажать на кнопку GO и получить на поле сло-
во ток.
   Вася. (Щелкает мышкой по кнопке GO и наблюдает за работой ис-
полнителя.) Ток, конечно, получился, но что будет если я его от-
ключу?

Вопросы и упражнения
   1. Что обозначают слова ЭТО и КОНЕЦ в программах Кукарачи?
   2. Найдите ошибки в программе:

         Это Очень хорошая команда
           СТОЯТЬ  (Кукарача стоит на месте)
         Конец.

3. Неприятное свойство компьютерной памяти,
   которое исправляется наличием дисков

   Петя. Если ты выключишь компьютер, твой  труд пропадет, прог-
рамма сотрется из памяти и завтра тебе придется  набирать ее за-
ново.
   Вася. Помнишь, ты  намекал мне, что у компьютера есть магнит-
ный диск для долговременного хранения информации. Говорил также,
что информация хранится на диске подобно звуку на магнитной лен-
те нашего магнитофона. А ведь если  я  выключаю  магнитофон,  на
ленте ничего не стирается.
   Петя. Да, конечно,  твою  программу можно сохранить на диске,
ты прав. Смышленый у меня растет брат. Посмотри  на верхнюю по-
лоску кнопочного меню  на экране. Тут есть кнопка с изображением
дискеты.
   Вася. Щелкаю по этой кнопке мышкой.

┌───┬───┬───┬────┬───────────────────────────────────────────┐
│   │   │   │    │      К У К А Р А Ч А  9 7                 │
├───┴───┴───┴────┴───────────────────────────────────────────│
│   ┌────────────┐                                           │
│   │  Новый     │                                           │
│   │  Чтение    │                                           │
│   │  Запись    │                                           │
│   └────────────┘                                           │
│                                                            │
└────────────────────────────────────────────────────────────┘
   Петя. На экране  появилось меню, из которого теперь надо выб-
рать кнопку "Запись".

┌──────────────────────────────────────────────────────────────┐
│┌────────────────────────────────────┐                        │
││┌──┐                            ┌──┐│                        │
│││| │           Запись           │Ok││<── Заголовок окна      │
││└──┘                            └──┘│                        │
│├────────────────────────────────────┤                        │
││┌──────────────────────────────────┐│                        │
│││C:\TAR\TASK\                      ││<── Текущий каталог     │
││└──────────────────────────────────┘│                        │
││ Имя файла     ┌───────────────┐┌──┐│                        │
││┌────────────┐ │ 8-6-1.coc     │├──┤│                        │
│││task.coc  <─┼─┼───────────────┼┼──┼┼─── Поле ввода имени    │
││└────────────┘ │ tsk2-1-0.coc  ││  ││                        │
││         ┌───┐ │ tsk2-1-1.coc  ││  ││                        │
││         │lat│<┼───────────────┼┼──┼┼─── Индикатор регистра  │
││         └───┘ │ tsk2-1-3.coc<─┼┼──┼┼─── Список файлов       │
││ Диски         │ tsk2-2-1.coc  ││<─┼┼─── Линейка протяжки    │
││┌────────────┐ │ tsk2-2-2.coc  ││  ││                        │
│││ a b c d f<─┼─┼───────────────┼┼──┼┼─── Список дисководов   │
│││            │ │ tsk2-2-4.coc  │├──┤│                        │
││└────────────┘ └───────────────┘└──┘│                        │
│└────────────────────────────────────┘                        │
│                                                              │
└──────────────────────────────────────────────────────────────┘
   Петя. Теперь на  экране появилось окно для ввода имени файла,
в котором на диске будет храниться твоя программа. Имя записыва-
ется в  поле ввода имени  или выбирается из списка уже существу-
ющих на диске имен.
   Вася. Сейчас в поле ввода записано имя task.coc.
   Петя. Ты можешь набрать любое другое имя. Главное, если ты не
хочешь стереть с диска  другие  программы, твое имя должно отли-
чаться от  всех имен из списка  уже существующих файлов.  И еще,
расширение имени, то есть  три  символа после точки, должны быть
"coc" - так принято обозначать файлы с программами для Кукарачи.
   Вася. Ты говорил мне также,  что  имена  файлов  записываются
только латинскими буквами. Я напишу имя "kuk1.coc". С одной сто-
роны Кук  - это моя фамилия, а  с другой  - сокращение от  слова
"Кукарача". Цифра 1 будет обозначать первую мою программу.
   Петя. Очень хорошо. Теперь щелкни по  экранной  кнопке  Ok  в
правом верхнем углу окна, и  твоя  программа  запишется на диск.
Кроме программы на  диск запишется состояние среды и имя команды
из редактора команд. Все это появится на экране, если ты порабо-
таешь в дисковом меню с режимом "Чтение".
   Вася.  Мне  понравилось писать программы. С их помощью  можно
научить  Кукарачу  новым командам. Плохо только, что для  каждой
новой команды придется писать отдельную программу.
   Петя. Совсем  необязательно. Языковая конструкция ЭТО ... КО-
НЕЦ, которую  мы  сегодня  рассматривали, называется ПРОЦЕДУРОЙ.
Программа может состоять  из нескольвих процедур и каждую из них
можно будет запускать на выполнение отдельно.
   Вася. Понятно,  ведь  каждая процедура имеет свое собственное
имя. Эти имена и будут именами новых команд.
   Петя. Все правильно. Ну,  ты  еще можешь повозиться с Кукара-
чей, а у меня сегодня много своих дел...

Вопросы и задания
   1. Что кричит кукушка? (КУКУ) (В этой и следующих задачах на-
до написать программу,  запустить  ее на выполнение, записать на
диск.)
              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │  │К │У │К │У │Ш │К │А │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │  │  │  │  │  │  │  │# │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │  │  │  │  │  │  │  │  │  │

   2. Получите при  помощи  Кукарачи из этого неизвестного зверя
домашнее животное (<<task201.coc>>).

              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │  │  │  │  │  │# │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │  │С │А │Б │О │К │А │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │  │  │  │  │  │  │  │  │  │

   3. Как получить из пяти ног одно пятно?
              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │  │П │Я │Т │Ь │  │Н │О │Г │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │  │  │  │# │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │  │  │  │  │  │  │  │  │  │

   4. Кому поет Кукарача? (ЮРИЮ)
              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │П │О │Ю │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │# │  │  │А │Р │И │Ю │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │  │  │  │  │  │  │  │  │  │

   5. Исправьте пример, переместив один из кубиков.
              1  2  3  4  5  6  7  8  9  10
             ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
           1 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           2 │  │  │  │  │  │  │  │  │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           3 │  │  │2 │7 │+ │5 │= │1 │  │  │
             ├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
           4 │  │  │# │  │  │  │  │  │  │  │
