Задача 6 (6 баллов)

Определение 3
-------------
<текст>       := <слово>.|<слово><разделитель><текст>
<разделитель> := _|,
<слово>       := <буква>|<слово><буква>
<буква>       := а|м

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

Решение куратора
-----------------
                         остальное
                   (вход)───────────────>(ошибка)<───────────┐
                     ^  │                 ------             │
                     │  │а м                                 │
                  _ ,│  │                                    │
                     │  V   .                    остальное   │
(ошибка)<──────────(слово)──────────────>(текст?)────────────┘
 ------  остальное   │  ^                  │
                     │  │а м               │ПУСТО
                     └──┘                  │
                                           V
                                        (текст)

ЭТО вход
  шаг                                  
  ЕСЛИ       а  ТО слово               
  ИНАЧЕ ЕСЛИ м  ТО слово               
  ИНАЧЕ            ошибка              
КОНЕЦ

ЭТО слово
  шаг
  ЕСЛИ       а  ТО слово
  ИНАЧЕ ЕСЛИ м  ТО слово               
  ИНАЧЕ ЕСЛИ _  ТО вход
  ИНАЧЕ ЕСЛИ ,  ТО вход
  ИНАЧЕ ЕСЛИ .  ТО текст?              
  ИНАЧЕ            ошибка
КОНЕЦ                                  
                                       
ЭТО текст?
  шаг
  ЕСЛИ  ПУСТО ТО текст                 
  ИНАЧЕ          ошибка                
КОНЕЦ

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

                                * * *


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

диаграмма переходов
- - - - - - - - - -
                   ┌─────────┐               ┌─────────┐
                   │  Текст  ├─все остальное─>  Ошибка │
              ┌────>         │               │         │
              _    └────┬────┘               └──^────^─┘
              ,         а                       │    │
              └────┐    м                       │    │
                  ┌┴────v─────┐                 │    │
           ┌──а─м─>   Слово   ├──все остальное──┘    │
           │      └┬────┬─────┘                      │
           │       │    .                            │
           └───────┘    │                            │
┌─────┐             ┌───v───┐                        │
│ Да! <────пусто────┤ Точка ├────все остальное───────┘
└─────┘             └───────┘



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

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

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

Диаграмма, с точностью до обозначений, повторяет диаграмму куратора.

Замечание о форме записи:

ЭТО Слово
 Шаг                                   
 ЕСЛИ а                                
  ТО Слово                             
  ИНАЧЕ ЕСЛИ м                         
         ТО Слово                      
         ИНАЧЕ ЕСЛИ .
                ТО Точка               
                ИНАЧЕ ЕСЛИ _           
                       ТО Текст
                       ИНАЧЕ ЕСЛИ ,
                              ТО Текст
                           ИНАЧЕ Ошибка
КОНЕЦ //Слово                          

Запись абсолютно верная и структурные отступы очень точно отражают
алгоритм выполнения всей конструкции.

Однако запись:

ЭТО Слово
 Шаг                                   
 ЕСЛИ       а ТО Слово
 ИНАЧЕ ЕСЛИ м ТО Слово
 ИНАЧЕ ЕСЛИ . ТО Точка
 ИНАЧЕ ЕСЛИ _ ТО Текст
 ИНАЧЕ ЕСЛИ , ТО Текст
 ИНАЧЕ           Ошибка
КОНЕЦ //Слово

кажется более продуктивной по следующим причинам:

1) Ограниченное программное поле Кукарачи (да и любое другое) не
позволяет строить лесенку так, чтобы она вся помещалась на экране.

2) Для переключения в языках программирования существует специальная
команда switch, которая записывается не лесенкой:
   switch (выражение)
   {
     case значение1:
                    команды
                    break;

     case значение2:
                    команды
                    break;
     ....

     case значениеN:
                    команды
                    break;
     default:
                    команды

   }

