Задача 5 (8 баллов)

Определение 2
-------------
<программа>   := <команда>|<программа><команда>
<команда>     := <простая>|<условная>
<простая>     := 0|1|2|3|4|5|6|7|8|9
<условная>    := <сокращенная>|<полная>
<сокращенная> := е<условие><команда>
<полная>      := <сокращенная>и<команда>
<условие>     := к|м


   Задание. Напишите программу для Кукарачи, которая  проверяет,
является ли запись на  его  поле программой в смысле определения
2.
   В начальный  момент  исполнитель  расположен перед кубиками с
записью во второй строке:
                         ¤запись
   Если проверяемая запись - программа, установить исполнитель в
конец записи:
                         запись¤
   Если запись - не программа, поставить  исполнитель под первым
неверным символом:
                         запись
                           ¤

   Дополнительно к разработке лексического анализатора придумать
среду, исполнитель,  описать алгоритмы работы команд и проверок,
ввести более  содержательные обозначения лексем языка и записать
несколько программ-примеров в формальной нотации определения 2 и
эквивалентных новых обозначениях.

Решение куратора
-----------------
                                          остальное
                                    (вход)─────────────────────>(ошибка)
                   цифра       цифра  /\  е                          ^
                     ┌─┐  ┌───────────  ───────────────┐             │
                     │ │  │                            │             │
                     │ │  │                            │             │
         остальное   │ V  V               е            V    остальное│
(ошибка)<───────────(простая) ───────────────────> (условная)────────┤
                        │ \                            │  ^          │
                   ПУСТО│  \                        к,м│  │          │
                        │   \                          │  │е         │
                        │    \                         │  │          │
                        │     \                        V  │ остальное│
                        │      \                   (команда)─────────┤
                        │       \                      │             │
                        │        \                цифра│             │
                        │         \                    │             │
                        V          \         цифра     V    остальное│
                    (программа)     \<─────────────(иначе)───────────┘
                        ^                           │  │
                        │                      ПУСТО│  │и
                        └───────────────────────────┘  └────>(вход)

программа
- - - - -
ЭТО вход
  шаг
  ЕСЛИ       ЦИФРА ТО простая          
  ИНАЧЕ ЕСЛИ е     ТО условная         
  ИНАЧЕ               ошибка           
КОНЕЦ

ЭТО простая                            
  шаг
  ЕСЛИ       ЦИФРА ТО простая
  ИНАЧЕ ЕСЛИ е     ТО условная
  ИНАЧЕ ЕСЛИ ПУСТО ТО программа        
  ИНАЧЕ               ошибка
КОНЕЦ
                                       
ЭТО условная                           
  шаг                                  
  ЕСЛИ       к ТО команда
  ИНАЧЕ ЕСЛИ м ТО команда              
  ИНАЧЕ           ошибка
КОНЕЦ
                                       
ЭТО команда                            
  шаг
  ЕСЛИ       ЦИФРА ТО иначе            
  ИНАЧЕ ЕСЛИ е     ТО условная         
  ИНАЧЕ               ошибка
КОНЕЦ

ЭТО иначе                              
  шаг
  ЕСЛИ       ПУСТО ТО программа
  ИНАЧЕ ЕСЛИ ЦИФРА ТО простая
  ИНАЧЕ ЕСЛИ е     ТО условная         
  ИНАЧЕ ЕСЛИ и     ТО вход
  ИНАЧЕ               ошибка
КОНЕЦ                                  
                                       
ЭТО программа                          
 ВВЕРХ                                 
КОНЕЦ                                  

ЭТО ошибка
 шаг                                   
 ЕСЛИ НЕ ПУСТО ТО ошибка               
 ВЛЕВО
КОНЕЦ                                  
                                       
ЭТО шаг
 ВНИЗ ВПРАВО ВВЕРХ
КОНЕЦ


Команда 3101 кроме правильного решение придумала интересного
исполнителя с нетривиальными программами. Обязательно посмотрите!

Ну, а от описаний среды на рыбную тему команды 3102, у каждого
повысится настроение!

Если вы не любите рыбалку, а наоборот, мечтаете о крыльях,
познакомьтесь с исполнителем команды 3105.


Команда 3101
------------
.\01\01.txt
Оценка: 12
Автор решения: Кудрявцев Артём

диаграмма переходов
- - - - - - - - - -                    ┌───────────────────────────────────┐
                                       │   ┌───все остальное───────┐       │
                                       │   │                     ┌─v──────┐│
 ┌─────┐                            ┌──v───┴┐                    │ Ошибка ││
 │ Да! <───пусто───┐     ┌──цифра───┤ Вход  ├──е─┐               └─^───^─^┘│
 └───^─┘          ┌┴─────v┐         └───────┘    │                 │   │ │ │
     │     ┌──────> Цифра ├──е─┐             ┌───v──┐              │   │ │ │
     │     │      └┬───^──┘    └─────────────> Если ├все остальное─┘   │ │ │
     │     │       │   │                     └^─┬──^┘                  │ │ │
     │     │       │   │                 ┌────┘ к  │                   │ │ │
     │     └─цифра─┘   │                 │      м  е                   │ │ │
     │                 │                 │    ┌─v──┴─────┐             │ │ │
     │                 │                 │    │ Если_к_м ├все остальное┘ │ │
     │                 │                 е    └─┬────────┘               │ │
     │                 │                 │      ц                        │ │
     │                 │                 │      и                        │ │
     │                 │                 │      ф                        │ │
     │                 │                 │      р                        │ │
     │                 │                 │      а  ┌──────все остальное──┘ │
     │                 │               ┌─┴──────v──┴┐                      │
     │                 └─────цифра─────┤ Если_к_м_ц ├─────────и────────────┘
     │                                 └─────┬──────┘
     └─────────────────────────────пусто─────┘



