Смекни!
smekni.com

Программа построения грамматики для конечного автомата (стр. 4 из 4)

3. Руководство пользователя, инструкция инсталяции

3.1 Требования к аппаратным средствам

При разработке программного комплекса было создано Win32 – приложение. Требования к аппаратным средствам:

– Windows 95, Windows NT 4.0 и выше

– 2 Mb дискового пространства для минимальной конфигурации (только выполняемые файлы)

– 3 Mb дискового пространства для нормальной конфигурации (выполняемые файлы и тексты модулей, а также справка)

– Процессор 80486 (лучше 80586)

– 16 Mb RAM

3.2 Особенности запуска и работы с программой

Для нормального функционирования программного продукта следует выполнить следующее:

– Ознакомиться с файлом readme.txt;

– Создать папки на компьютере с таким адресом:

– 'C:\Program Files\Internet Explorer\Iexplore.exe F:\Моя курсовая работа\Моя Web-страница\Справка.mht

– Извлечь в данную папку все файлы из архива, копировать туда исполняющий файл программы (Primer4.exe), проследить чтобы также там был файл Справка. mht.

– Для начала работы с ПП запустите Primer4.exe.

3.3 Тестовые варианты программы (печатный и прописной вариант)

Для проверки работы программы можно использовать предложенные ниже тестовые варианты. В программе специально предусмотрены 2 тестовых варианта, которые будут рассмотрены ниже. При сравнении результатов анализа вручную и работы программы мы видим, что результат одинаков, что свидетельствует о правильности работы программы.

Пример 1.

Запустим файл Primer4.exe. Вводим состояния и алфавит (рисунок 7) и заполянем управляющую таблицу (рисунок 8):

Рисунок 7 – Ввод состояний и алфавита

Рисунок 8 – Заполнение управляющей таблицы.


Строим грамматику (рисунок 9):

Рисунок 9 – Полученная граматика

Пример 2.

Запустим файл Primer4.exe. Вводим состояния и алфавит (рисунок 10), заполняем управляющую таблицу (рисунок 11):

Рисунок 10 - Ввод состояний и алфавита

Рисунок 11 - Заполнение управляющей таблицы


Строим грамматику (рисунок 12):

Рис.12 – Полученная граматика

Выводы

В рамках данной курсовой работы мною была разработана программа построения грамматики для заданного конечного автомата. А также я ознакомилась с теорией конечных автоматов и грамматик, научилась писать программы - конструкторы для построения автоматных грамматик закрепила умение работы в среде Delphi 7.0. Была создана справочная система в виде Web-страницы, в которой находится подробная справка по работе с программы продуктом. Написано вступление, где рассматривается общий обзор средств электронной связи.

Список литературы

1 Яблонский С.В. «Введение в дискретную математику: Учеб. пособие для вузов» / С.В Яблонский, - М.: Наука, 1986 – 384с.

2 «Разработка приложений в среде Delphi», -М.: Издательский дом “Вильямс”,2000.-464 с.

3 Грис Д.П. « Конструирование компиляторов для цифровых вычислительных машин» / Д.П. Грис, – М.: Мир, 1975. – 544 с.

4 Кузнецов О.П. «Дискретная математика для инженера» / О.П. Кузнецов, Г.М. Адельсон-Вельский, – М: Энергоатомиздат, 1988.– 480 с.

5 Лебедев А.Н.«Моделирование в научно-технических исследованиях» / А.Н.Лебедев, - М.:Москва 1989.-519с.

6 Суворова Н.И. «Информационное моделирование. Величины, объекты, алгоритмы » / Н.И. Суворова, - М.:2002.

7 Богдан М.П. «Краткий курс лекций по дисциплине “ Основы дискреной математики”» / М.П. Богдан, – Краматорск: ДГМА,2002.

8 Новиков Ф.А. «2Дискретная математика для программистов» / Новиков Ф.А., – СПб: Питер, 2000. – 304с.

Приложение А

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids, Menus, HtmlHlp;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

BitBtn1: TBitBtn;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

Label4: TLabel;

Label5: TLabel;

BitBtn2: TBitBtn;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

ListBox1: TListBox;

BitBtn3: TBitBtn;

N7: TMenuItem;

N8: TMenuItem;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

N9: TMenuItem;

