Решение
С
огласно
условиям, шар, начав с левой нижней
клетки, дальше может двигаться вокруг
центральной клетки против часовой
стрелки и может остановиться в левой
нижней клетке. Перенумеруем против
часовой стрелки все клетки (кроме
центральной), начиная с левой нижней.
Построим конечный автомат с состояниями
S1,S2,
…, S8. Состояние Si
соответствует положению шара в i-й
клетке. Дуга из Si
в Si+1
помечается подходящей буквой из алфавита
{a,b,c,d}.
Например, переход из S1
в S2 осуществляется
по команде ’a’,
и соответствующая дуга помечается
символом ’a’.
Начальным является состояние S1.
Оно же является и заключительным
состоянием. По конечному автомату
построим праволинейную автоматную
грамматику c начальным
символом S1:
S1 aS2 |
S2 aS3
S3 сS4
…
S8 dS1
Можно построить эквивалентную регулярную грамматику с начальным символом S, состоящую всего из двух правил:
S aaccbbddS |
КРИТЕРИИ: не допускается : -2, за недопуск любой другой правильной цепочки или за допуск каждой лишней цепочки: -5. Нерегулярная грамматика: -10
8. Является ли верификация частью отладки ? Ответ обосновать.
Ответ: Нет. Верификация – это процесс проверки программы на правильность, в частности – обнаружение дефектов в программе, а отладка – это поиск причин и устранение уже обнаруженных дефектов.
КРИТЕРИИ:
Нет обоснования, но ответ верно угадан: 1 балл
За отсутствие или ошибочность определения верификации: -5
За отсутствие или ошибочность определения отладки: -5
9. Перечислить этапы создания программного продукта, указав результаты работы каждого из них.
Ответ:
Постановка задачи. Анализ (определение) требований.
Реультаты: Тексты на естественном языке, формализованные описания.
Проектирование.
Результаты: Схема иерархии подсистем, спецификации подсистем (функциональность и интерфейсы); алгоритмы и внутреннее представление данных для каждого отдельного модуля.
Написание текста программ (программирование, “кодирование”)
Реультаты: Тексты отдельных модулей на выбранном языке программирования.
Компоновка или интеграция программного комплекса.
Реультаты: Единая система ПО.
Верификация, тестирование и отладка
Реультаты: ПО без обнаруженных дефектов.
Документирование
Реультаты: пакеты документов для пользователей, администраторов, разработчиков.
КРИТЕРИИ:
За отсутствие/ошибочность каждого из пунктов: -2
Если ошибочны или отсутствуют только результаты в пункте: -1
10. Дана польская инверсная запись фрагмента программы, в котором нет операторов перехода goto и break, но есть один оператор continue. Вставить пропущенные в польской записи команды перехода (’!’,’!F’) и недостающие метки; восстановить фрагмент на языке Си. (Красным выделены пропущенные клетки ).
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
x |
0 |
< |
34 |
!F |
y |
0 |
!= |
28 |
!F |
x |
#+ |
; |
y |
# |
; |
x |
1 |
+ |
0 |
== |
26 |
!F |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
1 |
! |
32 |
! |
x |
y |
= |
; |
1 |
! |
|
Ответ: while (x<0)
if (y!=0) { x++; --y; if (x+1==0) continue; }
else x=y;
План решения:
1) Расставляем знаки операций ’!’ и ’!F’, исходя из следующих соображений:
если перед пропущенным местом стоит логическое выражение и нет операции ’;’, то переход условный, иначе — безусловный.
2) Расставляем метки, учитывая, что при трансляции управляющих конструкций языка Си:
(а) переходы по лжи возможны только вперед;
(б) безусловные переходы назад (кроме явных goto) возможны только в циклах.
КРИТЕРИИ: Есть ошибки в ПОЛИЗЕ: -5
Есть ошибки в восстановленном фрагменте: -5
Если без ошибок только операции перехода расставлены, даем 2 балла за задачу.