Программа

// Начало                              
ЭТО Вход                               
 Шаг                                   
 ЕСЛИ ЦИФРА                            
  ТО Цифра                             
  ИНАЧЕ ЕСЛИ е
         ТО Если
         ИНАЧЕ Ошибка                  
КОНЕЦ // Вход                          
//-------------------------------------
// Если первая цифра                   
ЭТО Цифра
  Шаг
  ЕСЛИ ПУСТО
   ТО Да!                              
   ИНАЧЕ ЕСЛИ ЦИФРА                    
          ТО Цифра                     
          ИНАЧЕ ЕСЛИ е                 
                 ТО Если
                 ИНАЧЕ Ошибка
КОНЕЦ // Цифра                         
//-------------------------------------
// Если попалась е                     
ЭТО Если                               
 Шаг                                   
 ЕСЛИ к                                
  ТО Если_к_м                          
  ИНАЧЕ ЕСЛИ м
         ТО Если_к_м
         ИНАЧЕ Ошибка                  
КОНЕЦ // Если                          
//-------------------------------------
// Если попалась к или м               
ЭТО Если_к_м
 Шаг
 ЕСЛИ е
  ТО Если                              
  ИНАЧЕ ЕСЛИ ЦИФРА                     
         ТО Если_к_м_ц                 
         ИНАЧЕ Ошибка                  
КОНЕЦ // Если_к_м
//-------------------------------------
// Если попалась цифра                 
ЭТО Если_к_м_ц                         
 Шаг
 ЕСЛИ и                                
  ТО Вход                              
  ИНАЧЕ ЕСЛИ е                         
         ТО Если                       
         ИНАЧЕ ЕСЛИ ЦИФРА
                ТО Цифра
                ИНАЧЕ ЕСЛИ ПУСТО       
                       ТО Да!          
                       ИНАЧЕ Ошибка
КОНЕЦ // Если_к_м_ц                    
//-------------------------------------
// Процедура хода
ЭТО Шаг
 ВНИЗ                                  
 ВПРАВО                                
 ВВЕРХ                                 
КОНЕЦ // Шаг                           
//-------------------------------------
// Процедура подтверждения
ЭТО Да!                                
 ВВЕРХ                                 
КОНЕЦ // Да!
//-------------------------------------
// Если в программе есть ошибка        
ЭТО Ошибка                             
 Шаг                                   
 ЕСЛИ НЕ ПУСТО
  ТО Ошибка
 ВЛЕВО                                 
КОНЕЦ // Ошибка                        
//-------------------------------------


   Дополнительно к разработке лексического анализатора придумать
среду, исполнитель,  описать алгоритмы работы команд и проверок,
ввести более  содержательные обозначения лексем языка и записать
несколько программ-примеров в формальной нотации определения 2 и
эквивалентных новых обозначениях.

Среда
-----
Две ячейки памяти П1 и П2, которые могут хранить целые 
числа, устройство вывода, процессор.

Команды
-------
0 - обнулить содержимое ячеек П1 и П2           СБРОС
1 - увеличить содержимое П1 на единицу          П1+
2 - увеличить содержимое П2 на единицу          П2+
3 - уменьшить содержимое П1 на единицу          П1-
4 - уменьшить содержимое П2 на единицу          П2-
5 - вывести содержимое П1                       ПОКАЖИ1
6 - вывести содержимое П2                       ПОКАЖИ2
7 - вывести сообщение "Да!"                     ДА
8 - вывести сообщение "Нет!"                    НЕТ
9 - выполнить программу сначала
    (рекурсивный запуск)                        СНАЧАЛА

Условия
-------
к - остаток от деления содержимого П1
    на содержимое П2 равен 0            ДЕЛИТСЯ   авост при 0 в П2
м - содержимое ячейки П2 больше
    содержимого ячейки П1               БОЛЬШЕ

Ключевые слова
--------------
е                     ЕСЛИ условие
                        ТО    команда
и                       иначе команда

Примеры программ
----------------

Задача 5.1. Выяснить, является ли содержимое П1 четным числом

Программа 0225ек7и8

В новых обозначениях

СБРОС
П2ПЛЮС
П2ПЛЮС
ВВЕДИ
ЕСЛИ ДЕЛИТСЯ
 ТО    ДА
 ИНАЧЕ НЕТ

Задача 5.2.
Выяснить, является ли содержимое П1 простым числом.
В начальный момент в ячейке П2 число 1.

Программа 2ек8ием7и9

В новых обозначениях

П2+
ЕСЛИ ДЕЛИТСЯ
 ТО НЕТ
 ИНАЧЕ ЕСЛИ БОЛЬШЕ
        ТО ДА
        ИНАЧЕ СНАЧАЛА

Задача 5.3.
Вывести среднее арифметическое содержимого ячеек П1 и П2,
округлённое до целого числа. В начальный момент содержимое
П1 не больше содержимого П2.

13ем9и6

В новых обозначениях

П1+
П2-
ЕСЛИ БОЛЬШЕ
 ТО СНАЧАЛА
 ИНАЧЕ ПОКАЖИ2

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

1) Число процедур -- 8, столько же, сколько у куратора. И такова же
оценку за программу -- 8 баллов.

2) Команда 9:

9 - выполнить программу сначала
    (рекурсивный запуск)                        СНАЧАЛА

задает не рекурсию, а безусловный переход на начало программы.

Рекурсия невозможна при таком определении программы, потому, что в
программе нет процедур.

3) В программе 1, согласно Вашим обозначениям, нужно писать не так:

СБРОС
П2ПЛЮС
П2ПЛЮС
ВВЕДИ
ЕСЛИ ДЕЛИТСЯ
 ТО    ДА
 ИНАЧЕ НЕТ

а так:

СБРОС
П2+
П2+
ПОКАЖИ1
ЕСЛИ ДЕЛИТСЯ
 ТО    ДА
 ИНАЧЕ НЕТ

4) Программа 2 мне очень понравилась!

5) Программа 3 -- тоже хорошо!

7) оценка за построения -- 4 балла

   Очень большие молодцы!

Непонятны слова Алексея Владиславовича:
-----
Дополнение к задаче 5 делали все вместе, второпях и под большим
прессингом руководителя. Этой частью работы недовольны.
Моя вина. Поздно осознал и поздно задал вопрос куратору.
Видимо, в 6-7 классе такие абстракции еще трудноваты...
-----

Все получилось выше всяких похвал.

Команда 3102
------------
.\02\02.txt
Оценка: 7
Автор решения: Богатырев Гена

Диаграмма переходов
-------------------
                   (ошибка)
                      ^
                      │
                      │  остальное
       <простая>      │
  ┌─────────────────(вход)
  │                   │   ┌───────────────────┐
  │                   │е  │ ┌──────────────┐  │
  │        остальное  v   v v              │  │
  │  (ошибка)<────<условная?><──────────┐  │  │
  │                  │    ^             │  │  │
  │       <условие>  │    │             │  │  │
  │                  │    │е            │  │  │
  │                  │    │             │  │  │
  │        остальное v    │             │  │  │
  │ (ошибка)<─────<условная?>           │  │  │
  │                  │                  │  │  │
  │         <простая>│                  │  │  │
  │     остальное    v          е       │  │  │
  │ (ошибка)<──<сокращенная?>───────────┘  │  │
  │     пробел │  │         │              │  │
  │  (ответ)<──┘  │         │<и>           │  │
  │               │         │              │  │
  │               │         v      е       │  │
  │               │     <полная?>──────────┘  │
  │      <простая>│<простая>│                 │
  │               v         v    е            │
  └─────────────>< программа >────────────────┘
                  │  ^   │ │  остальное
         <простая>│  │   │ └────────>(ошибка)
                  └──┘   │
                         v пробел
                      (ответ)


Программа, описание программы
------------------------------
ЭТО НАЧ
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ НЕ ПУСТО ТО ПР_простая           
               ИНАЧЕ ВНИЗ              
КОНЕЦ                                  
                                       
ЭТО ПР_простая    // Проверить, команда
                  // простая?
 ЕСЛИ ЦИФРА ТО НАЧ                     
            ИНАЧЕ ПР_е
КОНЕЦ
                                       
ЭТО ПР_е //Проверяет наличие "е".
 ЕСЛИ е ТО ПР_к
        ИНАЧЕ ПР_других                
КОНЕЦ                                  

ЭТО ПР_других //Проверяет посторонние
              //символы.
 ЕСЛИ ЦИФРА ТО НАЧ
            ИНАЧЕ ФИНИШ                
КОНЕЦ

ЭТО ПР_к //Проверяет, следует ли после
         //"е" условие "к".            
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ к ТО ПОВТОР                      
        ИНАЧЕ ПР_м                     
КОНЕЦ

ЭТО ФИНИШ
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ НЕ ПУСТО ТО ФИНИШ //Рекурсия по
                  // расстоянию от     
                  // места ошибки до
                  // конца записи.
               ИНАЧЕ ПОВТОРИ 2 ВНИЗ    
 ВЛЕВО  // Отложенная команда, которая 
        // возвращает исполнителя на
        // место ошибки.               
КОНЕЦ

ЭТО ПР_м // Проверка, есть ли после "е"
         // условие "м".
 ЕСЛИ м ТО ПОВТОР
        ИНАЧЕ ФИНИШ                    
КОНЕЦ                                  
                                       
ЭТО ПОВТОР   // Что идет после условия.
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ ЦИФРА ТО ДАЛЬШЕ
            ИНАЧЕ ФИНИШ //Случай "екек"
КОНЕЦ                                  
                                       
ЭТО ДАЛЬШЕ   //После условия "простая".
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ НЕ ПУСТО ТО ПР_полная
               ИНАЧЕ ВНИЗ
КОНЕЦ                                  
                                       
ЭТО ПР_полная // Является ли "условная"
              // "полной".             
 ЕСЛИ и ТО Полная
        ИНАЧЕ ПР_е
КОНЕЦ                                  

ЭТО Полная // Правильность "полной".
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ ЦИФРА ТО НАЧ                     
            ИНАЧЕ Снова_е              
КОНЕЦ                                  
                                       
ЭТО Снова_е //После "и" снова условная
 ЕСЛИ е ТО ПР_е
        ИНАЧЕ ФИНИШ                    
КОНЕЦ                                  

Дополнительно
--------------
  Скоро Новый год! Каникулы! И даже в Роботландском университете
наступит передышка. А потому мы приглашаем всех студентов на 
"зимнюю (подледную) рыбалку". 
  Сначала запасемся наживкой. Лучше, если это будет мотыль (название
гораздо красивее предмета). Но сгодится и искусственный "мормыш".
Это нас наш главный инженер Демьян Сергеевич просветил, сами нам
сроду бы не разобраться.
  Наживка, снасти, потеплее оделись, можно прихватить и необходимое, 
