2 / 2 / 1
Регистрация: 12.10.2014
Сообщений: 77
1

Отсортировать структуру по алфавиту

18.10.2014, 23:03. Показов 4457. Ответов 5
Метки нет (Все метки)

Вообще задание такое:
Описать структуру с именем STUDENT, содержащую следующие поля:
1)фамилия и инициалы;
2)номер группы;
3)успеваемость(массив из пяти элементов).
Написать программу, выполняющую следующие действия:
1)ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по алфавиту;
2)вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2;
3)если таких студентов нет, вывести соответствующее сообщение.

Я всё сделала, кроме сортировки по алфавиту, помогите, пожалуйста, с этим. Вот код:
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 <conio.h>
#include <string.h>
#include <stdlib.h>
#include<iostream.h>
void main()
{
clrscr();
     const int l_name=30, l_famil=30, l_otchestvo=30;
 
     struct Student
{
     char name[l_name+1];
     char famil[l_famil+1];
     char otchestvo[l_otchestvo+1];
     int nomer;
     float uspevaemost;
};
     const int l_dbase=100;
     Student *dbase=new Student[l_dbase];
cout<<"Vvedite dannie o desyati studentah:"<<endl;
 
     for (int i=1;i<=3;i++)
{
   cout<<"Zapolnyate dannie o "<<i<<"m studente:"<<endl<<endl;
   cout<<"Vvedite Imya:"<<endl;
   cin>>dbase[i].name;
   cout<<"Vvedite Otchestvo:"<<endl;
   cin>>dbase[i].otchestvo;
   cout<<"Vvedite familiyu:"<<endl;
   cin>>dbase[i].famil;
   cout<<"Vvedite nomer gruppi:"<<endl;
   cin>>dbase[i].nomer;
   cout<<"Vvedite uspevaemost:"<<endl;
   cin>>dbase[i].uspevaemost;
}
//Сюда можно вставить сортировку!!!
 
 int flag=0;
 cout<<"Studenti, imeushie ocenku 2:"<<endl;
    for (i=1;i<=3;i++)
{
    if (dbase[i].uspevaemost==2)
{
cout<<"Familiya:"<<dbase[i].famil<<endl<<endl;
cout<<"Nomer gruppi"<<dbase[i].nomer<<endl;
flag++;
}
}
    if (flag==0)
{
cout<<"Takih studentov net!"<<endl;
}
getch();
}
 
