Задание Предположим, имеем первичных цифр массив. Напишите функцию, реализующую алгоритм двоичного поиска в таком массиве. Результаты функции - элемент массива, который равен функции аргументу, номер или 0.
я так непонел результаты какие надо вывести пример можете написать
Ozzя
4.12.2008 11:44
Задание коряво написано. Я понял так, что нужно вывести элемент массива и его номер в случае успеха поиска и 0, если поиск потерпел неудачу (нет такого элемента в массиве).
maksimla
6.12.2008 0:32
чтото неищит у меня цыфров
Код
program Bevarde2; const count =10; m:array [1..count] of byte=(10,9,8,7,6,5,4,3,2,1); var n,i,first,last:integer; a,low, high, mid:integer; found:boolean; begin WriteLn('massiv uporedocennij'); for i:= 1 to count do write(m[i]:3,' '); writeln; writeln; write('vvedite cislo kotoroe icete'); readln(a); low:=1; high:=count; found:=false; while (low<=high) and (not found) do begin i:=(low+high) div 2; if a<m[i] then high:=i-1 else if a>m[i] then low:=i+1 else found:=true; end; if found then writeln('naiden') else writeln('nenaiden');
Readln; end.
Добавлено через 2 мин. вот эту нашол но чегото у меня неищит
Код
function BSearch (item: DataArray; count:integer; key:DataItem):integer; var low, high, mid: integer; found:boolean; begin low:=1; high:=count; found:=false; { не найден } while (low<=high) and (not found) do begin mid:=(low+high) div 2; if key<item[mid] then high:=mid-1 else if key>item[mid] then low:=mid+1 else found:=true; { найден } end; if found then BSearch:=mid else BSearch:=0; { не найден } end; { конец поиска }
Lapp
6.12.2008 1:07
Цитата(maksimla @ 5.12.2008 20:32)
вот эту нашол но чегото у меня неищит
Когда же ты научишься точнее формулировать проблему? Это же в первую очередь тебе самому лучше..
Приведи ВСЮ программу и опиши, что именно работает неправильно. "Не ищет" можно понимать тысячью разных способов. В том числе, и что ты ее не запускал, например..
maksimla
6.12.2008 1:11
вот массив есть в программе у меня я ввожу в поиск цифру которая есть в массиве а выводит что нету ее в массиве
Lapp
6.12.2008 1:19
Цитата(maksimla @ 5.12.2008 21:11)
вот массив есть в программе у меня я ввожу в поиск цифру которая есть в массиве а выводит что нету ее в массиве
Еще раз прошу: приведи полный текст программы.
maksimla
6.12.2008 1:26
перегрелся я уже вот программка все работает сечас надо както поиск в функцию перевести
program Bevarde2;
const count =10;
m:array [1..count] of byte=(10,9,8,7,6,5,4,3,2,1);
var n,i,first,last,a:integer;
found:boolean;
begin
WriteLn('massiv uporedocennij');
for i:= 1to count do write(m[i]:3,' '); writeln; writeln;
write('vvedite cislo kotoroe icete');
readln(n);
first:=1;
last:= count;
found:= false;
repeat
i:=(first +last) div2;
writeln(i);
if m[i] = n then found:=true
elsebeginif m[i]>n then first :=i+1else last:=i-1end;
until (found= true) or (first>last);
if found then writeln ('iskomii',n,'v massive',i)
else
writeln('netu cisla ',n,'v massive');
Readln;
end.
непонел этого как это в незу что выводить надо Результаты функции - элемент массива, который равен функции аргументу, номер или 0.
Lapp
6.12.2008 1:33
Цитата(maksimla @ 5.12.2008 21:26)
перегрелся я уже вот программка все работает сечас надо както поиск в функцию перевести
Явно перегрелся . У тебя уже была функция (см. выше) чем она тебе не понравилась? Ну, надо - переводи..
Цитата(maksimla @ 5.12.2008 21:26)
непонел этого как это в незу что выводить надо Результаты функции - элемент массива, который равен функции аргументу, номер или 0.
Тебе же Ozzя сказал: функция должна давать номер найденного элемента. Кстати, в той функции все было правильно..
maksimla
13.10.2009 20:04
а теперь процедуру сказали сделать я сделал но одна ошибка есть. Ошибку не нашел но добавил единицу и все в порядке можете сказать что не так я сделал?
это двоичный поиск
program rasti;
const max=100;
type masyv=array [1..max] of integer;
var x:masyv;
a,n,i:integer;
c:text;
procedure poisk(m:masyv; max,j:integer);
var tr:boolean; i1,i2:integer;
begin
tr:=false;
i1:=1; i2:=max+1;
while (i1<i2) and (not tr) dobegin i:=(i1+i2)div2;
if x[i]=a then tr:=true
elseif x[i]<a then i1:=i+1else i2:=i;
end;
ifnot tr then
writeln('v masyve x cisla ',a,' netu')
else
writeln('Skaiciui ',a,' lygus ',i,' masyvo narys');
end;
begin
assign(c,'test.txt');
Reset(c);
Readln(c,n);
for i:=1to n dobegin
read(c,x[i]);
writeln(i:4,' ',x[i]);
end;
write('vvedite iskomoe cislo ');
readln(a);
poisk(x,n,a);
readln
end.
числа записаны в файл в возвращающем порядке и если в поиск вводишь самое последнее число то оно не находится при в процедуре i2:=max а если плюс один то все в порядке странно можете объяснить что не так я сделал.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.