чтобы прямо на льду уху варить. Вперед!
--------------------------------------------------------------------
  ПО  СУТИ.
  Клетчатое поле. Пусть это будет пруд (он у нас просто замечательный!
приезжайте! Опять занесло.), в каждой клеточке можно просверлить лунку.
  Команды "1 - 4" (ВВЕРХ, ВПРАВО, ВНИЗ, ВЛЕВО) могут задавать направление
сторон горизонта, куда идти рыбаку, который не знает места, где хорошо
клюет. Условие "к" истинно, если в этом месте клюет, а условие "м"
истинно, если на крючке есть мотыль или мормыш. О! совсем забыли, нам
понадобится еще "куча" команд, таких как
"5" - ВПЕРЕД (сверли лунку),
"6" - ПОВТОРИ 2 ВПЕРЕД (опускай удочку),
"7" - НАЗАД (подсекай), самая приятная команда из рыбацкого сленга,
"8" - СТОЯТЬ (не выдавай рыбных мест)
"0" - ПОВТОРИ 2 НАЗАД (насаживай новую наживку)
и т.д., и т.п. Вообще, Демьян Сергеевич говорит, что рыбацких премудростей 
столько, что у нас и команд не хватит.
  Тогда программа "1256ек7и3" в более привычной записи выглядит так:
ВВЕРХ
ВПРАВО
ПОВТОРИ 3 ВПЕРЕД
ЕСЛИ КЛЮЕТ ТО НАЗАД
           ИНАЧЕ ВНИЗ
и сиди дальше (это уже не программа). Исполнитель, он же удачливый (будем
надеяться) рыбачок двигается со всем своим снаряжением на север, потом на
восток, сверлит лунку, опускает удочку. Сидит, ждет... Если клюет, быстро 
"подсекает". Ну а если не клюет, идет туда, где теплее: в программе на юг,
а можно и к магазину. За рыбой - за рыбой, а Вы что подумали?
  
  Программа "емек" - это условие для положительного результата рыбалки: если
клюет и есть мормыш, Вам непременно будет из чего сварить уху.
  Программа "23336емек8":
ВПРАВО
ПОВТОРИ 3 ВНИЗ
ПОВТОРИ 2 ВПЕРЕД
ЕСЛИ ЕСТЬ_МОТЫЛЬ
     ТО ЕСЛИ КЛЮЕТ
             ТО СТОЯТЬ
КОНЕЦ тут будет восприниматься, что пора идти домой (это когда уже 
"нарыбачился" в любом смысле слова). С начала программы: идем на восток,
потом три клетки на юг. Исполнитель знает точно, где готова лунка, поэтому 
не сверлит (команда 5), сразу опускает удочку (6). Если есть наживка (ем),
попробуем, клюет ли (ек), сиди тихо рыбачь, не выдавай рыбных мест (8).
  
  Формально заданное определение Программы допускает такие структуры, как
"екек". Что это может означать? Клевало-клевало, и все склевала рыбка, она
оказалась ловчее Вас. "Учитесь круче подсекать," - говорит рыбак Демьян
Сергеевич. Да простит он нам эту вольность.
  А можно это трактовать и по-другому с рыбацкой точки зрения.
  Программа "екекек7и0". Расшифруем:
ЕСЛИ КЛЮЕТ
     ТО ЕСЛИ КЛЮЕТ
             ТО ЕСЛИ КЛЮЕТ
                     ТО НАЗАД
                     ИНАЧЕ ПОВТОРИ 2 НАЗАД
Здесь "екек" можно трактовать, как клевало-клевало, но ушла, правда съела
не все. Тогда, если КЛЮЕТ снова, значит та же рыбка вернулась или другая
набрела на Вашу наживку. Быстро "подсекайте" ИНАЧЕ, т.е., если больше не
клюет, проверяйте, наверно, требуется новая наживка (0).
  Надеемся, мы убедили Вас в том, что зимние каникулы надо провести, именно
занимаясь подледным ловом. Лишь бы не очень холодно было. Удачного клева
всем нам! И не только клева.

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

1) В диаграмме на стрелках-переходах записаны не конкретные символы, а
метасимволы: <простая>, <условие>. Такая запись может легко привести к
ошибке.

2) В программе Гены 12 процедур-состояний, в то время как у куратора
-- 8. Это означает, что программа построена не оптимально.

3) Но главное -- программа неверная. Доказательство. На тест "емем1"
выдается ошибка на третий символ, в то время это -- корректная
программа в смысле определения 2:

начало сокращенной условной
│условие
││
││─── команда (сокращенная условная)
eмем1

 В итоге за лексический анализатор оценка -- 4.

построение новой среды  и исполнителя
- - - - - - - - - - - - - - - - - - -

Литературные достоинства рассказа о рыбаке и рыбке -- выше всяких
похвал! А вот к формальной стороне дела есть придирки.
Команды:

"6" - ПОВТОРИ 2 ВПЕРЕД (опускай удочку),
"0" - ПОВТОРИ 2 НАЗАД (насаживай новую наживку)

не являются корректными.

За остроумное построение и изложение -- 3 балла

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

Команда 3105
------------
.\05\05.txt
Оценка: 11