В языке Кукарачи нет такой команды и мы моделируем ее при помощи
ИНАЧЕ ЕСЛИ
В каком то смысле можно рассматривать это построение как особую
языковую конструкцию и записывать подобно switch.

3) В рекомендуемой записи гораздо легче увидить переключение, так как
просходит вертикальное выравнивание:

 ЕСЛИ       а ТО Слово
 ИНАЧЕ ЕСЛИ м ТО Слово
 ИНАЧЕ ЕСЛИ . ТО Точка
 ИНАЧЕ ЕСЛИ _ ТО Текст
 ИНАЧЕ ЕСЛИ , ТО Текст
 ИНАЧЕ           Ошибка
            │    │
            │    │
            │    │
     уровень     уровень
     условий     команд

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

диаграмма переходов
- - - - - - - - - -

           остальное
  (ошибка)<────────(вход)
                     │
              <буква>│  ┌─────────┐
           остальное v  v <буква> │
  (ошибка)<────────<слово>────────┘
              .    │    │
  (ответ) <────────┘    │<разделитель>
                        │
            остальное   v
  (ошибка)<──────────<текст?> <───────────┐
                        │                 │
                        │<буква>          │
            остальное   v    <разделитель>│
  (ошибка)<──────────<текст?>─────────────┘
                     │  ^  │
             <буква> │  │  │.
                     │  │  │
                     └──┘  v
                        (ответ)


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

ЭТО ПР_е //Проверяет наличие "е".
 ЕСЛИ е ТО ПР_к                        
        ИНАЧЕ ПР_других
КОНЕЦ

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

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

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

ЭТО ПР_полная // Является ли "условная"
              // "полной".             
 ЕСЛИ и ТО Полная                      
        ИНАЧЕ ПР_е
КОНЕЦ                                  

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

ЭТО РАЗД_ЛЬ //С _ не может начинаться.
 ЕСЛИ _ ТО Финиш                       
        ИНАЧЕ ДАЛЬШЕ
КОНЕЦ                                  

ЭТО ДАЛЬШЕ  // Текст может начинаться с
            // буквы "а".              
 ЕСЛИ а ТО ТЕКСТ                       
        ИНАЧЕ ДАЛЬШЕ_1                 
КОНЕЦ
                                       
ЭТО ДАЛЬШЕ_1 // Текст может начинаться
             // с буквы "м".
 ЕСЛИ м ТО ТЕКСТ
        ИНАЧЕ Финиш                    
КОНЕЦ                                  

ЭТО ТЕКСТ // Заканчивается ли текст в
          // следующей клетке.         
 ВВЕРХ ВПРАВО ВНИЗ
 ЕСЛИ НЕ . ТО ПРОДОЛЖИ
           ИНАЧЕ { ВПРАВО ВНИЗ
                  }                    
КОНЕЦ                                  

ЭТО ПРОДОЛЖИ //К тексту добавлен символ
 ЕСЛИ а ТО ТЕКСТ
        ИНАЧЕ ПР_м                     
КОНЕЦ                                  
                                       
ЭТО ПР_м
 ЕСЛИ м ТО ТЕКСТ
        ИНАЧЕ ПР_зап                   
КОНЕЦ

ЭТО ПР_зап
 ЕСЛИ , ТО ШАГ                         
        ИНАЧЕ ПР_разд                  
КОНЕЦ

ЭТО ПР_разд
 ЕСЛИ _ ТО ШАГ
        ИНАЧЕ Финиш
КОНЕЦ
                                       
ЭТО ШАГ   //Что идет после разделителя.
 ВВЕРХ ВПРАВО ВНИЗ
 ЕСЛИ ПУСТО ТО {  //Ошибка: после раз- 
                  //делителя пусто.
                ПОВТОРИ 2 ВНИЗ         
                ВЛЕВО                  
                }                      
            ИНАЧЕ ПР_точка             
КОНЕЦ
                                       
ЭТО ПР_точка
 ЕСЛИ . ТО Финиш_1    //Точка после
                      //разделителя
        ИНАЧЕ ДАЛЬШЕ                   
КОНЕЦ                                  

ЭТО Финиш_1
 Финиш                                 
 ВЛЕВО
КОНЕЦ

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

комментарий  куратора
- - - - - - - - - - -
1) Диаграмма содержит ошибку:

- в состояние "ответ" алгоритм должен попадать не по символу ".", а по
символу ПУСТО.

2) Диаграмма содержит лишние состояния и проверки.

3) Программа содержит 25 процедур, что никак не может соответствовать
диаграмме.

4) И все же, программа записывалась точно по диаграмме, потому что
когда точка попадается внутри записи, работа идет неправильно, что
точно соответствует диаграмме. Пример "а.м".

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

программа
- - - - -
//-------------------------------------
ЭТО Задача6
 Слово
КОНЕЦ
//-------------------------------------
ЭТО Смещение
  ВНИЗ
  ВПРАВО
  ВВЕРХ
КОНЕЦ
//-------------------------------------
ЭТО Ошибка
  СТОЯТЬ
КОНЕЦ
//-------------------------------------
ЭТО Слово
 Смещение
 ЕСЛИ а
 ТО Слово1
 ИНАЧЕ ЕСЛИ м
       ТО Слово1
       ИНАЧЕ Ошибка
КОНЕЦ
//-------------------------------------
ЭТО Слово1
 Смещение
 ЕСЛИ а
 ТО Слово1
 ИНАЧЕ ЕСЛИ м
       ТО Слово1
       ИНАЧЕ ЕСЛИ .
             ТО
               {
                Смещение
                ВВЕРХ
               }
              ИНАЧЕ ЕСЛИ _
                    ТО Слово
                    ИНАЧЕ ЕСЛИ ,
                          ТО Слово
                          ИНАЧЕ Ошибка
КОНЕЦ

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

1) Нет диаграммы.

2) Программа опровергается тестом: "а.м"

3) Не происходит выравнивания записи при обнаружении ошибки.

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

диаграмма переходов

                 остальное                 а/м
      (ошибка)<--------------(  вход  )------------>(  условие_буква  )
       ^  ^                                           │  │  ^  │  │  ^  
       │  │                остальное                  │  │  │  │  │  │ 
       │  +-------------------------------------------+  │  │  │  │  │
       │                                                 │  │  │  │  │ 
       │    остальное                             а/м    │  │  │  │  │ 
       +------------------------(условие_слово)<---------+  │  │  │  │
                                   │  │  │  │               │  │  │  │
                  остальное        │  │  │  │               │  │  │  │ 
        (ошибка)<------------------+  │  │  │   а/м         │  │  │  │
                                 ,/_  │  .  +---------------+  │  │  │
              (условие_раздел)<-------+  │                     .  │  │ 
                                         V                     │  │  │
                                    (условие_точка)<-----------+  │  │
                                     │        │                   │  │
                                     │        │                  ,/_ │
                           остальное │        │ пусто             │  │
                          +----------+        +--------->(вверх)  │  │
                          │                                       │  │
                          │         (условие_раздел)<-------------+  │
                          │                │     │                   │  
                          │                │     │                   │
                          V     остальное  │     │      а/м          │  
                      (ошибка)<------------+     +-------------------+
                                                                    
ПРОГРАММА:

ЭТО ВХОД                               
ШАГ                                    
ЕСЛИ а ТО          УСЛОВИЕ_БУКВА
   ИНАЧЕ ЕСЛИ м ТО УСЛОВИЕ_БУКВА       
   ИНАЧЕ           ОШИБКА              
КОНЕЦ                                  
                                       
