ДРоботландский Университет 
2000/2001 учебный год
Курс 31 "Азы программирования"
-------------------------------------------------

     Р О Б О Т Л А Н Д С К О Е  П Р О Г Р А М М И Р О В А Н И Е

                    Методические рекомендации

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

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


         Содержание

1. Общие замечания
2. Аннотация программных средств
3. Рекомендации по главам
   3.1. Плюсик


1. Общие замечания

     Пособие для школьников построено как практическое руковод-
ство по работе со следующими продуктами предприятия Роботландия:

     Кукарача 97
     Корректор 97

     Работа с программой  Плюсик  служит введением в тему прог-
раммирования и не  описана  в книге для школьника. Рекомендации
по работе с этой программой приводятся в этом  файле (они почти
буквально повторяют рекомендации из традиционного курса  Робот-
ландии).
  Замечание 1. Предлагаемый материал по программированию нельзя
назвать вводным. Предполагается, что дети уже знакомы с поняти-
ем алгоритма  и исполнителя, умеют достаточно свободно работать
в простом текстовом редакторе (таком, например,  как Микрон или
Микромир). В идеале заниматься будет легко тем ребятам, которые
уже знакомы  с традиционными школьными уроками Роботландии. Се-
тевые курсы раскрывают новые стороны знакомых  программ и пред-
лагают новые среды, логически и педагогически продолжающие зна-
комство с  программированием, показывают его тонкости и уделяют
большое внимание  практической работе по тестированию и отладке
программ на компьютере.
  Замечание 2.  Состав  команд,  участвующих в курсах, довольно
неоднороден. Наряду  с детьми, изучавшими традиционный курс Ро-
ботландии (а именно на них в первую очереди ориентирован курс),
есть команды, в которых дети являются  новичками в информатике.
Это не означает,  что для таких детей предлагаемый материал яв-
ляется недоступным.  Руководителю команды просто нужно из пред-
лагаемого материала  отобрать те разделы, которые наиболее под-
ходят для его  группы школьников. Для того чтобы помочь руково-
дителю быстрее сориентироваться в уровне предлагаемого  матери-
ала, мы будем помечать его разделы специальной символикой:
                (░xy)

Где: ░ - символ оценки материала;
     x - оценка сложности:
         0 - материал доступен новичку;
         1 - материал средней сложности;
         2 - материал повышенной сложности
     y - оценка обязательности:
         0 - материал можно опустить без ущерба для дальнейшего
             изучения;
         1 - материал обязателен для изучения в рамках своего уровня
             сложности

2. Аннотация программных сред

Плюсик (░01)
   Классический  исполнитель  из курса  Роботландии  -  стековый
калькулятор. Идеи стековой обработки используются в  последующих
темах семестра.

Кукарача-97 (░01) - (░21- отдельные разделы)
  Среда программирования Кукарача-97 и  ее  методическое сопро-
вождение, предлагаемые на курсах, являются существенно  перера-
ботанным вариантом традиционного исполнителя из курса Роботлан-
дии-96. Например, в ней уделяется гораздо больше внимания прак-
тической  стороне  программирования -  тестированию  и  отладке
программ. Фактически эта часть курсов представляет собой введе-
ние  в  программирование на базе простого исполнителя и  языка,
содержащего основные  конструкции в минимальном объеме. Она от-
личается простотой  средств, сочетаемых с глубиной понятий, ко-
торые изложены  в  занимательной  диалоговой форме. Рассмотрены
наиболее  важные  понятия  структурного программирования как  с
точки зрения методов  построения алгоритмов, так и с точки зре-
ния практического кодирования и отладки программ.

Корректор-97 (░11) - (░21- отдельные разделы)
   Этот исполнитель  знаком  тем,  кто  читал  книгу А.Дуванова,