диаграмма переходов
- - - - - - - - - -
                                                         +---+
                                                         │   │
                                                         │  цифра 
                                                         │   │
               остальное                      цифра      V   │
   (ошибка)<----------------(    вход      )---------->( условие_ц )
     ^   ^                    │                         │     │   │      
     │   │                    │                        "е"    │ пусто
     │   │                   "е"                        │     │   │     
     │   │                    │                         │     │   V      
     │   │                    │                         │     │ (вверх) 
     │   │                    │                         │     │
     │   │ остальное          V                         │    остальное
     │   +---------------(условие_е )<------------------+     │
     │                     ^   │  ^                           V      
     │                     │   │  │                        (ошибка)
     │                     │  к/м +-----"е"-------+           ^         
     │                    "е"  │                  │           │
     │                     │   V                  │         остальное   
     │                     +--(условие)---"и"-->( условие_и)--+
     │      остальное           │  │                  │   ^        
     +--------------------------+  │                  │   │       
                                   │                  │   │     
                                 цифра              цифра │
                                   │                  │   │
                                   V                  │   │
                       +------->(условие_ц2  )<-------+   │
                       │         │ │   │  │ │             │    
                       │  цифра  │ │   │  │ │             │      
                       +---------+ │   │  │ +----"и"------+
                                   │   │  │                       
                                  "е"  │  │ остальное      
                                   │   │  +------------>(ошибка)
                                   V   │ 
                          (условие_е)  │
                                       │
                                     пусто
                                       │
                                       V
                                     (вверх)

программа
- - - - -
ЭТО ВХОД                               
ШАГ                                    
ЕСЛИ е ТО              УСЛОВИЕ_Е       
   ИНАЧЕ ЕСЛИ ЦИФРА ТО УСЛОВИЕ_Ц       
   ИНАЧЕ               ОШИБКА          
КОНЕЦ                                  
                                       
ЭТО УСЛОВИЕ_Е                          
ШАГ
ЕСЛИ м ТО          УСЛОВИЕ             
   ИНАЧЕ ЕСЛИ к ТО УСЛОВИЕ             
   ИНАЧЕ           ОШИБКА              
КОНЕЦ                                  

ЭТО УСЛОВИЕ_Ц
ШАГ                                    
ЕСЛИ ПУСТО ТО          ВВЕРХ
   ИНАЧЕ ЕСЛИ е ТО     УСЛОВИЕ_Е       
   ИНАЧЕ ЕСЛИ ЦИФРА ТО УСЛОВИЕ_Ц       
   ИНАЧЕ               ОШИБКА          
КОНЕЦ
                                       
ЭТО УСЛОВИЕ
ШАГ                                    
ЕСЛИ е ТО              УСЛОВИЕ_Е       
   ИНАЧЕ ЕСЛИ и     ТО УСЛОВИЕ_И       
   ИНАЧЕ ЕСЛИ ЦИФРА ТО УСЛОВИЕ_Ц2      
   ИНАЧЕ               ОШИБКА          
КОНЕЦ                                  
                                       
ЭТО УСЛОВИЕ_И
ШАГ                                    
ЕСЛИ е ТО              УСЛОВИЕ_Е       
   ИНАЧЕ ЕСЛИ ЦИФРА ТО УСЛОВИЕ_Ц2      
   ИНАЧЕ               ОШИБКА          
КОНЕЦ

ЭТО УСЛОВИЕ_Ц2
ШАГ
ЕСЛИ е ТО              УСЛОВИЕ_Е       
   ИНАЧЕ ЕСЛИ ЦИФРА ТО УСЛОВИЕ_Ц2      
   ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ           
   ИНАЧЕ ЕСЛИ и ТО     УСЛОВИЕ_И
   ИНАЧЕ               ОШИБКА                        
КОНЕЦ                                  
                                       
ЭТО ОШИБКА
ШАГ                                    
ЕСЛИ НЕ ПУСТО ТО ОШИБКА                
ВЛЕВО                                  
КОНЕЦ                                  
                                       
ЭТО ШАГ
ВНИЗ                                   
ВПРАВО                                 
ВВЕРХ                                  
КОНЕЦ

Наш исполнитель: Летающий воздушный аппарат, который может перевозить
грузы, управляется командиром. Аппарат можно заправить прямо в воздухе
или на базе. Командир может устать, но если он выпьет кофе, то можно
лететь дальше.
Команды:
0 - выпить кофе
1 - вперед
2 - вправо
3 - влево
4 - вниз
5 - вверх
6 - лететь на базу
7 - заправить машину
8 - прицепить груз
9 - отцепить груз
условия:
к - командир устал
м - машина проголодалась (топлива осталось только для возврата на базу)

Тогда программа ек0 имеет вид
если капитан устал
     то выпить кофе

а программа 85ем7ек0 имеет вид
прицепить груз
вверх
если машина проголодалась
     то заправить
если капитан устал
     то выпить кофе

а программа 11емиек6 имеет вид
вперед
вперед
если машина проголодалась
     и если капитан устал
     то лететь на базу

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

1) В программе столько же процедур-состояний, сколько в решении
куратора. В итоге решение получает -- 8 баллов.

2) Построение среды и исполнителя - 3 балла. Последняя программа --
неверная.

    "и" -- это не логическая операция, а эквивалент "ИНАЧЕ"

Команда 3106
------------
.\06\06.txt
Оценка: 8

диаграмма переходов
- - - - - - - - - -
В начальный момент алгоритм находится в состоянии (Старт)

                   ┌────────────┐    ┌───пусто───> (Ответ_да)
                   │            V    │
                   └──цифра───(После_цифры)<───цифра────(Старт)
                                  │     │                 │ │
                                  и     │                 │ и
                    ┌───────────┐ н     │                 │ н
                    │           │ а     │                 │ а    О
                    и           │ ч     │                 │ ч    ш
                    н           │ е     e                 │ е    и
                    а           │ │     │                 │ │    б
                    ч           V V     │                 │ └──> к
                    е         (Ошибка)  │                 │      а
                    │                   V                 │      ^
     (Проверка_условия)<────к|м───────(После_е)<──────────┘      │
        │    │                          ^ ^^ │                   │
        ц    └───────────е──────────────┘ ││ └────иначе──────────┘
        и  (Ответ_да)                     ││
        ф    ^              ┌───цифра────┐││
        р    └─пусто────┐   │            │││
        а               │   V            │││
        └──────────>(Цифры_в_условии)────┘││
        (Ошибка)      │   ^    │ │        ││
          ^ ^         и   │    │ └───е────┘│
          │ │         н   ц    │           │
          и │         а   и    │           │
          н │         ч   ф    и           │
          а │         е   р    │           │
          ч └─────────┘   а    │           │
          е               │    V           │
          └───────(Полная команда?)───е────┘

