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

5.2.5. Задача 5 (7 баллов)
Средний бал решений: 6.5 (93%)

   Решить задачу 4,  но если запись не является числом, устано-
вить исполнитель под первым неверным символом  в записи. Напри-
мер:
                         1021
                           ¤
   Если запись - число, установить исполнитель  за последним ее
символом. Например:
                         1011¤

  Решение

   Решение задачи 5  легко получается из решения задачи 4 изме-
нением процедуры Ошибка. Теперь, когда обнаружен ошибочный сим-
вол, мы не просто перемещаем остаток на строку вверх, но  и за-
водим рекурсивную  "пружину" при помощи отложенной команды ВЛЕ-
ВО. Пружина  возвращает исполнителя назад на место обнаруженной
ошибки:


ЭТО вход                           │Состояние (вход).
 шаг                               │Смотрим первый символ.
 ЕСЛИ        0 ТО число            │Символ "0" и "1" переводят проверку
 ИНАЧЕ ЕСЛИ  1 ТО число            │в состояние (число).
 ИНАЧЕ            ошибка           │Любой другой символ - ошибка.
КОНЕЦ                              │
                                   │
ЭТО число                          │Состояние (число).
  шаг                              │Смотрим следующий символ.
  ЕСЛИ       ПУСТО  ТО ответ_число │Запись проверена - это число!
  ИНАЧЕ ЕСЛИ 0  ТО число           │
  ИНАЧЕ ЕСЛИ 1  ТО число           │Символы "0" и "1" допустимы в числе,
  ИНАЧЕ ошибка                     │Любой другой символ - ошибка.
КОНЕЦ                              │
                                   │
ЭТО ответ_число                    │Состояние (ответ число).
 ВВЕРХ                             │Устанавливаем исполнитель в конец
КОНЕЦ                              │записи.
                                   │
ЭТО ошибка                         │Состояние (ошибка).
 шаг                               │Сдвиг вверх остатка
 ЕСЛИ НЕ ПУСТО ТО Ошибка           │записи после ошибки.
 ВЛЕВО                             │Возврат к месту ошибки.
КОНЕЦ                              │
                                   │
ЭТО шаг                            │Проверка следующего
 ВНИЗ ВПРАВО ВВЕРХ                 │символа
КОНЕЦ                              │


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

Команда: 14
   Авторы: Карасев Павел, Никитин Юрий, Данильченко Анна, Ишму-
хаметова Лилия,  Кулагин Андрей, Чермянин Павел, Гилязов Тимур,
Смагина Ксения.
Оценка: 7

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

  Пример:
  ..........
  ..¤15010..

  ...1......
  ...¤5010..

  ...15.....
  ....¤010..

  ...15.1...
  .....0¤0..   В строке оставлен 0 как флаг для возврата!

  ...15.10..
  .....0.¤..

  ...15.10..   Найти теперь ошибочный символ очень просто!
  .....0..¤.
