Форум программистов, компьютерный форум CyberForum.ru

Сортировка записи - C++

Восстановить пароль Регистрация
 
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 16:45     Сортировка записи #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
69
70
71
72
73
74
75
76
#include<iostream>
#include<string>
#include <iomanip>
 
using namespace std;
 
int main()
{
 
    struct journal
    {
        string surname;
        double mark1;
        double mark2;
        double mark3;
        double midle;       
    };
 
    int n;
    cout<<"Enter n: ";
    cin>>n;
    journal *people = new journal[n];               //journal people[n];
    cin.ignore();
    for(int i =0; i<n; i++)
        {
            cout<<"\nEnter surname the "<<i+1<<" student: ";
            getline(cin, people[i].surname);
            cout<<"\nEnter the first mark of third: "; cin>>people[i].mark1;
            cout<<"\nEnter the second mark of third: "; cin>>people[i].mark2;
            cout<<"\nEnter the third mark of third: "; cin>>people[i].mark3;
            people[i].midle = (people[i].mark1+people[i].mark2+people[i].mark3)/3;
            cin.ignore();
    }
    cout<<"\n______________________________________________\n";
    for(int i =0; i<n; i++)
    {   cout<<"\n"<<people[i].surname;
        cout<<"\n"<<people[i].mark1;
        cout<<"\n"<<people[i].mark2;
        cout<<"\n"<<people[i].mark3;
        cout<<"\nMidle mark is: "<<people[i].midle;
        cout<<"\n";
    }
    cout<<"\n______________________________________________\n";
 
 
    //////////////////////////////////////////////////////////  Показатель успеваемости
    int count1 = 0;
    int count2 = 0;
    for(int i=0; i<n; i++)
    {
        if (people[i].mark1 ==4)
            count1++;
        if (people[i].mark1 ==5)
            count2++;
        if (people[i].mark2 ==4)
            count1++;
        if (people[i].mark2 ==5)
            count2++;
        if (people[i].mark3 ==4)
            count1++;
        if (people[i].mark3 ==5)
            count2++;
    }
 
 
    cout<<"Vseh 4: "<< count1;
    cout<<"\nVseh 5: "<< count2;
    cout<<"\nPokazatel :"<< (((count1 + count2)*100)/n)/3<<"%\n\n"; 
 
 
 
 
 
    system("pause");
    return 0;
}
Добавлено через 26 минут
Моя сортировка, но она не правильно работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int t=0;
    for(int i = 0; i<n; i++)
    {
        if(people[i].midle<people[i+1].midle)
            {people[i].midle = t;
        people[i].midle=people[i+1].midle;
            people[i+1].midle=t;
        }
    }
 
    for(int i = 0; i<n; i++)
    {
        cout<<people[i].midle<<" ";
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
14.04.2013, 16:49     Сортировка записи #2
Моя сортировка, но она не правильно работает
вы переставляете только middle-поле, а надо все поля переставлять это ошибка раз

и как вы уложили сортировку в 1 цикл? это ошибка 2
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 16:58  [ТС]     Сортировка записи #3
abit, если не секрет, сколько циклов должно получится, столько сколько полей в структуре, то есть 5?
Эльшат
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
14.04.2013, 17:01     Сортировка записи #4
Кликните здесь для просмотра всего текста
#include<iostream>
#include<string>
#include <iomanip>

using namespace std;
struct journal
{
string surname;
double mark1;
double mark2;
double mark3;
double midle;
};
void Sort(journal *peole,int n);
int main()
{



int n;
cout<<"Enter n: ";
cin>>n;
journal *people = new journal[n]; //journal people[n];
cin.ignore();
for(int i =0; i<n; i++)
{
cout<<"\nEnter surname the "<<i+1<<" student: ";
getline(cin, people[i].surname);
cout<<"\nEnter the first mark of third: "; cin>>people[i].mark1;
cout<<"\nEnter the second mark of third: "; cin>>people[i].mark2;
cout<<"\nEnter the third mark of third: "; cin>>people[i].mark3;
people[i].midle = (people[i].mark1+people[i].mark2+people[i].mark3)/3;
cin.ignore();
}
cout<<"\n______________________________________________\n";
for(int i =0; i<n; i++)
{ cout<<"\n"<<people[i].surname;
cout<<"\n"<<people[i].mark1;
cout<<"\n"<<people[i].mark2;
cout<<"\n"<<people[i].mark3;
cout<<"\nMidle mark is: "<<people[i].midle;
cout<<"\n";
}
cout<<"\n______________________________________________\n";


////////////////////////////////////////////////////////// Показатель успеваемости
int count1 = 0;
int count2 = 0;
for(int i=0; i<n; i++)
{
if (people[i].mark1 ==4)
count1++;
if (people[i].mark1 ==5)
count2++;
if (people[i].mark2 ==4)
count1++;
if (people[i].mark2 ==5)
count2++;
if (people[i].mark3 ==4)
count1++;
if (people[i].mark3 ==5)
count2++;
}


cout<<"Vseh 4: "<< count1;
cout<<"\nVseh 5: "<< count2;
cout<<"\nPokazatel :"<< (((count1 + count2)*100)/n)/3<<"%\n\n";
cout<<"sortirovka:"<<endl;
Sort(people,n);
system("pause");
return 0;
}

void Sort(journal *people, int n)
{
journal temp;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(people[i].midle > people[i+1].midle)
{
temp = people[j];
people[j] = people[j+1];
people[j+1] = temp;
}
}
}
for(i=0;i<n;i++)
{
cout<<people[i].midle<<endl;
}
}


