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

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

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

 
 Ответить  Открыть новую тему 
> двоичный поиск
сообщение
Сообщение #1


Знаток
****

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

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


Задание
Предположим, имеем первичных цифр массив. Напишите функцию, реализующую алгоритм двоичного поиска в таком массиве. Результаты функции - элемент массива, который равен функции аргументу, номер или 0.


я так непонел результаты какие надо вывести пример можете написать


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

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

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


Задание коряво написано.
Я понял так, что нужно вывести элемент массива и его номер в случае успеха поиска и 0, если поиск потерпел неудачу (нет такого элемента в массиве).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

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

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


чтото неищит у меня цыфров
Код
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; { конец поиска }


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 5.12.2008 20:32) *
вот эту нашол но чегото у меня неищит
Когда же ты научишься точнее формулировать проблему? Это же в первую очередь тебе самому лучше..

Приведи ВСЮ программу и опиши, что именно работает неправильно.
"Не ищет" можно понимать тысячью разных способов. В том числе, и что ты ее не запускал, например..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

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

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


вот массив есть в программе у меня я ввожу в поиск цифру которая есть в массиве а выводит что нету ее в массиве


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 5.12.2008 21:11) *
вот массив есть в программе у меня я ввожу в поиск цифру которая есть в массиве а выводит что нету ее в массиве
Еще раз прошу: приведи полный текст программы.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

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

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


перегрелся я уже вот программка все работает сечас надо както поиск в функцию перевести
 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:= 1 to 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) div 2;
writeln(i);
if m[i] = n then found:=true
else
begin
if m[i]>n then first :=i+1
else last:=i-1
end;
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.


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 5.12.2008 21:26) *
перегрелся я уже вот программка все работает сечас надо както поиск в функцию перевести
Явно перегрелся smile.gif. У тебя уже была функция (см. выше) чем она тебе не понравилась? Ну, надо - переводи..

Цитата(maksimla @ 5.12.2008 21:26) *
непонел этого как это в незу что выводить надо
Результаты функции - элемент массива, который равен функции аргументу, номер или 0.
Тебе же Ozzя сказал: функция должна давать номер найденного элемента. Кстати, в той функции все было правильно..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

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

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


а теперь процедуру сказали сделать я сделал но одна ошибка есть. Ошибку не нашел но добавил единицу и все в порядке можете сказать что не так я сделал?

это двоичный поиск

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) do
begin i:=(i1+i2)div 2;
if x[i]=a then tr:=true
else if x[i]<a then i1:=i+1
else i2:=i;
end;
if not tr then
writeln('v masyve x cisla ',a,' netu')
else
writeln('Skaiciui ',a,' lygus ',i,' masyvo narys');
end;

begin
assign(c,'test.txt');
Reset©;
Readln(c,n);
for i:=1 to n do
begin
read(c,x[i]);
writeln(i:4,' ',x[i]);
end;
write('vvedite iskomoe cislo ');
readln(a);
poisk(x,n,a);
readln
end.


числа записаны в файл в возвращающем порядке и если в поиск вводишь самое последнее число то оно не находится при в процедуре i2:=max а если плюс один то все в порядке странно можете объяснить что не так я сделал.


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

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

 





- Текстовая версия 23.10.2021 8:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name