программа
- - - - -

ЭТО Старт                              
 Шаг            //К следующему символу
       ЕСЛИ ЦИФРА ТО После_цифры
 ИНАЧЕ ЕСЛИ е ТО После_е               
 ИНАЧЕ Ошибка                          
КОНЕЦ
                                       
ЭТО После_цифры                        
 Шаг                                   
       ЕСЛИ ЦИФРА ТО После_цифры       
 ИНАЧЕ ЕСЛИ е ТО После_е               
 ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ  //Ответ-ДА 
 ИНАЧЕ Ошибка
КОНЕЦ
                                       
ЭТО После_е
 Шаг
       ЕСЛИ к ТО Проверка_условия
 ИНАЧЕ ЕСЛИ м ТО Проверка_условия
 ИНАЧЕ Ошибка
КОНЕЦ                                  
                                       
ЭТО Проверка_условия
 Шаг                                   
       ЕСЛИ ЦИФРА ТО Цифры_в_условии
 ИНАЧЕ ЕСЛИ е     ТО После_е           
 ИНАЧЕ Ошибка                          
КОНЕЦ
                                       
ЭТО Цифры_в_условии
 Шаг                                   
       ЕСЛИ ЦИФРА ТО Цифры_в_условии   
 ИНАЧЕ ЕСЛИ е ТО После_е               
 ИНАЧЕ ЕСЛИ и ТО Полная_команда?       
 ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ      //Ответ-ДА
 ИНАЧЕ Ошибка
КОНЕЦ                                  
                                       
ЭТО Полная_команда?
 Шаг
       ЕСЛИ ЦИФРА ТО Цифры_в_условии
 ИНАЧЕ ЕСЛИ е ТО После_е
 ИНАЧЕ Ошибка                          
КОНЕЦ                                  
                                       
ЭТО Шаг
 ВНИЗ
 ВПРАВО                                
 ВВЕРХ                                 
КОНЕЦ

ЭТО Ошибка
 Шаг                                   
 ЕСЛИ НЕ ПУСТО ТО Ошибка               
 ВЛЕВО  //Встать на место ошибки       
КОНЕЦ                                  

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

Правильное решение. Замечаний нет.

Команда 3107
------------
.\07\07.txt
Оценка: 0

Команда 3108
------------
.\08\08.txt
Оценка: 4
Автор решения  Катя Мороз.

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

программа
- - - - -
ЭТО Проверка
  { ВНИЗ ВПРАВО ВВЕРХ }                
 ЕСЛИ ЦИФРА ТО Проверка ИНАЧЕ
 ЕСЛИ е ТО Проверка2  ИНАЧЕ                   
 ЕСЛИ ПУСТО ТО ВВЕРХ                   
 ИНАЧЕ Ошибка
КОНЕЦ                                  

ЭТО Ошибка                             
   { ВНИЗ ВПРАВО ВВЕРХ }
 ЕСЛИ  НЕ ПУСТО ТО Ошибка              
 ИНАЧЕ СТОЯТЬ                          
 ВЛЕВО                                 
КОНЕЦ                                  
                                       
ЭТО Проверка1
  { ВНИЗ ВПРАВО ВВЕРХ }                
 ЕСЛИ ЦИФРА ТО                         
 Проверка    ИНАЧЕ
 ЕСЛИ и ТО Проверка
 ИНАЧЕ Ошибка                          
КОНЕЦ //

ЭТО Проверка2                                 
  { ВНИЗ ВПРАВО ВВЕРХ }
 ЕСЛИ к ТО Проверка1  ИНАЧЕ                   
 ЕСЛИ м ТО Проверка1  ИНАЧЕ Ошибка           
КОНЕЦ //
                                       
комментарий  куратора
- - - - - - - - - - -

Ошибка в описание алгоритма:
----
или буква. Если буква "е" то после нее может быть только "к" или "м",
а после них может быть только цифры или буква "и"
----

После "к" и "м", то есть, после условия, по определению 2 должна стоять
команда. Условная команда -- это команда, значит после "к" и "м" опять
может идти "е"! Без диаграммы очень легко запутаться!

В результате программа выдает ошибку, например, на совершенно верную
запись: "екем3".

Команда 3109
------------
.\09\09.txt
Оценка: 0

Команда 3110
------------
.\10\10.txt
.\10\1051.coc
Оценка: 4

диаграмма переходов
- - - - - - - - - -
           остальное
    ┌───────────────────────────────> ( О Ш И Б К А )
    │                      остальное  ^   ^ ^ ^ ^
    │      пусто              ┌────────┘   │ │ │ │
