Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 28.05.2015
Сообщений: 8
1

Ошибка в программе для бинарного поиска на C++

28.05.2015, 23:12. Показов 654. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Недавно начал изучать C++. Решил написать простенькую программу по бинарному поиску элемента массива. В результате программа результат не выдаёт. Решил проверить- написал на Pascal - всё работает идеально. Странно. Помогите найти ошибку.
Pascal
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
28
29
30
31
32
33
34
35
Program
    Binar;
Uses
    Crt;
VAR
    mas: array[1..100] of integer;
    l,r,sr,znach,i:integer;
Begin
    ClrScr;
    l:=1;
    Write('kol = ');
    ReadLN(r);
 
    Writeln;
    for i:=l to r do
    begin
        mas[i]:=i;
        Write(mas[i], ' ');
     end;
 
    WriteLN;
    Write('Значение искомого элемента =');
    ReadLn(znach);
 
    Repeat
        sr:=(r+l) div 2;
        if znach<mas[sr] then r:=sr-1;
        if znach>mas[sr] then l:=sr+1;
    Until (l>r) or (mas[sr]=znach);
 
    Write('Номер элемента массива ');
    if l>r then Write('не обнаружен') else Write('= ',sr);
 
    ReadLn;
End.
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
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
int main()
{
    int mas[100];
    int l,r,sr,znach;
    
    cout<<"Kol-vo = ";
    cin>>r;
    cout<<endl;
    cout<<endl;
    
    for(int i=1;i<=r;i++){        //Çàäàíèå ýëåìåíòîâ ìàññèâà
        mas[i]=i;
        cout << mas[i]<<" ";
    }
    cout<<endl;
    
    cout<<"Znachenie iskomogo elementa = ";
    cin>>znach;
    
    do{                            //Áèíàðíûé ïîèñê
        sr = (r+l)/2;
        if(znach < mas[sr]){
            r=sr-1;
        }
        if (znach>mas[sr]){
            l=sr+1;
        }
    } while(l<=r || mas[sr]!=znach);
 
    cout<<"Nomer elementa massiva ";
    if (l>r){
        cout<<"ne obnaruzhen";
    } else{
        cout<<"= "<<sr;
    }
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2015, 23:12
Ответы с готовыми решениями:

В рабочей программе добавить для дерева бинарного поиска нахождение отрицательных значений узлов дерева
Полностью готовая программа, но что дописать в мейне чтобы он выводил произведение отрицательных...

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

Ошибка в алгоритме бинарного поиска на python 3.7 в sublime text 3
В редакторе sumlime text 3 ввел данный код, и пишет что ошибка в 18 строчке, как я понял 18 и 19...

Функции для бинарного дерева поиска
Для заданной структуры данных data TreeMap v = EmptyTree | Leaf Integer...

1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
29.05.2015, 00:24 2
C++
1
2
3
4
for(int i=0;i < r;i++){ 
        mas[i]=i;
        cout << mas[i]<<" ";
    }
Добавлено через 5 минут
Не знаю, как там в Pascal, в С++ индексы массива начинаются с 0, если размер массива r, то последний допустимый индекс будет r - 1. С учётом этого нужно исправлять.

Добавлено через 50 минут
Как-то так:
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
28
29
30
31
32
33
34
35
int mas[100];
    
    cout<<"Kol-vo = ";
    int r;
    cin>>r;
    cout<<endl;
    cout<<endl;
    
    for(int i=0;i<r;i++){        
        mas[i]=i;
        cout << mas[i]<<" ";
    }
    cout<<endl;
    
    int first = 0, last = r - 1, sr, znach;
    
    cout<<"Znachenie iskomogo elementa = ";
    cin>>znach;
    
    do{                            
        sr = (last + first) / 2;
        if(znach <= mas[sr]){
            last = sr;
        }
        if (znach>mas[sr]){
            first = sr + 1;
        }
    } while(first <= last && mas[sr] != znach);
 
    cout<<"Nomer elementa massiva ";
    if (first > last){
        cout<<"ne obnaruzhen"<< endl;
    } else{
        cout<<"= "<<sr<< endl;
    }
1
29.05.2015, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2015, 00:24
Помогаю со студенческими работами здесь

Итератор для бинарного дерева поиска.
Господа, нужен совет знатоков. Бинарное дерево поиска представлено следующей структурой. ...

Напишите программу для выполнения бинарного поиска
Напишите программу для выполнения бинарного поиска. Результатом работы алгоритма бинарного поиска...

C++. Рекурсия бинарного поиска переделать для массива
Есть рекурсия бинарного поиска с проверкой на наличия числа, но с уже даным массивом сделать авто...

Написать рекурсивную программу для алгоритма бинарного поиска. (C/C++)
Написать рекурсивную программу для алгоритма бинарного поиска.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru