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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2022, 23:23   #1
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
Восклицание Нужно немного переделать небольшой код на C++

У меня есть код на С++, и мне его нужно переделать так что бы в нём использовалась библиотека STL – find(), find_if(), find_first(), find_end(). Заранее благодарю)).

Код:
#include <iostream>
using namespace std;

int Search_Binary(double numbers[], int left, int right, double search_number) {
    int midd = 0;   // переменная показывающая середину определенного промежутка массива
    while (1) {
        midd = (left + right) / 2; // формула по которой вычисляется средний элемент в промежутке
        if (search_number < numbers[midd]) {    // условие по смещению правой границы
            right = midd - 1;
        }
        else if (search_number > numbers[midd]) {// условие по смещению левой границы
            left = midd + 1;
        }
        else {    // если заданное число совпадает с индексом числа по середине, то функция его возвращает               
            return midd;
        }
        if (left > right) { // функция которая возвращает отрицательный результат если границы сомкнулись
            return -1;
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    const int size = 1000;  // статический размер массива
    double numbers[size] = {}; // создание массива чисел
    double search_number;
    int index = 0;
    cout << "Массив чисел: " << endl;
    for (int i = 0; i < size; i++)  // цикл по заполнению массива случайными числами от 0 до 5
    {
        numbers[i] = (rand() % 60) / 10.0;
        cout << numbers[i] << " ";
    }
    double x;
    for (int i = 0; i < size; i++)  // сортировка массива, для нормальной работы бинарного поиска, сортировка по возрастанию
    {
        for (int j = 0; j < size - 1; j++)
        {
            if (numbers[j] > numbers[j + 1]) {  // условие которое проверяет больше ли текущий элемент массива чем следующий
                x = numbers[j];       // Если да то эти элемента меняються местами друг с другом.
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = x;
            }
        }
    }
    cout << endl;
    cout << endl << "Отсортированный массив чисел: " << endl;
    for (int i = 0; i < size; i++)  // вывод отсортированного массива
    {
        cout << numbers[i] << " ";
    }
    cout << endl << endl << "Введите число: ";
    cin >> search_number;   // ввод числа индекс которого нужно найти
    index = Search_Binary(numbers, 0, size, search_number); // вызов функций бинарного поиска
    if (index >= 0) {   // проверка значения индекса
        cout << endl << "Число " << search_number << " находится по индексу " << index;
    }
    else {
        cout << endl << "Число " << search_number << " не было найдено ";
    }
}

Последний раз редактировалось MaxBrat; 15.11.2022 в 23:58.
MaxBrat вне форума Ответить с цитированием
Старый 15.11.2022, 23:25   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А где же код. Тут какое-то полотенце не читаемое.
macomics вне форума Ответить с цитированием
Старый 15.11.2022, 23:30   #3
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
А где же код. Тут какое-то полотенце не читаемое.
Ну эта программа сортирует 1000 элементов массива и находит нужный элемент. Этот код это всё что я смог из себя выжать.))
MaxBrat вне форума Ответить с цитированием
Старый 15.11.2022, 23:34   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А где код. Оформите по правилам. Используйте для кода теги [CODE][/CODE]
macomics вне форума Ответить с цитированием
Старый 15.11.2022, 23:59   #5
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
По умолчанию

MaxBrat,
Цитата:
Сообщение от macomics Посмотреть сообщение
А где код. Оформите по правилам. Используйте для кода теги [CODE][/CODE]
Вот всё исправил.
MaxBrat вне форума Ответить с цитированием
Старый 16.11.2022, 03:46   #6
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

MaxBrat, если делать через STL, то надо использовать функции std::sort и std::equal_range:
Код:
#include <iostream>
#include <algorithm>
#include <locale.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    const int size = 1000;  // статический размер массива
    double numbers[size]; // создание массива чисел
    cout << "Массив чисел: " << endl;
    for (int i = 0; i < size; i++)  // цикл по заполнению массива случайными числами от 0 до 5
    {
        numbers[i] = (rand() % 60) / 10.0;
        cout << numbers[i] << " ";
    }
    sort(numbers, numbers + size); // сортировка массива, для нормальной работы бинарного поиска, сортировка по возрастанию
    cout << endl;
    cout << endl << "Отсортированный массив чисел: " << endl;
    for (int i = 0; i < size; i++)  // вывод отсортированного массива
    {
        cout << numbers[i] << " ";
    }
    cout << endl << endl << "Введите число: ";
    double search_number;
    cin >> search_number;   // ввод числа индекс которого нужно найти
    pair<double*, double*> range = equal_range(numbers, numbers + size, search_number); // вызов функции бинарного поиска
    if (range.first != range.second) { // если диапазон не пустой
        cout << endl << "Число " << search_number << " находится по индексу " << (range.first - numbers);
    }
    else {
        cout << endl << "Число " << search_number << " не было найдено ";
    }
    return 0;
}
Пётр Седов вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив. Работа со строкой (код есть но его нужно немного переделать) sldtvk Помощь студентам 0 11.01.2022 21:51
Нужно немного переделать код XakProg Помощь студентам 0 21.11.2018 17:49
Нужно немного переделать программу - C++ с787ан Помощь студентам 1 26.04.2018 20:02
небольшой код переделать из паскаля в делфи alexanderrrr Помощь студентам 2 16.06.2012 12:54