BitBtn6: TBitBtn;

BitBtn7: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn7Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses unit2,unit4,unit3;

var Sostin:set of char;

procedure TForm1.BitBtn1Click(Sender: TObject);

var s1,s2,s:string;

i,j:integer;

begin

s1:=Edit2.Text;

s2:=Edit1.Text;

StringGrid1.ColCount:=Length(s1)+2;

StringGrid1.RowCount:=length(s2)+1;

StringGrid1.Cells[Length(s1)+1,0]:='-|';

for i:=1 to Length(s2) do

StringGrid1.Cells[0,i]:=s2[i];

for i:=1 to Length(s1) do

StringGrid1.Cells[i,0]:=s1[i];

for i:=1 to length(s2)-1 do

for j:=i+1 to length(s2) do

if (s2[i]=s2[j]) then begin

MessageBox(form1.Handle,'Введи правильно состояния не должны повторяться!!!','Error',mb_ok or mb_iconerror);

edit1.SetFocus;

exit;

end;

for i:=1 to length(s2) do

if not ((s2[i]>='A') and (s2[i]<='Z')) then begin

MessageBox(form1.Handle,'Введите правильно состояния!!!', 'Error',mb_ok or mb_iconerror);

edit1.SetFocus;

exit;

end;

for i:=1 to length(s1)-1 do

for j:=i+1 to length(s1) do

if (s1[i]=s1[j]) then begin

MessageBox(form1.Handle,'Введи правильно буквы алфавита не должны повторяться!!!','Error',mb_ok or mb_iconerror);

edit2.SetFocus;

exit;

end;

for i:=1 to length(s1) do

if not ((s1[i]>='a') and (s1[i]<='z')) then begin

MessageBox(form1.Handle,'Введите правильно буквы алфавита!!!','Error',mb_ok or mb_iconerror);

edit2.SetFocus;

exit;

end;

for i:=0 to stringgrid1.ColCount-1 do

StringGrid1.ColWidths[i]:=(Stringgrid1.ClientWidth div stringgrid1. ColCount)-1;

for i:=0 to stringgrid1.RowCount-1 do

StringGrid1.RowHeights[i]:=(Stringgrid1.ClientHeight div stringgrid1. RowCount)-1;

Sostin:=['0'];

s:=Edit1.Text;

for i:=1 to Length(s) do

Sostin:=Sostin+[s[i]];

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

close;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

form3.ShowModal;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

form2.ShowModal;

end;

procedure TForm1.N6Click(Sender: TObject);

var s1,s2:string;

i,j:integer;

begin

s1:=Edit2.Text;

s2:=Edit1.Text;

StringGrid1.ColCount:=Length(s1)+2;

StringGrid1.RowCount:=length(s2)+1;

StringGrid1.Cells[Length(s1)+1,0]:='-|';

for i:=1 to Length(s2) do

StringGrid1.Cells[0,i]:=s2[i];

for i:=1 to Length(s1) do

StringGrid1.Cells[i,0]:=s1[i];

for i:=1 to length(s2)-1 do

for j:=i+1 to length(s2) do

if (s2[i]=s2[j]) then begin

MessageBox(form1.Handle,'Введи правильно состояния не должны повторяться!!!','Error',mb_ok or mb_iconerror);

edit1.SetFocus;

exit;

end;

for i:=1 to length(s2) do

if not ((s2[i]>='A') and (s2[i]<='Z')) then begin

MessageBox(form1.Handle,'Введите правильно состояния!!!',' Error',mb_ok or mb_iconerror);

edit1.SetFocus;

exit;

end;

for i:=1 to length(s1)-1 do

for j:=i+1 to length(s1) do

if (s1[i]=s1[j]) then begin

MessageBox(form1.Handle,'Введи правильно буквы алфавита не должны повторяться!!!','Error',mb_ok or mb_iconerror);

edit2.SetFocus;

exit;

end;

for i:=1 to length(s1) do

if not ((s1[i]>='a') and (s1[i]<='z')) then begin

MessageBox(form1.Handle,'Введите правильно буквы алфавита!!!','Error',mb_ok or mb_iconerror);

edit2.SetFocus;

exit;

end;

for i:=0 to stringgrid1.ColCount-1 do

