Форум «Всё о Паскале» _ Задачи _ модуль вычисляющий постфиксное выражение
Автор: resuS 21.06.2006 10:58
Есть программа и к ней модуль. Программа вычисляет постфиксное выражение. Должна вычислять Но после ввода самого выражения открывается код модуля и выводится сообщение об ошибке "203: heap overflow error." Что делать? !!!!Все написано в Паскале!!!! Программа:
{procedure AddStek(znak:longint);} procedure AddStek; begin New(P); P^.num1:=znak; P^.Next:=top; top:=P; end;
procedure DelStek; begin P:=top; top:=top^.Next; Dispose(P); end;
{procedure obrabotka(dey:integer);} procedure obrabotka; var N:integer; begin if dey=1 then { + } begin P:=top; N:=P^.num1; P:=P^.Next; N:=N+P^.num1; end else if dey=2 then { - } begin P:=top; N:=P^.num1; P:=P^.Next; N:=N-P^.num1; end else if dey=3 then { * } begin P:=top; N:=P^.num1; P:=P^.Next; N:=N*P^.num1; end else if dey=4 then { / } begin P:=top; N:=P^.num1; P:=P^.Next; N:=round(N/P^.num1); end; DelStek; { DelStek;} AddStek(N); end;
{procedure Stroka(str:string; result:longint);} procedure Stroka; var code,i:integer; m:longint; zn:string; begin While str<>' ' do begin i:=i+1; if str[i]=' ' then begin zn:=copy(str,0,i); str:=copy(str,i,length(str)-i+1); i:=0; m:=0; if zn='+' then obrabotka(1) else if zn='-' then obrabotka(2) else if zn='*' then obrabotka(3) else if zn='/' then obrabotka(4) else begin val(zn,m,code); AddStek(m); end; end; end; P:=top; Result:=P^.num1; end;
end.
Автор: Altair 21.06.2006 14:50
Когда строка начинает разбираться, уже начинается бред:
zn:=copy(str,0,i);
что это ? Почему копирование с 0 символа ? (я не разбирался в программе, но это уже - бред, т.к. копироваться будут i-1 символов и длинна строки ) Приведение и разбор постфиксной записи, смотри http://forum.pascal.net.ru/index.php?showtopic=3786