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

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

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

> Задача на очередь, Паскаль
сообщение
Сообщение #1





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

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


Всем привет. Задача следующая.
Сформировать очередь елементами которой есть цифры и арифметические знаки. Нужно вывести результат.

Пробовал сделать, но у меня почему-то выводится самый последний символ в очереди вместо результата. Скорей всего ошибка детская, но в теме немного не разобрался ://

Вот текст программы:
Program lab13z;       
Const zn=['+','-','*','/'];
Type zv=^pointer; {описание переменных}
pointer=record
boolkey:boolean;
arsing:char;
arcint:integer;
next:zv;
end;
Var scher,lcher:zv;
symb:char;
cfr:integer;
a,b:integer;

Procedure vcherc(zv1:zv;cfr1:integer); {процедура вставки ЧИСЛА в очередь}
Var q:zv;
Begin
new(q);
q^.arcint:=cfr1;
zv1^.next:=q;
zv1:=zv1^.next;
end;

Procedure vchers(zv1:zv;simv:char); {Процедура вставки СИМВОЛА в очередь}
Var q:zv;
Begin
new(q);
q^.arsing:=simv;
zv1^.next:=q;
zv1:=zv1^.next;
end;

Begin {формирование очереди}
new(scher);
scher^.next:=nil;
lcher:=scher;
writeln('Введите очередь');
repeat
read(symb);
if symb in ['0'..'9'] then
Begin
cfr:=ord(symb)-48+cfr*10;
vcherc(lcher,cfr);
cfr:=0;
end;
if symb in zn then
vchers(lcher,symb)
until symb='=';
scher:=scher^.next;
a:=scher^.arcint;
scher:=scher^.next;
while (scher<>nil) do
Begin
symb:=scher^.arsing;
scher:=scher^.next;
b:=scher^.arcint;
scher:=scher^.next;
case symb of
'+':a:=a+b;
'-':a:=a-b;
'*':a:=a*b;
'/':a:=a div b;
end;
end; {Cкорей всего неправильно вывожу результат =/}
write(a);
Readln;
readln;
end.


Зарание спасибо за помощь.

Сообщение отредактировано: mirtan -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 17.05.2024 16:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name