Ю.Первина  "Необычайные  приключения  Пети Кука в  Роботландии".
Правда, Корректор не  был включен в версию Роботландии для машин
класса PC. Авторы  поняли, что Корректор совсем не заслужил опа-
лы. В настоящее время  Корректор  разработан для РС заново. Кор-
ректор подобно машине Тьюринга имеет в своей среде ленту, разде-
ленную на ячейки, а программируется он на том  же самом алгорит-
мическом языке, что и исполнитель Кукарача. Однако программы для
него сложнее, хотя они и  короче  кукарачинских.  В арсенале его
средств программирования рекурсия занимает  не  последнее место.
Хитрые задачи Корректора развивают навыки абстрактного  мышления
и продолжают знакомство с премудростями теоретического и практи-
ческого программирования.

3. Рекомендации по главам

3.1. Плюсик (░01)

  Методическое назначение темы

     Плюсик - это  модель  стекового калькулятора. Работа с ним
полезна уже с точки зрения знакомства с понятием  стека - очень
популярной в программировании структуры данных. Это понятие ис-
пользуется в следующих темах Курса. Кроме знакомства со стеком,
программа Плюсик в  Курсах  служит простой начальной средой для
повторения таких тем, как исполнитель, СКИ  (система команд ис-
полнителя), сообщения исполнителя (НЕ ПОНИМАЮ - команда не вхо-
дит в СКИ, НЕ МОГУ - команда входит в СКИ,  но  приводит к ава-
рийной остановке робота). Наконец, Плюсик позволяет познакомить
детей с нетрадиционной записью арифметического выражения, кото-
рую часто используют при проектировании трансляторов для вычис-
ления выражений. Это так называемая обратная польская запись:
  обычная запись выражения:  a + b * (c + d/e)/f
  обратная польская запись того же выражения: abcde/+*f/+

Сравните:
  обычная запись выражения:  2 + 5 * (10 + 134/12)/7
  программа для Плюсика:
                         ЗАПОМНИ 2
                         ЗАПОМНИ 5
                         ЗАПОМНИ 10
                         ЗАПОМНИ 134
                         ЗАПОМНИ 12
                         ДЕЛИ
                         СЛОЖИ
                         УМНОЖЬ
                         ЗАПОМНИ 7
                         ДЕЛИ
                         СЛОЖИ

   Конечно, при работе с Плюсиком не надо вводить термин "обрат-
ная польская запись", но нужно добиться, чтобы перевод выражения
из обычной формы  в обратную польскую (программу для Плюсика) не
представлял для детей особого труда. В следующих темах Курса эти
навыки пригодятся.

   Примерный план занятий с Плюсиком.

 Понятие стека
 Знакомство с исполнителем, его средой и СКИ
 Сообщения исполнителя
 Как Плюсик вычисляет примеры в одно действие
 Программы для Плюсика, вычисляющие сложные выражения
 Решение задач

   Рекомендации по составлению программ для Плюсика.

   Для преобразования обычного выражения в программу для Плюсика
можно просматривать выражение последовательно слева направо, за-
писывая команды
                      ЗАПОМНИ число
   Если после  очередного запоминания выяснится, что над послед-
ними двумя числами в стеке можно выполнить арифметическую опера-
цию, записывается соответствующая команда.

   Пример.

   Выражение: 28*(36-70/5)+15    (*)

   Составление программы для Плюсика:

   Просматриваем запись  (*)  слева направо и записываем команды
ЗАПОМНИ:

        ЗАПОМНИ 28   (нельзя выполнить операцию)
        ЗАПОМНИ 36   (нельзя выполнить операцию)
        ЗАПОМНИ 70   (нельзя выполнить операцию)
        ЗАПОМНИ 5    (теперь операцию выполнить можно)
        ДЕЛИ         (70/5)
        ВЫЧТИ        (36-70/5)
        УМНОЖЬ       (28*(36-70/5), больше операций выполнить нельзя)
        ЗАПОМНИ 15   (теперь операцию выполнить можно)
        СЛОЖИ        (28*(36-70/5)+15)

   Ниже приводится фрагмент одного из приключений юного Пети Ку-
ка в Роботландии. Его можно использовать  для подготовки занятий
по исполнителю Плюсик.

Начало фрагмента------------------------------------------------
   Этот день  друзья  решили посвятить отдыху. Собралась веселая
