Форум программистов, компьютерный форум CyberForum.ru

Бинарный поиск не находит нулевой элемент массива - C++

Восстановить пароль Регистрация
 
Pavel Rem
 Аватар для Pavel Rem
11 / 11 / 0
Регистрация: 15.07.2016
Сообщений: 48
26.09.2016, 03:08     Бинарный поиск не находит нулевой элемент массива #1
Мой бинарный поиск не находит нулевой элемент массива. Не получается исправить ошибку. Подскажите кто-нибудь пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
#define S 12
//==================================================
int screch(int mas[], int size, int num, bool &G) { 
    int a, b, c; G = true;
    for ( a = 0, b = size / 2, c = size; mas[b] != num;) {
        if (num > mas[b]) { a = b; b += (c - b) / 2; }
        else { c = b; b -= (b - a) / 2; }
        if (a==b || b==c ) { G = false; break;} // если число не найдено возвращает false;
    }
    return b;
}
//===================================================
int main(void) {
    int mas[S] = { 2,6,8,12,14,16,18,21,26,32,36,45 }, 
    num, ind; bool G;
A:  cin >> num;
    ind = screch(mas, S, num, G);
    if (G) cout << "index = " << ind << endl;
    else cout << "not found" << endl;
goto A;
}
Добавлено через 2 часа 56 минут
Дайте подсказку!)
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
26.09.2016, 03:58     Бинарный поиск не находит нулевой элемент массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int screch(int mas[], int size, int num) { 
    int a, b, c;
    
    for ( a = 0, c = size;; b = (a + c) / 2) {
        if (num > mas[b]) 
            a = b + 1;
        else if(num < mas[b])
            c = b - 1;
        else return b;
        if (a > c) return -1;
    }
}
 
int binSeach(int *mas, int size, int item){
    int ind, left = 0, right = size;
    
    while(true){
        ind = (left + right) / 2; 
        if(mas[ind] > item)
            right = ind - 1;
        else if(mas[ind] < item)
            left = ind + 1;
        else return ind;
        
        if(left > right) return -1;
    }
}
Добавлено через 42 секунды
goto не следует использовать
Pavel Rem
 Аватар для Pavel Rem
11 / 11 / 0
Регистрация: 15.07.2016
Сообщений: 48
26.09.2016, 04:12  [ТС]     Бинарный поиск не находит нулевой элемент массива #3
Спасибо, но все таки, в чем ошибка в моем коде? Ну не зря же я сидел 2 часа изобретая этот код, чтоб потом скопировать ваш, и сказать что САМ сделал)
goto я для тестирования поставил, для удобства.

Функция должна возвращать не только true или false, но и индекс найденного элемента.
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
26.09.2016, 05:01     Бинарный поиск не находит нулевой элемент массива #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Pavel Rem Посмотреть сообщение
Функция должна возвращать не только true или false
Зачем? только индекс
Цитата Сообщение от Pavel Rem Посмотреть сообщение
в чем ошибка в моем коде?
при a = 0, b = 1, c = 2
C++
1
b -= (b - a) / 2;
Цитата Сообщение от Pavel Rem Посмотреть сообщение
goto я для тестирования поставил, для удобства
while(1), for(;;, while(true)
goto сложнее найти
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
26.09.2016, 05:01     Бинарный поиск не находит нулевой элемент массива #5
Цитата Сообщение от Pavel Rem Посмотреть сообщение
Функция должна возвращать не только true или false
Зачем? только индекс
Цитата Сообщение от Pavel Rem Посмотреть сообщение
в чем ошибка в моем коде?
при a = 0, b = 1, c = 2
C++
1
b -= (b - a) / 2;
Цитата Сообщение от Pavel Rem Посмотреть сообщение
goto я для тестирования поставил, для удобства
while(1), for(;;, while(true)
goto сложнее найти
Yandex
Объявления
26.09.2016, 05:01     Бинарный поиск не находит нулевой элемент массива
Ответ Создать тему
Опции темы

Текущее время: 17:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru