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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
#1

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

14.04.2013, 16:45. Просмотров 317. Ответов 9
Метки нет (Все метки)

Дана задача: создать запись с полями и три оценки. Найти качественный показатель успеваемости. Отсортировать запись по убыванию среднего бала.

как создать эту сортировку?

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<<" ";
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 16:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка записи (C++):

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

Быстрая сортировка (сортировка методом Хоара) - C++
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 724
14.04.2013, 16:49 #2
Моя сортировка, но она не правильно работает
вы переставляете только middle-поле, а надо все поля переставлять это ошибка раз

и как вы уложили сортировку в 1 цикл? это ошибка 2
1
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 16:58  [ТС] #3
abit, если не секрет, сколько циклов должно получится, столько сколько полей в структуре, то есть 5?
0
Эльшат
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;
    }
}
0
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 724
14.04.2013, 17:04 #5
Цитата Сообщение от cybernate Посмотреть сообщение
abit, если не секрет, сколько циклов должно получится, столько сколько полей в структуре, то есть 5?
зависит от метода сортировки, но как минимум два, сложность самого быстрого алгоритма в пределе O(N*log(N)), O(N) возможен только в очень редких случаях, когда есть специфичные требования к входному массиву
1
cybernate
3 / 3 / 0
Регистрация: 10.03.2013
Сообщений: 45
14.04.2013, 17:24  [ТС] #6
Эльшат, спасибо

Добавлено через 19 минут
в ответ выдаёт 2 5 3 вместо 5 3 2 . С чем может быть связано?
0
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 724
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;
            }
1
Эльшат
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
14.04.2013, 17:42 #8
да это была пузырьковая сортировка
0
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;
            }
0
Эльшат
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 7
14.04.2013, 17:49 #10
аа.. теперь все понятно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 17:49
Привет! Вот еще темы с ответами:

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) - C++
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

2 сортировки: пирамидальная сортировка и сортировка слиянием - C++
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

Написать функции для чтения/записи отдельных бит для любой записи из данного набора - C++
Начиная с адреса А в памяти МК находятся N записей длиной k бит каждая. Записи выровнены по границе слова. Написать функции для...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.04.2013, 17:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru