Задача 8 (30 баллов)
--------
Построим в среде Корректора вычислительную машину Малыш.

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

Будем считать, что в алфавите Корректора:

ПУСТО 0 1 2 3 4 5 6 7 8 9 а б в г д е ж з и й к л
м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я   - + / *
= < > ( ) [ ] { } . , ! ? ; : ' " # | $ % ~ @

символы пронумерованы, начиная с символа "0", а символ ПУСТО занимает
особое положение и номера не имеет.

Символ "0" имеет  номер 0
Символ "1" имеет  номер 1
....
Символ "9" имеет  номер 9
Символ "а" имеет  номер 10
Символ "б" имеет  номер 11
Символ "в" имеет  номер 12
....


Система команд Малыша
---------------------

Каждая команда занимает две клетки на ленте Корректора.

┌─┬─┐
│з│z│ записать символ z в ящик  (я:=z)
└─┴─┘
┌─┬─┐
│+│z│ сложить содержимое ящика с символом z (я:=я+z)
└─┴─┘
Сложение работает так: складываются порядковые номера символов и
результатом является символ с результирующим порядковым номером в
алфавите Корректора. Например:
8+4=в
а+а=к

┌─┬─┐
│-│z│ вычесть из содержимого ящика символ z (я:=я-z)
└─┴─┘

Вычитание работает так: результатом является символ, порядковый номер
которого равен разности порядковых номеров символов, участвующих в
операции. Например:
ю-ю=0
9-5=4
д-9=5

┌─┬─┐
│п│z│ Повторить выполнение следующей команды (повтори z)
└─┴─┘
Число повторов определяется порядковым номером символа "z" в алфавите
Корректора. В программе эта команда не может следовать подряд
несколько раз, то есть, программа, в которой, например, встречается
запись "п5п5" считается неверной.
Пример:

з2п2+3 -- в результате работы этой программы в ящике окажется символ "8".

┌─┬──────┐
│я│ПРОБЕЛ│ Повторить выполнение следующей команды столько раз,
└─┴──────┘ каков порядковый номер символа в ящике перед началом
           работы команды (повтори "я"). Эта команда также не может
           следовать в программе несколько раз подряд.

Пример:
з2я +3 -- в результате в ящике окажется символ "8".

Алгоритм выполнения программы
------------------------------
В начальный момент Малыш записывает в ящик символ "0", затем выполняет
программу последовательно слева направо. Когда выполнена последняя
команда, Малыш печатает через пустую клетку от программы содержимое
ящика в виде: символ=числовое значение. Например, если в ящике
оказался символ "в", Малыш напечатает:
в=12

АВОСТ
-----
При выполнении программы могут происходить аварийные ситуации, на
которые Малыш реагирует АВОСТом (аварийным остановом). При авосте
Малыш немедленно прекращает выполнение программы. Корректор выводит на
экран табло с сообщением "Не могу". Подумайте, когда у Малыша может
случиться авост? Подготовьте специальные тесты для проверки авоста.

Задание
-------
1) (7 баллов) Запишите определение программы для Малыша формулами
Бэкуса-Наура, нарисуйте синтаксическую диаграмму переходов для
построенного определения. Пустую ленту можно считать корректной
программой.

2) (4 баллов) Напишите программу синтаксического анализатора для
проверки правильности записи программы Малыша. Если в записи
обнаруживаются ошибка, Корректор пишет в конце программы Малыша слово
"ош" и устанавливает окошко на место обнаруженной ошибки, если ошибок
нет, окошко устанавливается перед началом программы Малыша.

3) (10 баллов) Напишите для Корректора программу-интерпретатор. Эта
программа должна читать с ленты Корректора программу Малыша и
выполнять ее. Если выполнение программы заканчивается без авоста,
Корректор должен справа от программы записать на ленту содержимое
ящика в виде: символ=числовое значение.

4) (1 балл) Объедините синтаксический анализатор и интерпретатор в
одну программу: сначала должен работать анализатор, затем, если ошибок
в записи программы нет -- интерпретатор. Какой ответ получит Малыш,
выполняя такую программу:

+2па+1

Проверьте ваш ответ на построенной модели.

5) (3 балла) Напишите для Малыша программы нижеприведенных задач,
затем проверьте их работу на построенной модели.

Вычислить:
    2
