 5.3. Задачи школьников

   Ниже предлагаются  7 лучших задач, придуманные участниками в
рамках решения задания 9 конкурсного тура.


     Задача 1. (команда 05, Скочилов Роман, г.Снежинск)
   Злоумышленник испортил слово на ленте, вставив между буквами
различные посторонние  символы. Ни один из вставленных символов
буквой не является. Восстановить исходное слово  так, чтобы все
его буквы прилегали плотно друг к  другу.  В  начальный  момент
окошко установлено на первый пустой символ перед записью.

   Решение.
   Описание алгоритма. В программе Корректор исполнитель  прос-
матривает запись  на ленте и каждый  раз, когда видит  не букву
(т.е. символ, который  "меньше а" или "больше я"), сдвигает ос-
таток записи на один символ влево с помощью процедуры Сотри.

ЭТО Корректор
 ВПРАВО
 ЕСЛИ НЕ ПУСТО
  ТО
  {
   ОБМЕН      // Символ в ящик
   ПИШИ а     // Символ < а ?
   ЕСЛИ Я<Л
     ТО Сотри
     ИНАЧЕ
      {
       ПИШИ я
       ЕСЛИ Я>Л   // Символ > я ?
        ТО Сотри
        ИНАЧЕ
         {
          ОБМЕН   // Символ - букву обратно на ленту
          Корректор
         }
      }
  }
  ИНАЧЕ
  {          // Показать результат
    ВЛЕВО
    ПОКА НЕ ПУСТО ВЛЕВО
    ПОВТОРИ 6 ВПРАВО
  }
КОНЕЦ

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

   Задача 2. (команда 08, Снегирь Катя, Химочко Алина, Голубева
Лена, г.Краснознаменск)  На  ленте записана шифровка при помощи
азбуки Морзе.  Восстановить  исходный текст. Буквы азбуки Морзе
отделены друг от  друга пробелами, в конце сообщения два пробе-
ла. Первоначально окно установлено на первый символ сообщения.

Азбука Морзе:
      - - - -   ш          . . . .   х
      - - - .   ч
                           . . . -   ж
      - - -     о          . . .     с

      - - . .   з          . . - .   ф
      - - . -   щ          . . - -   ю
      - - .     г          . . -     у
      - -       м          . .       и
                           . - . .   л
      -         т          . - . -   я
                           . - .     р
      - . - -   ы
      - . - .   ц          . - - .   п
      - . -     к          . - - -   и
                           . - -     в
      - . . -   ь          . -       а
      - . . .   б          .         е
      - . .     д
      - .       н

 Решение.

   В основе  программы лежит цепочка переключателей для опреде-
ления правильной замены символа из  алфавита  азбуки  Морзе  на
обычную букву русского языка.  Восстановленный  текст создается
справа от  шифровки, которая сокращается по мере восстановления
кодированных букв.

ЭТО Азбука_Морзе
 ПОКА НЕ ПРОБЕЛ                        
 {                                     
   Буква                               
   ВПРАВО                              
 }
КОНЕЦ                                  

ЭТО Буква                              
 ЕСЛИ -                                
  ТО                                   
  {                                    
   ВПРАВО                              
   ЕСЛИ -                              
    ТО                                 
    {                                  
     ВПРАВО                            
     ЕСЛИ - ТО    { ВПРАВО Тире3 }
            ИНАЧЕ Тире2                
    }
    ИНАЧЕ Тире1
  }                                    
  ИНАЧЕ Точка
КОНЕЦ                                  
                                       
ЭТО Точка                              
 ВПРАВО                                
 ЕСЛИ .
  ТО                                   
  {
    ВПРАВО                             
    ЕСЛИ .                             
     ТО                                
     {                                 
      ВПРАВО                           
      ЕСЛИ . ТО { ВПРАВО ПИШИ х Текст }
             ИНАЧЕ Точка3              
     }                                 
     ИНАЧЕ Точка2                      
  }
  ИНАЧЕ Точка1
КОНЕЦ

ЭТО Тире3                              
 ЕСЛИ -
  ТО { ВПРАВО ПИШИ ш Текст }           
  ИНАЧЕ                                
  {                                    
   ЕСЛИ . ТО { ВПРАВО ПИШИ ч Текст }   
          ИНАЧЕ { ПИШИ о Текст }
  }                                    
КОНЕЦ
                                       
ЭТО Тире2                              
 ЕСЛИ .                                
  ТО                                   
  {                                    
   ВПРАВО                              
   ЕСЛИ -                              
    ТО { ВПРАВО ПИШИ щ Текст }         
    ИНАЧЕ                              
     {
       ЕСЛИ .
        ТО { ВПРАВО ПИШИ з Текст }
        ИНАЧЕ { ПИШИ г Текст }
      }                                
  }
  ИНАЧЕ { ПИШИ м Текст }               
КОНЕЦ                                  
                                       
ЭТО Тире1                              
 ЕСЛИ .
  ТО                                   
  {
    ВПРАВО                             
    ЕСЛИ - ТО Тире11                   
           ИНАЧЕ Тире12                
  }                                    
  ИНАЧЕ { ПИШИ т Текст }               
КОНЕЦ                                  
                                       
ЭТО Тире11                             
 ВПРАВО                                
 ЕСЛИ -
  ТО { ВПРАВО ПИШИ ы Текст }
  ИНАЧЕ
  {
   ЕСЛИ .                              
    ТО { ВПРАВО ПИШИ ц Текст }
    ИНАЧЕ { ПИШИ к Текст }             
  }                                    
КОНЕЦ                                  
                                       
ЭТО Тире12
 ЕСЛИ .                                
  ТО
  {                                    
    ВПРАВО                             
    ЕСЛИ -                             
     ТО { ВПРАВО ПИШИ ь Текст }        
     ИНАЧЕ                             
     {                                 
      ЕСЛИ . ТО { ВПРАВО ПИШИ б Текст }
             ИНАЧЕ { ПИШИ д Текст }    
     }                                 
  }
  ИНАЧЕ { ПИШИ н Текст }
КОНЕЦ

ЭТО Точка1                             
 ЕСЛИ -
  ТО                                   
  {                                    
    ВПРАВО                             
    ЕСЛИ .                             
     ТО  Точка11
     ИНАЧЕ                             
     {
       ЕСЛИ - ТО Точка12               
              ИНАЧЕ { ПИШИ а Текст }   
     }                                 
  }                                    
  ИНАЧЕ { ПИШИ е Текст }               
КОНЕЦ                                  
                                       
ЭТО Точка11                            
 ВПРАВО                                
 ЕСЛИ .
  ТО { ВПРАВО ПИШИ л Текст }
  ИНАЧЕ
  {
    ЕСЛИ - ТО { ВПРАВО ПИШИ я Текст }  
           ИНАЧЕ { ПИШИ р Текст }      
  }                                    
КОНЕЦ                                  
                                       
ЭТО Точка12                            
 ВПРАВО
 ЕСЛИ .                                
  ТО { ВПРАВО ПИШИ п Текст }
  ИНАЧЕ                                
  {                                    
    ЕСЛИ - ТО { ВПРАВО ПИШИ й Текст }  
           ИНАЧЕ { ПИШИ в Текст }      
  }                                    
КОНЕЦ                                  
                                       
ЭТО Точка2                             
 ЕСЛИ -                                
  ТО
  {
    ВПРАВО
    ЕСЛИ .
     ТО { ВПРАВО ПИШИ ф Текст }        
     ИНАЧЕ                             
     {                                 
       ЕСЛИ -                          
        ТО { ВПРАВО ПИШИ ю Текст }     
        ИНАЧЕ { ПИШИ у Текст }         
     }
  }                                    
  ИНАЧЕ { ПИШИ и Текст }
