Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88

Сортировка массива структур

19.03.2023, 09:20. Показов 554. Ответов 7

Студворк — интернет-сервис помощи студентам
Задание:
Составить программу обработки данных с выводом следующей
информации:
- список названий российских фильмов, отсортированный по году
выпуска, с указанием фамилии режиссера;
- список фильмов введенного с клавиатуры жанра;
- поиск фильма по названию;
- список фильмов указанных года выпуска и киностудии

Я не до конца понял как отсортировать список по году, объясните пожалуйста.

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iomanip>
#include <locale>
#include<stdlib.h>
#include <iostream>
#include <windows.h>
#include <cstring>
using namespace std;
 
struct Film
{
    char film_name[70];
    char film_director[40];
    char kind[40];
    char studio[40];
    char country[40];
    double year;
};
 
Film* AddStruct(Film* Obj, const int size);
void setData(Film* Obj, const int size);
void showData(const Film* Obj, const int size);
 
void showRusFilm(const Film* Obj, const int size);
void yourKind(const Film* Obj, const int size);
void finder(const Film* Obj, const int size);
void dvojnoe(const Film* Obj, const int size);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    Film* OurFilms=0;
    int filmSize=0;
    int Prodoljenie=0;
 
    do
    {
        OurFilms=AddStruct(OurFilms, filmSize);
        setData(OurFilms, filmSize);
        filmSize++;
        cout<<"введите 1 чтобы продолжить ввод данных, 0 - прекратить :";
        cin>>Prodoljenie;
        cin.get();
    } while(Prodoljenie!=0);
 
    showData(OurFilms, filmSize);
    int menumanager;
    cout<<"Вы хотите воспользоваться меню команд ?, если да то введите 1 если нет введите 0:"<<endl;
    cin>>menumanager;
    cin.get();
    do{
    cout<<"Меню команд :"<<endl;
    cout<<"№1 - Вывод русских фильмов, отсортированных по году выпуска(с указанием режиссера)"<<endl;
    cout<<"№2 - Сортировка по выбранному жанру"<<endl;
    cout<<"№3 - Поиск фильма по названию"<<endl;
    cout<<"№4 - Список фильмов указанного года и киностудии"<<endl;
    int vibor=0;
    do{
        cout<<"Введите номер необходимой команды (1-4)"<<endl;
        cin>>vibor;
        cin.get();
    }while(vibor<1);
    
    switch(vibor){// выбор из 4-х функций
        case(1):
            showRusFilm(OurFilms, filmSize);
            break;
        case(2):
            yourKind(OurFilms, filmSize);
            break;
        case(3):
            finder(OurFilms, filmSize);
            break;
        case(4):
            dvojnoe(OurFilms, filmSize);
            break;
           
    }
}while(menumanager!=0);
    delete[] OurFilms;
    return 0;
}
 
Film* AddStruct(Film* Obj, const int size)
{
    if(size==0)
    {
        Obj=new Film[size+1];
    }
    else
    {
        Film* tempObj=new Film[size+1];
        for(int i=0; i<size; i++)
        {
            tempObj[i]=Obj[i];
        }
        delete[] Obj;
        Obj=tempObj;
    }
    return Obj;
}
 
void setData(Film* Obj, const int size)
{
        cout<<"Название фильма :";
        cin.getline(Obj[size].film_name, 70);
        cout<<"Режессер :";
        cin.getline(Obj[size].film_director, 40);
        cout<<"Жанр фильма :";
        cin.getline(Obj[size].kind, 40);
        cout<<"Киностудия :";
        cin.getline(Obj[size].studio, 40);
        cout<<"Страна :";
        cin.getline(Obj[size].country, 40);
        cout<<"Год выхода :";
        cin>>Obj[size].year;
        cin.get();
        if(Obj[size].year<1895||Obj[size].year>2023){
            do{
            cout<<"Вы ввели не правильную дату, введите другой год"<<endl;
            cin>>Obj[size].year;
            cin.get();
        }while(Obj[size].year<1895||Obj[size].year>2023);
        }
        cout<<endl;
}
 
