Автор работы: Пользователь скрыл имя, 01 Августа 2011 в 02:13, лабораторная работа
Задание для лабораторной работы по дисциплине "теория вычислительных процессов и структур. Условное обозначение разработки - лабораторная работа.
Постановка задачи…………………………………………………………3
Структурная схема программы (Алгоритм.)…………….………………4
Выбор языка и средств……………………………………………………4
Тестовый пример…………………………………………………………..5
Руководство оператора…..………………………………………………..5
Руководство программиста……………………………………………….7
Текст программы…………………………………………………………...8
Применим к грамматике G алгоритм
и получим не укорачивающуюся КС- грамматику
G’==({W,S,A,B},{0,1},P’,W), где Р’ состоит из
продукций:Среди которых нет цепных.
Программа предназначена для устранения цепных продукций в не укорачивающейся КС–грамматики G(N,E,P,S).
Для функционирования программы необходим
набор стандартных технических
средств. Набор необходимых программных
средств данной программе обеспечивает
библиотеки языка программирования –DELPHI.
Для выполнения программы требуется:
При запуске программы появляется рабочий интерфейс программы (рис 2).Как вы видете у программы три рабочих окна и три кнопки.
По порядку слева на право
Программа
работает с заглавными
и прописными буквами.
4.5 Сообщения оператору
нет сообщений.
Программа предназначена для
устранения цепных продукций
в не укорачивающейся КС–
Для функционирования программы необходим набор стандартных технических средств. Набор необходимых программных средств данной программе обеспечивает библиотека языка программирования – DЕLPHI
Для выполнения программы требуется:
Основные характеристики программы:
Файл запуска программы: BIBOB.exe (без параметров).
Входные данные: неукорачивающаяся КС- грамматика G(N,E,P,S).
Выходные
данные: неукорачивающаяся КС- грамматика
G(N,E,P’,S) без цепных продукций.
unit DE_CURSDELPROD;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Bbrun: TBitBtn;
Bbcloce: TBitBtn;
edInput: TEdit;
Label1: TLabel;
mmOutput: TMemo;
edInput1: TEdit;
Bbrun1: TBitBtn;
bbRun2: TBitBtn;
St: TStaticText;
procedure BbrunClick(Sender:TObject);
procedure Bbrun1Click(Sender:TObject);
procedure FormCreate(Sender:TObject);
procedure bbRun2Click(Sender:TObject);
private
{ Private declarations}
public
{ Public declarations }
end;
const n=20;
var
Form1: TForm1;
s1:array[0..n,0..n] of string[6];
s2:array[0..n,0..n]
of string[6];
implementation
{$R *.DFM}
{procedure TForm1.Memo1Change(Sender: TObject);
begin
end;}
procedure TForm1.BbrunClick(Sender:
TObject);
Procedure Enter;
var
S:String;
i,j,i1:byte;
begin
i:=Bbrun.tag;
S1[i,0]:=edInput1.Text;
i1:=length(s1[i,0]);
s1[i,0]:=s1[i,0][i1];
S:=edInput.Text;
if S=' ' then
Exit
else
begin
for j:=1 to n do
begin
if pos('|',S)=0
then
begin
s1[i,j]:=Trim(S); break;
end
else
begin
s1[i,j]:=copy(S,1,pos('|',S)-
Delete(S,1,pos('|',S));
end;
end;
end;
s:=''; j:=0;
while (s1[i,j]<>'') do
begin
j:=j+1;
if s1[i,j+1]<>''
then
begin
s:=s+s1[i,j]+'|';
end
else
s:=s+s1[i,j];
end;
s:=s1[i,0]+'->'+s;
i:=i+1; Bbrun.tag:=i;
mmOutput.Lines.Add(s);
edInput.Text :='' ;
edInput1.Text:='';
end;
begin
enter;
end;
procedure TForm1.Bbrun1Click(Sender: TObject);
var
s3:array[1..n] of string[6];
l:'A'..'Z';
i,j:byte; s:string;
{=============================
procedure udprod;
var
i,i1,j,k1:byte;
begin
{===Удаление одинаковых значений=========}
for k1:=0 to n do
for i1:=0 to n do
for i:=0 to n-2 do
for j:=i to n-2 do
begin
if s1[i1,i]=s1[i1,j+1]
then
s1[i1,j+1]:=s1[i1,j+2];
end;
{=============================
end;
{=============================
Procedure end1;
var
i,j,k1:byte; l:'A'..'Z';
begin
{for i1:=1 to n do}
for l:='A' to 'Z' do
for i:=0 to n do
if s1[i,0]<>'' then
for j:=1 to n do
begin
if s1[i,j]=l then
begin
k1:=j;
while s1[i,k1]<>'' do
begin
if s1[i,k1]<>'' then
s1[i,k1]:=s1[i,k1+1];
k1:=k1+1;
end;
s1[i,k1-1]:=l;
end;
end;
end;
{=============================
procedure pr;
var
i,i1,i2,j,j1,k2,k3:byte; l:'A'..'Z';
begin
{-----------------------------
k3:=0;
for i2:=0 to n do
if s1[i2+1,0]<>'' then
begin
k3:=k3+1;
for k2:=0 to n do
if s1[k2+1,0]<>'' then
begin
for l:='A' to 'Z'do
begin
i:=i2; j:=0;i1:=0;
repeat
i:=i+1;
repeat
j:=j+1;
if l=s1[i-1,j]
then
begin
repeat
i1:=i1+1;
if s1[i1,0]=l
then
begin
{--------------------------
while s1[i-1,j]<>'' do
begin
s1[i-1,j]:=s1[i-1,j+1];
j:=j+1;
end;
j1:=1;
{----Запоминаем старые и вставляем новые---}
repeat
s3[j1]:=s1[i-1,j];
s1[i-1,j-1]:=s1[i1,j1];
j:=j+1; j1:=j1+1;
until s1[i1,j1]='';
j1:=1;
{----Вставляем новые-запомненые символы--}
repeat
s1[i-1,j]:=s3[j1];
j:=j+1; j1:=j1+1;
until s3[j1]='';
{-----------------------------
end;
until s1[i1,0]='';
end;
until s1[i,j]='';
until s1[i,j]='';
end;
udprod;
end1;
end
else
break
end
else
break;
{=============================
{-----------------------------
for i2:=k3 downto 0 do
Информация о работе Реализация алгоритма по устранению цепных продукций