КОНЕЦ                                  
                                       
ЭТО Точка3                             
 ЕСЛИ - ТО { ВПРАВО ПИШИ ж Текст }     
        ИНАЧЕ { ПИШИ с Текст }         
КОНЕЦ                                  
                                       
ЭТО Текст                              
 ЯЩИК+                                 
 ПИШИ *
 ВЛЕВО
 ПОКА НЕ ПУСТО
 {
   ПИШИ ПУСТО                          
   ВЛЕВО
 }                                     
 ПОКА ПУСТО ВПРАВО                     
 ПОКА НЕ ПУСТО ВПРАВО                  
 ЯЩИК-                                 
 ПОКА НЕ ПУСТО ВЛЕВО
 ВПРАВО                                
 ПИШИ ПУСТО
КОНЕЦ                                  


   Задача 3. (команда 17, Иванова Лена,  Бугаев Элл, г.Обнинск)
На  ленте  записан некоторый текст. Определить, на какую  букву
заканчивается 4 слово.  В  начальный момент окно установлено на
первый пустой символ перед текстом.

   Решение.

ЭТО Буква
 Обнуление_счетчика
 Работа                                
КОНЕЦ                                  

ЭТО Обнуление_счетчика
 ПИШИ 0                                
 ЯЩИК+
 ПИЩИ ПУСТО
КОНЕЦ

ЭТО Работа
 ВПРАВО       // Поиск пробелов
 ЕСЛИ  ПРОБЕЛ
  ТО
  {
    ОБМЕН        // Подсчет пробелов   
    ЕСЛИ НЕ 3                          
     ТО
     {
       Добавить_к_счетчику_1
       ВПРАВО
       Работа
     }
     ИНАЧЕ Оформление_ответа
  }
  ИНАЧЕ Работа
КОНЕЦ                                  

ЭТО Добавить_к_счетчику_1
  ПЛЮС                                 
  ОБМЕН
КОНЕЦ

ЭТО Оформление_ответа
 ПИШИ ПРОБЕЛ                           
 ВЛЕВО                                 
 ЯЩИК+ // "захват" нужной буквы
 // возврат к началу
 ПОКА НЕ ПУСТО ВЛЕВО                   
 ПИШИ =
 ВЛЕВО                                 
 ОБМЕН                                 
КОНЕЦ

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

   Задача 4. (команда 20, Плотникова Маша, Пелешко Костя, г.Че-
лябинск) На ленте записано четное число.  Поделить его пополам.
В начальный момент окно установлено на старшей цифре числа.

   Решение.
   Описание алгоритма. Деление выполняется справа налево.  Пока
встречаются четные цифры, программа заменяет их на "половинки".
Если очередная цифра нечетная, то она "делится" на два в паре с
соседней справа цифрой. Поясним алгоритм на примере двузначного
числа  а1а2  (a1  и a2 - цифры числа, a1 - нечетная цифра, a2 -
четная):
      (a1a2)/2 = (10*a1 + a2)/2 = (10*(a1-1+1) + a2)/2 =
       =  10*(a1-1)/2 + (5 + a2/2) = b1b2
   Здесь b1b2  - результат деления  числа a1a2 на 2. Видим, что
b1 = (a1-1)/2, а b2 = 5 + a2/2.
   Описанный способ деления приводит к следующему алгоритму ра-
боты программы:
   1. Встать на последнюю цифру числа.
   2. Пока не пусто повторять:
      . если цифра - 0, ничего не делать;
      . если цифра четная, заменить ее на "половинку",
        иначе уменьшить цифру на 1, сделать шаг вправо,
        добавить 5 единиц, сделать шаг влево и заменить цифру
        на ее "половинку";
      . сделать шаг влево.

