Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 18:41   #1
Tonny022
 
Регистрация: 05.01.2012
Сообщений: 3
По умолчанию Проблема с бинарным поиском.

Доброго времени суток.
Мне нужна помощь с бинарным поиском в моей программе.
Мы вводим массив, в этом массиве нам нужно найти какое место занимает вводимый нами элемент, я сделал эти два поиска , линейный работает нормально , а вот с бинарным проблема ...
Если не сложно скажите в чем проблема в функции binarnui_poisk.(104 строка).
И ещё подскажите, как реализировать проверку, чтоб когда мы вводили элемент которого нету в массиве, нам выдавало ошибку, и просило ввести число заново (для линейного и бинарного поиска).

Код прикреплен ниже:
Вложения
Тип файла: txt Программа.txt (6.6 Кб, 154 просмотров)
Tonny022 вне форума Ответить с цитированием
Старый 04.04.2012, 18:09   #2
Tonny022
 
Регистрация: 05.01.2012
Сообщений: 3
По умолчанию

Пожалуйста, напишите мне как сделать проверку,чтоб когда мы вводили число которого нету в массиве, выдавало ошибку и просило ещё раз ввести число для поиска.
Я понимаю что лень качать код прикпиплён ниже, поэтому перепешу код сюда в укорочееном варианте.
И поправьте плиз бинарный поиск ...

Цитата:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int *massiv;

void zapol_mass(int kolichestvo_elem) {
int i;
while (kolichestvo_elem <=0 || kolichestvo_elem > 50) {
cout <<"Nepravelnoe kolichestvo elementov !" << endl;
cout << "Vvedite razmer massiva (ot 0 do 50) : " << endl;
cin >> kolichestvo_elem;
}
while ( kolichestvo_elem > 0 && kolichestvo_elem <=50 ){
int answer;
cout << "\nKak zapolnit massiv (sam - 1; random - 2)?" << endl;
cin >> answer;
if ( answer != 1 && answer != 2) {
cout << "Ne pravilnui vvod! " << "\n";
continue;
}
if (answer == 2) {
srand ( (unsigned)time( NULL ) );
massiv = new int[kolichestvo_elem];
for (i=0; i<kolichestvo_elem;i++){
massiv[i] = 0 + rand()%50 ;
cout << "massiv[" << i+1 << "]=" << massiv[i] << "\n";
}
break;
}
if (answer == 1) {
massiv = new int[kolichestvo_elem];
cout << "Vvedite element vid 0 do 50! " << "\n";
for (i=0;i<kolichestvo_elem;i++){
cout << "Element" << "[" << i+1 << "]=";
cin >> massiv[i];
while (massiv[i] < 0 || massiv[i] > 50 ) {
cout << "Nepravilnui vvod!" << "\n";
cout << "Vvedite ot 0 do 50 !" << "\n";
cout << "Element" << "[" << i+1 << "]= ";
cin >> massiv[i];
}
}
break;
}
}
}

int binarnui_poisk(int mas[],unsigned int count, double poisk_b) {
unsigned int low=0, high=count -1;
while (low <=high ) {
unsigned int middle = (low+high)/2;
if (poisk_b == mas[middle]) {
return (middle + 1);
} if (poisk_b < mas[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return count;
}


int lineinui_poisk(int mas[], int count, int poisk_l){
int num;
for(int i = 0; i<count;i++) {
if (mas[i]==poisk_l)
num=i;
}
return (num+1);
}

void main() {
int kolichestvo_elem;
cout << "Vvedite razmer massiva (0-50): " << endl;
cin >> kolichestvo_elem;
zapol_mass(kolichestvo_elem);
cout << "\nKakoi poisk ispolzovat (lineinyi - 1; binarnui - 2) " << endl;
int otvet;
cin >> otvet;
while (otvet != 1 && otvet !=2) {
cout <<"lineinyi - 1; binarnui - 2;" << endl;
cin >> otvet;
}
switch(otvet) {
case 1:
int poisk_l;
cout<<"Vvedite chislo dlya poiska: "<< endl;
cin>>poisk_l;
cout << "Etot element v massive zanimaet " << lineinui_poisk(massiv,kolichestvo_e lem,poisk_l) << " mesto" << endl;
break;
case 2:
double poisk_b;
cout << "Vvedite chislo dlia poiska: " << "\n";
cin >> poisk_b;
cout << "Etot element v massive zanimaet " << binarnui_poisk(massiv,kolichestvo_e lem,poisk_b) << " mesto" << endl;
break;
}
system("pause");
}

Последний раз редактировалось Tonny022; 04.04.2012 в 20:49.
Tonny022 вне форума Ответить с цитированием
Старый 05.04.2012, 02:20   #3
Tonny022
 
Регистрация: 05.01.2012
Сообщений: 3
По умолчанию

Всё !!!
Я понял свою ошибку )))
Бинарным поиском можно найти элемент только отсортированного массива.
Tonny022 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с бинарным файлом melodeen12 Операционные системы общие вопросы 6 02.08.2010 01:15
Проблема с поиском в БД Evgenii БД в Delphi 15 25.06.2009 00:14
проблема с бинарным деревом Petruha-nsk Общие вопросы C/C++ 0 20.04.2009 18:33
Проблема с поиском Zeraim Microsoft Office Access 2 04.06.2008 05:42
Глюки с массивами и бинарным поиском nycmoma Помощь студентам 6 18.02.2007 10:44