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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Попробуй сразу после того, как ты "заполнил" очередь, ее напечатать (т.е., напечатать символы/цифры, присутствующие в очереди). Больше ничего делать не надо, просто напечатать. Тогда тебе станет понятно, что заполняешь ты очередь неверно.

Для начала: что такое очередь, тебе известно? Что ты имеешь в виду под термином "очередь"? Структуру FIFO (First In - First Out/Первым вошел - Первым выйдешь)? Или что-то другое?

По какому алгоритму ты заполняешь очередь? Опиши его словами, а не кодом на Паскале, пожалуйста. И поверь, я просто так ничего не спрашиваю. Потом поймешь, почему я задаю такие вопросы. Если будешь на них отвечать, разумеется, а не просто ждать, пока кто-нибудь исправит программу.

Только скажи сразу, чего ты хочешь. Хочешь разобраться (понять, что у тебя не так, и исправить) самостоятельно - пожалуйста, я помогу, надеюсь - не только я, остальные тоже с удовольствием помогут. Если надо исправить за тебя, то на мою помощь можешь не рассчитывать.
 К началу страницы 
+ Ответить 

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


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

 





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