1 / 1 / 0
Регистрация: 26.11.2020
Сообщений: 38
1

Бинарный поиск в массиве структур

10.02.2021, 15:28. Показов 1066. Ответов 1

Помогите осуществить бинарный поиск в моём коде:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
using namespace std;
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
const int N = 20;
struct Music {
    int numbers;
    char names[20];
    char musname[20];
}A[N];
    
int main() {
    Music x, k;
    int n; SetConsoleOutputCP(1251);   SetConsoleCP(1251);
    for (n = 0; n < N - 1; n++) // ввод данных с помощью цикла
    {
        printf("%d.Введите числа, имена пользователей и название музыки:   ", n + 1);
        scanf("%d", &A[n].numbers);
        scanf("%s", A[n].musname);
        if (!strcmp(A[n].musname, "exit")) break;   //при вводе "exit" ввод закончен
        scanf("%s", A[n].names);
    }
    /*Сортировка*/
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            if (A[i].numbers > A[j].numbers) {
                k.numbers = A[i].numbers;
                A[i].numbers = A[j].numbers;
                A[j].numbers = k.numbers;
 
                if (strcmp(A[i].musname, A[j].musname)) {
                    strcpy(x.musname, A[i].musname);
                    strcpy(A[i].musname, A[j].musname);
                    strcpy(A[j].musname, x.musname);
                }
                if (strcmp(A[i].names, A[j].names)) {
                    strcpy(x.names, A[i].names);
                    strcpy(A[i].names, A[j].names);
                    strcpy(A[j].names, x.names);
                }
            }
        }
    }
    printf("|------------------------------------------------------|\n");
    printf("|                Хиты музыки                           |\n");
    printf("|------------------------------------------------------|\n");
    /*выводим шапку таблицы*/
    printf("|  Номера     | Название музыки | Имена пользователей  |\n");
    printf("|------------------------------------------------------|\n");
    /* вывод данных в виде таблицы*/
 
    for (int i = 0; i < n; i++)
    {
        printf("|%-13d|%-17s|%-22s|\n", A[i].numbers, A[i].musname,
            A[i].names);
        printf("|------------------------------------------------------|\n");
    }
    cout << "Отсортированные числа: " << endl;
    for (int i = 0; i < n; i++) {
        cout << " " << A[i].numbers;
    }
    
    
            _getch();
            return 0;   
}
Вот собственно и задание: Компания с целью определения спроса на свою продукцию организует некоторый опрос. Продукция – компакт-диски с записями шлягеров. Каждый опрашиваемый должен назвать песню, которая идентифицируется номером от 1 до N. Файл с данными обрабатывается программой, которая должна печатать:
Список песен в порядке возрастания номеров. Каждая строка содержит название песни, имя пользователя и ее номер. Вывести имена и название популярной песни при вводе номера с помощью бинарного поиска.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2021, 15:28
Ответы с готовыми решениями:

Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур
Приветствую товарищей-программистов! Есть массив структур StructWords massiv. struct...

В одномерном массиве состоящем из n вещественных элементов сделать бинарный поиск числа А в упорядоченном массиве
Всем привет помогите решить задачи 1) В одномерном массиве состоящем из n вещественных элементов:...

Реализовать два метода поиска строк в массиве: поиск перебором, бинарный поиск
Массив длины 15 заполнен строками, упорядоченными лексикографически без повторов: список ...

Поиск заданного элемента в упорядоченном массиве(бинарный поиск)
Заполнить одномерный массив из n элементов по формуле приведенной в картинке. Размерность массива...

1
1729 / 1045 / 666
Регистрация: 25.04.2016
Сообщений: 2,939
11.02.2021, 06:13 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <vector>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 3
 
struct music {
    int number;
    string trackname, username;
};
 
bool cmp (music a, music b) {
    return a.number < b.number;     // по возрастанию номера
}
 
int main (void) {
    setlocale(LC_ALL, "russian");
    vector <music> a(N);
 
    /* Ввод данных с помощью цикла */
    for (int i = 0; i < N; i++) {
        cout << i+1 << ". Введите номер, название песни и имя пользователя:\n";
 
        cout << "номер: ";
        cin >> a[i].number;
 
        cout << "название песни: ";
        cin >> a[i].trackname;
 
        cout << "имя пользователя: ";
        cin >> a[i].username;
        cout << endl;
    }
 
    /* Сортировка */
    sort(a.begin(), a.end(), cmp);
 
    /* выводим шапку таблицы */
    cout << "+------------------------------------------------------+\n"
        <<  "|                     Хиты музыки                      |\n"
        <<  "+-------------+-----------------+----------------------+\n"
        <<  "|    Номер    | Название песни  |   Имя пользователя   |\n"
        <<  "+-------------+-----------------+----------------------+\n";
    /* вывод данных в виде таблицы */
    for (auto track : a)
        cout << "| " << setiosflags(ios::left) << setw(11) << track.number
            << " | " << setw(15) << track.trackname << " | " << setw(20)
            << track.username << " |\n" << resetiosflags(ios::left)
            << "+------------------------------------------------------+"
            << endl;
 
    int num;
    cout << "\nВведите номер песни: ";
    cin >> num;
 
    bool found = false;
    int left = 0, mid, right = N;
    while (left <= right && !found) {
        mid = left + (right-left)/2;
        if (num < a[mid].number) right = mid-1;
        else if (num > a[mid].number) left = mid+1;
        else found = true;
    }
 
    if (found)
        cout << "\n" + a[mid].trackname + " " + a[mid].username << endl;
    else
        cout << "\nNot found!" << endl;
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2021, 06:13
Помогаю со студенческими работами здесь

Поиск заданного элемента в упорядоченном массиве (бинарный поиск)
Заполнить одномерный массив из n элементов согласно таблицы. Размерность массива задать в виде...

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

Бинарный поиск в массиве
Здравствуйте! Подскажите пожалуйста, как написать программу бинарного поиска в массиве? Вот...

бинарный поиск в массиве
Я не могу написать бинарный поиск в массиве отсортированом по убыванию.... помогите пожалуйста

Бинарный поиск в массиве
Помогите нужна программа по поиску числа в массиве (бинарным методом). Очень очень нужно:(

Бинарный поиск в массиве
Доброго времени суток! Проблема такая: не работает бинарный поиск в массиве объектов структуры car....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru