Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 00:00   #1
Юлечка
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 2
Вопрос что не так в процедуре поиска?

Мне нужно создать очередь в которой помещается какое-то количество элементов. необходимо создать третье поле prioritet, согласно которому будут извлекаться данные из стека. Я написала программу, но видимо из меня некудышный программист))

вот код на Паскале АBC:

Код:
program prioritet;
type TP=^TU;
tu=record
pr:integer;
d:integer;
p:Tp;
end;
var q,vchod,m :Tp;
    i,x,y:integer;

{procedure p1(k,s:integer);
begin
new(m);
vchod:=m;
m^.d:=k;
m^.pr:=s;
vchod^.p:=m;
end; }

procedure p1(k,s:integer);
begin
new(m);
 m^.d:=k;
m^.pr:=s;
m^.p:=vchod;
vchod:=m;
end;


procedure poisk (m:TP);
var max,maxx:TP;
begin
if vchod=nil then writeln('очередь пуста') else
     begin
     m:=vchod^.p;
     max:=m;
     while m<>nil do
     begin
      if max^.pr<m^.pr then max^.pr:=m^.pr;
      m:=m^.p;
     end;
     while m<>nil do
     begin
      if m^.p=max then maxx:=m;
      m:=m^.p;
     end;
     writeln('приоритет',m^.pr, ' значение',m^.d);
     maxx^.p:=max^.p;
     dispose(max);
     end;
     writeln('--------------');
     while m<>nil do
     begin
      writeln('приоритет',m^.pr,' значение',m^.d);
      m:=m^.p;
      end;
end;

begin
vchod:=nil;
for i:=1 to 4 do begin
writeln('ввести элемент');
readln(x);
writeln('ввести приоритет');
readln(y);
 p1(x,y);
end;

     writeln('--------------');
     
                                   poisk(q);
     while q<>nil do
     begin
      writeln('приоритет',q^.pr,' значение',q^.d);
      q:=q^.p;
      end;
end.
заранее спасибо)

Последний раз редактировалось Stilet; 15.09.2010 в 08:49.
Юлечка вне форума Ответить с цитированием
Старый 15.09.2010, 08:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Юля, если тема еще актуальна поясни подробно на что должен влиять приоритет?
Очередь должна сортироваться на выходе по приоритету?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2010, 21:43   #3
Юлечка
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 2
По умолчанию

Тема актуальна) Да, ты правильно понял! Очередь должна сортироваться на выходе по приоритету. Ну точнее просто выводиться по приоритету.
Юлечка вне форума Ответить с цитированием
Старый 17.09.2010, 01:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вообще, конечно, лучше было бы отсортировать очередь по приоритету, а потом уже просто вывести отсортированную.

А ещё можно составить дополнительную структуру (очередь) где расположить индексы элементов в порядке приоритета. и уже выводить элементы основной очереди согласно порядку в этой вспомогательной очереди.

Но можно и выводить в порядке приоритета.
Хоть это и КРАЙНЕ неэффективно!
Алгоритм такой:
Код:
Перебором находим PrioritetMin: элемент с минимальной величиной приоритета.
Одновременно подсчитываем, сколько элементов в очереди.
Количество выведенных элементов := 0

в цикле, пока Количество выведенных элементов <  КоличестваЭлементов в очереди 
     начиная от первого элемента проверяем величину и выводим все элементы, приоритет которых равен минимальному = PrioritetMin 
     (при выводе элемента Количество выведенных элементов = Количество выведенных элементов + 1)
     Одновременно ищем PrioritetMinNext: следующую минимальную величину приоритета > PrioritetMin
     Если дошли до конца очереди, то PrioritetMin := PrioritetMinNext
конец цикла.

Последний раз редактировалось Serge_Bliznykov; 17.09.2010 в 01:09.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что не так? zumm Работа с сетью в Delphi 4 31.08.2010 16:06
А что не так??? frargus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 21.03.2010 08:05
Что не так? rododendron Общие вопросы C/C++ 5 05.05.2009 22:48
Что не так? Alexcomeback Общие вопросы C/C++ 9 07.04.2009 23:14
Что-то не так Radiofuck Помощь студентам 2 16.01.2007 22:06