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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pavel Rem
 Аватар для Pavel Rem
11 / 11 / 0
Регистрация: 15.07.2016
Сообщений: 70
#1

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

26.09.2016, 03:08. Просмотров 96. Ответов 4
Метки нет (Все метки)

Мой бинарный поиск не находит нулевой элемент массива. Не получается исправить ошибку. Подскажите кто-нибудь пожалуйста.
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2016, 03:08     Бинарный поиск не находит нулевой элемент массива
Посмотрите здесь:

C++ Передается только нулевой элемент массива
Вставить после каждого нечетного значения массива нулевой элемент C++
C++ Бинарный поиск (найти искомый элемент в массиве и вывести его номер)
C++ На С++ перенести в начало одномерного массива второй нулевой элемент
Бинарный поиск произведения и суммы чисел массива C++
Функция, которая находит элемент массива C++
C++ Бинарный поиск элемента массива
C++ Заполнение массива: нулевой элемент, размерность
C++ Бинарный поиск и четные элементы массива
C++ Удалить первый нулевой элемент массива
Заставить указатель указывать на нулевой элемент массива C++
C++ Бинарный поиск не находит все элементы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Apostol584
237 / 143 / 72
Регистрация: 26.11.2012
Сообщений: 368
Завершенные тесты: 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
Сообщений: 70
26.09.2016, 04:12  [ТС]     Бинарный поиск не находит нулевой элемент массива #3
Спасибо, но все таки, в чем ошибка в моем коде? Ну не зря же я сидел 2 часа изобретая этот код, чтоб потом скопировать ваш, и сказать что САМ сделал)
goto я для тестирования поставил, для удобства.

Функция должна возвращать не только true или false, но и индекс найденного элемента.
Apostol584
237 / 143 / 72
Регистрация: 26.11.2012
Сообщений: 368
Завершенные тесты: 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
237 / 143 / 72
Регистрация: 26.11.2012
Сообщений: 368
Завершенные тесты: 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     Бинарный поиск не находит нулевой элемент массива
Ответ Создать тему
Опции темы

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