Задача 1 (2 балла)
--------
Первый член последовательности равен 1. Каждый следующий член
получается приписыванием справа единицы к записи предыдущего.

a  = 1
 1
a    = a 1
 i+1    i

Построить n-й член последовательности, если n кодируется порядковым
номером символа, который Корректор видит в начальный момент в своем
окошке. Считать, что символ "1" кодирует n=1, и в начальный момент на
ленте не могут быть записаны символы с меньшим порядковым номером.

Пример работы программы:

Начальное состояние            После работы программы
┬─┬─╦═╦─┬─┬─┬─┬─┬─┬─┬─┬        ┬─┬─┬─┬─╦═╦─┬─┬─┬─┬─┬─┬
│░│░║2║░│░│░│░│░│░│░│░│  ─>    │░│░│1│1║░║░│░│░│░│░│░│
┴─┴─╩═╩─┴─┴─┴─┴─┴─┴─┴─┴        ┴─┴─┴─┴─╩═╩─┴─┴─┴─┴─┴─┴


п р о в е р к а  к у р а т о р а

Обратите внимание на решение Данила Колесникова из команды 3115:

Описание алгоритма
------------------
С помощью рекурсии мы закручиваем пружину. Когда число становится 0,
начинают выполняться отложенные команды ПИШИ 1 и ВПРАВО.

ЭТО Вход               |
    МИНУС              |
    ЕСЛИ НЕ 0 ТО вход  | Запускаем процедуру снова.
    ПИШИ 1             | Это отложенные команды. Они выполняются
    ВПРАВО             | столько раз, сколько выполняется процедура Вход.
КОНЕЦ                  |


Достоинство решения в том, что рекурсия используется по существу. В
рекурсивных решениях других команд рекурсия просто моделирует цикл
(что не очень хорошо), а здесь она демонстрирует то, что нельзя
сделать циклом.

Р Е Ш Е Н И Я  К О М А Н Д

Команда 3104
------------
.\04\04.txt
Оценка: 1.5

Автор: Бельков Игорь
-----
Алгоритм
--------
Номер члена последовательности используется
 в качестве счетчика цикла ПОКА.

Программа
---------
//-------------------------------------
ЭТО вход
зпчсл //запись_числа                   
оформление
КОНЕЦ
//-------------------------------------
// Вход:окно на номере члена
//      последовательности             
//Выход: окно на номере члена          
//       последовательности            
// На ленте - запись числа             
                                       
ЭТО зпчсл                              
ПОКА НЕ 0
  {                                    
на_конец_записи                        
МИНУС //После записи единицы уменьшаем 
      // номер члена                   
      //последовательности на 1        
  }                                    
КОНЕЦ                                  
//-------------------------------------
//Рекурсивная процедура для            
//определения конца записи и возврата
//на номер члена последовательности    

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

к о м м е н т а р и й  к у р а т о р а
Алгоритм очень нерациональный, так как Корректору приходится для
построения каждого нового знака возвращаться к началу записи.

Команда 3106
------------
.\06\06.txt
Оценка: 2
Авторы решения:
Городенская Олеся, Докадин Ваня(6кл)

Алгоритм
--------
Идея: поместить в ЯЩИК номер члена последовательности, который надо
получить, и вычитать из него по 1 при добавлении 1 к записи на ленте
пока в ЯЩИКе не будет 0.

//Решение.
ЭТО Вход
 ОБМЕН  //Устанавливаем счетчик
 ПИШИ 1 //элементов последовательности
 Работа
КОНЕЦ

ЭТО Работа
 ВПРАВО
 ОБМЕН
 МИНУС  //Уменьшаем значение счетчика
        //на 1,
 ЕСЛИ НЕ 0 ТО //если оно не 0, то
       Вход   //дописываем еще 1.
          ИНАЧЕ
           ПИШИ ПУСТО
КОНЕЦ

к о м м е н т а р и й  к у р а т о р а
Алгоритм такой же как и у куратора однопроходной, но рекурсия здесь не
оправдана, лучше использовать цикл ПОКА.

