Реализация алгоритма по устранению цепных продукций

Автор работы: Пользователь скрыл имя, 01 Августа 2011 в 02:13, лабораторная работа

Описание

Задание для лабораторной работы по дисциплине "теория вычислительных процессов и структур. Условное обозначение разработки - лабораторная работа.

Содержание

Постановка задачи…………………………………………………………3
Структурная схема программы (Алгоритм.)…………….………………4
Выбор языка и средств……………………………………………………4
Тестовый пример…………………………………………………………..5
Руководство оператора…..………………………………………………..5
Руководство программиста……………………………………………….7
Текст программы…………………………………………………………...8

Работа состоит из  1 файл

deund got.doc

— 1.16 Мб (Скачать документ)

        Применим к грамматике G алгоритм и получим не укорачивающуюся КС- грамматику G’==({W,S,A,B},{0,1},P’,W), где Р’ состоит из продукций:Среди которых нет цепных. 

Руководство оператора.

4.1 Назначение  программы.

Программа предназначена для устранения цепных продукций в не укорачивающейся  КС–грамматики G(N,E,P,S).

4.2 Условия  выполнения программы.

     Для функционирования программы необходим  набор стандартных технических  средств. Набор необходимых программных средств данной программе обеспечивает библиотеки языка программирования –DELPHI. 

    Для выполнения программы требуется:

  • Компьютер - IBM или совместимый с ним.
  • Операционная система Windows 9X,
  • Процессор - не ниже 80486 фирмы INTEL.
  • Память - не менее 1 Mбайт.

4.3 Выполнение  программы.

  При запуске  программы появляется рабочий интерфейс программы (рис 2).Как вы видете у программы  три рабочих окна и три кнопки.

По порядку слева на право

        1. Кнопка MEMORY используется для внесения  Введенной подукции в буфер обмена (после ввода каждой продукции ее надо нажимать )
        2. Окно ввода левой части продукции (нетерминалов)
        3. Окно ввода правой части продукции (правую часть продукции вводить так например 0A|0|1B|1)
        4. Кнопка GO –приминение алгоритма к введенным продукциям, используется только после ввода всех продукций.
        5. Кнопка REPLAY -перезапуск программы (после нажатия выдает пример вводимых продукций )
        6. Окно вывода результата (изначально, названно, mmOutput) в этом редактируемом окне вы получаете искомый результат.
        7. Кнопка CLOSE предназначенна для выхода из программы.
 

Программа работает с заглавными и прописными буквами. 
 

4.5 Сообщения оператору

нет сообщений.

Руководство программиста.

3.1 Назначение  и условия применения.

       Программа предназначена для  устранения цепных продукций  в не укорачивающейся КС–грамматики G(N,E,P,S).

    Для функционирования программы необходим  набор стандартных технических  средств. Набор необходимых программных средств данной программе обеспечивает библиотека языка программирования – DЕLPHI

    Для выполнения программы требуется:

  • Компьютер - IBM или совместимый с ним.
  • Процессор - не ниже 80486 фирмы INTEL.
  • Операционная система Windows 9X
  • Память - не менее 1 Мбайт.

3.2 Характеристики  программы.

    Основные  характеристики программы:

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

3.3 Обращение  к программе.

    Файл  запуска программы: BIBOB.exe (без параметров).

3.4 Входные  и выходные данные.

    Входные данные: неукорачивающаяся КС- грамматика G(N,E,P,S).

    Выходные  данные: неукорачивающаяся КС- грамматика G(N,E,P’,S) без цепных продукций. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  7.       Текст программы.

  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)-1);

          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

Информация о работе Реализация алгоритма по устранению цепных продукций