ЭТО УСЛОВИЕ_БУКВА
ШАГ
ЕСЛИ . ТО          УСЛОВИЕ_ТОЧКА       
   ИНАЧЕ ЕСЛИ _ ТО УСЛОВИЕ_РАЗДЕЛ
   ИНАЧЕ ЕСЛИ , ТО УСЛОВИЕ_РАЗДЕЛ      
   ИНАЧЕ ЕСЛИ а ТО УСЛОВИЕ_СЛОВО
   ИНАЧЕ ЕСЛИ м ТО УСЛОВИЕ_СЛОВО       
   ИНАЧЕ ОШИБКА
КОНЕЦ                                  

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

ЭТО УСЛОВИЕ_СЛОВО                      
ШАГ
ЕСЛИ а          ТО УСЛОВИЕ_БУКВА                
   ИНАЧЕ ЕСЛИ м ТО УСЛОВИЕ_БУКВА       
   ИНАЧЕ ЕСЛИ _ ТО УСЛОВИЕ_РАЗДЕЛ      
   ИНАЧЕ ЕСЛИ , ТО УСЛОВИЕ_РАЗДЕЛ      
   ИНАЧЕ ЕСЛИ . ТО УСЛОВИЕ_ТОЧКА
   ИНАЧЕ ОШИБКА
КОНЕЦ                                  

ЭТО УСЛОВИЕ_РАЗДЕЛ                     
ШАГ
ЕСЛИ а          ТО УСЛОВИЕ_БУКВА                
   ИНАЧЕ ЕСЛИ м ТО УСЛОВИЕ_БУКВА
   ИНАЧЕ           ОШИБКА                        
КОНЕЦ
                                       
ЭТО ОШИБКА                             
ШАГ                                    
ЕСЛИ НЕ ПУСТО ТО ОШИБКА                
ВЛЕВО                                  
КОНЕЦ
                                       
ЭТО ШАГ
ВНИЗ                                   
ВПРАВО                                 
ВВЕРХ                                  
КОНЕЦ

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

1) В диаграмме слишком много разных состояний.
2) В программе нет структурных отступов.
3) Имена процедур, написанные заглавными буквами.
4) Программа работает правильно.

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

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

      ┌────────────────┐
      │  ┌───────────┐ │
      │  │           V V
      б  └──буква───(Буква ?)<───буква────(Вход)
      у              │ │  │                 │
      к              р т  и                 и
      в              а о  н                 н
      а              з ч  а                 а
      │              д к  ч                 ч
      │              е а  е                 е
    (Дальше_С_,)     л │  │                 │
      │  ^           и │  │                 │
      и  │           т │  │                 │
      н  │           е │  │                 V
      а  │           л │  └────────────>(Ошибка)
      ч  │           ь │                    ^
      е  │           │ │                    │
      │  └───────────┘ │                    │
      V                │                    │
   (Ошибка)            │                    │
                       V                    │
   (ТЕКСТ)<──пусто─(Проверь_точку)───иначе──┘

программа
- - - - -
ЭТО Вход
 Шаг      //К следующему символу
 ЕСЛИ а ТО Буква?                      
 ИНАЧЕ ЕСЛИ м ТО Буква?
 ИНАЧЕ Ошибка                          
КОНЕЦ                                  
                                       
ЭТО Шаг
 ВНИЗ                                  
 ВПРАВО
 ВВЕРХ
КОНЕЦ                                  
                                       
ЭТО Буква?                             
 Шаг
        ЕСЛИ а ТО Буква?
 ИНАЧЕ  ЕСЛИ м ТО Буква?               
 ИНАЧЕ  ЕСЛИ _ ТО Дальше_С_,           
 ИНАЧЕ  ЕСЛИ , ТО Дальше_С_,           
 ИНАЧЕ  ЕСЛИ . ТО Проверь_Точку        
 ИНАЧЕ  Ошибка
КОНЕЦ                                  
                                       
ЭТО Проверь_Точку
 Шаг                                   
 ЕСЛИ ПУСТО
  ТО    ТЕКСТ                          
  ИНАЧЕ Ошибка                         