компания роботов:  Кукарача, Конюх, Машинист и Переливашка. Петя
Кук, конечно же, был среди друзей, а с ним записная книжка и ша-
риковая, обгрызанная  на  конце  ручка. Друзья расположились под
большой сосной, из-под которой открывался красивый  вид на реку.
На реке работал Перевозчик.  Волк,  демонстративно отвернувшийся
от козы, гадал на ромашке: "Перевезет,  ошибется, сломает весло,
упадет в воду..." Было тихо, ласково грело солнышко. В тот самый
момент, когда последний лепесток ("перевезет!") упал с ромашки в
воду, друзей привлек шум, доносившийся с опушки леса.
     - Что это? - спросил Петя у Кукарачи.
     - Там мастерская Плюсика,  и, судя по звукам, у него сроч-
ная работа. Пойдемте посмотрим!
     - Плюсик, - рассказывал по дороге Кукарача,  - это молодой
робот-математик. У  него  очень забавное приспособление для вы-
числений - стек.
     - А, знаю!  - обрадовался Петя.  - Стек - это такая тонкая
палочка, ею пользуются при лепке.
     - Это так, но у слова "стек" есть и другое значение, в ко-
тором оно используется в информатике.  Сейчас  ты  сам все уви-
дишь.
     Они вышли из лесу и увидели Плюсика, который расставлял на
поляне какие-то  непонятные  предметы.  Плюсик заметил компанию
роботландцев, и они обменялись  приветствиями.  ("Приветствия в
Роботландии очень странные,  - записал Петя в своем дневнике. -
Один говорит: "Как твоя СКИ?" А другой отвечает: "Спасибо тебе,
хорошо!")
     - Дорогой Плюсик! - обратился Кукарача к роботу. - Я вижу,
ты очень занят, но все же, не будешь ли так любезен и не объяс-
нишь ли нам, что ты делаешь?
     Было видно, что Плюсику приятно внимание уважаемых гостей.
     - Хорошо, - ответил он. - Я буду работать и объяснять. Для
начала посмотрите на это устройство.  Это  стек.  Он служит для
хранения информации. Я использую его для хранения чисел при вы-
полнении арифметических расчетов.
     Вот смотрите, я запоминаю в стеке число 10.
          ──────────────────────────────────────┐
           ┌───┐                                │
           │10 │                                │
           └───┘                                │
          ──────────────────────────────────────┘
     Теперь я запоминаю в стеке число 20.
          ──────────────────────────────────────┐
           ┌───┐┌───┐                           │
           │20 ││10 │                           │
           └───┘└───┘                           │
          ──────────────────────────────────────┘
   И, наконец, число 15.
          ──────────────────────────────────────┐
           ┌───┐┌───┐┌───┐                      │
           │15 ││20 ││10 │                      │
           └───┘└───┘└───┘                      │
          ──────────────────────────────────────┘
     - Странное хранилище, - заметил Петя. - Ведь из стека мож-
но взять только последнее число 15. А если,  скажем, первым по-
надобилось число  10, то придется предварительно вынимать числа
15 и 20. Никогда в жизни не видел такого странного и неправиль-
ного устройства!
     - Ты не прав, - возразил  Машинист,  -  стеки  встречаются
очень часто и в повседневной жизни, и в технике. Стопка лежащих
на столе книг - это стек, из которого первой можно  взять книгу
сверху. Трамвайные вагоны, которые по вечерам  заезжают в депо,
- это  тоже стек: из стека-депо  можно взять первым  только тот
вагон, который в него был поставлен последним.
     - Ты мне сам рассказывал, - вступила в разговор Переливаш-
ка, - о  любимой игрушке твоего маленького братишки: о пирамиде
с цветными кольцами. Если колечки снимать и надевать по одному,
то эта игрушка представляет собой стек.
     - Чтобы понять  мою  работу,  -  продолжал свои объяснения
Плюсик, - надо познакомиться с моей СКИ, - и поставил под дере-
вом большой плакат.
┌────────────────┐
│   СКИ ПЛЮСИКА  │
├────────────────┤
│ ЗАПОМНИ число  │
│ СЛОЖИ          │
│ ВЫЧТИ          │
│ УМНОЖЬ         │
│ ДЕЛИ           │
│ ОЧИСТИ         │
└────────────────┘
     - Каждый  робот  - это исполнитель, - пояснил Кукарача.  -
СКИ -  это система команд исполнителя,  то есть список  тех ко-
манд, которые понимает и умеет выполнять робот. У каждого робо-
та - своя СКИ. Для правильного управления необходимо знать, как
робот выполняет команды из своей СКИ.
     - А как  ты  выполняешь  свои  команды,  дорогой Плюсик? -
спросил Петя и приготовился записывать.
     -  Команда
                          ЗАПОМНИ число
очень простая. Я должен просто втолкнуть в стек  указанное в ко-
манде число, - стал объяснять Плюсик. - Вот только что  я выпол-
нил три такие команды:
ЗАПОМНИ 10
ЗАПОМНИ 20
ЗАПОМНИ 15
     Команды СЛОЖИ, ВЫЧТИ,  УМНОЖЬ и ДЕЛИ я выполняю при помощи
счетного устройства:
                ┌─────────────────────┐
                │┌───────┐   ┌───────┐│<── входные
                │└───────┘   └───────┘│    отверстия
                │   1            2    │
                │        + ┌─┐        │
                │          └─┘        │
                │        - ┌─┐        │
                │          └─┘        │<── кнопки
                │        * ┌─┐        │    операций
                │          └─┘        │
                │        : ┌─┐        │
                │          └─┘        │
                │                     │
                │   ┌──────────────┐  │<── отверстие для
                │   └──────────────┘  │    результата
                │                     │
                │  Счетное устройство │
                └─────────────────────┘

     Делается это так. Я вынимаю из стека число и опускаю его в
отверстие 2 счетного устройства.  Затем  беру из стека еще одно
число и опускаю в отверстие 1. Теперь нажимаю кнопку "-". Кряк!
И из центрального отверстия появляется результат - число 5, ко-
торое я  запоминаю в стеке.  Можешь ты сказать, какую команду я
сейчас выполнил? - спросил Плюсик у Пети.
     - Ну, нетрудно догадаться, -  сказал  Петя. - Это была ко-
манда ВЫЧТИ. Однако мне не так просто привыкнуть к таким стран-
ным вычислениям. Можно, я сам попробую выполнить команду ДЕЛИ.
     - Ну что ж, попробуй, - разрешил Плюсик. Петя опустил пер-
вое число  5 из стека  в отверстие 2 счетного устройства. Потом
второе число 10 опустил в отверстие 1 и нажал кнопку  ":". При-
бор щелкнул и  выбросил из центрального отверстия число 2. Петя
взял его и втолкнул в стек.
     - Мне осталось объяснить последнюю команду из СКИ - коман-
ду ОЧИСТИ, - сказал Плюсик, - и можно приступать к работе.
     - Я думаю, - пошутил Петя, - что по этой команде ты берешь
метлу и подметаешь полянку!
     - Нет, нет! - горячо отозвался Плюсик. - По этой команде я
должен очистить стек  от всех чисел,  если они там  есть.  Если
стек пуст, команда считается выполненной. Вот  смотри, сейчас я
выполню эту команду.  -  Он подошел к стеку  и  вытащил из него
число 2.
     - У тебя много работы сегодня? - спросил Конюх.
     - Работы хватает, - отвечал математик. - У меня еа сегодня
пять задач.  Первый заказ - от юных роботов  (у нас их робятами
зовут) из  роботландского детского сада. Робята хотят проверить
математическое равенство
                    1 + 2 + 3 + 4 = 10
двумя разными способами. Вот их программы. - Плюсик расставил
под деревьями плакаты.
   ┌───────────────────┐         ┌───────────────────┐
   │    ПРОГРАММА 1    │         │    ПРОГРАММА 2    │
   │                   │         │                   │
   │     ЗАПОМНИ 1     │         │     ЗАПОМНИ 1     │
   │     ЗАПОМНИ 2     │         │     ЗАПОМНИ 2     │
   │     СЛОЖИ         │         │     ЗАПОМНИ 3     │
   │     ЗАПОМНИ 3     │         │     ЗАПОМНИ 4     │
   │     СЛОЖИ         │         │     СЛОЖИ         │
   │     ЗАПОМНИ 4     │         │     СЛОЖИ         │
   │     СЛОЖИ         │         │     СЛОЖИ         │
   └───────────────────┘         └───────────────────┘
     - Программа - это последовательность команд, которую  дол-
жен выполнить робот  для решения задачи, - пояснил Пете Кукара-
ча.
     - Вы можете помогать мне в  работе,  -  обратился к гостям
Плюсик. - Вы громко читайте очередную команду из программы, а я
ее буду выполнять.
     - Хорошо, - согласился Кукарача, - я начинаю.
     - А я  буду описывать вашу  работу, - заявил Петя и уселся
поудобнее на пенек.
     На полянке закипела  работа, о которой в дневнике Кука ос-
тались следующие записи и рисунки.
   Выполнение программы 1            Выполнение программы 2
┌──────────┬───────────────┐   ┌──────────┬────────────────────┐
│Программа │Состояние стека│   │Программа │   Состояние стека  │
├──────────┼───────────────┤   ├──────────┼────────────────────┤
│          │  ┌───┐        │   │          │┌───┐               │
│ЗАПОМНИ 1 │  │ 1 │        │   │ЗАПОМНИ 1 ││ 1 │               │
│          │  └───┘        │   │          │└───┘               │
│          │  ┌───┐┌───┐   │   │          │┌───┐┌───┐          │
│ЗАПОМНИ 2 │  │ 2 ││ 1 │   │   │ЗАПОМНИ 2 ││ 2 ││ 1 │          │
│          │  └───┘└───┘   │   │          │└───┘└───┘          │
│          │  ┌───┐        │   │          │┌───┐┌───┐┌───┐     │
│СЛОЖИ     │  │ 3 │        │   │ЗАПОМНИ 3 ││ 3 ││ 2 ││ 1 │     │
│          │  └───┘        │   │          │└───┘└───┘└───┘     │
│          │  ┌───┐┌───┐   │   │          │┌───┐┌───┐┌───┐┌───┐│
│ЗАПОМНИ 3 │  │ 3 ││ 3 │   │   │ЗАПОМНИ 4 ││ 4 ││ 3 ││ 2 ││ 1 ││
│          │  └───┘└───┘   │   │          │└───┘└───┘└───┘└───┘│
│          │  ┌───┐        │   │          │┌───┐┌───┐┌───┐     │
│СЛОЖИ     │  │ 6 │        │   │СЛОЖИ     ││ 7 ││ 2 ││ 1 │     │
│          │  └───┘        │   │          │└───┘└───┘└───┘     │
│          │  ┌───┐┌───┐   │   │          │┌───┐┌───┐          │
│ЗАПОМНИ 4 │  │ 4 ││ 6 │   │   │СЛОЖИ     ││ 9 ││ 1 │          │
│          │  └───┘└───┘   │   │          │└───┘└───┘          │
│          │  ┌───┐        │   │          │┌───┐               │
│СЛОЖИ     │  │10 │        │   │СЛОЖИ     ││10 │               │
│          │  └───┘        │   │          │└───┘               │
└──────────┴───────────────┘   └──────────┴────────────────────┘
     Когда с задачей юных роботов было покончено, Плюсик прочи-
тал условие второго задания, полученного им от Переливашки:
     Если в Роботландии купить 13 альбомов по 17 копеек и книгу
за 1  рубль 35 копеек, то сколько останется  денег от взятых на
покупки 5 рублей?
     К задаче Переливашка  приложила  два листочка. На одном из
них было записано арифметическое выражение для вычислений:
                    ┌────────────────────┐
                    │ 500 - 13*17 - 135  │
                    └────────────────────┘
   На другом листочке - текст программы.
                     ┌─────────────────────┐
                     │ЗАПОМНИ 500          │
                     │ЗАПОМНИ 13           │
                     │ЗАПОМНИ 17           │
                     │УМНОЖЬ               │
                     │ВЫЧТИ                │
                     │ЗАПОМНИ 135          │
                     │ВЫЧТИ                │
                     └─────────────────────┘
     Когда Плюсик  стал  рассматривать  следующие задания, про-
изошла заминка. Выяснилось,  что  программы к этим заданиям от-
сутствуют. То ли заказчики не утрудили себя их составлением, то
ли потерялись они, то ли  были  украдены  злоумышленниками,  но
программ - увы! - не было.
     Петя Кук почувствовал, что все роботландцы от него чего-то
ждут. И тут его осенило. "Эти хитрецы все  подстроили! Они сна-
чала устроили для меня урок, а теперь предлагают домашнее зада-
ние". Но он не подал вида, что разгадал хитрость.
     - Друзья! - воскликнул он. - Не  надо расстраиваться. Ваши
задачи я пошлю в журнал "Светлячок" и думаю,  что программы для
их решения вы получите довольно скоро в ответах читателей.
     Роботландцы заулыбались  -  хитрость  удалась.  А Петя Кук
сделал в дневнике следующую запись: "Надо попросить ребят, что-
бы они прислали для Плюсика программы решения следующих задач:

Задание 1
     Конюх и Кукарача пошли  на  базар. Конюх купил 11 упаковок
овса по 18 кг в каждой,  а Кукарача - 7 пачек ванильных сухари-
ков по 3 кг. В  Роботландии  килограмм овса стоит 35 копеек,  а
килограмм сухариков - 88 копеек. Сколько денег заплатили друзья
за покупку?

Задание 2
     Для покупки роботы отложили 10 рублей.  Купили 27 тетрадей
по 13 копеек, три альбома по 41 копейке и книгу  за  2 рубля 13
копеек. Сколько денег останется после расходов на эту покупку?

Задание 3
Проверьте арифметическое равенство:
(13*7 + 8*5 + 4):(17*7 - 8*11 - 16) = 9

     Дорогие ребята! Учтите, что для решения этих задач не надо
ничего вычислять. Ваша работа состоит в составлении программ из
команд  СКИ  Плюсика. Вычислять будет сам робот, исполняя  вашу
программу. Однако, если вы делаете рисунки,  на которых изобра-
зите состояние стека при исполнении ваших  программ, ваше реше-
ние от этого только выиграет.

Конец фрагмента-------------------------------------------------

   Ответы к заданиям Плюсика

К заданию 1
Расчетное выражение: 11*18*35 + 7*3*88
Программа
ЗАПОМНИ 11
ЗАПОМНИ 18
ЗАПОМНИ 35
УМНОЖЬ
УМНОЖЬ
ЗАПОМНИ 7
ЗАПОМНИ 3
ЗАПОМНИ 88
УМНОЖЬ
УМНОЖЬ
СЛОЖИ

К заданию 2
Расчетное выражение: 1000 - 27*13 - 3*41 - 213
Программа
ЗАПОМНИ 1000
ЗАПОМНИ 27
ЗАПОМНИ 13
УМНОЖЬ
ВЫЧТИ
ЗАПОМНИ 3
ЗАПОМНИ 41
УМНОЖЬ
ВЫЧТИ
ЗАПОМНИ 213
ВЫЧТИ

К заданию 3
Расчетное выражение: (13*7 + 8*5 + 4):(17*7 - 8*11 - 16)
Программа (один из вариантов)
ЗАПОМНИ 13 ─┐
ЗАПОМНИ 7   │
УМНОЖЬ      │
ЗАПОМНИ 8   │
ЗАПОМНИ 5   ├─ первая скобка
УМНОЖЬ      │
ЗАПОМНИ 4   │
СЛОЖИ       │
СЛОЖИ      ─┘
ЗАПОМНИ 17 ─┐
ЗАПОМНИ 7   │
УМНОЖЬ      │
ЗАПОМНИ 8   ├─ вторая скобка
ЗАПОМНИ 11  │
УМНОЖЬ      │
ВЫЧТИ       │
ЗАПОМНИ 16  │
ВЫЧТИ      ─┘
ДЕЛИ