а) x + x, при x = 3, 4, 5

     2
б) 2x  + 1, при x = 3, 4, 5

    2
в) x  + 2x, при x = 5, 6, 7


6) (6 баллов) Придумайте для Малыша три новых задачи, напишите их
решение, проверьте работу полученных программ на построенном
трансляторе.

решение куратора
----------------

1) Определение Бекуса=Наура
~~~~~~~~~~~~~~~~~~~~~~~~~~~
программа ::= <пусто>|<команда>|<программа><команда>
<команда> ::= <простая команда>|<команда цикла>
<простая команда> ::= <код><символ>
<код> ::= з|+|-|
<команда цикла> ::= п<символ><простая команда>|я<пробел><простая команда>
<символ> ::= <любой символ алфавита кроме ПУСТО>
<пусто> ::= ПУСТО


2) Синтаксическая  диаграмма
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                символ          все остальное
                           ┌─────────────┐  ┌─────────────>(ошибка)
                           │             │  │
          ПУСТО            │       з + - V  │  ПУСТО
(ошибка)<───────(простая команда)<──────(вход)────────────>(программа)
                   ^                    │    │
                   │                    │п   │я
                   │                    │    │
                   │           ПУСТО    V    V     все остальное
                   │ (ошибка)<──────(цикл1)(цикл2)─────────────>(ошибка)
                   │                    │    │
                   │              символ│    │ПРОБЕЛ
                   │                    │    │
                   │                    └──┬─┘
                   │                       │
                   │                       │
                   │                       │
                   │                з + -  V    все остальное
                   └─────────────────────(вход1)─────────────>(ошибка)

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

4) Интерпретатор
~~~~~~~~~~~~~~~~                     Интерпретатор Малыша
ЭТО интерпретатор                   │
 подготовка                         │Подготовка к работе
 шаг                                │
 работа                             │Выполнение программы
                                    │
 ответ                              │Запись ответа.
КОНЕЦ                               │
                                    │
ЭТО подготовка                      │В ящик записывается цифра "0".
 ПИШИ 0                             │
 ОБМЕН                              │
 ПИШИ ПУСТО                         │
КОНЕЦ                               │
                                    │
ЭТО работа                          │
 ПОКА НЕ ПУСТО                      │Выполняем программу пока команды не
 {                                  │закончатся.
                                    │
   ЕСЛИ       з ТО                  │Переключение выполнения по коду
         { ВПРАВО запись }          │команды.
   ИНАЧЕ ЕСЛИ + ТО                  │
         { ВПРАВО сложение }        │
   ИНАЧЕ ЕСЛИ - ТО                  │
         { ВПРАВО вычитание }       │
   ИНАЧЕ ЕСЛИ п ТО                  │
           { ВПРАВО сохранить цикл }│
   ИНАЧЕ ЕСЛИ я ТО                  │
     { ВПРАВО ЯЩИК- сохранить цикл }│
                                    │
      шаг                           │Шаг к очередной команде.
 }                                  │
КОНЕЦ                               │
                                    │
                                    │
ЭТО запись                          │Команда:
 ЯЩИК+                              │┌─┬─┐
КОНЕЦ                               ││з│z│ я:=z
                                    │└─┴─┘
                                    │   ^
                                    │
                                    │
                                    │Команда:
ЭТО сложение                        │┌─┬─┐
 ПОКА НЕ 0                          ││+│z│ я:=я+z
 {                                  │└─┴─┘
   МИНУС                            │   ^
   ОБМЕН                            │ Пока z не 0
   ПЛЮС                             │ -- отнимаем от z один
   ОБМЕН                            │ -- прибавляем к ящику единицу
 }                                  │
КОНЕЦ                               │
                                    │
                                    │
                                    │Команда:
ЭТО вычитание                       │┌─┬─┐
 ПОКА НЕ 0                          ││-│z│ я:=я-z
 {                                  │└─┴─┘
   МИНУС                            │   ^
   ОБМЕН                            │ Пока z не 0
   МИНУС                            │ -- отнимаем от z один
   ОБМЕН                            │ -- отнимаем от ящика один
 }                                  │
КОНЕЦ                               │
                                    │