ЭТО Пополам
 // переход на последнюю цифру         
 ВПРАВО
 ПОКА НЕ ПУСТО ВПРАВО                  
 ВЛЕВО                                 
 // основной цикл работы               
 // с цифрами справа налево
 ПОКА НЕ ПУСТО                         
 {                                     
   ЕСЛИ НЕ 0 ТО Проверялка             
   ВЛЕВО                               
 }                                     
 ВПРАВО
КОНЕЦ                                  

ЭТО Проверялка                         
 ЕСЛИ       2 ТО Делилка               
 ИНАЧЕ ЕСЛИ 4 ТО Делилка               
 ИНАЧЕ ЕСЛИ 6 ТО Делилка               
 ИНАЧЕ ЕСЛИ 8 ТО Делилка
 ИНАЧЕ Минусовалка
КОНЕЦ                                  

// деление на 2 - цифра четная         
ЭТО Делилка
 ЕСЛИ       2 ТО ПИШИ 1                
 ИНАЧЕ ЕСЛИ 4 ТО ПИШИ 2                
 ИНАЧЕ ЕСЛИ 6 ТО ПИШИ 3
 ИНАЧЕ ЕСЛИ 8 ТО ПИШИ 4
КОНЕЦ                                  
                                       
// деление на 2 - цифра нечетная       
ЭТО Минусовалка                        
 МИНУС                                 
 ВПРАВО
 ПОВТОРИ 5 ПЛЮС                        
 ВЛЕВО
 Делилка                               
КОНЕЦ                                  


 Задача 5. (команда 24, Крашенинников, Метляев, г.Иркутск)
   На ленте записана цепочка любых символов за исключением "|".
Подсчитать число различных символов в этом  "тексте" и показать
этот набор (алфавит), на базе которого построен текст. (Резуль-
татом работы программы должно  быть  обычное число - число раз-
личных символов в тексте и через пробел - сам этот  набор. Нап-
ример, результат работы программы для слова "молоко": 4 молк.)

 Решение.

Описание алгоритма.
   1. Устранение повторяющихся символов в записи (каждый повто-
      ряющийся символ заменяется на знак "|").
   2. Уплотнение записи (удаление символов "|").
   3. Подсчет числа  разных  знаков (подсчет длины записи после
      уплотнения).
   4. Запись ответа.

ЭТО Задача
  // Устранение повторяющихся символов 
  Поиск                                
  // Уплотнение записи                 
  Сдвиг                                
  // Подсчет числа разных знаков       
  Подсчет                              
  Любая_длина
  // Запись ответа                     
  Ответ
КОНЕЦ                                  
                                       
ЭТО Поиск                              
  ПОКА НЕ ПУСТО                        
    ЕСЛИ НЕ | ТО Сравни                
           ИНАЧЕ { ВПРАВО Поиск }      
КОНЕЦ                                  
                                       
ЭТО Сравни                             
  ЯЩИК+
  Мена
  ПОВТОРИ 2 ВПРАВО
КОНЕЦ
                                       
ЭТО Мена                               
 ЕСЛИ НЕ ПУСТО  ТО                     
 {                                     
   ВПРАВО                              
   ЕСЛИ Я=Л ТО ПИШИ |                  
   Мена
 }                                     
 ВЛЕВО // Возврат (отложенная команда)
КОНЕЦ                                  
                                       
ЭТО Сдвиг                              
 ВЛЕВО                                 
 В_начало                              
 ПОКА НЕ ПУСТО Перенос                 
КОНЕЦ
                                       
ЭТО В_начало                           
 ПОКА НЕ ПУСТО ВЛЕВО
 ВПРАВО
КОНЕЦ

ЭТО Перенос                            
 ВПРАВО                                
 ЕСЛИ | ТО Пуск                        
КОНЕЦ                                  
                                       
ЭТО Пуск                               
 ЕСЛИ НЕ ПУСТО ТО
 {                                     
   ВПРАВО
   ЯЩИК+                               
   ВЛЕВО                               
   ЯЩИК-                               
   ВПРАВО                              
   Пуск                                
 }                                     
 ВЛЕВО // Возврат (отложенная команда)
