                     Решения задач
                     -------------

6.2.10. Задача a (8 баллов)  Геометрический цикл.
Средний бал решений: 3.1 (39%)

   В условиях предыдущей задачи построить  на  ленте  n  первых
членов последовательности Фибоначчи (n > 2).
   В начальный момент окно  смотрит  на клетку, символ в которой
задает своим порядковым номером в алфавите Корректора число n.

Решение

   Алгоритм решения предыдущей задачи после небольшой модифика-
ции вполне годится и для этого более общего случая.


   Алгоритм.

   Поставить справа  от  клетки  с  числом  членов последовательности
   (контрольная ячейка) флаг - символ "0"  (чтобы  легко  можно  было
   легко найти эту ячейку в процессе построения последовательности).

   Уменьшить заданное число  членов в контрольной ячейке на 2: первые
   два члена построим до входа в цикл.

   Построить первые два члена.
   (Перед циклом: окно на последнем построенном члене, в ящике - сум-
   ма двух последних членов.)

   Повторить пока в клетке с числом членов не окажется 0
     │
     │Построить следующий член последовательности.
     │Уменьшить число членов последовательности в контрольной ячейке на 1.
     │Окно установить на построенный член,
     │а в ящик поместить сумму двух последних членов.

ЭТО фибоначчи                    │
 подготовка00                    │Подготовка контрольной ячейки.
 подготовка0                     │Строим первые два члена.
 работа                          │Строим остальные члены.
 уборка                          │Убираем с ленты контрольную ячейку и флаг.
КОНЕЦ                            │
                                 │
ЭТО подготовка00                 │
  МИНУС МИНУС                    │Уменьшаем число в контрольной ячейке на 2.
  ВПРАВО                         │Справа от контрольной ячейке записываем флаг.
  ПИШИ 0                         │
  ВПРАВО ВПРАВО                  │Перемещаем окно на начало последовательности.
КОНЕЦ                            │
                                 │
ЭТО подготовка0                  │Строим первые два члена последовательности,
 ПИШИ 1                          │окошко устанавливаем на последний элемент,
 ВПРАВО                          │в ящик записываем символ 2 - сумму первых
 ПИШИ 1                          │двух членов.
 ОБМЕН                           │
 ПИШИ 2                          │
 ОБМЕН                           │
КОНЕЦ                            │
                                 │
ЭТО работа                       │
  следующий                      │Строим следующий член последовательности.
                                 │
  еще?                           │"Сходим" к контрольной ячейке, уменьшим ее
                                 │содержимое на 1 и принесем полученный символ
                                 │в текущее место в ящике.
                                 │
  ОБМЕН                          │Проверим, что принесли в ящике.
  ЕСЛИ 0 ТО ОБМЕН                │Если 0 - все члены последовательности
  ИНАЧЕ                          │построены.
  {                              │
    ОБМЕН                        │Если не 0, подготавливаемся к построению
    подготовка                   │следующего элемента:
    работа                       │ - поместить в ящик сумму последних 2 членов;
  }                              │ - установить окно на последний построенный
КОНЕЦ                            │   элемент.
                                 │
                                 │
                                 │
ЭТО еще?                         │"Прогулка" назад к контрольной ячейке.
 ВЛЕВО                           │
 ЕСЛИ НЕ 0 ТО еще?               │
  ИНАЧЕ                          │Нашли флаг "0".
  {                              │Смещаемся в контрольную ячейку.
    ВЛЕВО                        │Уменьшаем ее на один.
    МИНУС                        │Копируем в ящик.
    ЯЩИК+                        │Перемещаем окно на стартовую позицию
    ВПРАВО                       │для работы рекурсивной пружины.
  }                              │
 ВПРАВО                          │Пружинка толкает окно к последнему
КОНЕЦ                            │построенному члену последовательности.
                                 │
ЭТО уборка                       │ Убираем с ленты флаг и контрольную
 ПОКА НЕ 0 ВЛЕВО                 │ ячейку.
 ПИШИ ПУСТО                      │
 ВЛЕВО                           │
 ПИШИ ПУСТО                      │
 ВПРАВО ВПРАВО                   │
КОНЕЦ                            │
                                 │Остальные процедуры такие же, как
                                 │и в решении предыдущей задачи.
                                 │
                                 │
ЭТО следующий                    │
 ВПРАВО                          │
 ОБМЕН                           │
 МИНУС                           │
 ЕСЛИ НЕ 0 ТО { ОБМЕН следующий }│
 ИНАЧЕ ПИШИ 0                    │
 ПЛЮС                            │
КОНЕЦ                            │
                                 │
ЭТО подготовка                   │
  ВЛЕВО                          │
  ПОКА ПУСТО ВЛЕВО               │
  ЯЩИК+                          │
  ВПРАВО                         │
  ПОКА ПУСТО ВПРАВО              │
  ВПРАВО                         │
  ЯЩИК-                          │
  ВЛЕВО                          │
  ЯЩИК+                          │
  ВПРАВО                         │
  сумма                          │
  ЯЩИК+                          │
  ПИШИ ПУСТО                     │
  ВЛЕВО                          │
КОНЕЦ                            │
                                 │
ЭТО сумма                        │
 ОБМЕН                           │
 ЕСЛИ НЕ 0 ТО                    │
 {                               │
  МИНУС                          │
  ОБМЕН                          │
  ПЛЮС                           │
  сумма                          │
 }                               │
 ИНАЧЕ ОБМЕН                     │
КОНЕЦ                            │
