Программирование конечного автомата
РОСЖЕЛДОР
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Ростовский государственный университет путей сообщения»
(ФГБОУ ВПО РГУПС)
Кафедра «ВТ и АСУ»
Отчёт по лабораторным работам по дисциплине
«Системное программное обеспечение»
Выполнил студент группы
АИ-3-024 ____________________ А.В. Кривощёков
(подпись)
Проверил
к.т.н., доцент ____________________ В.В. Жуков
(подпись)
2012
Лабораторная работа №1
Формирование очередей в динамической памяти
1) Цель работы: Создать двунаправленный список типа FiFo. Программа должна включать в себя процедуры добавления элемента в список и его извлечения.
2) Исходный текст программы:
program FIFO;
type tp=^tu;
tu=record
d:integer;
p:tp;
end;
var q,vhod:tp;
x,y:integer;
procedure dobavlenie (x:integer);
begin
new(vhod);
vhod^.p:=q;
vhod^.d:=x;
q:=vhod;
end;
procedure izvlechenie (var x:integer);
var k:tp;
begin
q:=vhod;
if vhod=nil then writeln ('spisok pust')
else while q<>nil do
begin
k:=q;
q:=q^.p;
end;
x:=k^.d;
writeln(x);
k^.p:=nil;
dispose(k);
q:=vhod;
end;
BEGIN
q:=nil; vhod:=nil;
writeln(‘введите элемент списка’);
readln(x); dobavlenie(x);
|
|
writeln(‘введите элемент списка’);
readln(x); dobavlenie(x);
writeln(‘введите элемент списка’);
readln(x); dobavlenie(x);
writeln('________');
izvlechenie (y);
END.
3) Результат:
введите элемент списка
32
введите элемент списка
45
введите элемент списка
85
_______
32
Лабораторная работа №2
Программирование конечного автомата
1)Цель работы: Написать программу конечного автомата на пять состояний. Каждое из них нагрузить выводом на экран номера того состояния, которое автомат покинул.
Графическое представление конечного автомата:
2)Текст программы
Program avtomat;
var x,S:integer;
Begin
s:=0;
repeat
writeln ('Vvedite vhodnoe vozdeistvie');
write('x= ');
readln (x);
case s of
0:begin
if x>5 then begin
writeln('s= ',s);
s:=1;
end
else if x=5 then begin
writeln('s= ',s);
s:=2;
end
else if x<2 then begin
writeln('s= ',s);
s:=4;
end
else begin
writeln('s= ',s);
s:=3;
end;
end;
1:begin
if x>7 then begin
writeln('s= ',s);
s:=4;
end;
end;
2:begin
if x=6 then begin
writeln('s= ',s);
s:=3;
end;
if x>8 then begin
writeln('s= ',s);
s:=0;
|
|
end;
end;
3:begin
if x=8 then begin
writeln('s= ',s);
s:=4;
end;
end;
end;
until s=4;
end.
Пример выполнения программы
Vvedite vhodnoe vozdeistvie
x= 5
s= 0
Vvedite vhodnoe vozdeistvie
x= 9
s= 2
Vvedite vhodnoe vozdeistvie
x= 4
s= 0
Vvedite vhodnoe vozdeistvie
x= 8
s= 3
Лабораторная работа №3
Программирование конечного автомата для транслитерации
1) Цель работы: Создать файл с русским текстом. Написать автомат, который переведет русские буквы в символы латинского алфавита. Результат записать в другой файл.
Графическое представление конечного автомата:
2) Исходный текст программы:
program translit;
const string1:array [1..2] of char=('ъ','ь');
string2ru:array [1..25] of char=('а','б','в','г','д','е','ё','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ы','э');
string3ru:array [1..7] of char=('ж','ч','ш','щ','ы','ю','я');
string2en:array [1..25] of char=('a','b','v','g','d','e','e','z','i','i','k','l','m','n','o','p','r','s','t','u','f','h','c','y','e');
string3en:array [1..7] of string=('zh','ch','sh','sch','bl','yu','ya');
var c:char;
s:string;
f,f1:text;
state,i,x:integer;
procedure compare(c:char; var i,state,x:integer);
begin for i:=1 to 2 do
if c=string1[i] then
begin
x:=i;
state:=1;
exit;
end;
for i:=1 to 25 do
if c=string2ru[i] then
begin
x:=i;
state:=2;
exit; end;
for i:=1 to 7 do
if c=string3ru[i] then
begin
x:=i;
state:=3;
exit;
end;
state:=4;
end;
procedure trans1(c:char; var i,state,x:integer);
begin
s:=s+string2en[x];
|
|
state:=1;
end;
procedure trans2(c:char; var i,state,x:integer);
begin
s:=s+string3en[x];
state:=1;
end;
procedure trans3(c:char; var i,state,x:integer);
begin
s:=s+c;
state:=1;
end;
begin
assign(f,'text.txt');
reset(f);
assign(f1, 'data_out.txt');
rewrite(f1);
state:=1;
repeat
case state of
1:begin read(f,c); compare(c,i,state,x); end;
2:begin trans1(c,i,state,x); end;
3:begin trans2(c,i,state,x); end;
4:begin trans3(c,i,state,x); end;
else begin writeln('Перевод окончен.'); end; end;
until eof(f);
close(f);
write(f1,s);
close(f1);
end.
3) Результат:
'text.txt': привет мой хозяин
'data_out.txt': privet moi hozyain
Лабораторная работа №4
Программирование конечного автомата
1) Цель работы: Разработать конечный автомат, разметить его, написать программу, которая выбирает целые числа из текста и выводит их на экран.
Графическое представление конечного автомата:
2) Исходный текст программы:
program avtomat4;
var x:char;
f1: text;
s: integer;
flag: boolean;
buffer: string;
begin s:=0;
flag:=false;
assign(f1,'4.txt');
reset(f1);
while flag=false do begin
case s of
0: begin
read(f1,x);
if x in ['0'..'9'] then begin s:=1; buffer:=x; end;
if eof(f1)=true then s:=2;
end;
1: begin
read(f1,x);
if x in ['0'..'9'] then begin buffer:=buffer+x; end else
begin writeln(buffer); s:=0; end;
end;
2: begin
flag:=true;
close(f1);
end;
end; //case
end; //while
end.
3) Файл содержит в себе следующий текст: dtu76ghfc456hjlkj8f
Результат:
76 456 8
Лабораторная работа №5
|
|
Дата добавления: 2018-04-05; просмотров: 325; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!