Разработка программы работы с очередью

Автор работы: Пользователь скрыл имя, 03 Мая 2013 в 01:32, лабораторная работа

Описание работы

Разработать программу работы с очередью. Программа должна содержать
следующие процедуры, вызываемые из меню:
- построение пустой очереди;
- добавление нового элемента в конец очереди;
- удаление элемента с начала очереди;
- просмотр очереди

Файлы: 1 файл

ур.docx

— 521.52 Кб (Скачать файл)

Белорусский государственный  университет информатики и радиоэлектроники

Кафедра ПОИТ

 

 

 

 

ОТЧЁТ

по лабораторной работе № 3

По дисциплине ОАиП

Вариант №31

 

 

 

Выполнил:

Студент группы 251005

Шейко Игорь Иосифович

Проверил:

Данилова Галина

 

 

Минск 2012

 

Задача №1

Разработать программу работы с  очередью. Программа должна содержать 
следующие процедуры, вызываемые из меню: 
- построение пустой очереди;                                
- добавление нового элемента в конец очереди; 
- удаление элемента с начала очереди;               
- просмотр очереди

 

Решение

type

  och=^ass;

  ass=record

     zn:string;

     next:och;

     end;

// Построение пустой очереди

procedure TForm1.N1Click(Sender: TObject);

begin

    new(x);

    x^.next:=nil;

    b:=x;

   e:=x;

end;

// Добавление элемента в очередь

procedure TForm2.Button1Click(Sender: TObject);

begin

     s:=edit1.Text;

     new(x);

     e^.next:=x;

     x^.zn:=s;

     x^.next:=nil;

     e:=x;

end;

// удаление элемента

procedure TForm1.N3Click(Sender: TObject);

  var

    k:word;

begin

     if k=idyes then

          b:=b^.next;

end;

// просмотр очереди

procedure TForm3.FormActivate(Sender: TObject);

var

   q:och;

   st:string;

   k:integer;

begin

   k:=0;

   q:=b^.next;

   while q^.next<>nil do

               begin

                 inc(k);

                 stringgrid1.ColCount:=k;

                 stringgrid1.Cells[k-1,0]:=inttostr(k)+'-ый';

                 stringgrid1.Cells[k-1,1]:=q^.zn;

                 q:=q^.next;

               end;

   inc(k);

   stringgrid1.ColCount:=k;

   stringgrid1.Cells[k-1,0]:=inttostr(k)+'-ый';

   stringgrid1.Cells[k-1,1]:=q^.zn;

 

end;

 

 

Блок-схемы

 

Задача №2

Получить выражение в постфиксной  форме, используя стек, и вычислить  по 
полученному ПОЛИЗу значение выражения. Предусмотреть работу с операцией 
"степень".

 

Решение

 

procedure minus(q:char);

begin

  while (otn(q)<=stekov(posl^.zn)) and (posl^.pr<>nil)do

     begin

       ans:=ans+posl^.zn;

       posl:=posl^.pr;

     end;

  new(x);

  x^.zn:=q;

  posl^.next:=x;

  x^.pr:=posl;

  posl:=x;

end;

 

procedure raschet;

begin

   for i:=1 to length(s) do

          if had^.next=nil then

                      begin

                         new(x);

                         x^.zn:=s[i];

                         x^.pr:=had;

                         x^.next:=nil;

                         had^.next:=x;

                         posl:=x;

                      end

          else

          if s[i]=')' then

                         begin

                         while (posl^.zn<>'(') do

                                     begin

                                      ans:=ans+posl^.zn;

                                      posl:=posl^.pr

                                     end;

                         posl:=posl^.pr

                         end

          else

          if otn(s[i])>stekov(posl^.zn) then

                                        begin

                                           new(x);

                                           x^.zn:=s[i];

                                           x^.pr:=posl;

                                           x^.next:=nil;

                                           posl^.next:=x;

                                           posl:=x;

                                        end

          else

              minus(s[i]);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

   s:=edit1.Text;

   new(x);

   x^.next:=nil;

   x^.pr:=nil;

   had:=x;

   ans:='';

   rang:=0;

    button2.Visible:=true;

    raschet;

     while posl^.pr<>nil do

                        begin

                           ans:=ans+posl^.zn;

                           posl:=posl^.pr;

                        end;

      form1.Label1.Caption:=ans;

end;

 

procedure TForm2.Button1Click(Sender: TObject);

begin

   label5.Visible:=true;

   label7.Visible:=true;

   for i:=0 to kol do

             begin

                ia:=form2.stringgrid1.Cells[0,i];

                mas[ord(ia[1])]:=strtofloat(form2.StringGrid1.Cells[1,i]);

             end;

   e:=0;

   for i:=1 to length(ans) do begin

                  if ans[i] in ['a'..'z','A'..'Z'] then

                                 begin

                                 inc(e);

                                 stek[e]:=mas[ord(ans[i])];

                                 end

                  else

                                 begin

                                   b:=stek[e];

                                   a:=stek[e-1];

                                   e:=e-2;

                                   if ans[i]='+' then

                                              pos:=a+b;

                                   if ans[i]='-' then

                                              pos:=a-b;

                                   if ans[i]='*' then

                                              pos:=a*b;

                                   if ans[i]='/' then

                                              pos:=a/b;

                                   if ans[i]='^' then

                                                    pos:=exp(b*ln(a));

                                   inc(e);

                                   stek[e]:=pos;

                                 end;

 

 

                  end;

  stek[1]:=(trunc(stek[1]*100))/100;

  label5.Caption:=floattostr(stek[1]);

end;

 

 

 

Блок схема

 

 

 

 

 


Информация о работе Разработка программы работы с очередью