Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите найти ошибку в программе стекового калькулятора
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Night
Помогите, пожалуйста, написать программу на Турбо Паскале «стековый калькулятор» до 23.12.06. Моя программа почему-то не работает. Ответы и советы присылайте на <censored> Заранее большое СПАСИБО! вот сама программа:

Program calculator;

Const
maxStack = 250; {максимальный размер стека }
c: Integer=0;

Var
stek: array [1..maxStack] of Integer; {стек}
x: integer;
s: string;
a, b: integer;

Procedure Push; {положить на стек}
begin
if c<>maxStack then
begin
inc ©;
stek[c] := x;
writeln('pushed ', stek[c]);
end;
end;

Function Pop:integer; {вытащить из стека }
begin
if c<>0 then
begin
pop:=stek[c];
dec©;
end;
end;

begin
writeln('введите функцию для калькулятора');
write(':');
readln(a);
writeln('введите функцию для калькулятора ');
write(':');
readln(b);
val(s, a, b);
if (b=0) and ((length(s)>1) or(s[1]<> '-')) then
push
else
case s[1] of
'+':
begin
a:=pop;
b:=pop;
x:=a+b;
push;
{ writeln(x);}
end;
'-':
begin
a:=pop;
b:=pop;
x:=a-b;
push;
{ writeln(x);}
end;
'/':
begin
a:=pop;
b:=pop;
if a=0 then
writeln ('¤Ґ«Ёвм ­  0 Ќ…‹њ‡џ')
else
begin
x:=b div a;
push;
{ writeln(x);}
end;
end;
'*':
begin
a:=pop;
b:=pop;
x:=a*b;
push;
{ writeln(x);}
end;
end;
writeln('x=',x);
readln;
end.
Malice
Сделай процедуру push с параметром, чтоб было ясно, что кладется в стек. А то вот в этом месте:
if (b=0) and ((length(s)>1) or(s[1]<> '-')) then
push


туда кладется хз что.. или после val напиши x=a;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.