КОНЕЦ                                  
                                       
ЭТО Подсчет
 ВЛЕВО
 ЕСЛИ НЕ ПУСТО ТО Подсчет
КОНЕЦ
                                       
ЭТО Любая_длина                        
 ВЛЕВО                                 
 Обнуление_счетчика                    
 Работа                                
КОНЕЦ                                  

ЭТО Обнуление_счетчика                 
 ПИШИ 0
 ПОВТОРИ 2 ВПРАВО                      
КОНЕЦ                                  
                                       
ЭТО Работа                             
 ПОКА НЕ ПУСТО                         
 {                                     
   Добавить_к_счетчику_1               
   ВПРАВО                              
 }                                     
КОНЕЦ

ЭТО Добавить_к_счетчику_1
  ВЛЕВО
  ЕСЛИ НЕ ПУСТО                        
   ТО Добавить_к_счетчику_1            
   ИНАЧЕ                               
   {                                   
     ВЛЕВО                             
     Плюс1                             
     ПОКА НЕ ПУСТО ВПРАВО
   }                                   
  ВПРАВО
КОНЕЦ                                  
                                       
ЭТО Плюс1                              
 ЕСЛИ НЕ 9                             
   ТО                                  
   {                                   
     ЕСЛИ ПУСТО                        
      ТО    ПИШИ 1                     
      ИНАЧЕ ПЛЮС                       
   }
   ИНАЧЕ
   {
     ПИШИ 0                            
     ВЛЕВО                             
     Плюс1                             
   }                                   
КОНЕЦ                                  
                                       
ЭТО Ответ                              
 ВЛЕВО
 В_начало                              
 ПОВТОРИ 2 ВЛЕВО
 В_начало                              
 Слово_ответ                           
КОНЕЦ                                  
                                       
ЭТО Слово_ответ                        
  ПОВТОРИ 2 ВЛЕВО                      
  ПИШИ : ВЛЕВО                         
  ПИШИ т ВЛЕВО                         
  ПИШИ е ВЛЕВО
  ПИШИ в ВЛЕВО
  ПИШИ т ВЛЕВО
  ПИШИ о
  ПОВТОРИ 5 ВПРАВО                     
КОНЕЦ                                  
                                       
Задача 6. (команда 39, руководитель Рябчун Т.Ю., г.Ижевск)
   На ленте записан пример на деление двух палочных чисел. Воз-
можный вариант начальной среды:
         ┬─┬─┬─┬─┬─┬─┬─╦═╦─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬
         │░│|│|│|│|│|│|║/║|│|│|│░│░│░│░│░│░│░│░│░│░│░│
         ┴─┴─┴─┴─┴─┴─┴─╩═╩─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴
   В начальный момент окно установлено  на  знак  деления  "/".
Предполагается, что первое число  отлично  от нуля и делится на
второе без остатка.  Записать на ленту результат деления в виде
палочного числа.

 Решение
   Алгоритм  программы основан  на  последовательном  вычитании
(при помощи отложенных в рекурсии команд) второго числа из пер-
вого. В  каждом  цикле  вычитания, вычтенные палочки заменяются
пробелами и к результату на ленте добавляется одна палочка. Вы-
читание продолжается до тех пор, пока все палочки первого числа
не будут заменены на пробелы, после чего первое  число на ленте
восстанавливается: все пробелы снова заменяются на палочки.

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


Задача 7. (команда 57, руководитель Петров В.А., г.Волгоград)
   На ленте записаны  два обычных, не равных нулю числа, соеди-
ненные знаком ПРОБЕЛ. Найти наибольший общий делитель этих двух
чисел (наибольшее число на которое  делятся  оба  числа). В на-
чальный момент в окошко видна первая цифра первого числа.

 Решение.
   Описание алгоритма.  Нахождение  НОД  построено на алгоритме
Евклида: пока числа не равны, большее заменяется на модуль раз-
ности этих двух чисел.

ЭТО НОД_чисел
  Записать_дубль                       
  На_старт                             
  ПОКА НЕ =                            
  {                                    
    Вычитание                          
    Анализ_результата                  
   }                                   
  Вывод_результата
КОНЕЦ                                  
                                       
// Продублировать текст.
ЭТО Записать_дубль
 ПОКА НЕ ПУСТО
 {
  ЯЩИК+   // Запомнить символ
  Перенос // Скопировать
  ВПРАВО  // Переместиться дальше
 }
КОНЕЦ

ЭТО Перенос
 ВПРАВО
 ЕСЛИ ПУСТО
  ТО    Установка                      
  ИНАЧЕ Перенос                        
 ВЛЕВО                                 
КОНЕЦ                                  
                                       
ЭТО Установка
 // Идти в конец копии
 ВПРАВО                                
 ПОКА НЕ ПУСТО ВПРАВО                  
 // Копировать из ящика символ
 ЯЩИК-                                 
 // Встать перед копией
 ПОКА НЕ ПУСТО ВЛЕВО                   
КОНЕЦ                                  
                                       
ЭТО На_старт
 ПОКА НЕ ПРОБЕЛ ВЛЕВО                  
 ПИШИ -                                
КОНЕЦ
                                       
ЭТО Вычитание
 Проверка_конца_работы                 
 ПОКА НЕ 0                             
 {                                     
   // Установим окно на                
   // конец второго числа              
   ПОВТОРИ 2 ВПРАВО                    
   ПОКА НЕ ПУСТО ВПРАВО                
   ВЛЕВО
   // Отнимем 1 от второго числа       
   Минус1                              
   // Установим окно на первое число   
   ПОКА НЕ - ВЛЕВО                     
   ВЛЕВО                               
   // Отнимем 1 от первого числа       
   Минус1                              
   Проверка_конца_работы               
 }                                     
 // Очистим окно проверки              
 ПИШИ ПУСТО                            
КОНЕЦ
                                       
ЭТО Проверка_конца_работы
 //Проверяем правое число              
 ВПРАВО                                
 ПОКА НЕ ПУСТО ВПРАВО                  
 ВЛЕВО                                 
 ЕСЛИ 0                                
  ТО                                   
  {
    ВЛЕВО
    ЕСЛИ ЦИФРА //Число просто
               //заканчивается нулем
      ТО  Проверь_первое
      ИНАЧЕ Ставь_конец_работы
  }
 ИНАЧЕ Проверь_первое
КОНЕЦ

ЭТО Проверь_первое
 //Дойдем до конца первого числа
 ПОКА НЕ - ВЛЕВО
 ВЛЕВО
 ЕСЛИ 0                                
  ТО                                   
  {
    ВЛЕВО
    ЕСЛИ ЦИФРА //Число просто
               //заканчивается нулем
      ТО  Ставь_продолжение_работы
    ИНАЧЕ Ставь_конец_работы
  }
  ИНАЧЕ Ставь_продолжение_работы
КОНЕЦ                                  
                                       
ЭТО Ставь_конец_работы
 Иди_в_окно_проверки                   
 ПИШИ 0                                
КОНЕЦ                                  
                                       
ЭТО Ставь_продолжение_работы
 Иди_в_окно_проверки                   
 ПИШИ 1                                
КОНЕЦ                                  

ЭТО Иди_в_окно_проверки
 ПОКА НЕ ПУСТО ВЛЕВО                   
 ВЛЕВО                                 
КОНЕЦ                                  
                                       
ЭТО Минус1
 Работа                                
 Проверка                              
КОНЕЦ                                  

ЭТО Работа                             
 ЕСЛИ 0                                
  ТО                                   
  {                                    
    ПИШИ 9                             
    ВЛЕВО                              
    Работа                             
  }                                    
  ИНАЧЕ МИНУС                          
КОНЕЦ                                  
                                       
ЭТО Проверка
 ЕСЛИ 0                                
  ТО                                   
  {                                    
   ВЛЕВО                               
   ЕСЛИ НЕ ЦИФРА  // Слева от 0 нет    
    ТО            // цифры             
    {                                  
     ПОВТОРИ 2 ВПРАВО                  
     // Справа от 0 есть цифра?        
     ЕСЛИ ЦИФРА
      ТО                               
      {                                
       ВЛЕВО                           
       Сдвиг                           
      }                                
    }                                  
  }                                    
КОНЕЦ                                  
                                       
ЭТО Сдвиг                              
 ВПРАВО                                
 ЕСЛИ НЕ ПУСТО
  ТО                                   
  {                                    
   // Сдвиг одного символа влево       
   ЯЩИК+                               
   ВЛЕВО                               
   ЯЩИК-                               
   ВПРАВО                              
   Сдвиг                               
  }                                    
  ИНАЧЕ
  {                                    
    // Стереть последний символ        
    // после сдвига                    
    ВЛЕВО                              
    ПИШИ ПУСТО                         
  }                                    
  ВЛЕВО // Отложенная команда, она     
        // возвращает окно на первую   
        // цифру числа                 
КОНЕЦ                                  
                                       
//-------------------------------------
ЭТО Анализ_результата                  
 //Посмотрим первое число              
 ПОКА НЕ - ВПРАВО                      
 ВЛЕВО                                 
 ЕСЛИ 0                                
  ТО                                   
  {       // Есть ли слева цифра?
   ВЛЕВО
   ЕСЛИ ЦИФРА    //Если второе число=0
    ТО Заменить_второе_Изменить_первое
    ИНАЧЕ Проверь_второе
  }
  ИНАЧЕ Заменить_второе_Изменить_первое
КОНЕЦ                                  
                                       
ЭТО Проверь_второе
 ВПРАВО                                
 ПОКА НЕ ПУСТО ВПРАВО                  
 ВЛЕВО                                 
 ЕСЛИ 0                                
  ТО                                   
  {       // Есть ли слева цифра?
   ВЛЕВО
   ЕСЛИ ЦИФРА
    ТО Заменить_первое_Изменить_второе
    ИНАЧЕ Ставь_равно
  }
  ИНАЧЕ Заменить_первое_Изменить_второе
КОНЕЦ                                  
                                       
ЭТО Заменить_первое_Изменить_второе
  Заменить_первое_число
  Изменить_второе_число                
  Вернуться_к_примеру_способ_1         
КОНЕЦ                                  
                                       
ЭТО Заменить_второе_Изменить_первое
  Заменить_второе_число                
  Изменить_первое_число                
  Вернуться_к_примеру_способ_2         
КОНЕЦ                                  
                                       
ЭТО Заменить_второе_число
 //Поставим знак БОЛЬШЕ и удалим 0
 ПОКА НЕ - ВПРАВО                      
 ПИШИ >                                
 ВПРАВО                                
 ПИШИ ПУСТО                            
 // Найдем второе число                
 ПОКА НЕ ПРОБЕЛ ВПРАВО                 
 ВПРАВО                                
 //Перенесем копию второго числа туда, 
 //где был ноль.                       
 ПОКА НЕ ПУСТО
 {
  ЯЩИК+
  Копия_цифры_второго_числа
  ВПРАВО
 }
КОНЕЦ                                  
                                       
ЭТО Копия_цифры_второго_числа
 ВЛЕВО                                 
 ЕСЛИ НЕ >                             
  ТО    Копия_цифры_второго_числа      
  ИНАЧЕ Ставь_цифру_второго_числа
                                       
 ВПРАВО // Отложенная команда ВПРАВО
        // для возврата к нужной
        // цифре второго числа