ЭТО сохранить                       │
 ВПРАВО ВПРАВО                      │┌─┬─┬───┬──────┐
 ОБМЕН                              ││п│z│код│символ│
 ВЛЕВО ВЛЕВО ВЛЕВО                  │└─┴─┴───┴──────┘
 ЯЩИК-                              │   ^
 ВПРАВО ВПРАВО ВПРАВО               │сохранить "символ" в "п"
 ОБМЕН                              │
 ВЛЕВО ВЛЕВО                        │
КОНЕЦ                               │
                                    │
ЭТО восстановить                    │Вспомогательная процедура для цикла:
 ВЛЕВО ВЛЕВО                        │
 ОБМЕН                              │┌─┬─┬───┬──────┐
 ВПРАВО ВПРАВО ВПРАВО               ││п│z│код│символ│
 ЯЩИК-                              │└─┴─┴───┴──────┘
 ВЛЕВО ВЛЕВО ВЛЕВО                  │      ^
 ОБМЕН                              │восстановить "символ" из "п"
 ВПРАВО ВПРАВО                      │
КОНЕЦ                               │
                                    │
                                    │
                                    │Команда
                                    │┌─┬─┬───┬──────┐
                                    ││п│z│код│символ│
                                    │└─┴─┴───┴──────┘
ЭТО цикл                            │   ^
 ПОКА НЕ 0                          │Пока z не равно 0:   ┌───┬──────┐
 {                                  │-- выполнять команду │код│символ│
                                    │                     └───┴──────┘
   МИНУС                            │уменьшаем z на один
   ВПРАВО                           │сдвигаемся на код команды
                                    │
   ЕСЛИ з ТО { ВПРАВО запись }      │Переключатель
   ИНАЧЕ ЕСЛИ +                     │
    ТО                              │
    {                               │
      восстановить                  │восстановить "символ" из "п"
      ВПРАВО                        │
      сложение                      │
    }                               │
   ИНАЧЕ ЕСЛИ -                     │
    ТО                              │
    {                               │
      восстановить                  │восстановить "символ" из "п"
      ВПРАВО                        │
      вычитание                     │
    }                               │
   ВЛЕВО ВЛЕВО                      │
 }                                  │
КОНЕЦ                               │
                                    │
ЭТО ответ                           │Запись результата вычислений
 ВПРАВО                             │на ленту.
 ЯЩИК-                              │
 ВПРАВО                             │
 ПИШИ =                             │
 ВПРАВО ВПРАВО                      │
                                    │
 ПИШИ 0                             │Запишем на ленту число ноль и будем
                                    │прибавлять к нему по единице (процедурой
 ОБМЕН                              │"плюс1"), одновременно заменяя символ в
 ПОКА НЕ 0                          │ящике на предыдущий по алфавиту
 {                                  │Корректора, пока в ящике не окажется
   МИНУС ОБМЕН                      │число ноль.
   плюс1                            │
   возврат                          │
   ОБМЕН                            │
 }                                  │
 ОБМЕН                              │
КОНЕЦ                               │
                                    │
ЭТО возврат                         │Перемещение окошка на младшую цифру
 ПОКА НЕ ПУСТО ВПРАВО               │формируемого числа.
 ВЛЕВО                              │
КОНЕЦ                               │
                                    │
ЭТО плюс1                           │Добавление к числу на ленте единицы.
 ПОКА 9                             │Окошко смотрит на младшую цифру числа.
 {                                  │
   ПИШИ 0                           │
   ВЛЕВО                            │
 }                                  │
 ЕСЛИ ПУСТО ТО ПИШИ 1               │
 ИНАЧЕ         ПЛЮС                 │
КОНЕЦ                               │



6) Программа:

+2па+1

работает так. Сначала к ящику (в котором ноль) добавляется 2.
Затем 10 раз к ящику добавляется единица. Ответ 12.

7) Возможны такие варианты:

    2
а) x + x, при x = 3, 4, 5

я := x                  │
повтори я  я := я + x   │ зxя +x



Программы записывается так:
з3я +3 (для x=3) Ответ: 12
з4я +4 (для x=4) Ответ: 20
з5я +5 (для x=5) Ответ: 30

     2
б) 2x  + 1, при x = 3, 4, 5

я := x                │
повтори я  я := я + x │
я := я-x              │
повтори я  я := я+1   │
я := я+1              │зxя +x-xя +1+1

