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

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

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

> Задача на очередь, Паскаль
mirtan
сообщение 25.01.2010 22:02
Сообщение #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 - 25.01.2010 22:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 

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