void showData(const Film* Obj, const int size)
{
    system("cls");
    cout<<"№ "<<"|"<<setw(30)<<fixed<<setprecision(9)<<"Название\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Режиссер\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Жанр\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Киностудия\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Страна\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Год\t"<<endl;
    cout<<"============================================================================================================================================================="<<endl;
    for(int i=0; i<size; i++)
    {   cout<<"============================================================================================================================================================="<<endl;
        cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].kind<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(5)<<Obj[i].studio<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
        cout<<"============================================================================================================================================================="<<endl;
    }
}
 
void showRusFilm(const Film* Obj, const int size){
    char poisk[40]; 
    cout<<"Введите название страны (Россия):"<<endl;
    cin.getline(poisk, 40);
    cout<<"№ "<<"|"<<setw(30)<<fixed<<setprecision(9)<<"Название\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Режиссер\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Страна\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Год\t"<<endl;
    cout<<"============================================================================================================================================================="<<endl;
    for(int i=0; i<size; i++){
        if(strcmp(Obj[i].country, poisk)==0 ){
            cout<<"============================================================================================================================================================="<<endl;
            cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
            cout<<"============================================================================================================================================================="<<endl;
        }
    }
}
 
void yourKind(const Film* Obj, const int size){
    char poisk[40];
    cout<<"Введите жанр:"<<endl;
    cin.getline(poisk, 40);
    cout<<"№ "<<"|"<<setw(30)<<fixed<<setprecision(9)<<"Название\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Режиссер\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Жанр\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Киностудия\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Страна\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Год\t"<<endl;
    cout<<"============================================================================================================================================================="<<endl;
    for(int i=0; i<size; i++){
        if(strcmp(Obj[i].kind, poisk)==0 ){
            cout<<"============================================================================================================================================================="<<endl;
            cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].kind<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(5)<<Obj[i].studio<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
            cout<<"============================================================================================================================================================="<<endl;
        }
    }   
}
 
void finder(const Film* Obj, const int size){
    char poisk[70];
    int da=0;
    cout<<"Введите название фильма:"<<endl;
    cin.getline(poisk, 70);
    for(int i=0; i<size; i++){
        if(strcmp(Obj[i].film_name, poisk)==0 ){
            cout<<"============================================================================================================================================================="<<endl;
            cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].kind<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(5)<<Obj[i].studio<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
            cout<<"============================================================================================================================================================="<<endl;
            da+=1;
        }
        else if(da==0){
            cout<<"Такой фильм не найден"<<endl;
        }
        else{
            i++;
        }
    }
}
 