Добавлено через 40 секунд
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
#include<iostream>
#include<string>
#include <iomanip>
 
using namespace std;
 struct journal
    {
        string surname;
        double mark1;
        double mark2;
        double mark3;
        double midle;       
    };
void Sort(journal *peole,int n);
int main()
{
 
    
 
    int n;
    cout<<"Enter n: ";
    cin>>n;
    journal *people = new journal[n];               //journal people[n];
    cin.ignore();
    for(int i =0; i<n; i++)
        {
            cout<<"\nEnter surname the "<<i+1<<" student: ";
            getline(cin, people[i].surname);
            cout<<"\nEnter the first mark of third: "; cin>>people[i].mark1;
            cout<<"\nEnter the second mark of third: "; cin>>people[i].mark2;
            cout<<"\nEnter the third mark of third: "; cin>>people[i].mark3;
            people[i].midle = (people[i].mark1+people[i].mark2+people[i].mark3)/3;
            cin.ignore();
    }
    cout<<"\n______________________________________________\n";
    for(int i =0; i<n; i++)
    {   cout<<"\n"<<people[i].surname;
        cout<<"\n"<<people[i].mark1;
        cout<<"\n"<<people[i].mark2;
        cout<<"\n"<<people[i].mark3;
        cout<<"\nMidle mark is: "<<people[i].midle;
        cout<<"\n";
    }
    cout<<"\n______________________________________________\n";
 
 
    //////////////////////////////////////////////////////////  Показатель успеваемости
    int count1 = 0;
    int count2 = 0;
    for(int i=0; i<n; i++)
    {
        if (people[i].mark1 ==4)
            count1++;
        if (people[i].mark1 ==5)
            count2++;
        if (people[i].mark2 ==4)
            count1++;
        if (people[i].mark2 ==5)
            count2++;
        if (people[i].mark3 ==4)
            count1++;
        if (people[i].mark3 ==5)
            count2++;
    }
 
 
    cout<<"Vseh 4: "<< count1;
    cout<<"\nVseh 5: "<< count2;
    cout<<"\nPokazatel :"<< (((count1 + count2)*100)/n)/3<<"%\n\n"; 
    cout<<"sortirovka:"<<endl;
    Sort(people,n);
    system("pause");
    return 0;
}
 
void Sort(journal *people, int n)
{
    journal temp;
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(people[i].midle > people[i+1].midle)
            {
                temp = people[j];
                people[j] = people[j+1];
                people[j+1] = temp;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        cout<<people[i].midle<<endl;
    }
}
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
14.04.2013, 17:04     Сортировка записи #5
Цитата Сообщение от cybernate Посмотреть сообщение
abit, если не секрет, сколько циклов должно получится, столько сколько полей в структуре, то есть 5?
зависит от метода сортировки, но как минимум два, сложность самого быстрого алгоритма в пределе O(N*log(N)), O(N) возможен только в очень редких случаях, когда есть специфичные требования к входному массиву
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 17:24  [ТС]     Сортировка записи #6
Эльшат, спасибо

Добавлено через 19 минут
в ответ выдаёт 2 5 3 вместо 5 3 2 . С чем может быть связано?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
14.04.2013, 17:31     Сортировка записи #7
Цитата Сообщение от cybernate Посмотреть сообщение
Добавлено через 19 минут
в ответ выдаёт 2 5 3 вместо 5 3 2 . С чем может быть связано?
насколько я вижу он пытался изобразить пузырьковую сортировку... там инварианты цикла пишутся не так

C++
1
2
3
4
 for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
там не может вложенного цикла снова по всей последовательности

приблизительно так должно выглядеть
C++
1
2
3
4
5
6
7
8
for(j=0;j<n;++j)
          for(i=0;i<n-j;++i)
                if(people[i].midle > people[i+1].midle)
           {
                temp = people[i];
                people[i] = people[i+1];
                people[i+1] = temp;
            }
Эльшат
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
14.04.2013, 17:42     Сортировка записи #8
да это была пузырьковая сортировка
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 17:45  [ТС]     Сортировка записи #9
Да вот таким способом все корректно
C++
1
2
3
4
5
6
7
8
9
10
  journal temp;
    int i,j;
   for(j=0;j<n;++j)
          for(i=0;i<n-j;++i)
                if(people[i].midle < people[i+1].midle)
           {
                temp = people[i];
                people[i] = people[i+1];
                people[i+1] = temp;
            }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 17:49     Сортировка записи
Еще ссылки по теме:

Написать функции для чтения/записи отдельных бит для любой записи из данного набора C++
C++ Сортировка Хоара / Быстрая сортировка
C++ Проверить, есть ли в записи числа m цифры, совпадающие с цифрами в записи числа n

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

Или воспользуйтесь поиском по форуму:
Эльшат
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
14.04.2013, 17:49     Сортировка записи #10
аа.. теперь все понятно
Yandex
Объявления
14.04.2013, 17:49     Сортировка записи
Ответ Создать тему
Опции темы

Текущее время: 01:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru