Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
реализация динамических связных линейных структур данных
Помогите пожалуйста исправить программу: Для заданного арифметического выражения напечатать операции в порядке их выполнения. Использовать стек.
Программа практически работает,но не совсем правильно. нужно чтоб работала с любым выражение(не только с одним),то есть должна быть универсальной.

uses crt;
type stek= ^s;
s = record
data:string;
n:integer;
zn:integer;
next:stek;
end;

var
i,j,k,c:integer;
x,top,next: stek;
str:string;

procedure Init(var top:stek); {inicializiryem}
begin
top:=nil;
end;

procedure In_stek(data:string; var top:stek); {dobavlyaem v stek }
var p: stek;
begin new(p);
p^.data:=data;
p^.next:=top;
top:=p;
end;

procedure Out_stek(var data:string; var top:stek); {vinimaem iz steka}
var p: stek;
begin data:=top^.data;
p:=top;
top:=top^.next;
dispose(p);
end;

Begin
clrscr;
i:=0;
// str:='((a+b)*(c-d)+e*g)';

writeln('VVedite Viragenie vida(....):');
readln(str);//schitali stroky
k:=length(str);//opredelyaem ee dlinny
Init(top);
while i<k do
begin
In_Stek(Str[k-i],Top);
i:=i+1;
end;
X:=Top;
j:=0;

while x<>nil do
begin
if x^.data='(' then j:=j+1;
x:=x^.next;
end;
// writeln(j);

x:=top;
while j<>1 do //vipisivaem vse virajeniya v skobkah
begin

while c<>j do
begin
if x^.data='(' then c:=c+1;
x:=x^.next;
end; //dohli do samoi pravoi skobki '('

while x^.data<>')' do
begin
x^.zn:=1;
write(x^.data);
x:=x^.next;
end;
writeln;
j:=j-1;
c:=0;
x:=top;
end;
j:=0;
x:=top;
while x<>nil do
begin
if (((x^.data='*') or (x^.data='/')) and (x^.zn<>1))
then
begin
writeln(x^.data);
end;
x:=x^.next;
end;

x:=top;
while x<>nil do
begin
if (((x^.data='-') or (x^.data='+')) and (x^.zn<>1))
then
begin
writeln(x^.data);
end;
x:=x^.next;
end;

1 | Автор: Амосенька | 2010-11-12, 22:02   |  Репутация: [ + 0 ]
  • Страница 1 из 1
  • 1
Поиск: