![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Дорого времени суток. Так как новичок в делфи, много еще не знаю. Пишу курсовую и там есть задание: используя рендом перемешать элементы массива перемешать массив. Это как? Массив у меня на 100 элементов.
попутно подскажите как сортировать массив слитием и пузырьковой сортировкой или поделитесь ссылкой |
#3
|
|||
|
|||
![]() то есть я должен показать код сия творения разума моего чтоб задавать вопросы, точнее искать подсказок на допущены мной ошибки, да бы найти ответ? а не попросить помощи в трудную минуту поиска?
З.Ы. Гугл не все может рассказать или объяснить =) |
#4
|
||||
|
||||
![]() Рассказать и объяснить - пожалуйста. А за готовым кодом - не в этот раздел.
В курсовых работах редко дают что-то, что не давали в программе обучения. Тем более, задача элементарная. Так что резонно замечание "надо было на лекции ходить, а не по beer & girls шляться". P.S. Литература по Delphi. P.P.S. Честно, мне не сложно. Просто потом студенты-программисты получают дипломы и идут работать по специальности, а программировать не умеют. И очень сильно удивляются, когда их пинками выгоняют из фирмы. Так что для твоего же блага стараемся ![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
||||
|
||||
![]() Цитата:
![]() А алгоритмы сортировки легко ищутся в google и подробно описаны в Википедии: |
#6
|
||||
|
||||
![]() poli-smen, почисти личку, не могу тебе написать
![]() -> Давай лучше ссылки на LMGTFY. Отлично мотивирует ^ Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
![]() Цитата:
p.s. Немного почистил. |
#8
|
|||
|
|||
![]() хах) ок ок, все не так просто, я заочник и программа информатики у меня длилась 2 пары. Да, перемешать и упорядочить массив легко, это одни из функций программы которая задана на курсовой, но при виде кода (примера алгоритма) я попросту теряюсь. я спрашиваю только то чего не могу понять или не могу найти.
|
#9
|
||||
|
||||
![]() Цитата:
![]() Мы не злые. Мы не любим нахлебников, которые хотят только готовый код. Но новичков, тянущихся к знаниям, мы любим, ценим и уважаем ![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#10
|
|||
|
|||
![]() я уже был здесь и мне помогали с циклом для задания рендомного числа для массива. и с проблемой по поводу едита. мне довольно таки быстро помогли и дали знаний на последующий шаг, за что я во многом благодарен. Вообще в будущем у меня в планах использовать делфи чтоб объединить бардак у меня на жостком, я просто гитарист больше чем программист и нужно навести порядок в бесконечных сохранены текстах и аккордах с табами. а программу такую не найти, попробую написать ее сам. но сейчас я учусь (хотя живя жизнь мы все время учимся =) ). Ну тогда начнем: Гугл помог, но что-то помощь его не очень понятна, доверие к википедии имеет монополию и вот что я вижу, псевдокод.. хм, хорошо, а на делфи как адаптировать?
Код:
Пример реализации алгоритма простого двухпутевого слияния на псевдокоде: function mergesort(m) var list left, right, result if length(m) ≤ 1 return m else middle = length(m) / 2 for each x in m up to middle add x to left for each x in m after middle add x to right left = mergesort(left) right = mergesort(right) result = merge(left, right) return result end if Есть несколько вариантов функции merge(), наиболее простой вариант может выглядеть так: function merge(left,right) var list result while length(left) > 0 and length(right) > 0 if first(left) ≤ first(right) append first(left) to result left = rest(left) else append first(right) to result right = rest(right) end if if length(left) > 0 append left to result if length(right) > 0 append right to result return result function mergesort(m) - (м) это массив? |
#11
|
|||
|
|||
![]() простите люди, я ло* =)
Код:
unit uMergeSort; interface type TItem = Integer; //Здесь можно написать Ваш произвольный тип TArray = array of TItem; procedure MergeSort(var Arr: TArray); implementation function IsBigger(d1, d2 : TItem) : Boolean; begin Result := (d1 > d2); //Сравниваем d1 и d2. Не обязательно так. Зависит от Вашего типа. //Сюда можно добавить счетчик сравнений end; //Процедура сортировки слияниями procedure MergeSort(var Arr: TArray); var tmp : TArray; //Временный буфер // А где реализация процедуры? Этот код работать не будет, допишите, пожалуйста \ //Слияние объясните ибо тупой =) procedure merge(L, Spl, R : Integer); / var i, j, k : Integer; begin i := L; j := Spl + 1; k := 0; //Выбираем меньший из первых и добавляем в tmp while (i <= Spl) and (j <=R) do begin if IsBigger(Arr[i], Arr[j]) then begin tmp[k] := Arr[j]; Inc(j); end else begin tmp[k] := Arr[i]; Inc(i); end; Inc(k); end; //Просто дописываем в tmp оставшиеся эл-ты if i <= Spl then //Если первая часть не пуста for j := i to Spl do begin tmp[k] := Arr[j]; Inc(k); end else //Если вторая часть не пуста for i := j to R do begin tmp[k] := Arr[i]; Inc(k); end; //Перемещаем из tmp в arr Move(tmp[0], Arr[L], k*SizeOf(TItem)); end; //Сортировка procedure sort(L, R : Integer); var splitter : Integer; begin //Массив из 1-го эл-та упорядочен по определению if L >= R then Exit; splitter := (L + R) div 2; //Делим массив пополам sort(L, splitter); //Сортируем каждую sort(splitter + 1, R); //часть по отдельности merge(L, splitter, R); //Производим слияние end; //Основная часть процедуры сортировки begin SetLength(tmp, Length(Arr)); sort(0, Length(Arr) - 1); SetLength(tmp, 0); end; end. ну или просто подскажите куда мне впихнуть мой готовый массив А =) Последний раз редактировалось Nevil_White, 05.11.2012 в 00:42. |
#12
|
||||
|
||||
![]() Слияние или сортировка? Немного не туда тебя гугл завел
![]() ![]() |
#13
|
||||
|
||||
![]() Цитата:
Код:
procedure randomizearray(var arr:array of integer); var i,j, l:Integer; procedure exchange(var _arr:array of integer; const a1, a2:integer); var i:integer; begin i:=_arr[a1]; _arr[a1]:=_arr[a2]; _arr[a2]:=i; end; begin randomize; l:=high(arr) - low(arr); for i:=low(arr) to high(arr) do begin j:=low(arr) + random(l); exchange(arr, i, j); end; end; |
#14
|
|||
|
|||
![]() Сортировка слиянием. http://ru.wikibooks.org/wiki/%D0%9F%... 8%D0%B5%D0%BC
|
#15
|
|||
|
|||
![]() не туда занесло. это код чего?
|