void dvojnoe(const Film* Obj, const int size){
    char postud[40];
    double poyear;
    cout<<"Введите название студии"<<endl;
    cin.getline(postud, 40);
    cout<<"Введите год выхода"<<endl;
    cin>>poyear;
    cin.get();
    for(int i=0; i<size; i++){
        if((strcmp(Obj[i].studio, postud)==0) && (Obj[i].year==poyear)){
            cout<<"============================================================================================================================================================="<<endl;
            cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].kind<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(5)<<Obj[i].studio<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
            cout<<"============================================================================================================================================================="<<endl;
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2023, 09:20
Ответы с готовыми решениями:

Сортировка массива структур через сортировку массива указателей
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Сортировка массива структур
Здраствуйте! Сделал вот такую сортировку: string country; List filtered_data; cout &lt;&lt; &quot;Put country: &quot;; cin...

Сортировка массива структур...
Здравствуйте! Не могли бы вы выложить примеры или кинуть ссылочку на интересную статью по сортировке массива структур. Имеется массив...

7
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
19.03.2023, 09:40
C++
1
2
3
4
5
6
7
8
9
10
11
void SortKind(Film* Obj, const int size){
    Film t;
    for(int j=0; j<size; j++)
    for(int i=j+1; i<size; i++){
        if(strcmp(Obj[i-1].kind,Obj[i].kind)>0 ){
            t=Obj[i-1];
            Obj[i-1]=Obj[i];
            Obj[i]=t;
        }
    }   
}
p.s. проще было бы сортировать, если вместо массива Film использовать
массив указателей на Film. Тогда можно было бы просто переставлять указатели.
А так, в операциях типа t=Obj[i-1] копируется всё содержимое структуры.
Хорошо ещё, что у Вас в содержимом структуры нет динамических данных.
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
19.03.2023, 09:54  [ТС]
Спасибо, но мне не по жанру сортировку надо, а по году выхода для русских фильмов
- список названий российских фильмов, отсортированный по году
выпуска, с указанием фамилии режиссера;
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
19.03.2023, 10:04
Лучший ответ Сообщение было отмечено Fargus4510 как решение

Решение

Цитата Сообщение от Fargus4510 Посмотреть сообщение
не по жанру сортировку надо, а по году выхода для русских фильмов
Так это же намного проще! Замените условие
Цитата Сообщение от zss Посмотреть сообщение
if(strcmp(Obj[i-1].kind,Obj[i].kind)>0 ){
на
C++
1
if( Obj[i-1].year > Obj[i].year )
Кстати, а почему у Вас year имеет тип double?
Разве может год выпуска быть, например, 2022.5?
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
19.03.2023, 10:54  [ТС]
Я попробовал переделать, но появляется ошибка
Obj[i-1]=Obj[i];//[Error] passing 'const Film' as 'this' argument of 'Film& Film::operator=(const Film&)' discards qualifiers [-fpermissive]
дабл мне сказала преподаватель взять, хотя инт тут тоже подходит

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void showRusFilm(const Film* Obj, const int size){
    char poisk[40]; 
    cout<<"Введите название страны (Россия):"<<endl;
    cin.getline(poisk, 40);
    cout<<"№ "<<"|"<<setw(30)<<fixed<<setprecision(9)<<"Название\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Режиссер\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Страна\t"<<"|"<<setw(20)<<fixed<<setprecision(4)<<"Год\t"<<endl;
    cout<<"============================================================================================================================================================="<<endl;
    Film t;
    for(int j=0; j<size; j++)
    for(int i=j+1; i<size; i++){
        if( Obj[i-1].year > Obj[i].year){
            t=Obj[i-1];
            Obj[i-1]=Obj[i];//[Error] passing 'const Film' as 'this' argument of 'Film& Film::operator=(const Film&)' discards qualifiers [-fpermissive]
            Obj[i]=t;
            if(strcmp(Obj[i].country, poisk)==0 ){
            cout<<"============================================================================================================================================================="<<endl;
            cout<<i+1<<"  "<<"|"<<setw(30)<<fixed<<setprecision(0)<<Obj[i].film_name<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(10)<<Obj[i].film_director<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(3)<<Obj[i].country<<'\t'<<"|"<<setw(20)<<fixed<<setprecision(0)<<Obj[i].year<<endl;
            cout<<"============================================================================================================================================================="<<endl;
        }
        }
    }   
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.03.2023, 11:00
const убери.
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
19.03.2023, 11:28  [ТС]
все, работает, спасибо
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
19.03.2023, 11:56
Fargus4510, не так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void SortYear(Film* Obj, const int size){
    Film t;
    for(int j=0; j<size; j++)
    for(int i=j+1; i<size; i++){
        if( Obj[i-1].year > Obj[i].year){
            t=Obj[i-1];
            Obj[i-1]=Obj[i];
            Obj[i]=t;
        }
    }   
}
void showRusFilm(Film* Obj, const int size){
    SortYear(Obj,size);
    char poisk[40]; 
  .....
    for(int i=0; i<size; i++){
            if(strcmp(Obj[i].country, poisk)==0 ){
                  cout<<......
                ......
        }
    }   
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2023, 11:56
Помогаю со студенческими работами здесь

Сортировка массива структур
Составить список студентов группы, включив следующие данные: Ф.И.О., число, месяц и год рождения. Переставить записи студентов по возрасту

Сортировка массива структур
Имеется структура : struct Data_base { string team_name; string city; int scored_goals; int missed_goals;...

Сортировка массива структур
Разработать программу, реализующую сортировку массива структур (50 элементов). В качестве элемента массива выбрать структуру,...

Сортировка массива структур
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;stdio.h&gt; ...

Сортировка массива структур
Дана структура WORKER и массив из 10 стркутур. Нужно 1)сортировать список 2) вывести на экран рабочих чей стаж больше числа введённого с...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru