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

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

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

> рекурсия, помогите перелелать
Bast
сообщение 2.12.2007 13:12
Сообщение #1


Новичок
*

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

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


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

Uses
Crt;
CONST
MAXN=10;
VAR
a:array[1..MAXN] of Longint;
z:Longint;

Function Rec(l,r:longint):boolean;
Var
b:Boolean;
tmp:Longint;
Begin
b:=false;
tmp:=(l+r) div 2;
if a[tmp]=z then
Begin
rec:=true;
Exit;

End;
If (a[tmp]>z) and (l<>tmp) then b:=b or rec(l,tmp-1);
If (a[tmp]<z) and (r<>tmp) then b:=b or rec(tmp+1,r);
Rec:=b;
End;

var
i,s:Longint;
BEGIN
ClrScr;
Writeln('Введите количество элементов массива');
Read(z);
Writeln('Введите элементы массива');
For i:=1 to z do
Read(a[i]);
Writeln('Введите число');
Read(s);
Writeln(rec(1,i));
ReadKey;
END.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 2.12.2007 14:31
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


смотри, что-то вроде этого:

Код
uses crt;

const
  MAX_N = 10;

type
  TArray = array [1..MAX_N] of Integer;

function BinSearch(const arr: TArray; left, right, value: Integer): Boolean;
var
  middle: Integer;
begin
  if right - left = 1 then
    BinSearch := (value = arr[left]) or (value = arr[right])
  else begin
    middle := (left + right) div 2;

    if value > arr[middle] then
      left := middle
    else
      right := middle;

    BinSearch := BinSearch(arr, left, right, value);
  end;
end;

var
  arr: TArray = (1, 2, 3, 4, 5, 60, 70, 88, 99, 101);

begin
  clrscr;
  writeln(BinSearch(arr, 1, MAX_N, 88));
  readln;
end.


ps а в следующий раз используй поиск по форуму.

Сообщение отредактировано: klem4 - 2.12.2007 14:36


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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