┌───┼──┐ ┌────────────────────┼────────────┼─┼─┼─┼────────>(ответ)
│   │  V │      цифра         │            │ │ │ │
│ (простая)< ─────────── (ПРОГРАММА)       │ │ │ │
│цифра││││                │  остальное     │ │ │ │
├─────┘││└────────────────┼────────────────┼─┼─┼─┘
│      │└─────┐ ┌─────────┘                │ │ │
│ пусто│      │ │ ┌─────────────┐          │ │ │
│             │ │ │             │          │ │ │
│      │    V V V V             │          │ │ │
│      │  (условная?)           │          │ │ │
│      │       │  │             │ остальное│ │ │
│      │       │к └─────────────┼──────────┘ │ │
│      V       │                │            │ │
│  (ответ)     V                │            │ │
│         (условная?)           │            │ │
│              │  │             │  остальное │ │
│              │  └─────────────┼────────────┘ │
│              │цифра           │              │
│              │ ┌────────┐     │              │
│              V V        │     │              │
│          (условная)     │     │              │
│     и    │ │ │ ││цифра  │     │              │
│   ┌──────┘ │ │e│└───────┘     │              │
│   │        │ └─┼──────────────┘   остальное  │
│   │        V   └─────────────────────────────┘
│   │     (ответ)
│   │
│   │
│   │
│   V
│(полная?)
│    │ │   остальное
│    │е└───────────────  >   О
│    V
│(полная?) остальное         Ш
│    │ ───────────────── >
│    │ к/м                   И
│    V
│(полная)                    Б
│    │ │   остальное
└────┘ └─────────────────>   К
 цифра                       А

Может быть некоторые неточности в связи с
переносом диаграммы на экран.

программа
- - - - -
ЭТО ПРОГРАММА
ШАГ                                    
ЕСЛИ 1 ТО ПРОСТАЯ                      
ИНАЧЕ ЕСЛИ 2 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 3 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 4 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 5 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 6 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 7 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 8 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 9 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ е ТО УСЛОВНАЯ
ИНАЧЕ ОШИБКА                           
КОНЕЦ                                  
ЭТО ПРОСТАЯ
ШАГ
ЕСЛИ 1 ТО ПРОСТАЯ                      
ИНАЧЕ ЕСЛИ 2 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 3 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 4 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 5 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 6 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 7 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 8 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 9 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ е ТО УСЛОВНАЯ               
ИНАЧЕ ЕСЛИ и ТО ПРОГРАММА              
ИНАЧЕ ЕСЛИ ПУСТО ТО ОТВЕТ
ИНАЧЕ ОШИБКА
КОНЕЦ
ЭТО УСЛОВНАЯ
ШАГ
ЕСЛИ к ТО УСЛОВИЕ
ИНАЧЕ ЕСЛИ м ТО УСЛОВИЕ
 ИНАЧЕ ОШИБКА                          
КОНЕЦ                                  
ЭТО УСЛОВИЕ
ШАГ
ЕСЛИ 1 ТО ПРОСТАЯ                      
ИНАЧЕ ЕСЛИ 2 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 3 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 4 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 5 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 6 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 7 ТО ПРОСТАЯ
ИНАЧЕ ЕСЛИ 8 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ 9 ТО ПРОСТАЯ                
ИНАЧЕ ЕСЛИ е ТО УСЛОВИЕ                
ИНАЧЕ ЕСЛИ и ТО ПРОГРАММА              
ИНАЧЕ ОШИБКА
КОНЕЦ
ЭТО ОТВЕТ
ВВЕРХ                                  
КОНЕЦ
ЭТО ШАГ
ВНИЗ
ВПРАВО
ВВЕРХ                                  
КОНЕЦ
ЭТО ОШИБКА
ШАГ                                    
ЕСЛИ НЕ ПУСТО ТО ОШИБКА                
ВЛЕВО                                  
КОНЕЦ
                                       
комментарий  куратора
- - - - - - - - - - -

1) Программа не соответствует диаграмме.
                                       
2) Программа работает неверно. Напрмер, в верной записи "екем3"
выдается ошибочным четвертый символ.

Команда 3111
------------
.\11\11.txt
.\11\1151.coc
Оценка: 4
Автор: Воротынец Дима


диаграмма переходов
- - - - - - - - - -
                             -------             
 --------------------------->|Ответ|             
 ^              ^            -------             
 |              | Пусто
 |              |
 |           --------------    ост      --------
 |  ------->-|  Запись    |------------>|ошибка|
 |  ^        --------------      ^      --------
 |  |          |      | 0...9    |
 |  |          |е     |----------|-->-            
 |  |          v                 |   |
 |  |         -------------   ост|   |         
 |  | ------>-|  проверка  |---->|   |
 |  | ^       |   условия  |     ^   |         
 |  | |       --------------     |   |
 |  | |            |к, м         |   |         
 |  | |            |             |   |         
 |  | |            v             |   |
 |  | |       -------------  ост |   |         
 |  | |       | проверка1 |----->|   |         
 |  | |       -------------      ^   |
 |  | |         е| |0...9        |   |         
 |  | |-<------- | |             |   v         
 |  | ^            v    |-<----- |---         
 |  | |  пусто  --------v--  ост |            
 -<------------|проверить_и|---->|
 ^  | |        ------------      ^
 |  | |           |   |          |
 |  | |          е|   |          |
 |  |  -<---------|   | 0...9    |
 |  |                 v          |
 |  |          -----------   ост |            
 |  |         |  полная?  |----->|
 |  |          -----------                 
 |  |           е |   |
 |  |             v   |
 |   -<-----------|   v 0...9
 -<-------------------|                            
    
описание  алгоритма
- - - - - - - - - -
1.Проверяется первый символ. если цифра, то проверка выполняется
заново, если е, то проверяется условие.

2.За е нужно проверить "к" или "м".

3 Затем проверить цифру. После цифры нужно проверить полная ли
команда.

Так проверяются все символы, пока не станет пусто.


//-------------------------------------
// Это основная процедура в которой
//проверяются символы
                                       