StringGrid1.ColWidths[i]:=(Stringgrid1.ClientWidth div stringgrid1. ColCount)-1;

for i:=0 to stringgrid1.RowCount-1 do

StringGrid1.RowHeights[i]:=(Stringgrid1.ClientHeight div stringgrid1. RowCount)-1;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

var i,j:integer;

stroka:string;

begin

ListBox1.Items.Clear;

for i:=1 to Stringgrid1.RowCount-1 do begin

stroka:='';

for j:=1 to Stringgrid1.ColCount-1 do begin

if (stringgrid1.Cells[j,i]>='A') and (stringgrid1.Cells[j,i]<='Z') then begin

stroka:=stroka+stringgrid1.Cells[0,i];

stroka:=stroka+'>'+stringgrid1.Cells[j,0];

stroka:=stroka+stringgrid1.Cells[j,i];

ListBox1.Items.Add(stroka);

end

else if (stringgrid1.Cells[j,i]='+') then begin

stroka:=stroka+stringgrid1.Cells[0,i];

stroka:=stroka+'>'+'*';

ListBox1.Items.Add(stroka);

end;

stroka:='';

end;

end;

end;

procedure TForm1.N7Click(Sender: TObject);

var i,j:integer;

stroka:string;

begin

ListBox1.Items.Clear;

for i:=1 to Stringgrid1.RowCount-1 do begin

stroka:='';

for j:=1 to Stringgrid1.ColCount-1 do begin

if (stringgrid1.Cells[j,i]>='A') and (stringgrid1.Cells[j,i]<='Z') then begin

stroka:=stroka+stringgrid1.Cells[0,i];

stroka:=stroka+'>'+stringgrid1.Cells[j,0];

stroka:=stroka+stringgrid1.Cells[j,i];

ListBox1.Items.Add(stroka);

end

else if (stringgrid1.Cells[j,i]='+') then begin

stroka:=stroka+stringgrid1.Cells[0,i];

stroka:=stroka+'>'+'*';

ListBox1.Items.Add(stroka);

end;

stroka:='';

end;

end;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

form4.ShowModal;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

form4.ShowModal;

end;

procedure TForm1.BitBtn5Click(Sender: TObject);

const Dop=['+','-'];

var dost:set of char;

i,j:integer;

sost:string;

nedost:boolean;

begin

for i:=1 to StringGrid1.RowCount-1 do

for j:=1 to StringGrid1.ColCount-1 do begin

if (j=StringGrid1.ColCount-1) then

if not (StringGrid1.Cells[j,i][1] in Dop) then begin

ShowMessage('Введен неверный символ!Н');

StringGrid1.Row:=i;

StringGrid1.Col:=j;

exit;

end

else

continue;

if not (StringGrid1.Cells[j,i][1] in Sostin) then begin

ShowMessage('Введен неверный символ!');

StringGrid1.Row:=i;

StringGrid1.Col:=j;

exit;

end;

end;

nedost:=false;

dost:=[];

sost:=StringGrid1.Cells[0,1];

dost:=dost+[sost[1]];

for i:=1 to StringGrid1.RowCount-1 do

for j:=1 to StringGrid1.ColCount-2 do begin

sost:=StringGrid1.Cells[j,i];

if (not (sost[1] in dost)) and (StringGrid1.Cells[0,i][1] in dost) then

dost:=dost+[sost[1]];

end;

for i:=1 to StringGrid1.RowCount-1 do

if not (StringGrid1.Cells[0,i][1] in dost) then begin

MessageBox(form1.Handle,pchar('Состояние '+StringGrid1.Cells[0,i][1]+' является недостижимым!!!'),'Error',mb_iconerror or mb_ok);

nedost:=true;

end;

if not nedost then

BitBtn3.Enabled:=true;

end;

procedure TForm1.N9Click(Sender: TObject);

begin

WinExec('C:&bsol;Program Files&bsol;Internet Explorer&bsol;Iexplore.exe F:&bsol;Моя курсовая работа&bsol;Моя Web-страница&bsol;Справка.mht',1);

end;

procedure TForm1.BitBtn6Click(Sender: TObject);

begin

ListBox1.Clear;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Sostin:=[];

end;

procedure TForm1.BitBtn7Click(Sender: TObject);

begin

form2.ShowModal;

end;

end