на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Программа построения грамматики для конечного автомата
b>2.4 Структура разрабатываемого программного продукта.

37

Рисунок 2 - Структура разрабатываемого программного продукта

Рассматриваемая структура изображена на рисунке 2.

2.5 Блок-схема

Функциональная схема разработанного программного продукта приведена на рисунке 3.

нет

да

Рисунок 3 - Функциональная схема программного продукта

2.6 Работа с ПП, справочной системой

Справочная система представлена в виде Web-страницы, что вызывается gри нажатии F7. Ссылка на адрес её расположения указана в листинге программы: WinExec('C:\Program Files\Internet Explorer\Iexplore.exe F:\Моя курсовая работа\Моя Web-страница\Справка.mht',1);

Запустите Primer4. Всплывает окно (рисунок 4):

Рисунок 4 - Главная форма

Вводим состояния и алфавит (рисунок 5):

Рисунок 5 - Главная форма с заполненными строками

Нажимаем на кнопку «Конечный Автомат». Заполняем управляющую таблицу. Проверим конечный автомат (рисунок 6):

Таблица 1 - Компоненты программы

Имя компонента в модуле

Назначение компонента

События компонента

Назначение обработчиков событий

Примечания

MainMenu

Самая главная форма, где расположены все компоненты

BitBtn1

Кнопка для создания конечного автомата

OnClick

Создание управляющей таблицы.

BitBtn2

Кнопка выхода

OnClick

Закрытие программы.

BitBtn3

Кнопка для создания граматики.

OnClick

Создания првил грмматики.

BitBtn4

Кнопка для вызова правил ввода.

OnClick

Открывается форма с правилами ввода.

BitBtn5

Кнопка проверки конечного автомата.

OnClick

Проверка конечного автомата на недостижимые символы.

BitBtn6

Кнопка очистки поля

OnClick

Очищает поле, где расположены правила найденной грамматики.

BitBtn7

Кнопка вызова справки о программном продукте.

OnClick

Edit

Cтрока для ввода символов состояния и алфавита.

Ввод символов состоянии и алфавита конечного автомата.

StringGrid

Компонент для управляющей таблицы

ListBox

Поле для правил грамматики

В таком случае, невозможно построить грамматику. Строим конечный автомат, в котором все состояния достижимы. И только тогда строим грамматику. В таблице 1 предоставлена информация о компонентах программы.

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:\Program Files\Internet Explorer\Iexplore.exe F:\Моя курсовая работа\Моя Web-страница\Справка.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

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.