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

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

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

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

26.09.2016, 03:08. Просмотров 125. Ответов 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 минут
Дайте подсказку!)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2016, 03:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарный поиск не находит нулевой элемент массива (C++):

Бинарный поиск не находит все элементы - C++
Здравствуйте! У возникла следующая проблема с бинарным поиском - он не находит все элементы. Ему передается отсортированный по убыванию...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива - C++
Найти произведение отрицательных элементов массива, следующих после первого положительного элемента. Если по какой-либо причине вычислить...

Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент - C++
Здравствуйте! Имеется такая задача: 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...

Заменить каждый нулевой элемент массива А суммой элементов массива В - C++
Даны целочисленные массивы А и В. Заменить каждый нулевой элемент массива А суммой элементов массива В.

Передается только нулевой элемент массива - C++
вот есть у меня массив int a; и сушествует ф-ия void F(int a) ... в ходе программы я передаю массив a в ф-ию F так F(a) в итоге...

Заполнение массива: нулевой элемент, размерность - C++
Приветствую. Немного запутался с этими массивами, разъясните, пожалуйста, ситуацию. Код: void GradeBook::outputBarChart() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 не следует использовать
1
Pavel Rem
11 / 11 / 0
Регистрация: 15.07.2016
Сообщений: 107
26.09.2016, 04:12  [ТС] #3
Спасибо, но все таки, в чем ошибка в моем коде? Ну не зря же я сидел 2 часа изобретая этот код, чтоб потом скопировать ваш, и сказать что САМ сделал)
goto я для тестирования поставил, для удобства.

Функция должна возвращать не только true или false, но и индекс найденного элемента.
0
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 сложнее найти
1
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 сложнее найти
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2016, 05:01
Привет! Вот еще темы с ответами:

Удалить первый нулевой элемент массива - C++
Здравствуйте.Объясните пожалуйста,как удалять элемент в массиве,если он к примеру, равен 0.То есть у меня есть одномерный массив: 1 2 3 0 4...

Бинарный поиск (найти искомый элемент в массиве и вывести его номер) - C++
Помогите пожалуйста. Суть задачи: бинарным поиском найти искомый элемент в массиве и вывести его номер, если число в массиве встречается...

Заставить указатель указывать на нулевой элемент массива - C++
Вроде бы и простой вопрос для начинающих, но почему-то не могу найти на него ответ. Есть функция сортировки массива, алгоритм типа...

Бинарный поиск элемента массива - C++
Всем привет. Помогите пожалуйста. Есть массив X из n елементов, который рандомится в диапазоне . И элемент У стого-же диапазона. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.09.2016, 05:01
Ответ Создать тему
Опции темы

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