Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2017, 12:26   #1
YRELIS
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 14
Восклицание Бинарный(двоичный) поиск с++

Разработать программу, содержащую функцию обработки одномерного динамического массива методом двоичного поиска
Заданы два массива А(N) и В(M). Первым на печать вывести массив, содержащий наименьшее значение. Напечатать также это значение и его индекс.
YRELIS вне форума Ответить с цитированием
Старый 14.02.2017, 12:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,759
По умолчанию

И? Как пробовали? Какие ошибки выдал компилятор?
p51x вне форума Ответить с цитированием
Старый 14.02.2017, 12:48   #3
YRELIS
Пользователь
 
Регистрация: 10.07.2015
Сообщений: 14
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И? Как пробовали? Какие ошибки выдал компилятор?
Пробовал, но что то невнятное получилось, сравнил только два массива, а вот как по элементно сравнить, не знаю
Код:
#include <iostream>
#include <algorithm> 
using namespace std;
 
//описание функции бинарного поиска
int fnc(int m[], int size, int t)
{
    sort(m, m + size);
 
    int average_index = 0, first_index = 0, last_index = size - 1, count = 0;
    if (last_index == -1) cout <<"\narray is empty" << endl; // массив пуст 
 
    while (first_index < last_index)
    {
        average_index = first_index + (last_index - first_index) / 2; // меняем индекс среднего значения 
        t <= m[average_index] ? last_index = average_index : first_index = average_index + 1; // найден ключевой элемент или нет 
    }
    if (m[last_index] == t)
    for (int i = last_index; i<size; i++)
    {
        if (m[i]>t) count++;
    }
 
 
    return count;
}
 
 
int main()
 
{
    setlocale(LC_ALL, "Russian");
    int n, m;
    int *a, *b;
    int i, j;
    int mina, minb;
    cout << "Размер массива А: "; cin >> n;
    a = new int[n];
    for (i = 0; i<n; i++) cin >> a[i];
    cout << "Размер массива Б: "; cin >> m;
    b = new int[m];
    for (j = 0; j<m; j++) cin >> b[j];
 
    cout << endl;
    mina = a[0];
    for (i = 1; i<n; i++)
    {
        if (a[i]<mina)
        {
            mina = a[i];
        }
    }
    minb = b[0];
    for (j = 1; j<m; j++)
    {
        if (b[j]<minb)
        {
            minb = b[j];
        }
    }
 
 
    if (fnc(a, n, mina)<fnc(b, m, minb))
    {
        for (int i = 0; i<n; i++)
            cout<<a[i]<<' ';
        cout<<endl;
    }
    else
    {
        for (int i = 0; i<m; i++)
            cout<< b[i]<<' ';
        cout<<endl;
 
    }
delete[]a;
    delete[]b;
    return 0;
}
YRELIS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в доработке программы на языке паскаль (бинарный поиск, поиск перебором) DimzNOVIchok45 Помощь студентам 0 13.10.2014 20:11
Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск на языке Pascal DimzNOVIchok45 Помощь студентам 7 19.09.2014 21:40
Бинарный(Двоичный) поиск в одномерном массиве bonjovi Паскаль, Turbo Pascal, PascalABC.NET 1 31.01.2012 17:10
Двоичный поиск mikebrownen Общие вопросы C/C++ 8 20.10.2011 22:44