1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Вадим |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: 0 |
Помогите написать программу.
Разработать рекурсивную процедуру двоичного поиска элемента массива, равного данному числу. Сообщение отредактировано: Вадим - |
![]() ![]() |
| Amro |
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: 2 |
Я в общем тоже времени не терял, написал тут одну басягу, долго я её долбил, жалко что у рекурсии есть предел, я с этой проблемой переполнения стека целый час провозился, зато результат на лицо......
Код uses crt; const L=1; R=25; var i,Key : integer; Mas:array[L..R] of integer; {...........................................................} procedure Sort(Left,Right:integer); var i,j,w,x:integer; begin i:=Left; j:=Right; x:=Mas[(Left+Right) div 2]; repeat while (Mas[i]<x) do inc(i); while (x<Mas[j]) do dec(j); if i<=j then begin W:=Mas[i]; Mas[i]:=Mas[j]; Mas[j]:=W; inc(i); dec(j); end until i>j; if Left<j then Sort(Left,j); if (i<Right) then Sort(i,Right) end; {.............................................................} procedure found(Left,Right:integer); var middle:integer; begin if (Left<=Right) then begin Middle:=(Left+Right) div 2; if Key < Mas[Middle] then found(Left,Middle-1); if Key > Mas[Middle] then found(Middle+1,Right); if Key=Mas[Middle] then write('Его номер ',Middle); end else write(key); end; {...........................................................} begin clrscr; for i:=L to R do begin Mas[i]:=random(99); write(Mas[i]:3); end; Sort(L,R); writeln; for i:=L to R do write(Mas[i]:3); writeln; write('Введите искомый элемент: '); read(Key); found(L,R); readkey; end. Одно НО, прога выдаёт номер элемента сразу же после его первого вхождения....надо чёт на счёт генерации придумать, кстати я вот не помню можно ли так генерировать элементы массива чтобы одинаковых не было??? Процедура сортировки тоже рекурсивная (быстрая сортировка QuickSort или сортировка С.Хоаром) Кстати fms эту сортировку я там надыбал именно в том архиве, на который ты мне кидала ссылку на форуме, много я тама полезного нашёл....... godd на счёт времени рекурсии - эт ты верно подметил................................. Сообщение отредактировано: Amro - -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
Вадим Рекурсии 11.10.2004 1:09
Amro А массив уже упорядочен чтоль, или его ещё сортиро… 11.10.2004 1:31
Вадим Условие точное, но скорее всего массив надо сортир… 11.10.2004 1:43
godd что такое двоичный поиск? поиск двоичного числа? и… 11.10.2004 2:32
Amro Нет godd это не поиск двоичного числа это поиск … 11.10.2004 3:27
fms двоичный т.е. бинарный? :)
со строками.. :) ну мож… 11.10.2004 4:07
godd скорость поиска увеличиться? ну разве что в отсорт… 11.10.2004 4:17
godd посчет времени - рекурсия это вообще дело нехороше… 11.10.2004 5:18
godd недоглядел в тексте Amro. Не то написал. Удалить п… 11.10.2004 5:35
godd Amro
по поводу рекурсии - это я прочитал где-то. 11.10.2004 5:36
godd Недоглядел я. Ему ж процедура нужна была. А я врод… 11.10.2004 5:46
Amro Ты прав надо сравнивать только с крайним элементом… 11.10.2004 5:49
Amro Во во я также сначала функцией пытался сделать, то… 11.10.2004 5:52
godd
мона. вначале проги randomize ставишь, а элементы… 11.10.2004 13:14
Guest Как сделать, чтобы исходные данные вводились из те… 22.10.2004 0:54
Amro Создаешь текстовый файл, заносишь туда данные при … 22.10.2004 1:23
Гость_Вадим Amro, если будет не в лом, то доделай, пожалуйста 22.10.2004 1:34
Amro Держи Вадим
Разбирайся!!!
Прога созд… 23.10.2004 1:03![]() ![]() |
|
Текстовая версия | 28.12.2025 21:33 |