КОНЕЦ                                  

ЭТО Дальше_С_,                         
 Шаг
        ЕСЛИ а ТО Буква?
 ИНАЧЕ  ЕСЛИ м ТО Буква?               
 ИНАЧЕ  Ошибка                         
КОНЕЦ                                  

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

ЭТО ТЕКСТ                              
 ВВЕРХ                                 
КОНЕЦ
                                       
комментарий  куратора
- - - - - - - - - - -

1) Без состояния (Дальше_С_,) можно было вполне обойтись.
2) Программа работает правильно.

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

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

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


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

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

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

1) Нет диаграммы переходов.
2) Программа опровергается следующими тестами:

"_м."  - программа считает эту запись правильной
",м."  - программа считает эту запись правильной
"м"    - программа считает эту запись правильной

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

Команда 3110
------------
Оценка: 3
.\10\10.txt
.\10\1061.coc
Автор: Щукин Максим, 7 класс

диаграмма переходов
- - - - - - - - - -

      (ответ)        (ошибка)
          ^              ^
          │              │
    точка │              │ остальное
    (.)   │              │
          │       буква  │
          │┌──────────(вход)
 ┌───────┐││буква  а\м
 │       │││
 │       V│V
 │     (слово)
 │       │ │
 │       │ │    разделитель
 │ буква │ │   _  ,
 └───────┘ │
           │
           V       остальное
       (слово?)────────────>(ошибка)
           │
 буква     │
┌───────┐  │буква
│       │  │
│       V  V      остальное
└──── (слово)  ───────────>(ошибка)
           │
           │ точка
           │  (.)
           V
       (ответ)

   Схема показывает состояния алгоритма (они обозначены  словами
в круглых скобках) и переходы  алгоритма  из  одного состояния в
другое (они изображены стрелками) в зависимости от значения оче-
редного символа  входной  записи  (символы  обозначены на стрел-
ках-переходах).
   Рассмотрим схему в динамике работы алгоритма.
   В начальный момент алгоритм находится в состоянии (вход).
   Любой очередной символ в этом состоянии,  кроме символа "буква",
 приводит к переходу в состояние (ошибка).
   Если все же,  в  состоянии (вход) очередным символом является
"буква"(буква может быть только а или м),
алгоритм переходит в состояние (слово?).
   Какой символ допустим в этом состоянии? Из определения следу-
ет, что таких допустимых символов три:
   "буква" - алгоритм остается в состоянии (слово);
   точка- ответ
   разделитель -алгоритм переходит в состояние (слово?)

   Любой другой символ приводит к переходу в состояние (ошибка).
   Состояние (слово?) вводится дополнительно к состоянию (слово)
для того, чтобы расценить запись, завершающуюся "_" или "," как
ошибочную.
   Состояние (слово) обрабатывает очередной символ следующим об-
разом:
   "буква" - алгоритм остается в состоянии (слово);
   "точка" - алгоритм переходит в состояние (ответ);
   любой другой символ - алгоритм переходит в состояние (ошибка).

программа
- - - - -
ЭТО ТЕКСТ
ШАГ
ЕСЛИ а ТО СЛОВО
ИНАЧЕ ЕСЛИ м ТО СЛОВО                  
ИНАЧЕ ОШИБКА                           
КОНЕЦ
ЭТО СЛОВО                              
ШАГ
ЕСЛИ а ТО СЛОВО
ИНАЧЕ ЕСЛИ м ТО СЛОВО
ИНАЧЕ ЕСЛИ . ТО ОТВЕТ1                 
ИНАЧЕ ЕСЛИ _ ТО СЛОВО1                 
ИНАЧЕ ЕСЛИ , ТО СЛОВО1                 
ИНАЧЕ ЕСЛИ ПУСТО ТО ОТВЕТ              
ИНАЧЕ ОШИБКА                           
КОНЕЦ                                  
ЭТО СЛОВО1
ШАГ                                    
ЕСЛИ а ТО СЛОВО                        
ИНАЧЕ ЕСЛИ м ТО СЛОВО                  
ИНАЧЕ ОШИБКА
КОНЕЦ                                  

