Теория вычислительных процессов
Муниципальное
образовательное учреждение
Высшего
профессионального образования
Южно -
Уральский профессиональный институт
Контрольная
Работа
Теория вычислительных процессов
Студент
гр. ПСз-1-09, факультет Управления и информационных технологий
Э.К. Насыров
Челябинск
2013
Практические задачи
Задачи должны быть выполнены в Delphi. Решение задачи должно начинаться с построения математической модели.
После чего должен быть представлен листинг программы и спецификация. Каждая
задача должна сопровождаться необходимым количеством комментариев и содержать
результаты выполнения программы. По каждой задаче должны быть составлены
стандартные схемы программы и построена сеть Петри.
Вариант 3.
1. Постройте одноленточный автомат над алфавитом {a, b, c}, допускающий
следующие множества слов: {anbbb
| n ³ 0}, {ancbm | n ³ 1, m ³ 1}.
Математическая модель:=({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},-множество переходов;,-начальное состояние;}-конечное состояние.
Дополнительно в алфавит программы введен символ #-пусто, как символ
окончания ввода.
Сеть Петри.
программа символ сеть петри
В роли "полочек" или устройства выбирающего направление -
выступает оператор.
Программа написана на Delphi 6, как приложение консоль.
1. program Project1;
2.
. {$APPTYPE CONSOLE}
.
. uses
. SysUtils;
. var
. State:integer;
. CurrentABC:string;
. CurrentJob:string;
. CurrentTerm:char;
.
. {Рекурсивная процедура преобразования строки}
14. function
str2line(a:string):string;
15. begin{str2line}
. if length(a)>1{условие выхода из рекурсии}
17. then
result:=a[1]+','+str2line(copy(a,2,length(a))){вставляем запятую после каждой буквы}
18. else result:=a[1];{единственная буква -
копируем}
. end;{str2line}
.
. {вводим терминальный символ допустимого
алфавита}
22. function
LoadTerm(term_ABC:string;c:integer):char;
23. var
. d:string;
. begin{LoadTerm}
. repeat
. {выводим сообщение о состоянии и допустимых
терминальных символах}
28. write('State ',c,'. Please
enter the characters(',str2line(term_ABC),'):');
29. {вводи терминальный символ}
. readln(d);
31. if pos(d[1],term_ABC)=0 then
writeln('Error! Expected characters: ',str2line(term_ABC)){сообщение об ошибке ввода}
32. 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}
. 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;
82. if pos('#',CurrentJob)>0
then delete(CurrentJob,pos('#',CurrentJob),1);{удаляем символ окончания работы}
. Writeln('Result:
',CurrentJob);{вывод результата работы}
. Readln(CurrentJob);{ожитания наджатия клавиши ВВОД}
85. end.
Программа реализует оба множества последовательностей (anbbb, где
n=0,1,2,... и ancbm, где n,m=1,2,3,...)
При попытке ввести неверный символ выдается ошибка и ввод повторяется.
Литература
Основная
1. Бройдо
В.Л. Вычислительные системы, сети телекоммуникации. - СПб.: Питер, 2005. - 568
с.
. Мелехин
В.Ф. Вычислительные машины, системы и сети. - М.: Академия, 2006. - 560 с.
. Пятибратов
А.П. Вычислительные системы, сети телекоммуникации. - М.: Финансы и статистика,
2005. - 470 с.
Дополнительная
1. Высшая
математика / Под ред. Н.М. Кремера. - М.: ЮНИТИ - ДАНА, 2007
2. Дорофеева
А.В. Высшая математика. - М.: Дрофа, 2003. - 384 с.: ил.
3. Хандадашева
Л.Н. Программное обеспечение. Вычислительные сети. - Ростов н/Д.: МарТ, 2005. -
320 с.