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

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

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

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

26.09.2016, 03:08. Просмотров 121. Ответов 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
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 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
11 / 11 / 0
Регистрация: 15.07.2016
Сообщений: 92
26.09.2016, 04:12  [ТС]     Бинарный поиск не находит нулевой элемент массива #3
Спасибо, но все таки, в чем ошибка в моем коде? Ну не зря же я сидел 2 часа изобретая этот код, чтоб потом скопировать ваш, и сказать что САМ сделал)
goto я для тестирования поставил, для удобства.

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

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