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

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

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

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

                       К О Р Р Е К Т О Р


Глава 5. Арифметика чисел и палочек

                                - Тридцать шесть и шесть у меня.
                              Кажется, все в порядке.
                                - Какое там  в порядке -  кричит
                              кот. - У вас же температура  сорок
                              два!
                                - Почему? - испугался Печкин.
                                - А потому что  тридцать шесть у
                              вас и еще шесть. Сколько это вмес-
                              те  будет?
                                Почтальон  посчитал  на бумажке.
                              Сорок два вышло.
                                                     Э.Успенский


   Все Куки - и большие, и маленькие - горазды на  всякие выдум-
ки. Сегодня они решили научить Корректор арифметике обычной и не
очень...

5.1. Арифметика чисел

   Папа. Давайте научим Корректора выполнять арифметические опе-
рации над числами.
   Вася. В его СКИ нет нужных команд!
   Папа. Сделаем это при помощи хитрости.
   Петя. А какие числа мы будем рассматривать?
   Папа. Давайте займемся арифметикой целых неотрицательных  чи-
сел и,  чтобы не говорить  каждый раз так длинно, будем называть
их просто числами. Вот первая задача.
   Задача. <<plus1.kor>> К числу на ленте  прибавить единицу. В
начальный момент в окно видна младшая цифра.
   Вася. Ну,  такую задачу мы уже  решали на самом  первом нашем
занятии. Решением является единственная команда ПЛЮС.
   Папа. В той  задаче, которую мы решали, говорилось о сложении
единицы с четным числом, и это было не случайно.
   Петя. Проблема заключается в возможном окончании числа на де-
вять, ведь в этом случае команда ПЛЮС запишет на ее  место букву
"а" (она идет следом за девяткой в алфавите исполнителя).
   Вася. Да, я поспешил... А что же делать, если младшая цифра у
числа - девять?
   Петя. Ну, понятно, вместо нее надо записать ноль, затем необ-
ходимо прибавить единицу к следующему разряду или, что то же са-
мое, прибавить единицу к исходному числу без последней цифры.
   Папа. Посмотри, решая исходную  задачу, ты снова пришел к ней
же самой, но с меньшим  количеством цифр в числе. Как называется
такой прием?
   Петя. Конечно, это рекурсия!
   Вася. Пусть число на ленте равно 239. Вместо девяти записыва-
ем ноль и прибавляем 1 к числу 23. Получается 240, правильно!
   Папа. А если на ленте число 299?
   Вася. Самую младшую девятку заменяем нулем, и прибавляем еди-
ницу к  числу 29. При решении  последней задачи опять  девятку в
числе 29 заменяем нулем и прибавляем один к числу 2. В итоге по-
лучается 300!
   Петя. Я придумал красивую схему. Давайте обозначим нашу зада-
чу так:
                         Плюс1(299)
   Эта запись означает, что нужно  прибавить  один  к числу 299.
Тогда решение для этого числа будет иметь вид:
          Плюс1(299) = Плюс1(29)0 = Плюс1(2)00 = 300
  Ведь, известно, что
          Плюс1(...0) = ...1
          Плюс1(...1) = ...2
          Плюс1(...2) = ...3
            ....
          Плюс1(...8) = ...9
   Папа. Схема мне  понравилась, в ней очень хорошо видна рекур-
сивность. А как решить задачу для числа 99?
   Петя. Запишем так:
               Плюс1(99) = Плюс1(9)0 = Плюс1()00
   Понятно! Для того чтобы ответ был верным, нужно предусмотреть
в решении добавление  единицы к пустому месту и результат должен
равняться числу один. Пустое место получается  как бы равнознач-
ным нулю:
               Плюс1()   = 1 и тогда
               Плюс1(99) = Плюс1(9)0 = Плюс1()00 = 100
   Папа. Что-то я не слышу ничего от Васи!
   Вася. Я успеваю  только с трудом следить за вашими схемами...
Но,  кажется,  я все понял. В качестве доказательства  записываю
программу для Корректора:

ЭТО Плюс1
 ЕСЛИ НЕ 9     // Если последняя цифра не 9
   ТО    ПЛЮС  // задача решается командой ПЛЮС.
   ИНАЧЕ
   {
     ПИШИ 0    // Когда число заканчивается на 9
               // заменяем девятку нулем
     ВЛЕВО
     Плюс1     // и  добавляем 1 к "сокращенному" числу
   }
КОНЕЦ

   Петя. В твоей программе упущен случай, когда число состоит из
одних девяток.
   Вася. Да, действительно. Такое число приводит к необходимости
обработать пустую клетку:

ЭТО Плюс1
 ЕСЛИ НЕ 9  // Если последняя цифра
   ТО       // не 9, то ...
   {
     ЕСЛИ ПУСТО    // Если пусто, то
      ТО    ПИШИ 1 // записываем 1,
      ИНАЧЕ ПЛЮС   // иначе записываем
   }               // следующий символ.
   ИНАЧЕ
   {        // Когда число заканчива-
     ПИШИ 0 // тся на 9, заменяем де-
     ВЛЕВО  // вятку нулем и добавляем
     Плюс1  // один к числу слева.
   }
КОНЕЦ

   Папа. По последнему  решению  нет никаких замечаний.
   Петя. Вася, как ты  думаешь,  сколько раз надо запустить нашу
программу, чтобы убедиться в правильности ее работы?
   Вася. Я думаю, что минимум 3 раза. Первый раз для  числа, ко-
торое не оканчивается девяткой, например, для  числа 458, второй
раз для числа, у которого первая цифра не девять, а  последние -
девятки, например, для числа 57999 и третий раз  для числа, сос-
тоящего из одних девяток, например, для числа 9999. Тем самым мы
проверим все ветвления нашей программы.
   Петя.  Молодец.  Проверка программ  называется тестированием.
Тестирование должно  быть спланировано по возможности так, чтобы
в программе проработали  все ее части во всех возможных комбина-
циях. Исходные данные, которые обрабатывает проверяемая програм-
ма, называются тестами. Для каждого теста нужно подготовить кон-
трольный результат, который затем сравнивается с результатом ра-
боты программы.  Обычно результаты тестирования оформляют в виде
таблицы. Для твоих тестов таблица примет вид:
    ┌──────┬───────────────────┬─────────────┬─────────────┐
    │ Тест │Что проверяется    │ Контрольный │ Результат по│
    │      │                   │ результат   │ программе   │
    ├──────┼───────────────────┼─────────────┼─────────────┤
    │ 458  │Младший разряд не 9│  459        │             │
    │ 57999│Число заканчивается│  59000      │             │
    │      │девятками          │             │             │
    │ 9999 │Число  состоит   из│  10000      │             │
    │      │одних девяток      │             │             │
    └──────┴───────────────────┴─────────────┴─────────────┘

   Вася занялся тестированием программы, и все  тесты прошли хо-
рошо: результаты программы совпали с контрольными  результатами,
посчитанными вручную.
   Петя. Тестирование - это очень важный  элемент труда програм-
миста. Ведь в программе очень легко допустить ошибку  и не заме-
тить  этого.  Ошибка может затаиться в какой-нибудь очень  редко
работающей ветви программы, предусмотренной для обработки особо-
го случая. Представь себе, что твоя программа является элементом
какой-нибудь очень важной системы, управляющей космическим поле-
том и ветвь, обрабатывающая одни  девятки  содержит  ошибку.  На
вход программы  поступают  числа, которые она должна увеличивать
на один. Вероятность того,  что  появится число из одних девяток
очень мала, поэтому программа долгое время  будет работать прек-
расно, но если  все же такое  число поступит на  обработку,  это
приведет к уводу  аппарата от заданного курса и, возможно, паде-
нию его на Солнце.
   Вася. Ну, а если программу  протестировали,  то  теперь-то уж
все в порядке и можно спать спокойно.
   Петя. Увы!  Программист  никогда  не спит спокойно. Представь
себе, что обработку  одних девяток ты не предусмотрел в алгорит-
ме. Тогда в программе  эта  ветвь отсутствует и, конечно, "девя-
точный" тест ты заготавливать просто не  будешь. Остальные тесты
пройдут нормально,  ты  уснешь  спокойно,  а космический корабль
упадет на Солнце.
   Вася. Вот это да! А как же проверять  программы и избавляться
от ошибок?
   Папа.  Теме  тестирования программ был посвящен один из  моих
репортажей. Обычно  это происходит так. Сначала программу прове-
ряет автор. Когда он приходит к выводу, что исправил в  ней пос-
леднюю ошибку, он передает ее эксперту - специалисту по тестиро-
ванию. В  коллективе,  занимающимся  разработкой программ, такие
специалисты просто необходимы. Они подобно музыкальным или лите-
ратурным критикам  имеют  особый склад мышления, направленный на
выявление самых незаметных, глубоко спрятанных изъянов и погреш-
ностей. Когда специалист по тестированию выдыхается (все его са-
мые изощренные  тесты проходят нормально), программа поступает в
опытную эксплуатацию, где длительное время обрабатывает  данные,
приближенные к тем, которые эта программа будет обрабатывать по-
том в реальных условиях. Только потом она передается потребителю
и все равно в ней,  как  правило,  остается некоторое количество
ошибок.
   Вася. Вот это да. Все так безнадежно?
   Папа. Увы, все большие программы именитых солидных фирм с ко-
торыми  я  постоянно работаю, и компьютерная оболочка Windows, и
текстовый процессор Word, и  табличный процессор Excel, время от
времени работают  неправильно  или  попросту "зависают", то-есть
перестают  реагировать  на нажатие клавиш и перемещение мыши.  В
этом случае помогает только перезагрузка компьютера.
Вася. Иными словами,  как не тестируй, а космический аппарат все
равно упадет на солнце?
Папа. В  очень  ответственных случаях вычисления выполняются од-
новременно по нескольким разным программам, написанным по разным
алгоритмам, и в качестве результата принимается тот, который вы-
дали большинство программ.
   Вася. Я всегда буду очень тщательно проверять свои программы.
   Папа. Очень правильное  заявление!
   Ну, а теперь  давайте  продолжим наши арифметические опыты с
Корректором. Раз мы научили  его  прибавлять 1 к числу, давайте
теперь научим отнимать. <<minus1.kor>>
   Петя. А как установлено окно на ленте в начальный момент?
   Папа. Как и в первой задаче - на младшую цифру числа. И будем
считать, что число больше  нуля,  ведь мы договорились, что Кор-
ректор будет работать только с целыми неотрицательными числами.
   Вася. Для всех чисел, которые не  оканчиваются нулем, задача
решается командой МИНУС. Но вот  с  последним  нулем  возникают
проблемы...
   Петя. В этом случае нуль надо заменить на девять, а от остав-
шегося числа (без  последней цифры) снова отнять один. Опять ре-
курсия! Я изображу решение на примере числа 2400  с помощью моих
схем:
       Минус1(2400) = Минус1(240)9 = Минус1(24)99 = 2399
   При этом считается известным, что
       Минус1(...1) = ...0
       Минус1(...2) = ...1
       Минус1(...3) = ...2
       Минус1(...4) = ...3

       Минус1(...9) = ...8

   Папа. Твои схемы мне нравятся все больше и больше. Есть  ли в
задаче еще особые случаи, кроме окончания числа на 0?
   Вася. Я думаю небольшие сложности возникнут для чисел, первая
цифра которых единица, а остальные нули. Например,
      Минус1(100) = Минус1(10)9 = Минус1(1)99 = 099
   Петя. Да, незначащий ноль хотелось бы убрать.
   Вася. Вот моя программа:

