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

Ошибки с массивом структур

16.02.2018, 16:34. Показов 1302. Ответов 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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
 
using namespace std;
 
struct RecordBook {
    char fam_stud[20], fam_studnew[20], numbRB[20], newnumbRB[20];
};
 
struct Subject {
    char fam_teatcher[10], name_subj[10];
    int record;
};
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int kol_ST, check;
    cout << "Введите кол-во студентов: "; cin >> kol_ST;
    RecordBook* rr = new RecordBook[kol_ST];
    for (int i = 0; i<kol_ST; i++)
    {
        cout << "Введите фамилию студента: "; cin >> rr[i].fam_stud;
        cout << "Введите номер зачетки: "; cin >> rr[i].numbRB;
        int kol_subj, j;
        Subject*lib;
        cout << "Введите кол-во предметов: "; cin >> kol_subj;
        lib = new Subject[kol_subj];
        for (int j = 0; j < kol_subj; j++) {
            cin >> lib[j].fam_teatcher >> lib[j].name_subj >> lib[j].record;
            cout<< lib[j].fam_teatcher << lib[j].name_subj << lib[j].record;
            if (lib[j].record != 2) {
                rr.fam_stud = rr.fam_studnew;
            }
        }       
        cout << " Введите 0, чтобы отсортировать по фамилии, введите 1, чтобы отсортировать по номеру зачетки: " << " ";
        cin >> check;
        switch (check) {
        case 1:
            for (int i = 0; i < kol_ST; j++) {
                for (int j = 0; j < kol_ST - 1; j++) {
                    if (rr[j].numbRB > rr[j].numbRB[j + 1]) rr[j].newnumbRB = rr[j].numbRB; rr[j].numbRB = rr[j].numbRB[j + 1]; rr[j].numbRB[j + 1] = rr[j].newnumbRB;
                }
            }
        case 0:
            // сортировка по фамилиям (???)
 
 
                }
            
    
    }
 
        delete[] lib;
    }
    delete[] rr;
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2018, 16:34
Ответы с готовыми решениями:

Работа с массивом структур
Помогите кто может изладить такую вот штуку на С /чистый Си/ А может готовое уже есть, оч надо!!!!!:( Дана информация о шести...

Работа с массивом структур
Разработать программу, позволяющую добавлять данные структур с указанными полями в массив, просматривать массивы, а также выполнять...

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

7
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
16.02.2018, 16:48
Для сортировки по фамилиям можна использовать strcmp
1
4 / 4 / 4
Регистрация: 16.02.2018
Сообщений: 6
16.02.2018, 18:15
Лучший ответ Сообщение было отмечено noname12345 как решение

Решение

В стандартной библиотеке C++ есть вспомогательные классы для работы со строками и динамическими массивами, а также функции для сортировки данных.
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
#include <iostream>
#include <locale.h>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
struct Subject {
    string mName, mTeacher;
    int mRecord;
};
 
struct RecordBook {
    string mName;
    int mNumRB;
    vector<Subject> mSubjects;
};
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    int studCount;
    
    // Получаем данные
    cout << "Введите кол-во студентов: ";
    cin >> studCount;
    
    vector<RecordBook> books(studCount);
 
    for (int i = 0; i < studCount; i++) {
        auto &entry = books[i];
 
        cout << "Введите фамилию студента (" << i + 1 << '/' << studCount << "): ";
        cin >> entry.mName;
 
        cout << "Введите номер зачетки: ";
        cin >> entry.mNumRB;
 
        int subjCount;
        cout << "Введите кол-во предметов: ";
        cin >> subjCount;
        
        entry.mSubjects.resize(subjCount);
 
        for (int j = 0; j < subjCount; j++) {
            auto &subj = entry.mSubjects[j];
 
            cout << "Введите название предмета (" << j + 1 << '/' << subjCount << "): ";
            cin >> subj.mName;
 
            cout << "Введите фамилию преподавателя: ";
            cin >> subj.mTeacher;
 
            cout << "Введите оценку: ";
            cin >> subj.mRecord;
        }
    }
 
    // Данные получили, сортируем
    int sortType;
    cout << "Введите 0, чтобы отсортировать по фамилии, введите 1, чтобы отсортировать по номеру зачетки: ";
    cin >> sortType;
    switch (sortType) {
    case 1:
        // по номеру
        sort(books.begin(), books.end(), [](RecordBook const &a, RecordBook const &b) {
            return a.mNumRB < b.mNumRB;
        });
        break;
    case 0:
        // по фамилии
        sort(books.begin(), books.end(), [](RecordBook const &a, RecordBook const &b) {
            return a.mName < b.mName;
        });
        break;
    }
 
    // Вывод финального результата
    for (auto const &book : books) {
        cout << "№" << book.mNumRB << ". Студент " << book.mName << "." << endl;
        for (auto const &subj : book.mSubjects)
            cout << "Предмет " << subj.mName << " (преподаватель " << subj.mTeacher << ") - " << subj.mRecord << endl;
        cout << endl;
    }
 
    system("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
18.02.2018, 09:19  [ТС]
Цитата Сообщение от Quaternion Посмотреть сообщение
В стандартной библиотеке C++ есть
А можно подделать мои код? без использования векторов
Я вообще не знал о существовании векторов
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
18.02.2018, 10:57
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
 
using namespace std;
 
struct RecordBook {
    char fam_stud[20], fam_studnew[20], numbRB[20], newnumbRB[20];
};
 
struct Subject {
    char fam_teatcher[10], name_subj[10];
    int record;
};
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int kol_ST, check;
    cout << "Введите кол-во студентов: "; cin >> kol_ST;
    RecordBook* rr = new RecordBook[kol_ST];
    for (int i = 0; i<kol_ST; i++)
    {
        cout << "Введите фамилию студента: "; cin >> rr[i].fam_stud;
        cout << "Введите номер зачетки: "; cin >> rr[i].numbRB;
        int kol_subj, j;
        Subject*lib;
        cout << "Введите кол-во предметов: "; cin >> kol_subj;
        lib = new Subject[kol_subj];
        for (int j = 0; j < kol_subj; j++) {
            cin >> lib[j].fam_teatcher >> lib[j].name_subj >> lib[j].record;
            cout<< lib[j].fam_teatcher << lib[j].name_subj << lib[j].record;
            if (lib[j].record != 2) {
                rr.fam_stud = rr.fam_studnew;
            }
        }       
        cout << " Введите 0, чтобы отсортировать по фамилии, введите 1, чтобы отсортировать по номеру зачетки: " << " ";
        cin >> check;
        switch (check) {
        case 1:
            for (int i = 0; i < kol_ST; j++) {
                for (int j = 0; j < kol_ST - 1; j++) {
                    if (rr[j].numbRB > rr[j].numbRB[j + 1])
                    {
                        rr[j].newnumbRB = rr[j].numbRB; 
                        rr[j].numbRB = rr[j].numbRB[j + 1]; 
                        rr[j].numbRB[j + 1] = rr[j].newnumbRB;
                    }
                }
            }
        case 0:
            for (int i = 0; i < kol_ST - 1; i++) {
                for (int j = 0; j < kol_ST - i - 1; j++) {
                    if (strcmp(rr[j].fam_stud, rr[j+1].fam_stud) < 0)
                    {
                        swap_stud(); //функцию обмена реализуете сами
                    }
                }
        }
 
 
                }
            
    
    }
 
        delete[] lib;
    }
    delete[] rr;
    return 0;
}
1
1 / 1 / 0
Регистрация: 01.11.2017
Сообщений: 164
18.02.2018, 11:15  [ТС]
Цитата Сообщение от 1Вирт1 Посмотреть сообщение
//функцию обмена реализуете сами
У вас код работает?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
18.02.2018, 11:19
Лучший ответ Сообщение было отмечено noname12345 как решение

Решение

нужно реализовать функцию обмена двух инстансов структур тогда все будет работать
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
18.02.2018, 12:50
Цитата Сообщение от Quaternion Посмотреть сообщение
В стандартной библиотеке C++ есть вспомогательные классы для работы со строками и динамическими массивами, а также функции для сортировки данных.
Указатели Сишные играют роль итераторов категории std::random_access_iterator_tag. Чтобы пользоваться <algorithm> не обязательно пользоваться контейнерами из STL.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2018, 12:50
Помогаю со студенческими работами здесь

Работа с массивом структур
Всем привет!!! Пожаалусто помогите кому нетрудно))) Программирование задач с использованием файлов Условие задачи! Программа...

Работа с массивом структур
Есть структура: struct student { char fam; }; Объявлена: int N = 3; student *stud; stud = new student; Записываю в...

Работа с массивом структур
Необходимо создать массив записей (структур) с определенными полями (марка автомобиля, рег. номер, год выпуска, цвет, адрес), а потом...

Программа с массивом структур
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace std; class TestContent { public: // int...

Структура с вложенным массивом структур
Здравствуйте! Хочу создать некое подобие файловой системы. есть 2 структуры для папки и файла: struct directory { string...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru