IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Рекурсии
Вадим
сообщение 10.10.2004 21:09
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Помогите написать программу.
Разработать рекурсивную процедуру двоичного поиска элемента массива, равного данному числу.

Сообщение отредактировано: Вадим - 10.10.2004 21:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Amro
сообщение 11.10.2004 1:27
Сообщение #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:30


--------------------
Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь.
Закон программиста: Семь раз отрежь, ошибся, отмерь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Вадим   Рекурсии   10.10.2004 21:09
Amro   А массив уже упорядочен чтоль, или его ещё сортиро...   10.10.2004 21:31
Вадим   Условие точное, но скорее всего массив надо сортир...   10.10.2004 21:43
godd   что такое двоичный поиск? поиск двоичного числа? и...   10.10.2004 22:32
Amro   Нет godd это не поиск двоичного числа это поиск ...   10.10.2004 23:27
fms   двоичный т.е. бинарный? :) со строками.. :) ну мож...   11.10.2004 0:07
godd   скорость поиска увеличиться? ну разве что в отсорт...   11.10.2004 0:17
godd   посчет времени - рекурсия это вообще дело нехороше...   11.10.2004 1:18
Amro   Я в общем тоже времени не терял, написал тут одну ...   11.10.2004 1:27
godd   недоглядел в тексте Amro. Не то написал. Удалить п...   11.10.2004 1:35
godd   Amro по поводу рекурсии - это я прочитал где-то.   11.10.2004 1:36
godd   Недоглядел я. Ему ж процедура нужна была. А я врод...   11.10.2004 1:46
Amro   Ты прав надо сравнивать только с крайним элементом...   11.10.2004 1:49
Amro   Во во я также сначала функцией пытался сделать, то...   11.10.2004 1:52
godd   мона. вначале проги randomize ставишь, а элементы...   11.10.2004 9:14
Guest   Как сделать, чтобы исходные данные вводились из те...   21.10.2004 20:54
Amro   Создаешь текстовый файл, заносишь туда данные при ...   21.10.2004 21:23
Гость_Вадим   Amro, если будет не в лом, то доделай, пожалуйста   21.10.2004 21:34
Amro   Держи Вадим Разбирайся!!! Прога созд...   22.10.2004 21:03


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"