Программы записывается так:
з3я +3-3я +1+1 (для x=3) Ответ: 19
з4я +4-4я +1+1 (для x=4) Ответ: 33
з5я +5-5я +1+1 (для x=5) Ответ: 51

    2
в) x  + 2x, при x = 4, 5,

                          5*5+2*5   =35
                          6*6+2*6   =48
                          7*7+2*7   =63


я := x                │
повтори я  я := я + x │
я := я+x              │ зxя +x+x

з5я +5+5 (для x=5) Ответ: 35
з6я +6+6 (для x=7) Ответ: 48
з7я +7+7 (для x=7) Ответ: 63

                     * * *

Команда 3101
------------
.\01\01.txt
Оценка:28

Решение 1
Автор решения Первушин Данила
Оценка: 29


Оценка 1) 5

 Определение программы на языке Бэкуса-Наура

 <Программа>::=<пусто>|
               <команда><символ><Программа>|
               <п><символ><команда><символ><Программа>|
               <я><пробел><команда><символ><Программа>|
 <команда>::= з | + | -
 <символ>::= 1|2|3|4|5|....ж|з|и|..|@


комментарий куратора
--------------------
Не совсем логично, когда под командой понимается ее код.


Диаграмма переходов для лексического анализатора

      ┌──────────────────────────────────────────────────────────────────┐
      │                         ^                                        │
      в.                        │          ┌────────┐                 ┌──V───┐
      о.                        в.         │Трансля-├───в.о.──────────>Ошибка│
      │                         о.  ┌ з+-──┤тор     ├─я────┐          └──────┘
 ┌────┴─────┐                   │   │      └───┬────┘      │              ^
 │ Проверка │<───────┐          │   │          п           │              │
 │ _на_конец│        │          │   │          │           │              │
 └┬─┬──┬──┬─┘        │         ┌┴───V───┐  ┌───V───┐   ┌───V───┐          │
  п │  я  п          └─символ──┤ Проверь│  │Проверь│   │Проверь│          │
  у └──│──│───────з+-──────────┤ _пр_д  │┌─>_д_п   │   │_д_я   ├в.о.─────>│
  с    │  │                    └────────┘│ └───┬───┤   └───┬───┘          │
  т    │  │                         ^    │  символ └───────│─^──в.о.──────┘
  о    │  │                         │    │     ├<──пробел──┘ │
  │    │  └─────────────────────────│────┘     │             │
  │    │                            │      ┌───V───┐         │
  │    │                            └з+-───┤Есть_ли│         │
  │    │                                   │_др_ком│         │
  │    │                                   └───────┘         │
  │    └─────────────────────────────────────────────────────┘
┌ V┐
│Да│
└──┘

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


Оценка 2) 4
Оценка 3) 10
Оценка 4) 1

при проверки программа примером "+2па+1"
 получил ответ : в=12
 Программа блестяще работает!

Оценка 5) 1+1+1=3
Оценка 6) 2+2+2=6


Решение 2 (из 2)
Автор решения Кудрявцев Артём
Оценка: 28


Оценка 1) 5


