Разработать алгоритм и программу поиска и сортировки элементов массива. В программе необходимо использовать структуру меню и подпрограммы пользователей (Способ получения элементов массива, Алгоритма поиска, Алгоритм сортировки).
Способ получения элементов массива: Ввод с клавиатуры Алгоритм поиска: Сравнение с выделенной ячейкой (min) Алгоритм сортировки: Быстрая сортировка (по возрастанию)
Если есть у кого какие мысли, буду рад их почитать (:
Unconnected
8.04.2010 18:58
Мы, в свою очередь, будем рады почитать твои (:
Grief
8.04.2010 19:08
Цитата(Unconnected @ 8.04.2010 18:58)
Мы, в свою очередь, будем рады почитать твои (:
Ага-ага))) Чуть позже только, я тут мудрю =_= Что-то мне этакая задачка не по вкусу ._.
Unconnected
8.04.2010 19:36
Ну, меню можно самое простое - с вводом номера нужного пункта. Алгоритмы поиска и сортировки есть в форумном FAQ (красная ссылка в верху страницы).
Client
8.04.2010 19:38
мысли... ну вот : ввод и поиск - пустяки, кода совсем не много. А сортировка есть в FAQ. меню - это как сделаешь (тоже не трудно, поиши примеры)
Grief
8.04.2010 22:09
Ну вот я нашел в FAQ программку, но это все же немного не то, я имею ввиду про сортировку, откровенно признаюсь, проблемы с этим, выручайте..) Меню я присобачить смогу, а вот с поиском тоже проблемы возникают
program Sort_Mas; const n=8; { Размерность массива } var i,j : byte; { Счетчики в циклах } imin: byte; { Индекс минимального элемента } k,c : integer; min : integer; { Минимальный элемент } a : array [1..n] of integer; begin { Заполнение массива } for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; { Пузырьковая сортировка по возрастанию } for i:=2 to n do for j:=n downto i do begin if a[j-1]>a[j] then begin c:=a[j-1];a[j-1]:=a[j];a[j]:=c; end; end; { Ставим максимальные элементы на нужные позиции } i:=1;k:=n; while k>(n div 2)+1 do begin c:=a[i]; a[i]:=a[k]; a[k]:=c; i:=i+2; k:=k-1; end; { Ставим минимальные элементы на нужные позиции } i:=2;k:=0; while k<(n div 2) do begin min:=a[i-1];imin:=i-1; for j:=i-1 to n do if a[j]<min then begin min:=a[j];imin:=j;end; c:=a[i]; a[i]:=a[imin]; a[imin]:=c; i:=i+2; k:=k+1; end; { Вывод отсортированного массива } for i:=1 to n do write(a[i],' '); readln; end.
Client
8.04.2010 22:20
такого поиска мин элемента я еще не видел (если имеено это и подразумевается)
k:=1;min:=1; for i:=2 to n do begin if a[i] > a[k] then k:=i; if a[i] < a[min] then min:=i end;
В k будет индекс максимального, в min - индекс минимального
Krjuger
9.04.2010 16:00
М,а я вот понять не могу при чем тут пузырьковая сортировка,когда у вас по заданию быстрая.Это немного разные вещи.Более того быстрая сортировка имеет рекурсивную природу.Так же в ней можно выбрать разные способы разбиения. В приводимом ниже алгоритме быстрой сортировки в качестве значения разбиения используется среднее значение. Хотя такой подход не всегда является наилучшим, он достаточно прост и сортировка будет выполняться правильно.
procedure QuickSort(var item: DataArray; count:integer); procedure qs(l, r: integer; var it: DataArray); var i, j: integer; x, y: DataItem; begin i:=l; j:=r; x:=it[(l+r) div 2]; repeat while it[i]<x do i := i+1; while x<it[j] do j := j-1; if y<=j then begin y := it[i]; it[i] := it[j]; it[j] := y; i := i+1; j := j-1; end; until i>j; if l<j then qs(l, j, it); if l<r then qs(i, r, it) end; begin qs(1, count, item); end; { конец быстрой сортировки }
Я думаю разобраться не сложно.Внутренню процедуру можно и по другому назвать.
volvo
9.04.2010 16:15
Цитата
сортировка будет выполняться правильно.
Не будет. Зависнет напрочь и все. Чтобы выполнялась правильно - надо правильно реализовать, а не просто так ответить... Условие "if y<=j then" к быстрой сортировке не имеет отношения...
Krjuger
11.04.2010 17:46
Да я дико извиняюсь,описался. Так же я думаю могут возникнуть вопросы по поводу неких типов DataArray, DataItem.В общем вот полный код.
program tester; type DataItem =char; DataArray = array [1..80] of DataItem; var test1: DataArray; t, t2: integer; testfile: file of char;
procedure QuickSort(var item: DataArray; count:integer); procedure qs(l, r: integer; var it: DataArray); var i, j: integer; x, y: DataItem; begin i:=l; j:=r; x:=it[(l+r) div 2]; repeat while it[i]<x do i := i+1; while x<it[j] do j := j-1; if i<=j then {не у а i } begin y := it[i]; it[i] := it[j]; it[j] := y; i := i+1; j := j-1; end; until i>j; if l<j then qs(l, j, it); if l<r then qs(i, r, it) end; begin qs(1, count, item); end;
begin Assign(testfile, 'test.txt'); Reset(testfile); t := 1; { считывание символов,которые будут сортироваться.} while not Eof(testfile) do begin read(testfile, test1[t]); t := t+1; end; t := t-1; {скорректировать число считанных элементов } QuickSort(test1,t); { выдать отсортированный массив символов } for t2 := 1 to t do write(test1[t2]); WriteLn; Readln; end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.