ЭТО Минус1
 Работа
 Проверка
КОНЕЦ

ЭТО Работа
 ЕСЛИ 0
  ТО
  {
    ПИШИ 9
    ВЛЕВО
    Работа
  }
  ИНАЧЕ МИНУС
КОНЕЦ

   По моей  задумке  процедура Проверка должна убрать незначащий
ноль у результата, если  он  есть. Эта ситуация возникает, когда
окно смотрит на ноль, а слева цифр нет.
   Петя. В одном случае это неправильно.
   Вася. В каком?
   Петя. Когда исходное число равно 1. В окно  виден нулевой ре-
зультат, слева от него цифр нет, но стирать ноль нельзя.
   Вася. Понятно. Значит,  ноль надо убирать, если слева от него
цифр нет, а справа есть.
   Петя. Это другое дело!
   Папа. Не забудьте, что в языке есть условие ЦИФРА. Сейчас как
раз удобно его использовать. И еще, если у результата обнаружит-
ся незначащий ноль, то его  надо  не стереть с ленты, а  остаток
числа сдвинуть влево на одну клетку:
          ┬─┬─┬─┬─┬──┬─┬─┬─┬       ┬─┬─┬─┬─┬─┬─┬─┬─┬
          │░│0│9│9│ ░│░│░│░│ ───>  │░│9│9│░│░│░│░│░│
          ┴─┴─┴─┴─┴──┴─┴─┴─┴       ┴─┴─┴─┴─┴─┴─┴─┴─┴
   Такое преобразование ответа нам потребуется в следующих зада-
чах.
   Петя и Вася изрядно потрудились и записали на компьютере свой
результат, вызвав при этом одобрение у папы:

ЭТО Проверка
 ЕСЛИ 0
  ТО
  {
   ВЛЕВО
   ЕСЛИ НЕ ЦИФРА  // Слева от 0 нет
    ТО            // цифры
    {
     ПОВТОРИ 2 ВПРАВО
     // Справа от 0 есть цифра?
     ЕСЛИ ЦИФРА
      ТО
      {
       ВЛЕВО
       Сдвиг
      }
    }
  }
КОНЕЦ

ЭТО Сдвиг
 ВПРАВО
 ЕСЛИ НЕ ПУСТО
  ТО
  {
   // Сдвиг одного символа влево
   ЯЩИК+
   ВЛЕВО
   ЯЩИК-
   ВПРАВО
   Сдвиг
  }
  ИНАЧЕ
  {
    // Стереть последний символ
    // после сдвига
    ВЛЕВО
    ПИШИ ПУСТО
  }
  ВЛЕВО // Отложенная команда, она
        // возвращает окно на первую
        // цифру числа
КОНЕЦ

   Папа. Вот следующая задача.
   Задача. <<add.kor>> На ленте записан пример на сложение двух
чисел. Вычислить результат. В начальный момент окно установлено
на знак сложения. На рисунке изображен возможный пример:

         ┬─┬─┬─┬─┬─┬─┬─┬─╦═╦─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬
         │░│░│░│░│░│2│3│4║+║1│1│9│░│░│░│░│░│░│░│░│░│░│
         ┴─┴─┴─┴─┴─┴─┴─┴─╩═╩─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴

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

ЭТО Сложение
 ВПРАВО
 ПОКА НЕ 0
 {
   // Установим окно на
   // конец  второго числа
   ПОКА НЕ ПУСТО ВПРАВО
   ВЛЕВО
   // Отнимем 1 от второго числа
   Минус1
   // Установим окно на первое число
   ПОКА НЕ + ВЛЕВО
   ВЛЕВО
   // Прибавим 1 к первому числу
   Плюс1
   // Установим окно на
   // начало второго числа
   ПОКА НЕ + ВПРАВО
   ВПРАВО
 }
 // Оформим результат
 ПИШИ ПУСТО
 ВЛЕВО
 ПИШИ ПУСТО
