Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Поиск в списке


Автор: Emily 24.4.2007, 18:25
Помогите с задачей,плиз!Условие таково:"нахождение к-того наименьшего елемента в незамкнутом списке".Буду очень благодарна

Автор: Klin 25.4.2007, 00:11
Если я правильно понял, то существует список чисел (массив), и в нем нужно найти элемент массива с наименьшим значением. Можно сделать так:
Код

var n: array [1..5] of integer;
    k, min, num: integer;
begin
 n[1]:=5; n[2]:=3; n[3]:=1; n[4]:=2; n[5]:=4; { заполняяем наш спискок. если динамически, то: for k:=1 to 5 do readln(k); }
 min:=n[1]; { придаем минимальному значению значение первого элемента } 
 for k:=2 to 5 do 
  if (min>n[k]) then { сравнимаем минимум и к-тый элемент массива }
   begin
    min:=n[k]; { заменяем минимум }
    num:=k; { заменяем номер элемента }
   end;
 writeln('Элемент под номером',num,' является минимальным и имеет значение',min); { сообщаем пользователю об итогах }
end.

Будут вопросы, пиши.

Автор: MBo 25.4.2007, 07:42
Заводится структура данных под названием очередь по приоритетам, проще всего - на основе кучи (heap, бинарная пирамида) на к элементов. В нее заносятся первые k элементов из списка, затем каждый следующий сравнивается с максимальным текущим элементом (вершиной кучи), и если он меньше, заменяется вершина кучи и выполняется восстановление пирамидальности кучи.

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

Автор: Emily 25.4.2007, 22:53
Большое спасибо!!!! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)