Муниципальное образовательное учреждение
Высшего
профессионального образования
Южно - Уральский профессиональный институт
Контрольная
Работа по дисциплине
Теория вычислительных процессов
Студент
гр. ПСз-1-09, факультет Управления и информационных
технологий |
____________________ |
Э.К. Насыров |
|
«__» _________2013 |
|
Форма обучения |
заочная |
|
Курс |
4 |
|
№ варианта |
3 |
|
Ст. преподаватель
|
____________________ |
|
|
«__» _________2013 |
|
Челябинск
2013
Практические задачи
Задачи
должны быть выполнены в Delphi. Решение
задачи должно начинаться с построения
математической модели. После чего должен
быть представлен листинг программы и
спецификация. Каждая задача должна сопровождаться
необходимым количеством комментариев
и содержать результаты выполнения программы.
По каждой задаче должны быть составлены
стандартные схемы программы и построена
сеть Петри.
Вариант
3.
- Постройте одноленточный автомат над алфавитом {a, b, c}, допускающий следующие множества слов: {anbbb | n ³ 0}, {ancbm | n ³ 1, m ³ 1}.
Математическая модель:
A=({a,b,c},-алфавит терминальных символов;
{q0,q1,q2,q3,q4,q5,q6},-множество состояний;
{q0a>q1 | q0b>q2 | q1a>q1 | q1b>q2 | q1c>q3 | q2b>q4
| q3b>q5 | q4b>q6 | q5b>q5 | q5#>q6},-множество
переходов;
q0,-начальное состояние;
q6}-конечное состояние.
Дополнительно в алфавит программы введен
символ #-пусто, как символ окончания ввода.
Сеть Петри.
В роли
"полочек" или устройства выбирающего
направление - выступает оператор.
Программа написана на Delphi 6, как приложение
консоль.
- program Project1;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- var
- State:integer;
- CurrentABC:string;
- CurrentJob:string;
- CurrentTerm:char;
- {Рекурсивная процедура преобразования строки}
- function str2line(a:string):string;
- begin{str2line}
- if length(a)>1{условие выхода из рекурсии}
- then result:=a[1]+','+str2line(copy(a,2,length(a))){вставляем запятую после каждой буквы}
- else result:=a[1];{единственная буква - копируем}
- end;{str2line}
- {вводим терминальный символ допустимого алфавита}
- function LoadTerm(term_ABC:string;c:integer):char;
- var
- d:string;
- begin{LoadTerm}
- repeat
- {выводим сообщение о состоянии и допустимых терминальных символах}
- write('State ',c,'. Please enter the
characters(',str2line(term_ABC),'):');
- {вводи терминальный символ}
- readln(d);
- if pos(d[1],term_ABC)=0 then writeln('Error! Expected characters:
',str2line(term_ABC)){сообщение об ошибке ввода}
- until pos(d[1],term_ABC)>0;{выходим если введенный символ есть в допустимом алфавите алфавите}
- result:=d[1];{сохраняем результат работы}
- end;{LoadTerm}
- begin
- {начальная установка параметров}
- State:=0;{начальное состояние автомата}
- CurrentABC:='ab';{допустимый алфавит}
- CurrentJob:='';{результат работы автомата}
- {начало работы конечного автомата}
- repeat
- CurrentTerm:=LoadTerm(CurrentABC,State);{вводим терминальный символ}
- CurrentJob:=CurrentJob+CurrentTerm;{добавляем его в результат работы}
- {конечный автомат-контроль и изменение состояний}
- case State of
- 0:case CurrentTerm of
- 'a':begin
- State:=1;{переводим автомат в состояние 1}
- CurrentABC:='abc';{изменяем допустимый алфавит}
- end;
- 'b':begin
- State:=2;{переводим автомат в состояние2}
- CurrentABC:='b';{изменяем допустимый алфавит}
- end;
- end;{case CurrentTerm of}
- {state=0}
- 1:case CurrentTerm of
- 'b':begin
- State:=2;{перводим автомат в состояние 2}
- CurrentABC:='b';{изменяем допустимый алфавит}
- end;
- 'c':begin
- State:=3;{переводим автомат в состояние 3}
- CurrentABC:='b';{изменяем допустимый алфавит}
- end;
- end;{case CurrentTerm of}
- {state=1}
- 2:State:=4;{переводим автомат в состояние 4}
- {state=2}
- 3:begin
- State:=5;{переводи автомат в состояние 5}
- CurrentABC:='b#';{изменяем допустимый алфавит}
- end;
- {state=3}
- 4:State:=6;{переводим автомат в режим окончания работы}
- {state=4}
- 5:if CurrentTerm='#' then State:=6;{проверяем окончание работы автомата}
- {state=5}
- end;{case state of}
- until State=6;
- if pos('#',CurrentJob)>0 then delete(CurrentJob,pos('#',CurrentJob),1);{удаляем символ окончания работы}
- Writeln('Result: ',CurrentJob);{вывод результата работы}
- Readln(CurrentJob);{ожитания наджатия клавиши ВВОД}
- end.
Программа реализует оба множества
последовательностей (anbbb, где n=0,1,2,... и ancbm, где n,m=1,2,3,...)
При попытке ввести неверный символ выдается
ошибка и ввод повторяется.
Литература
Основная
- Бройдо В.Л. Вычислительные системы, сети телекоммуникации. - СПб.: Питер, 2005. – 568 с.
- Мелехин В.Ф. Вычислительные машины, системы и сети. – М.: Академия, 2006. – 560 с.
- Пятибратов А.П. Вычислительные системы, сети телекоммуникации. - М.: Финансы и статистика, 2005. – 470 с.
Дополнительная
- Высшая математика / Под ред. Н.М. Кремера. - М.: ЮНИТИ - ДАНА,
2007
- Дорофеева А.В. Высшая математика. – М.: Дрофа, 2003. – 384 с.: ил.
- Хандадашева Л.Н. Программное обеспечение. Вычислительные сети. – Ростов н/Д.: МарТ, 2005. – 320 с.