Ещё объясните, как работает flag в этих строках:
int flag=0;
cout<<"Studenti, imeushie ocenku 2:"<<endl;
for (i=1;i<=3;i++)
{
if (dbase[i].uspevaemost==2)
{
cout<<"Familiya:"<<dbase[i].famil<<endl<<endl;
cout<<"Nomer gruppi"<<dbase[i].nomer<<endl;
flag++;
}
}
if (flag==0)
{
cout<<"Takih studentov net!"<<endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2014, 23:03
Ответы с готовыми решениями:

Как отсортировать по алфавиту структуру
Здравствуйте, мальчики. Я делала программу, которая содержит прайс лист: -названия товара...

Как отсортировать структуру с полями string по алфавиту
Народ выручайте!!!! Нужно сделать сортировку по полю string Fname(по фамилии), всё сделал только...

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

Отсортировать имена по алфавиту
Нужно отсортировать имена по алфавиту. В коде я переношу имена из структуры в новый массив теперь...

5
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
18.10.2014, 23:14 2
Anna_Stiking, флаг можно заменить на bool переменную
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool flag=false;
cout<<"Studenti, imeushie ocenku 2:"<<endl;
for (i=1;i<=3;i++)
{
if (dbase[i].uspevaemost==2)
{
cout<<"Familiya:"<<dbase[i].famil<<endl<<endl;
cout<<"Nomer gruppi"<<dbase[i].nomer<<endl;
flag=true;
}
}
if (!flag)
{
cout<<"Takih studentov net!"<<endl;
}
а работает очень просто , если есть хоть 1 двоечник - переменная flag изменяется (если нету - соответственно остается равной заданному значению), а в конце осуществляется проверка : если flag не изменилось, то программа выводит "таких студентов нет"
0
7345 / 6271 / 2852
Регистрация: 14.04.2014
Сообщений: 27,156
18.10.2014, 23:15 3
Сортировка также как и массив с обычными числами, только сравнивать строки.
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
18.10.2014, 23:23 4
Anna_Stiking,
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
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<iostream>
 
using namespace std;
void main()
{
    //clrscr();
    const int l_name = 30, l_famil = 30, l_otchestvo = 30;
 
    struct Student
    {
        char name[l_name + 1];
        char famil[l_famil + 1];
        char otchestvo[l_otchestvo + 1];
        int nomer;
        float uspevaemost;
    };
    const int l_dbase = 100;
    Student *dbase = new Student[l_dbase];
    cout << "Vvedite dannie o desyati studentah:" << endl;
 
    for (int i = 0; i < 10; i++)
    {
        cout << "Zapolnyate dannie o " << i << "m studente:" << endl << endl;
        cout << "Vvedite Imya:" << endl;
        cin >> dbase[i].name;
        cout << "Vvedite Otchestvo:" << endl;
        cin >> dbase[i].otchestvo;
        cout << "Vvedite familiyu:" << endl;
        cin >> dbase[i].famil;
        cout << "Vvedite nomer gruppi:" << endl;
        cin >> dbase[i].nomer;
        cout << "Vvedite uspevaemost:" << endl;
        cin >> dbase[i].uspevaemost;
    }
    Student temp;
        for (int i = 0; i < 10; ++i) // i - номер прохода
        {
            for (int j = 0; j < 10; ++j) // внутренний цикл прохода
            {
                if (dbase[j + 1].famil < dbase[j].famil)
                {
                    temp = dbase[j + 1];
                    dbase[j + 1] = dbase[j];
                    dbase[j] = temp;
                }
            }
        }
    
 
    bool flag = false;
    cout << "Studenti, imeushie ocenku 2:" << endl;
    for (int i = 0; i < 10; i++)
    {
        if (dbase[i].uspevaemost == 2)
        {
            cout << "Familiya:" << dbase[i].famil << endl << endl;
            cout << "Nomer gruppi" << dbase[i].nomer << endl;
            flag=true;
        }
    }
    if (!flag)
    {
        cout << "Takih studentov net!" << endl;
    }
    _getch();
}
0
2 / 2 / 1
Регистрация: 12.10.2014
Сообщений: 77
19.10.2014, 00:32  [ТС] 5
Nevermind_qqq, А можете, пожалуйста, подробно объяснить, как вы сделали сортировку?
0
73 / 59 / 41
Регистрация: 25.06.2014
Сообщений: 360
19.10.2014, 00:44 6
Anna_Stiking, я взял алгоритм пузырьковой сортировки(можно заменить на любой другой),
Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.

1)создается структура для временного хранения данных
C++
1
Student temp;
2)далее делаем 10 проходов по массиву (цикл с переменной i),т.к. за один проход не управимся
3)далее (цикл с переменной j) сравниваем элемент (в данном случае парметр структуры -фамилию) с идущим за ним(1ый со 2ым например), и если второй окажется меньше(по возрастанию же сортируем), то меняем их(структуры, а не фамилии!!!) местами
C++
1
2
3
temp = dbase[j + 1];
                    dbase[j + 1] = dbase[j];
                    dbase[j] = temp;
переменной темп присваиваем данные (j+1)ой структуры, (j+1)ой присваиваем значение jой, а jой - temp(т.е. поменяли местами)
4) после 10 проходов цикла с переменной i однозначно получаем отсортированный массив
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2014, 00:44
Помогаю со студенческими работами здесь

Отсортировать строки по алфавиту
Вводим строки, и на выводе получаем их в алфавитном порядке. Я что-то голову ломаю, не понимаю....

Отсортировать слова по алфавиту
Задача: Есть строка из слов разделенных запятыми, в конце строки точка. Нужно отсортировать слова...

Отсортировать ФИО по алфавиту
Дана структура FIRMA, ФИО сотрудников, посада, год поступления на роботу. 1.Надо посортировать...

Отсортировать слова в строке по алфавиту
Тема: Функции и массивы в С++ Задание: Отсортировать слова в строке по алфавиту


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

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

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