Команда 3107
------------
.\07\07.txt
.\07\tur1.kor
Оценка: 2
Программа
//-------------------------------------
// Задача 1 (2 балла)                  
// Последовательность членов из
// единиц                              
// Авторы решения: Дикарев А. и        
// Давыдов П.                          
//                                     
ЭТО вход
// Алгоритм: последовательно
// уменьшается счетчик в ящике и       
// дописывается очередная единица      
//                                     
 ПОКА НЕ 1 // если на ленте 1, стоп
  {
  МИНУС // уменьшаем счетчик на 1      
  ОБМЕН // запоминаем состояние сч.
  ПИШИ 1                               
  ВПРАВО // сдвиг к следующему символу 
  ОБМЕН  // проверка счетчика          
  }                                    
КОНЕЦ

к о м м е н т а р и й  к у р а т о р а
Нет замечаний.

Команда 3108
------------
.\08\08.txt
Оценка: 2
Авторы решения: Кутепов Олег, Крымкин Никита

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

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

к о м м е н т а р и й  к у р а т о р а
Алгоритм такой же как и у куратора однопроходной, но рекурсия здесь не
оправдана, лучше использовать цикл ПОКА.

Команда 3110
------------
.\10\10.txt
.\10\1011.kor
Оценка: 1

Автор решения - Савиновских Аня
Алгоритм: описание нет.

Программа

ЭТО вход
// вычитая отсюда по 1(за 1 ход) мы    
//узнаем, когда программе нужно        
//остановиться
ОБМЕН                                  
запись_цифр                            
КОНЕЦ                                  
ЭТО запись_цифр
ВПРАВО                                 
ПИШИ 1
// при помощи вычитания  из ящика      
//будет вычитаться по 1 за ход (смотри
//первое пояснение)
вычитание                              
КОНЕЦ                                  
ЭТО вычитание                          
ОБМЕН
МИНУС                                  
ЕСЛИ НЕ 0 ТО                           
{                                      
ОБМЕН                                  
запись_цифр                            
}                                      
ОБМЕН                                  
КОНЕЦ                                  

к о м м е н т а р и й  к у р а т о р а

Запись программы не структурирована.
При n=2 программа выдает ответ запись "10". Тоже (конечный ноль)
получается при любом четном n.

Так получается потому, что последняя команда ОБМЕН в процедуре
"вычитание" является у вас рекурсивной пружинкой. То есть, выполняется
не один, как, вероятно, вы полагали, а много раз. В этом легко
убедиться запустив выполнение программы по шагам.
Рекурсия в вашем алгоритме совершенно излишняя. Все прекрасно работает
с циклом ПОКА.

Команда 3113
------------
.\13\13.txt
.\13\1311.kor
.\13\1312.kor
Оценка: 1
Автор решения
Белокопытов Артем

Описание алгоритма
Определяем цифру.
Когда цифра определена, заменяем эту цифру на ее порядковый номер,
записаный еденицами.