КОНЕЦ


   Задача 1. На ленте записан пример  на  вычитание  двух  чисел
(уменьшаемое больше вычитаемого). Вычислить результат. В началь-
ный момент окно установлено на знак "-".

   Задача 2. На ленте записан пример вида:
                          число*2
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

   Задача 3. На ленте записан пример вида:
                          число*4
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

   Задача 4. На ленте записан пример вида:
                          число*16
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

   Задача 5. На ленте записан пример вида:
                          число*3
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

   Задача 6. На ленте записан пример вида:
                          число*6
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

   Задача 7. На ленте записан пример вида:
                          число*24
   Вычислить результат.  В  начальный момент окно установлено на
знак умножения.

2. Арифметика палочек

   Папа. Итак,  мы  научили  Корректора кое-каким арифметическим
действиям над положительными целыми числами. У  меня есть неожи-
данное предложение: давайте научим  Корректора  арифметике пало-
чек.
   Петя. Арифметика палочек? Это что-то новое!
   Вася. А почему  бы  не научить Корректора куриной арифметике:
пусть делит одну куриную ножку на четверых за обедом?
   Папа.  Шутка  принимается, но про палочки я говорю  серьезно.
Значение "палочного" числа равно числу изображающих его палочек.
Сами палочки на ленте мы будем записывать символом  "|" (он вхо-
дит в алфавит исполнителя). Вот как, например, на ленте выглядит
число 7:
         ┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬
         │░│░│░│░│░│|│|│|│|│|│|│|│░│░│░│░│░│░│░│░│░│░│
         ┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴

   Действия над  палочками  понимаются как действия над числами,
которые они изображают.

   Петя. Не очень-то удобно изображать так большие числа.
   Папа. Будем считать,  что  мы готовим Корректора для оказания
шефской помощи нашим предкам в подсчете баранов.

   Первая задача на сложение.

   Задача. <<addpal.kor>> На ленте изображено два палочных чис-
ла, соединенных знаком сложения. Получить результат, если в на-
чальный момент окно установлено на знак  "+". Вариант начальной
установки и результат работы программы приведен на рисунке:

          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─┬─┬─┬─┬─┬─┬
          │░│|│|│|║+║|│|│░│ ───>  │░│|│|│|│|│|│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─┴─┴─┴─┴─┴─┴

   Петя. Мне кажется,  что это довольно простая задача: на место
знака сложения надо записать палочку, а потом...
   Вася. А потом надо переместить  окно  на  последнюю палочку и
стереть ее. Вот мое решение:

ЭТО Сложение_палочек
 ПИШИ |
 ПОКА | ВПРАВО
 ВЛЕВО
 ПИШИ ПУСТО
КОНЕЦ

   Петя. Сейчас  я подумал о том, что мы  не договорились о том,
как будем изображать ноль в палочной арифметике.
   Папа. Давайте изображать ноль символом ПУСТО.
   Петя. Тогда Васина программа будет правильно  работать и тог-
да, когда одно из палочных чисел или даже оба равны нулю:

          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─┬─╦═╦─┬─┬─┬
          │░│░│░│░║+║|│░│░│ ───>  │░│░│░│░║|║░│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─┴─╩═╩─┴─┴─┴
          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─╦═╦─┬─┬─┬─┬
          │░│░│░│|║+║░│░│░│ ───>  │░│░│░║|║░│░│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─╩═╩─┴─┴─┴─┴
          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─┬─╦═╦─┬─┬─┬
          │░│░│░│░║+║░│░│░│ ───>  │░│░│░│░║░║░│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─┴─╩═╩─┴─┴─┴

   Вася. Ну надо же! Честно говоря, я про нулевые числа и не по-
думал. Это получилось случайно.
   Папа. Следующая задача немного сложнее.
   Задача. <<minpal.kor>> На ленте изображено два палочных чис-
