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

6.2.9. Задача 9 (6 баллов)  Геометрический цикл.
Средний бал решений: 2.6 (43%)

   Последовательность чисел:

        1, 1, 2, 3, 5, 8, 13, ...

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

              Фрагмент ленты с результатом

        ┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬
        │░│░│░│1│1│░│2│░│░│3│░│░│░│░│5│░│░│░│░│░│
        ┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴


Решение

   Конечно,  восемь  членов последовательности  Фибоначчи можно
построить без всяких хитростей. Просто записать на ленту симво-
лы 1,  1,  2, 3, 5, 8, г, л на нужном расстоянии друг от друга.
Но никакого программирования в этом нет,  поэтому такое решение
совсем не интересное.
   Заметим, кстати, что для записи  девятого  члена  "ш"  длины
стандартной ленты уже не хватит и этот член  "залезет" в начало
уже построенной последовательности. Правда  длину  ленты всегда
можно увеличить используя настройки программы "Корректор".
   Ниже рассматривается универсальный алгоритм. Он строит число
членов, которое на два больше параметра  цикла построения (пер-
вые два члена строятся перед циклом).

   Алгоритм.

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

     │построить следующий член последовательности
     │окно установить на построенный член,
     │а в ящик поместить сумму двух последних членов

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