Решение
ЭТО номер_цифры                        
ЕСЛИ 2                   |Если цифра 2 то
ТО                       |выполни команду 2  
ПОВТОРИ 2 команда        |раза
ЕСЛИ 3                   |Если цифра 3 то    
ТО                       |выполни команду 3  
ПОВТОРИ 3 команда        |раза               
ЕСЛИ 4                   |Если цифра 4 то    
ТО                       |выполни команду 4  
ПОВТОРИ 4 команда        |раза               
ЕСЛИ 5                   |Если цифра 5 то    
ТО                       |выполни команду 5  
ПОВТОРИ 5 команда        |раза               
ЕСЛИ 6                   |Если цифра 6 то
ТО                       |выполни команду 6  
ПОВТОРИ 6 команда        |раза               
ЕСЛИ 7                   |Если цифра 7 то    
ТО                       |выполни команду 7  
ПОВТОРИ 7 команда        |раза
ЕСЛИ 8                   |Если цифра 8 то    
ТО                       |выполни команду 8
ПОВТОРИ 8 команда        |раза               
ЕСЛИ 9                   |Если цифра 9 то    
ТО                       |выполни команду 9
ПОВТОРИ 9 команда        |раза               
ЕСЛИ а                   |Если буква а то
ТО                       |выполни команду 10 
ПОВТОРИ 10 команда       |раза              
ЕСЛИ б                   |Если буква б то   
ТО                       |выполни команду 11
ПОВТОРИ 11 команда       |раза              
ЕСЛИ в                   |Если буква в то   
ТО                       |выполни команду 12
ПОВТОРИ 12 команда       |раза              
ЕСЛИ г                   |Если буква г то   
ТО                       |выполни команду 13
ПОВТОРИ 13 команда       |раза              
ЕСЛИ д                   |Если буква д то   
ТО                       |выполни команду 14
ПОВТОРИ 14 команда       |раза              
ЕСЛИ е                   |Если буква е то
ТО                       |выполни команду 15 
ПОВТОРИ 15 команда       |раза
ЕСЛИ ж                   |Если буква ж то    
ТО                       |выполни команду 16 
ПОВТОРИ 16 команда       |раза
ЕСЛИ з                   |Если буква з то    
ТО                       |выполни команду 17
ПОВТОРИ 17 команда       |раза              
ЕСЛИ и                   |Если буква и то    
ТО                       |выполни команду 18 
ПОВТОРИ 18 команда       |раза              
ЕСЛИ й                   |Если буква й то    
ТО                       |выполни команду 19 
ПОВТОРИ 19 команда       |раза              
ЕСЛИ к                   |Если буква к то    
ТО                       |выполни команду 20 
ПОВТОРИ 20 команда       |раза
ЕСЛИ л                   |Если буква л то    
ТО                       |выполни команду 21 
ПОВТОРИ 21 команда       |раза              
ЕСЛИ м                   |Если буква м то    
ТО                       |выполни команду 22
ПОВТОРИ 22 команда       |раза              
ЕСЛИ н                   |Если буква н то
ТО                       |выполни команду 23 
ПОВТОРИ 23 команда       |раза              
ЕСЛИ о                   |Если буква о то
ТО                       |выполни команду 24 
ПОВТОРИ 24 команда       |раза
ЕСЛИ п                   |Если буква п то    
ТО                       |выполни команду 25 
ПОВТОРИ 25 команда       |раза              
ЕСЛИ р                   |Если буква р то    
ТО                       |выполни команду 26 
ПОВТОРИ 26 команда       |раза              
ЕСЛИ с                   |Если буква с то    
ТО                       |выполни команду 27 
ПОВТОРИ 27 команда       |раза              
ЕСЛИ т                   |Если буква т то
ТО                       |выполни команду 28 
ПОВТОРИ 28 команда       |раза              
ЕСЛИ у                   |Если буква у то    
ТО                       |выполни команду 29 
ПОВТОРИ 29 команда       |раза
ЕСЛИ ф                   |Если буква ф то    
ТО                       |выполни команду 30
ПОВТОРИ 30 команда       |раза
ЕСЛИ х                   |Если буква х то    
ТО                       |выполни команду 31
ПОВТОРИ 31 команда       |раза              
ЕСЛИ ц                   |Если буква ц то
ТО                       |выполни команду 32 
ПОВТОРИ 32 команда       |раза              
ЕСЛИ ч                   |Если буква ч то    
ТО                       |выполни команду 33 
ПОВТОРИ 33 команда       |раза              
ЕСЛИ ш                   |Если буква ш то    
ТО                       |выполни команду 34 
ПОВТОРИ 34 команда       |раза              
ЕСЛИ щ                   |Если буква щ то    
ТО                       |выполни команду 35
ПОВТОРИ 35 команда       |раза              
ЕСЛИ ъ                   |Если буква ъ то    
ТО                       |выполни команду 36 
ПОВТОРИ 36 команда       |раза              
ЕСЛИ ы                   |Если буква ы то
ТО                       |выполни команду 37 
ПОВТОРИ 37 команда       |раза
ЕСЛИ ь                   |Если буква ь то
ТО                       |выполни команду 38 
ПОВТОРИ 38 команда       |раза
ЕСЛИ э                   |Если буква э то    
ТО                       |выполни команду 39
ПОВТОРИ 39 команда       |раза              
ЕСЛИ ю                   |Если буква ю то    
ТО                       |выполни команду 40 
ПОВТОРИ 40 команда       |раза              
ЕСЛИ я                   |Если буква я то    
ТО                       |выполни команду 41 
ПОВТОРИ 41 команда       |раза
КОНЕЦ                    |              
ЭТО команда              |              
ПИШИ 1                   |записать на ленте символ 1
ВПРАВО                   |к следующему символу записи  
КОНЕЦ                    |              