ЭТО Запись                             
 Шаг
 ЕСЛИ 0 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 1 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 2 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 3 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 4 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 5 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 6 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 7 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 8 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 9 ТО Проверка_и
 ИНАЧЕ ЕСЛИ е ТО Проверка_условия      
 ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ
 ИНАЧЕ Ошибка
КОНЕЦ // Запись

// Эта процедура проверяет есть ли
// м или к после е
ЭТО Проверка_условия
 Шаг
 ЕСЛИ м ТО Проверка_1                  
 ИНАЧЕ ЕСЛИ к ТО Проверка_1            
 ИНАЧЕ Ошибка                          
КОНЕЦ // Проверка_условия
                                       
//Эта процедура служит для того чтобы  
//Кукарача дошел доконца слова и
//встал под прервый неверный символ    

ЭТО Ошибка
 ЕСЛИ НЕ ПУСТО                         
  ТО    Ошибка                         
 ВЛЕВО
КОНЕЦ // Ошибка                        

//Эта процедура служит для того чтобы
// Кукарача перешел к следующему
//символу

ЭТО Шаг
 ВНИЗ                                  
 ВПРАВО
 ВВЕРХ                                 
КОНЕЦ // Шаг                           
                                       
//Эта процедура служит для того чтобы
//под следующий символ                 
                                       
ЭТО Шаг_1
 ВНИЗ                                  
 ВПРАВО
 ВВЕРХ
КОНЕЦ // Шаг_1                         
//-------------------------------------
// Проверяет символы за условием
ЭТО Проверка_1
 Шаг
 ЕСЛИ 0 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 1 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 2 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 3 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 4 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 5 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 6 ТО Проверка_и
 ИНАЧЕ ЕСЛИ 7 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 8 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ 9 ТО Проверка_и            
 ИНАЧЕ ЕСЛИ е ТО Проверка_условия
 ИНАЧЕ Ошибка                          
КОНЕЦ // Проверка_1                    
//-------------------------------------
// Проверяет и  после цифры,           
//
ЭТО Проверка_и
 Шаг                                   
 ЕСЛИ 0 ТО Запись                      
 ИНАЧЕ ЕСЛИ 1 ТО Запись
 ИНАЧЕ ЕСЛИ 2 ТО Запись                
 ИНАЧЕ ЕСЛИ 3 ТО Запись
 ИНАЧЕ ЕСЛИ 4 ТО Запись
 ИНАЧЕ ЕСЛИ 5 ТО Запись
 ИНАЧЕ ЕСЛИ 6 ТО Запись
 ИНАЧЕ ЕСЛИ 7 ТО Запись
 ИНАЧЕ ЕСЛИ 8 ТО Запись
 ИНАЧЕ ЕСЛИ 9 ТО Запись                
 ИНАЧЕ ЕСЛИ е ТО Проверка_условия
 ИНАЧЕ ЕСЛИ и ТО Полная?               
 ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ             
 ИНАЧЕ Ошибка                          
КОНЕЦ //  Проверка_и
                                       
                                       
//-------------------------------------
// После и проверка следующего символа.
ЭТО Полная?
 Шаг
 ЕСЛИ 0 ТО Запись                      
 ИНАЧЕ ЕСЛИ 1 ТО Запись                
 ИНАЧЕ ЕСЛИ 2 ТО Запись
 ИНАЧЕ ЕСЛИ 3 ТО Запись                
 ИНАЧЕ ЕСЛИ 4 ТО Запись
 ИНАЧЕ ЕСЛИ 5 ТО Запись
 ИНАЧЕ ЕСЛИ 6 ТО Запись
 ИНАЧЕ ЕСЛИ 7 ТО Запись
 ИНАЧЕ ЕСЛИ 8 ТО Запись
 ИНАЧЕ ЕСЛИ 9 ТО Запись
 ИНАЧЕ ЕСЛИ е ТО Проверка_условия      
 ИНАЧЕ ЕСЛИ ПУСТО ТО ВВЕРХ
 ИНАЧЕ Ошибка
КОНЕЦ // Полная?                       

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

1) В описание алгоритма ошибка, которой нет в диаграмме:

-------
2.За е нужно проверить "к" или "м".

3. Затем проверить цифру. После цифры нужно проверить полная ли
команда.
-------

После "к" и "м" может снова идти "е".

2) Запись типа "1и" ошибочно считается верной.

3) Ваша программа допускает после "и" пустые команды.


4) В процедуре "ошибка" -- ошибка: бесконечная рекурсия.


Команда 3112
------------
.\12\12.txt
Оценка: 1
Автор: Борисов Саша

Мы составили только лексический анализатор

                   программа                  ошибка
                      ^                        ^  ^
                      │                        │  │
                      │                        │  │остальное
                      │    остальное           │  │
                      │  ┌─────────────────────┘  │
                      │  │                        │
                      │  │                        │
                      │  │    простая             │
         ┌──────>(команда) <───────────────────(вход)
         │        │ │  ^^
         │        │ │  │└─────────────────┐
         │простая │ │  └────────┐         │
         └────────┘ │е          │         │
                    │сокращенная│         │
                    │           │         │
                    V           │         │
             (сокращенная?)     │         │
              │     │           │         │полная
              │     │           │         │
              │     │условие    │         │
    остальное │     │    простая│         │
              │     │    ┌──────┘         │
              │     V    │   полная       │       остальное
              V  (условная?)─────────>(полная?)──────────>
           ошибка   │                              ошибка
                    │остальное
                    V
                  ошибка

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

Знаете почему у Вас не получилась программа? Потому, что Вы не знали
как ее записать исходя из диаграммы. А причина в том, что в диаграмме
на переходах указаны не обычные символы, а метасимволы "простая",
"полная". Ведь не понятно, как это программировать, правда?