ЭТО ОТВЕТ1
ШАГ
ЕСЛИ НЕ ПУСТО ТО ОШИБКА                
КОНЕЦ                                  
ЭТО ОТВЕТ
ВВЕРХ                                  
КОНЕЦ

ЭТО ОШИБКА
 ШАГ                                   
 ЕСЛИ НЕ ПУСТО ТО ОШИБКА               
ВЛЕВО                                  
КОНЕЦ                                  
ЭТО ШАГ
ВНИЗ                                   
ВПРАВО
ВВЕРХ
КОНЕЦ                                  

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

1) В программе нет структурных отступов, пустых строк между
процедурами.

2) Имена процедур записаны заглавными буквами.

3) Программа считает записи без точки на конце правильными,
а пустую клетку за точкой воспринимает как ошибку.

Команда 3111
------------
Оценка: 5.5
.\11\11.txt
Автор: Лосев Вова

диаграмма переходов
- - - - - - - - - -
         ________
        |Проверка|
        |________|
            |а м
            |
          __v______  остальное      ______
 |------>|Проверка2|--------------->|Ошибка|
 |       |_________|------>-|       |______|
 |     а м|  .|         _ , |         ^
 |<-------|   |             |         |
 ^  __________v_____    ост.|         |
 | |    Проверка4   |-------|-------->|
 | |________________|       |         ^остальное
 |   пусто |           _____v______   |
 |      ___v___       |Проверка3   |-->
 |     | Ответ |      |____________|
 |     |_______|          |
 |                     а м|
 |----<-------------------|

описание  алгоритма
- - - - - - - - - -
1.Проверяет по порядку символы.

2.Если встречает разделители, то проверяет следующий символ, если
встречает точку, то проверяет, конец ли текста?

3.Если пусто, то - ответ.

программа
- - - - -
// Проверяет первый символ
ЭТО Проверка                           
  Шаг                                  
  ЕСЛИ а   ТО  Проверка2               
  ИНАЧЕ  ЕСЛИ м     ТО    Проверка2    
  ИНАЧЕ Ошибка
КОНЕЦ // Проверка                      
//-------------------------------------
// Проверяет слово?, ищет  разделители 
// и точку.
                                       
ЭТО Проверка2                          
  Шаг
  ЕСЛИ        а     ТО    Проверка2
  ИНАЧЕ  ЕСЛИ м     ТО    Проверка2    
  ИНАЧЕ  ЕСЛИ ,     ТО    Проверка3
  ИНАЧЕ  ЕСЛИ _     ТО    Проверка3
  ИНАЧЕ  ЕСЛИ .     ТО     Проверка4   
  ИНАЧЕ  Ошибка                        
КОНЕЦ // Проверка2
//-------------------------------------
// Проверяет символ за разделителем    

ЭТО Проверка3                          
  Шаг                                  
  ЕСЛИ       а    ТО    Проверка2      
  ИНАЧЕ ЕСЛИ м    ТО Проверка2         
  ИНАЧЕ Ошибка
КОНЕЦ // Проверка3                     
//-------------------------------------
// Выравнивает всю запись и ставит     
// Кукарачу под неверный символ
                                       
ЭТО Ошибка                             
 Шаг
 ЕСЛИ НЕ ПУСТО
  ТО    Ошибка                         
 ВЛЕВО
КОНЕЦ // Ошибка
//-------------------------------------
// Проверяет конец текста              

ЭТО Проверка4                          
 Шаг                                   
 ЕСЛИ ПУСТО
  ТО    ВВЕРХ                          
  ИНАЧЕ Ошибка                         
                                       
КОНЕЦ //  Проверка4                    
//-------------------------------------
// Переходит к следующему символу      
ЭТО Шаг                                
 ВНИЗ                                  
 ВПРАВО
 ВВЕРХ                                 
КОНЕЦ // Шаг                           

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

1) На диаграмме есть лишние состояния; обозначение состояний не несет
смысловой нагрузки.

2) Программа работает правильно.

Команда 3112
------------
Оценка: 5.5
.\12\12.txt
Авторы: Наськина Наташа, Барщевская Надя

диаграмма переходов
- - - - - - - - - -

     (ответ_текст)    (ошибка)
          ^             ^ ^
          │  остальное  │ │
    точка │ ┌───────────┘ │ остальное
          │ │             │
          │ │     буква   │
  ┌──── (слово) <───────(вход)
  │      ^^│ │            │
  │      │││ │            │
  │буква │││ │ разделитель│
  └──────┘││ │    ┌───────┘
          ││ │    │
 ┌────────┘V V    V
 │     (разделитель?)────────────>(ошибка)
 │ буква   │           остальное
 └─────────┘

Данная задача решилась достаточно легко. Это как бы буквенная версия
числовой задачи из статьи "Транслятор?... Это очень просто!", глава
"Лексический анализ выражений".

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

//-------------------------------------
// описание
ЭТО вход
  шаг
  ЕСЛИ а ТО слово           ───────────────┐
  ИНАЧЕ ЕСЛИ м ТО слово                    │
  ИНАЧЕ ошибка           ──────────────────┼─┐
КОНЕЦ // Имя                               │ │
//-------------------------------------    │ │
// описание                                │ │
ЭТО слово              <───────────────────┘<┼─────┐<─┐
  шаг                                        │     │  │
  ЕСЛИ . ТО ответ_текст    ──────────────────┼─────┼──┼┐
  ИНАЧЕ ЕСЛИ а ТО слово    ──────────────────┼─────┘  ││
  ИНАЧЕ ЕСЛИ м ТО слово                      │        ││
  ИНАЧЕ ЕСЛИ _ ТО разделитель?  ──────────┐  │        ││
  ИНАЧЕ ЕСЛИ , ТО разделитель?            │  │        ││
  ИНАЧЕ ошибка                            │  │        ││
КОНЕЦ // Имя                              │  │        ││
//-------------------------------------   │  │        ││
// описание                               │  │        ││
ЭТО разделитель?          <───────────────┘  │        ││
  шаг                                        │        ││
  ЕСЛИ а ТО слово          ──────────────────┼────────┘│
  ИНАЧЕ ЕСЛИ м ТО слово                      │         │
  ИНАЧЕ ЕСЛИ ПУСТО ТО ошибка                 │         │
  ИНАЧЕ ошибка               ────────────────┼─────┐   │
КОНЕЦ // Имя                                 │     │   │
//-------------------------------------      │     │   │
// описание                                  │     │   │
ЭТО ошибка                <──────────────────┘<────┘<─┐│
  шаг                                                 ││
  ЕСЛИ НЕ ПУСТО ТО ошибка   ──────────────────────────┘│
  ВЛЕВО                                                │
КОНЕЦ // Имя                                           │
//-------------------------------------                │
// описание                                            │
ЭТО ответ_текст           <────────────────────────────┘
  ВПРАВО ВВЕРХ
КОНЕЦ // Имя
//-------------------------------------
// описание
ЭТО шаг
  ВНИЗ ВПРАВО ВВЕРХ
КОНЕЦ // Имя

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

1) Без состояния "разделитель?" можно обойтись, используя вместо него
существующие состояние "вход".

2) Первая строка из двух:
  ИНАЧЕ ЕСЛИ ПУСТО ТО ошибка                 │         │
  ИНАЧЕ ошибка               ────────────────┼─────┐   │

явно лишняя.

3) Программа работает правильно.