ла, соединенных  знаком  вычитания.  Найти модуль разности этих
двух чисел,  т.е. нужно от большего  из этих двух  чисел отнять
меньшее. В начальный момент окно установлено на знак "-". Вари-
анты начальных установок и результаты работы программы приведе-
ны на рисунке:
          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─┬─┬─┬─┬─┬─┬
          │░│|│|│|║-║|│|│░│ ───>  │░│░│░│░│|│░│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─┴─┴─┴─┴─┴─┴
          ┬─┬─┬─┬─╦═╦─┬─┬─┬       ┬─┬─┬─┬─┬─┬─┬─┬─┬
          │░│░│|│|║-║|│|│|│ ───>  │░│░│░│░│|│░│░│░│
          ┴─┴─┴─┴─╩═╩─┴─┴─┴       ┴─┴─┴─┴─┴─┴─┴─┴─┴

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

ЭТО Вычитание_палочек
 // Можно ли стереть по одной
 // палочке у обоих чисел?
 Проверка
 // Результат проверки:
 // если в ящике знак "-",
 // стирать палочки не надо.
 ОБМЕН
 ЕСЛИ -
  ТО ПИШИ ПУСТО
  ИНАЧЕ
  {
    ОБМЕН
    Стереть_две_палочки
    Вычитание_палочек
  }
КОНЕЦ

   Сначала я выполняю  проверку, а затем, если числа не нулевые,
стираю  по  одной  палочке  у  каждого   числа  процедурой  Сте-
реть_две_палочки, после  чего  рекурсивно  возвращаюсь на начало
главной процедуры.
   Результат проверки я  буду помещать в  ящик. Знак "-"  в  нем
обозначает, что  одно из палочных чисел  равно нулю. Знак  "|" в
ящике показывает, что числа не нулевые.

ЭТО Проверка
 // Сначала в ящик запишем знак "-",
 // он будет обозначать, что стирать
 // палочки нельзя.
 ЯЩИК+
 // Проверим есть ли палочка слева
 ПОКА НЕ ПУСТО ВЛЕВО
 ВПРАВО
 ЕСЛИ НЕ -
 ТО
 {
   // Проверим есть ли палочка справа
   ПОКА НЕ ПУСТО ВПРАВО
   ВЛЕВО
   ЕСЛИ НЕ -
    ТО
    {
      // Палочки есть и слева и справа.
      // Запишем в ящик знак "|",
      // он будет обозначать, что
      // стирать палочки можно.
      ЯЩИК+
      // Установим окно на знак "-"
      ПОКА НЕ - ВЛЕВО
    }
 }
КОНЕЦ

ЭТО Стереть_две_палочки
 // Стираем палочку слева
 ПОКА НЕ ПУСТО ВЛЕВО
 ВПРАВО
 ПИШИ ПУСТО
 ВПРАВО
 // Стираем палочку справа
 ПОКА НЕ ПУСТО ВПРАВО
 ВЛЕВО
 ПИШИ ПУСТО
 ПОКА НЕ - ВЛЕВО
КОНЕЦ

   Папа. Задача на вычитание получилось довольно  сложной, но ты
Вася с ней блестяще справился. Молодец!

   Задача 8. Умножить палочное число на  2.  В начальный момент
окно установлено на первую слева палочку.

   Задача 9. Умножить палочное число на  3.  В начальный момент
окно установлено на первую слева палочку.

   Задача 10. Умножить палочное число на  6.  В начальный момент
окно установлено на первую слева палочку.

   Задача 11. На ленте  записаны два палочных числа, соединенные
знаком вопроса. Заменить знак "?" на один из знаков "<", ">" или
"=" в зависимости от отношения  чисел.  В  начальный момент окно
установлено на первый символ записи.

   Задача 12. Записать на ленту  через запятые пять палочных чи-
сел: 1,2,3,4,5.

   Задача 13. Записать на ленту:
     а) первые пять четных палочных числа
     б) первые пять нечетных палочных числа
