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

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

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

 
 Ответить  Открыть новую тему 
> Задача на очередь
сообщение
Сообщение #1


Гость






Вот такая задача "Используя очередь, распечатать в заданной последовательности символов сначала все цифры, затем остальные символы".Короче проходим сначла один раз по очереди печатаем цифры,второй раз остальные символы....я знаю как реализовать это используя две очереди...подскажите как сделать с одной..если это вообще возможно...
program dgdfgdfg;
uses crt;
type
ref=^z;
z=record
next:ref;
el:char;
end;
inout=(in1,out);
FIFO=array[in1..out] of ref;
var order,order1:FIFO;a,h:char;q:ref;n,k,t:integer;

begin
clrscr;
new(order[in1]);
order[out]:=order[in1];
order[in1]^.next:=nil;
new(order1[in1]);
order1[out]:=order1[in1];
order1[in1]^.next:=nil;

repeat
readln(a);
new(q);
q^.next:=nil;
q^.el:=a;
order[in1]^.next:=q;
order[in1]:=q;
n:=n+1;
until a='.';


while k<>n do
begin
q:=order[out]^.next; h:=q^.el;
if h in ['0'..'9']
then
begin
write(' ',q^.el);
order[out]^.next:=q^.next;
if q^.next=nil
then order[in1]:=order[out];
dispose(q);
t:=t+1;
end
else
begin
order[out]^.next:=q^.next;
order1[in1]^.next:=q;
order1[in1]:=q;

end;
k:=k+1;

end;
k:=0;
while k<>n-t do
begin
q:=order1[out]^.next;
write(' ',q^.el);
order1[out]^.next:=q^.next;;
dispose(q);
k:=k+1;
end;
readkey;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






blink.gif blink.gif
А зачем тебе 2 очереди? Заталкивай все в одну (включая завершающую точку), потом когда надо распечатать вначале только цифры, а потом - все остальное - делай так:
Код
While Голова_Очереди <> '.' Do Begin

  If Голова_Очереди In ['0' .. '9'] Then Begin
    WriteLn(Голова_Очереди);
    Удалить_Элемент_Из_Очереди
  End
  Else Перенести_Элемент_В_Хвост

End;

Тогда после этого прохода у тебя в очереди останутся только НЕ цифры, и второй проход - "пока очередь не пуста просто распечатывать ее содержимое"...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Во вторую очередь я заталкиваю все не цифры....потому что у меня ума не хватает после того как я прошел очередь один раз и вывел цифры..пройти ту же самую очерь ещё раз и вывести то что там осталось....поэтому я вывожу элементы из другой второй очереди.....прохордя её тем самым первый раз......вот такие дела.. mega_chok.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






сори..не подписался....ты пишешь Else Перенести_Элемент_В_Хвост....как это сделать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Всё допёрло ...сделал одной очередью.....въехал как в хвост добавить не цифры.....спасибо чел что время потратил...удаляй тему на хрен...
 К началу страницы 
+ Ответить 

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

 




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