IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите найти ошибку в программе стекового калькулятора
Night
сообщение 20.12.2006 14:11
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Женский
Реальное имя: Иришка

Репутация: -  0  +


Помогите, пожалуйста, написать программу на Турбо Паскале «стековый калькулятор» до 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.


Сообщение отредактировано: Night - 22.12.2006 11:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.12.2006 14:21
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Сделай процедуру push с параметром, чтоб было ясно, что кладется в стек. А то вот в этом месте:
if (b=0) and ((length(s)>1) or(s[1]<> '-')) then
push


туда кладется хз что.. или после val напиши x=a;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 17:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"