Определение на языке Бэкуса-Наура:

 <Программа>::=<Пусто>|<Команда><Символ><Программа>|
               |<Повтори><Программа>|<Повтори пробел><Программа>
 <Повтори>::=п<Символ><Команда><Символ>
 <Повтори пробел>::=я<пробел><Команда><Символ>
 <Команда>::=з|+|-
 <Символ>::=1|2|3|4|5|6....`|@
 <Пусто>::=

комментарий куратора
--------------------
Не совсем логично, когда под командой понимается ее код.




Диаграмма переходов лексического анализатора

Начало работы анализатора - процедура "Транслятор"

                   все остальное
       |-------------------------------------------------------|
       |                                                       v
       |                         -----------               ----------
       |                         | Вернись |               | Ошибка |
       |                         -----------               ----------
  ---->|                              ^                        ^    ^
  |    |                              |п                       |    |
  |    |                              |у        все остальное  |    |все
  |    |           символ             |с    |-------------------    |остальное
  |    |   ----------------------     |т    |    символ             |
  |    |  |                     v     |о    | |----------|          |
  |   ----------      +        --------------<-   з      ---------- |<-----
  |   | Если_+ |<--------------| Транслятор |----------->| Если_з |-|      |
  |   ----------               --------------            ----------        |
  |        ^               |-----|   |  ^ |------|            |            |
  |        |               |         |- |        |  п         |            |
  |        |         ------|         |  |сим     |------      |            |
  |        |         |               v  |              |      |            |
  |        -----------------|   ----------             |      |            |
  |                  |      |   | Если_- |<-           |      |            |
  |                  v      |   ---------- |           v      |            |
  |   остальное ----------  ---       |    |       ---------- |остальное   |
  |<------------| Если_я |     |      |    |-      | Если_п |-|-------------
  |             ----------     |      |    |       ---------- |
  |                 |с         |      |    |           |      |
  |                 |и         |      |    |           |      |
  |                 |м         |      |    |           |      |
  |                 |в  -------|------     |           |      |
  |                 |о  |      |+        --            |      |
  |                 |л  |      |         |             |      |
  |                 |   |   ----------------  символ   |      |
  |                 ----|-->| Если_п_или_я |<-----------      |
  |                     |   ----------------                  |
  |                     |             |  |                    |
  |                     |             |  |              з     |
  |                     |             |  |---------------------
  |                     |             |
  |                     |             |
  |                     |             |
  |                     |             |
  |                     |             |
  |    все остальное    |  остальное  |
  -------------------------------------

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


Оценка 2) 4
Оценка 3) 10
Оценка 4) 1
Оценка 5) 1+1+1=3
Оценка 6) 2+2+2=6


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

Оценка 1) 5
Оценка 2) 3
зам:: ошибки:
Анализатор считает пустую программу ошибочной.
Если программа начинается с цикла "я" анализатор считает это ошибкой.

Оценка 3) 7
Оценка 4) 1
Оценка 5) 1+1+1=3
Оценка 6) 0

Задание 1. Определение программы формулами Бэкуса-Наура

<программа> := <команда>|<программа><команда>
<команда>   := <простая_команда>|<команда_цикла>
<команда_цикла> := <цикл><команда>
<цикл> : =п<символ>|я<пробел>
<простая_команда> := <ключевое_слово><символ>
<ключевое_слово> := з|+|-
<символ> := 0|1|...|~|@

зам:: очень хорошее определение

Синтаксическая диаграмма переходов для определения

          ошибка <─────────┬───────────────┐
            ^ остальное    │остальное      │ остальное
   пусто    │     п        │    символ     │
  ┌───────<вход>──────> <цикл?>─────────><цикл>
  │         │                              │
  │        +│з                            +│з
  │         v                              v
  │   <простая_команда?>             <команда_цикла>
  │         │                              │
  │         │символ                        │
  │         v                              │
  └───><программа>─────────────────────────┘
       ^    │     ┌──────────────────────┬────────────────────────────────┐
       │    │     v                      v                                │
       │    ├─────┬──────────┬───────────┬─────────────────────┐          │
       │    │п   +│з         │я          │-                    │п         │
       │    │у    v          v           v                     v          │
       │    │с <команда?>  <цикл?>    <команда?>             <цикл?>      │
       │    │т    │символ    │пробел     │символ               │символ    │
       │    │о    │          v           v   z>я          ост. v          │
       │    │     │ ошиб<──<ком.цикла?> <?>─────> ошибка <───<цикл>       │
       │    │     │  ка      │команда    │                     │          │
       │    │     │          v           │                     │          │
       │    │     │        <ком.цикла>   │ z<я                 │          │
       │    │     │          │           │                     └──────────┘
       └─<──┴─────┴──────────┴───<───────┘


зам:: диаграмма слишком сложная


Задание 3
Описание алгоритма
------------------
Файл 0282.kor неполная программа выполнения программы Малыша (орабатывает
правильно  составленную согласно определению программу): выполняет следующие
команды +z, -z, зz, пz для +z и пz для -z, если вычитание возможно.
Сначала в ящик записывается 0.
По шагам анализируется содержание записи согласно схеме выше приведенной
и производятся вычисления согласно заданному условию.

Задание 5. Написать программы для следующих задач
    2
а) x + x, при x = 3, 4, 5
Программа: пz+z+z       Результат: 12,20,30
     2
б) 2x  + 1, при x = 3, 4, 5
Программа: пz+zя_+1+1   Результат: 19,33,51
    2
в) x  + 2x, при x = 5, 6, 7
Программа: пz+z+z+z     Результат: 35,48,63


Команда 3104
------------
.\04\04.txt
Коллективное решение
Оценка: 18

Оценка 1) 0
Оценка 2) 4
Оценка 3) 10
Оценка 4) 1
Оценка 5) 1+1+1=3
Оценка 6) 0

Задание 5.
Написать для Малыша программы нижепроиведенных задач, затем проверте их
работу на построенной модели.
а) x^2 + x при х = 3, 4, 5
б) 2x^2 + 1 при х = 3, 4, 5
в) x^2 + 2x при х = 5, 6, 7
Ответ:
а) зхпх+х
б) зхпх+(х-1)пх+х+х+1
в) зхпх+х+х ; второй вариант зхя +(х+1)
При подстановке значений х имеем:
а) в=12    к=20    ф=30
б) )=51    ч=33    й=19
в) щ=35    <=48    "=63

Команда 3105
------------
.\05\05.txt
Автор: Решение коллективное
Оценка: 30

Оценка 1) 6
Оценка 2) 4
Оценка 3) 10
Оценка 4) 1
Оценка 5) 3
Оценка 6) 6

1) Задание 1
Определение
     <программа> : = <команда> | <программа> <команда>
     <команда> : =  <простая> | <пустая> | <составная>
     <составная> : = я_<простая> | <символ> <простая> 
     <пустая> : = ПУСТО
     <простая> : = +<символ> | -<символ> | з<символ>
     <символ> : =
0|1|2|3|4|5|6|7|8|9|а|б|в|г|д|е|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я| |-|+|/|
                            *|=|<|>|( | )| [ | ] | {| }| .| ,| !|?| ;| :| '| "| #| | | $| %|
                            !| ~ |@

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

Эту строку

     <составная> : = я_<простая> | <символ> <простая> 

нужно записать так:

     <составная> : = я<пробел><простая> | п<символ><простая>


Синтаксическая диаграмма переходов

+-------------------------+     +------------------------------------+
│                         │     │                                    │
│                пусто    V     V      остальное                     │
│   программа <--------(   вход    )------------->( ошибка )         │
│                       │     │   │                   ^   ^          │
│                    +, -, з  │   п                   │   │          │
│                       │     │   │       остальное   │   │       символ
│                       │     я   │    +--------------+  пусто       │
│                       V     │   V    │                  │          │
│                   (символ)  │ ( повтор )----------->(символ)-------+
│                     │  │    │        ^    +, -, з
│                     │  │    V        │                                
│                     │  │ ( ящик)-----+                                          
│    символ           │  │   │    пробел                                      
+---------------------+  │   │
                         │   │                                       
                         │   │                                      
               пусто     │   │
    (ошибка)<------------+   │
        ^                    │
        │    остальное       │                                      
        +--------------------+
                                                                   


3) Задание 3
     Условие
     Напишите для Корректора программу-интерпретатор. Эта
программа должна читать с ленты Корректора программу Малыша и
выполнять ее. Если выполнение программы заканчивается без авоста,
Корректор должен справа от программы записать на ленту содержимое
ящика в виде: символ=числовое значение.

описание алгоритма
------------------
Если ПУСТО то считаем 0=0, в противном случае делаем проверку если +, - 
или з то выполняем сложение, вычитание или запись с помощью хорошо
знакомых процедур. Если п или я, то проверяем, если следующий символ не 
нуль, то выясняем какую операцию необходимо повторять выполняем ее 
известными способами, возвращаемся в позицию "число повторений" и
уменьшаем число на ленте на единицу (для команды ящик-пробел сначала
содержимое ящика помещаем на ленту на место пробела) и снова выполняем
операцию до тех пор пока на ленте в позиции "число повторений" не будет 
нуль, после чего с помощью отложенной команды ПЛЮС восстанавливаем 
запись (для команды ящик-пробел просто записываем на ленту ПРОБЕЛ).


комментарий куратора
--------------------
Здорово, что при выполнении программы Малыша она не портится
Корректором!


5)  Задание 5
     Условие
Напишите для Малыша программы нижеприведенных задач,
затем проверьте их работу на построенной модели.
Вычислить:
Во всех приведенных примерах х^2 - это икс в квадрате

а) x^2 + x, при x = 3, 4, 5


б) 2x^2  + 1, при x = 3, 4, 5

    
в) x^2  + 2x, при x = 5, 6, 7


Решения:
а) в общем виде зХпХ+Х, где Х - переменная
для х=3
з3п3+3 ответ: в=12

для х=4
з4п4+4  ответ: к=20

для х=5
з5п5+5  ответ: ф=30

б) в общем виде пХ+Хя_+1+1, где Х - переменная, я_ - ящик-пробел
для х=3
п3+3я_+1+1  ответ: й=19

для х=4
п4+4я_+1+1  ответ: ч=33

для х=5
п5+5я_+1+1  ответ: )=51

в) в общем виде пХ+Хп2+Х, где Х - переменная

для х=5
п5+5п2+5  ответ: щ=35

для х=6
п6+6п2+6  ответ: <=48

для х=7
п7+7п2+7  ответ: "=63

6) Задание 6

Во всех приведенных примерах х^3 - это икс в кубе


Задача 1
     Вычислить х^3+1 для х=2, 3, 4

Решение
В общем виде
     пХ+Хя_+(Х-1)+1
Для Х=2
     п2+2я_+1+1 Ответ: 9=9
Для Х=3
     п3+3я_+2+1 Ответ: т=28
Для Х=4
     п4+4я_+3+1 Ответ: |=65

Задача 2
     Вычислить 2х^3+х для х=1, 2, 3
Решение
В общем виде
     пХ+Хя_+(Х-1)я_+1+Х
Для Х=1
     п1+1я_+1+1 Ответ: 3=3
Для Х=2
     п2+2я_+1я_+1+2     Ответ: и=18
Для Х=3
     п3+3я_+2я_+1+3     Ответ: ,=57

Задача 3
     Вычислить х^3-х+1 для х=1, 2, 3
Решение
В общем виде
     пХ+Хя_+(Х-1)-Х+1
Для Х=1
     п1+1-1+1           Ответ: 1=1
Для Х=2
     п2+2я_+1-2+1       Ответ: 7=7
Для Х=3
     п3+3я_+2-3+1       Ответ: п=25

Команда 3108
------------
.\08\08.txt
Оценка: 20


Описание алгоритма
------------------
Анализатор:
Проходя по программе вправо определяется правильность построения
 команд и их очередность.
Интерпретатор:
Проходя по программе выполняет каждое действие и заносит
результат в ящик.


Определение.
<программа> := <команда>|<программа><команда>|<пустая>
<команда>   := <простая>|<повторная><простая>
<пустая>    :=
<повторная>  := п<номер><простая>|я_<простая>
<простая>   := <условие><номер>
<условие>   := -|+|з
<номер>   := 0|1|2|...@


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

Строку

<команда>   := <простая>|<повторная><простая>

нужно записать так:

<команда>   ::= <простая>|<повторная>

Ваш анализатор зачем то запрещает после команды "цикл" записывать
команду "запомнить". Например, ругается на такие правильные программы:

я з2
п1з2

Плохо, что не построена синтаксическая диаграмма. С ней написать
анализатор без ошибок было бы гораздо проще.


Команда 3110
------------
.\10\10.txt
Автор Карманов Саша 8"а"
Оценка: 10

Решение задачи состоит из 3 программ- 1081,1082,1083
1. 1081- анализатор программы для МАЛЫША. При наличии 
   ошибки в программе анализатор пишет после программы 
   "ош" и встает на место первой ошибки.
   Описание алгоритма
  --просматривая символ:
      если этот символ один из з,+,-, то переходим к символу через один,
         и анализ начинается снова.
      если этот символ п ,то переходим к символу через один, и
        если этот символ п , то выдаем сообщение об ошибке.
     если этот символ я, то переходим к символу через один, и
        если этот символ п или я, то выдаем сообщение об ошибке.
        если этот символ не является одним из перечисленных,
         то выдаем сообщение об ошибке.

2. 1082- МАЛЫШ.(работает только при правельно написанной программе.)
     Описание алгоритма
     -Просматриваем символ и выполняем соответсвующие команды:
        п-команда повтора, выполняет повтор команды, следующей за ней
                столько раз , сколько указано в ячейке после п.
        з-команда записи числа, следующего за з в ящик.
        +- команда увеличения ящика на число после +
        --         уменьшение
        я- команда повтора выполняет повтор команды, следующей за ней
                столько раз , сколько указано в ящике-
     -Пишем на ленту после программы, символ полученный в результате
        выполнения программы и его числовое значение.

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

Не построено определение по Бэкусу и синтаксическая диаграмма. Этим и
вызвана, вероятно, неудача с анализатором.


Анализатор ведет себя довольно странно. Отмечает несуществующие ошибки,
хотя сообщение "ош" не записывает:

з1пя +1
     ^
п1з2
  ^
я -1
  ^

Так же странно ведет себя и интерпретатор.

Результаты выполнения правильных программ:

п2+2 3=03 (правильно 4)
п1+1 "не могу"
я +1 "не могу"

Можно сказать, что Малыш не совсем удался.

Команда 3112
------------
.\12\12.txt
 Авторы: Громков Сергей, Борисов Саша, Белова Таня
Оценка: 24

Оценка 1) 4
Оценка 2) 2
Оценка 3) 8
Оценка 4) 1
Оценка 5) 3
Оценка 6) 6

<Команда>::=<Простая_команда>|<Составная_команда>
<Составная_команда>::=я_<Простая_команда>|п<Символы><Простая_команда>
<Простая_команда>::=з<Символы>|+<Символы>|-<Символы>
<Алфавит>::=ПУСТО|<Символы>
<Символы>::= 0|1|2|3|4|5|6|7|8|9|а|б|в|г|д|е|ж|з|и|й|к|л|
             м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я| |-|
             +|/|*|%|=|<|>|(|)|[|]|{|}|.|,|!|?|;|:|'|"|#|
             ||$|%|~|@

Примечание: в Составной команде символом _ обозначен пробел.

комментарий куратора
--------------------
1) Определение "алфавит" нигде в определениях не фигурирует, поэтому
строка:

<Алфавит>::=ПУСТО|<Символы>

лишняя.

2) Терм "Символы" логичнее назвать "Символ"

3) Ваше определение по Бекусу задает понятие "Команда". Но ведь цель
определить термин "программа"!

4) Программа анализатора содержит ошибки:

5) Интерпретатор не умеет вычислять цикл "п0".

Напаример, программа состоящая из одного символа "з" считается
правильной (результат вычислений -- 0).


                               (Запись ответа)
                                  ^
                                  │
             Ошибка<───────────┐  │ пусто
              ^ Остальное      │  │
              │                │  │
              │   +-зяп        │  │     п  я
           (Вход)────────────>(Команда)─────────>(Составная_команда)
                  +-зяп        ^  │                   │  │
                               │  │                  +│  │
                               │  │+-з               -│  │
                               │  │                  з│  │
                               │  V                   │  │Остальное
                            (Простая_команда)<────────┘  │
                                       │                 V
                                       └─────────────> Ошибка
                                       Остальное


Ответ на задание    +2па+1    в=12

5) (3 балла) Напишите для Малыша программы нижеприведенных задач,
затем проверьте их работу на построенной модели.

Вычислить:
                    2
  Мы выяснили, что х     имеет программу  +хя_+х-х

    2
а) x + x, при x = 3, 4, 5

     учитывая вышесказанное, конечно можно записать
     +хя_+х-х+х , но короче
     +хя_+х

     х=3    в=12
     х=4    к=20
     х=5    ф=30

     2
б) 2x  + 1, при x = 3, 4, 5

      +хя_+х-хя_+1+1

     х=3    й=19
     х=4    ч=33
     х=5    )=51

    2
в) x  + 2x, при x = 5, 6, 7

     +хя_+х-хп2+х

     х=5    щ=35
     х=6    <=48
     х=7    "=63

6) (6 баллов) Придумайте для Малыша три новых задачи, напишите их
решение, проверьте работу полученных программ на построенном
трансляторе.

        3
 а)    х             +хя_+х-хя_+(х-1)
                                        (х-1) это один символ
   например: х=3     +3я_+3-3я_+2         с=27

        3
 б)   2х -2        +хя_+х-хя_+(х-1)я_+1-2

            х=2    +2я_+2-2я_+1я_+1-2     д=14

      4
 в)  х            +хя_+х-хя_+(х-1)я_+(х-1)

           х=2    +2я_+2-2я_+1я_+1        ж=16


     Все программы проверены на Малыше.