КОНЕЦ                                  
                                       
ЭТО Ставь_цифру_второго_числа
 // Идем в конец копии второго числа
 ВПРАВО                                
 ПОКА НЕ ПУСТО ВПРАВО
 ЯЩИК-            // Ставим цифру
 ПОКА НЕ > ВЛЕВО  // Возвращаемся к >
КОНЕЦ                                  
                                       
ЭТО Заменить_первое_число
 ПОКА НЕ - ВЛЕВО                       
 ПИШИ <                                
 ВЛЕВО                                 
 ПИШИ ПУСТО                            
 // Найдем первое число                
 ПОКА НЕ ПРОБЕЛ ВПРАВО                 
 ВЛЕВО
 // Перенесем копию первого числа туда,
 // где был ноль.
 ПОКА НЕ ПУСТО                         
 {
  ЯЩИК+
  Копия_цифры_первого_числа
  ВЛЕВО
 }
КОНЕЦ                                  

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

ЭТО Ставь_цифру_нового_первого_числа
 // Идем в начало копии первого числа
 ВЛЕВО                                 
 ПОКА НЕ ПУСТО ВЛЕВО                   
 ЯЩИК-                 // Ставим цифру
 ПОКА НЕ ПРОБЕЛ ВПРАВО // К пробелу
КОНЕЦ                                  
                                       
ЭТО Изменить_второе_число
 Убрать_второе_число
 Новое_значение_второго_числа          
КОНЕЦ                                  
                                       
ЭТО Убрать_второе_число
 // Найдем ПРОБЕЛ
 ПОКА НЕ ПРОБЕЛ ВПРАВО                 
 // Удалим второе число
 ВПРАВО                                
 ПОКА НЕ ПУСТО { ПИШИ ПУСТО ВПРАВО }   
 // Дойдем до нового значения второго
 // числа
 ПОКА НЕ < ВЛЕВО
 ВПРАВО                                
КОНЕЦ                                  
                                       
ЭТО Новое_значение_второго_числа
 ПОКА НЕ ПУСТО                         
 {
  ЯЩИК+
  Копия_цифры_нового_второго_числа
  ВПРАВО
 }
КОНЕЦ                                  
                                       
ЭТО Копия_цифры_нового_второго_числа
 ВПРАВО                                
 ЕСЛИ НЕ ПРОБЕЛ                        
  ТО   Копия_цифры_нового_второго_числа
 ИНАЧЕ Ставь_цифру_нового_второго_числа
                                       
 ВЛЕВО  // Отложенная команда ВЛЕВО
        // для возврата к нужной
        // цифре нового второго числа
КОНЕЦ
                                       
ЭТО Ставь_цифру_нового_второго_числа
 // Идем в конец копии второго числа
 ВПРАВО                                
 ПОКА НЕ ПУСТО ВПРАВО                  
 ЯЩИК-                // Ставим цифру
 ПОКА НЕ ПРОБЕЛ ВЛЕВО // К пробелу
КОНЕЦ                                  
                                       
ЭТО Вернуться_к_примеру_способ_2
 ПОКА НЕ > ВПРАВО                      
 ПИШИ -                                
КОНЕЦ                                  
                                       
ЭТО Вернуться_к_примеру_способ_1
 ПОКА НЕ < ВЛЕВО                       
 ПИШИ -                                
КОНЕЦ                                  
                                       
ЭТО Ставь_равно
 ПОКА НЕ - ВЛЕВО                       
 ПИШИ =
КОНЕЦ                                  
                                       
ЭТО Вывод_результата
 // Удалим лишнее
 ПОКА НЕ ПУСТО ВЛЕВО                   
 ВПРАВО                                
 ПОКА НЕ ПРОБЕЛ { ПИШИ ПУСТО ВПРАВО }  
 ПИШИ ПУСТО                            
КОНЕЦ                                  