к о м м е н т а р и й  к у р а т о р а
Решение неверное, так как не работает для любого n, а только для n от
1 до 41. Совсем неважно, что для большего n среда Корректора и не
позволяет выполнить решение. А если завтра длина алфавита Корректора
увеличится на два символа? Ваша программа потерпит фиаско. На самом
деле, так вполне может случится, ведь алфавит среды Корректора может
меняться через ini-файл этой программы. Алгоритм должен быть
универсальным.

Команда 3114
------------
.\14\14.txt
.\14\1411.kor
Оценка: 1.5

// Задача решена методом косвенной
// рекурсии. Главная процедура "вход". 
                                       
ЭТО вход                               
ЕСЛИ НЕ ПУСТО ТО поиск                 
КОНЕЦ                                  
ЭТО поиск                              
ЕСЛИ НЕ ПУСТО ТО  // проверка наличия
                  // символа в ячейке
                  // ленты             
ЯЩИК+  // скопировать содержимое окон-
       // ной ячейки ленты в ящик      
ПИШИ 1                                 
ВПРАВО  // переход в следующуюячейку
        // ленты                       
ЯЩИК-  // скопировать в оконную ячейку 
       // ленты символ из ящика        
МИНУС  // заменить символ в оконной    
       // ячейке на предыдущий в смысле
       // алфавита исполнителя         
вход
КОНЕЦ                                  

к о м м е н т а р и й  к у р а т о р а
Для каждого n программа записывает на ленту не n-ый член, а (n+1)-ый:

Для n=1 -> 11
Для n=2 -> 111
....

Алгоритм однопроходной (что хорошо), но для его релизации рекурсия не
нужна, можно было обойтись циклом ПОКА.

Команда 3115
------------
.\15\15.txt
.\15\1511.kor

Оценка: 2
Автор решения Данил Колесников, 5 класс
Описание алгоритма
С помощью рекурсии мы закручиваем пружину. Когда число становится 0,
начинают выполняться отложенные команды ПИШИ 1 и ВПРАВО.
Программа, описание программы

ЭТО Вход               |      
    МИНУС              |
    ЕСЛИ НЕ 0 ТО вход  | Запускаем процедуру снова.                             
    ПИШИ 1             | Это отложенные команды. Они выполняются
    ВПРАВО             | столько раз, сколько выполняется процедура Вход.
КОНЕЦ                  |                           


Оценка: 2
Решение 1512
Автор - ученик 7а класса Лысяк Павел.

Описание алгоритма: Пока не 0 вычитаем из цифры 1, кладем
в ящик, пишем 1, двигаемся вправо, выкладываем из ящика то
что там находится. После окончания цикла ПОКА стираем 0.

Программа

ЭТО Вход
  ПОКА НЕ 0 {
              МИНУС
              ЯЩИК+  
              ПИШИ 1
              ВПРАВО
              ЯЩИК-  
            }
  ПИШИ ПУСТО
КОНЕЦ

к о м м е н т а р и й  к у р а т о р а
Хорошие решения, а первое, рекурсивное, как всегда доставляет
неизгладимое удовольствие. Достоинство его в том, что рекурсия
используется по существу. В рекурсивных решениях других команд
рекурсия просто моделирует цикл (что не очень хорошо), а здесь она
демонстрирует то, что нельзя сделать циклом.
