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

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

Войти
Регистрация
Восстановить пароль
 
man9ik
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 4
#1

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

10.01.2013, 01:12. Просмотров 457. Ответов 5
Метки нет (Все метки)

Здравствуйте. Помогите пожалуйста. Делаю уже месяц, задача простоя а наверно я дурочек не чего не понимаю.
задача. Написать программу, в которой необходимо создать структуру, элементами которой являются: имя, фамилия, год рождения студента и оценки по пяти экзаменам. Объявить массив данных о студентах группы типа структуры и ввести значения его элементов. Определить сумму баллов за сессию каждого студента и отсортировать список студентов по баллам в порядке возрастания. Сортировку реализовать в отдельной функции. Предусмотреть меню. Результаты работы программы записать в файл.

вот последнее что с чем работаю. много переделывал и все таки запутался и она перестала вообще работать. раньше не работала не получалась найти общий бал для сортировки. начал его делать и изменять код. читать статьи и в итого не чего хорошего не получилась.

код
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
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define n 20
FILE* files;
struct gurnal
{
char im;
char fam;
int god;
int mat;
int fiz;
int ist;
int oop;
int prog;
float sred;
 
};
int z=0;
void menu()
{
printf("1.Zapis studenta\n");
printf("2.Spisok\n");
printf("3.Sortirovka\n");
printf("4.Save and exit\n");
}
void zapis()
{
gurnal stud[n];
printf("Imja studenta:");
scanf("%s",&stud[n].im);
printf("Familija:");
scanf("%s",&stud[n].fam);
printf("Gog rogdenija:");
scanf("%d",&stud[n].god);
printf("Ozenka po matem:");
scanf("%d",&stud[n].mat);
printf("Ozenka po fizika:");
scanf("%d",&stud[n].fiz);
printf("Ozenka po istorii:");
scanf("%d",&stud[n].ist);
printf("Ozenka po oop:");
scanf("%d",&stud[n].oop);
printf("Ozenka po programmirovanijo:");
scanf("%d",&stud[n].prog);
 
if (z>=n)
{
printf("Spisok poln");
}
else
{
stud[z]=stud;
z++;
}
}
void spisok()
{
int i;
for(i=0;i<z;i++)
{
printf("%d. %s %s god %d mat%d fiz%d ist%d oop%d prog%d\n",i+1,stud[i].im,stud[i].fam,stud[i].mat,stud[i].fiz,stud[i].ist,stud[i].oop,stud[i].prog);
}
printf("\n");
}
 
void sortirovka()
{
 
}
 
 
 
 
int main()
{
int h;
for(;;)
{
menu();
printf("\nVvedite nomer:");
scanf("%d",&h);
switch(h)
{
case(1): zapis();
break;
case(2): spisok();
break;
case(3): sortirovka();
break;
case(4):
//files=fopen("gurnal save.txt", "w");
//fputs("gurnal:\n",files);
//for (int i=0; i<z; i++)
//{
//fputs(stud[i].im,files);
//fputs("\t",files);
 
//fputs("\n",files);
//}
//fclose(files);
 
return 0;
}
}
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 01:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка структур с++ (C++):

Блочная сортировка структур (Отсортировать массив структур по фамилии) - C++
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив структур по фамилии.

Сортировка структур - C++
Доброго времени суток! Помогите, пожалуйста, с сортировкой односвязного списка структур. С структурах содержится дата (год, месяц, день)....

Сортировка структур - C++
Помогите составить программу, пожалуйста! Дана структура &quot;поезд&quot; с полями: Наименование маршрута Время отправления Время...

Сортировка структур - C++
Хочу отсортировать структуру по номеру поезда пузырьковым методом. Написал такой код: station *train = new station; station tmp;...

Сортировка структур - C++
Написать программу, выполняющую следующие действия: • ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи...

Сортировка структур - C++
Подскажите с сортировкой. В функции SortSwap отсортировал по среднему значения. Но в самой структуре позиции не меняются. Спасибо. ...

5
Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
10.01.2013, 13:08 #2
вам проще будет сделать массивы структур то есть отдельно структура с предметами , структура с данными о студентах и т.д
а далее просто передовать аргументы от одной структуры к другой
0
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.01.2013, 14:01 #3
man9ik Ваш код, написан на СИ.Если надо написать на С++, то сортировку структур можно реализовать с помощью swap http://www.cplusplus.com/reference/algorithm/swap/
1
FlaYnoSt
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 18
10.01.2013, 15:36 #4
Не по теме:
http://stump-workshop.blogspot.ru/2008/09/blog-post.html

По теме:

list.h
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
#ifndef LIST_H
#define LIST_H
 
class List{
private:
    static const int n = 5; //Кол-во оценок
    struct student{
        char name[100];
        char secondName[100];
        int birth;
        short scores[n];
        float averageScore;
 
        student* Next;
        student* Prev;
    };
    student* First;
    student* Last;
    int count;
public:
    void addNewStudent();
    void outputList();
    void sort();
    void calcAverageScores();
private: 
    void swap(student*, student*);
 
    List();
    ~List();
};
 
#endif // LIST_H
list.cpp
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
#include <list.h>
#include <iostream>
 
using namespace std;
 
void List::addNewStudent(){
    student* _new = new student();
 
    cout << "Введите имя: ";
    cin >> _new->name;
 
    cout << "Введите фамилию: ";
    cin >> _new->secondName;
 
    cout << "Введите год рождения: ";
    cin >> _new->birth;
 
    cout << "Введите оценки по дисциплинам: ";
    for (int i = 0; i < n; i++){
        cin >> _new->scores[i];
    }
 
    if (First == 0){
        _new->Next = 0;
        _new->Prev = 0;
        First = _new;
        Last = _new;
    }
    else{
        _new->Next = 0;
        _new->Prev = Last;
        Last->Next = _new;
        Last = _new;
    }
 
    count++;
}
 
void List::calcAverageScores(){
    for (student* tmp = First; tmp != 0; tmp = tmp->Next){
        for (int i = 0; i < n; i++)
            tmp->averageScore += tmp->scores[i];
 
        tmp->averageScore /= n;
    }
}
 
void List::swap(student* a, student* b){
    if (a->Next == b){
        if (a->Prev != 0)
            a->Prev->Next = b;
        if (b->Next != 0)
            b->Next->Prev = a;
        a->Next = b->Next;
        b->Prev = a->Prev;
        a->Prev = b;
        b->Next = a;
    }
    else{
        if (a->Prev != 0)
            a->Prev->Next = b;
        if (a->Next != 0)
            a->Next->Prev = b;
        if (b->Next != 0)
            b->Next->Prev = a;
        if (b->Prev != 0)
            b->Prev->Next = a;
 
 
        student* tmpNext = a->Next;
        student* tmpPrev = a->Prev;
 
        a->Next = b->Next;
        a->Prev = b->Prev;
 
        b->Next = tmpNext;
        b->Prev = tmpPrev;
    }
 
    if (a == First)
        First = b;
    if (b == Last)
        Last = a;
 
}
 
void List::sort(){
    //сортировка пузырьком
    for (int i = 0; i < count - 1; i++){
        student* tmp = First;
        for (int j = 0; j < count - i - 1; j++){
            if (tmp->averageScore < tmp->Next->averageScore)
                swap(tmp, tmp->Next);
        }
    }
}
 
void List::outputList(){
    for (student* tmp = First; tmp != 0; tmp = tmp->Next){
        cout << tmp->secondName << " " << tmp->name << " " << tmp->birth << endl;
        cout << "Оценки: ";
        for (int i = 0; i < n; i++){
            cout << tmp->scores[i] << " ";
        }
        cout << "Среднее: " << tmp->averageScore << endl << endl << endl;
    }
}
 
List::List(){
    Last = 0;
    First = 0;
    count = 0;
}
 
List::~List(){
    for (student* tmp = First->Next; tmp != 0; tmp = tmp->Next)
        delete tmp->Prev;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <list.h>
 
using namespace std;
 
int main()
{
    List mylist;
    mylist.addNewStudent();
    mylist.addNewStudent();
    mylist.addNewStudent();
    mylist.calcAverageScores();
    mylist.outputList();
    mylist.sort();
    mylist.outputList();
    return 0;
}
Вроде даже работает. Меню уж сам допишешь, ну и под массив при желании переделаешь.
0
FreeMinder
36 / 36 / 2
Регистрация: 29.08.2012
Сообщений: 59
10.01.2013, 15:54 #5
Если учитывать, что автор хранит в одном символе имя студента, то с классами врядли справится.
Более простой вариант
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<fstream>
 
using namespace std;
 
const int _size_ = 16;
 
struct Student
{
    char Name    [_size_];
    char LastName[_size_];
    int  Year;
    int  Marks[5];
    float AverageMark;
};
 
Student AddStudent();
void PrintList(const Student* list, const int& count);
void Sort(Student* list, const int& count);
void Menu();
void WriteToFile(const Student* list,const int& count);
 
 
int main()
{
    Menu(); 
}
 
Student AddStudent()
{
    system("cls");
    Student student;
    cout<<"Name: ";
    cin>>student.Name;
    cout<<"Last Name: ";
    cin>>student.LastName;
    cout<<"Year: ";
    cin>>student.Year;
    cout<<"Math mark: ";
    cin>>student.Marks[0];
    cout<<"Physics mark: ";
    cin>>student.Marks[1];
    cout<<"History mark: ";
    cin>>student.Marks[2];
    cout<<"OOP mark: ";
    cin>>student.Marks[3];
    cout<<"Programming mark: ";
    cin>>student.Marks[4];
    student.AverageMark = static_cast<float>((student.Marks[0]+student.Marks[1]+student.Marks[2]+student.Marks[3]+student.Marks[4]) / 5);
    cout<<"\nStudent add success\n";
    system("pause >> void");
    return student;
}
void PrintList(const Student* list, const int& count)
{   
    system("cls");
    if(count == 0)
    {
        system("cls");
        cout<<"\n\tList is empty\n";
    }
    else
    {
        for(int i=0; i < count; i++)
        {           
            cout<<"\n\tNo:"     <<i+1<<endl;
            cout<<"Name: "      <<list[i].Name<<endl;
            cout<<"LastName: "  <<list[i].LastName<<endl;
            cout<<"Year: "      <<list[i].Year<<endl;
            cout<<"Marks: ";
            for (int j = 0; j < 5; j++)
                cout<<list[i].Marks[j]<<" ";
            cout<<"\nAverage mark: "<<list[i].AverageMark;
        }
        cout<<endl;
    }
    system("pause >> void");
} 
void Sort(Student* list, const int& count)
{
    if(count == 0)
    {
        cout<<"List is empty\n";
    }
    else
    {
        for (int i = 0; i < count; i++)
            for (int j = i+1; j < count; j++)
            {           
                if (list[i].AverageMark > list[j].AverageMark)
                {
                    Student temp = list[i];
                    list[i] = list[j];
                    list[j] = temp;
                }
            }
        cout<<"\nSort finished\n";      
    }
    system("pause >> void");
}
void WriteToFile(const Student* list,const int& count)
{
    if(count == 0 )
    {
        cout<<"\nList is empty!\n";
        system("pause >> void");
        return;
    }
    ofstream out("save.txt",ios::out);
    if(!out)
    {
        cout<<"Error of writing to file";
        system("pause >> void");
        return;
    }
    for(int i=0; i < count; i++)
    {           
        out<<"\n\tNo:"      <<i+1<<endl;
        out<<"Name: "       <<list[i].Name<<endl;
        out<<"LastName: "   <<list[i].LastName<<endl;
        out<<"Year: "       <<list[i].Year<<endl;
        out<<"Marks: ";
        for (int j = 0; j < 5; j++)
            out<<list[i].Marks[j]<<" ";
        out<<"\nAverage mark: "<<list[i].AverageMark;
    }
    cout<<"Writing to file OK!\n";
    system("pause >> void");
}
void Menu()
{
    int StudentCount = 0;
    int choice = 1;
    Student* List = NULL;
 
    while(true)
    {       
        system("cls");
        cout<<"1.Add student\n";
        cout<<"2.Print list\n";
        cout<<"3.Sort\n";
        cout<<"4.Save and exit\n";
        cout<<"\n\tInput choice:";
        cin>>choice;
        switch(choice)
        {
            case 1: 
            {
                StudentCount++;
                Student* newList = new Student[StudentCount];
                for (int i = 0; i < StudentCount-1; i++)
                {
                    newList[i] = List[i];
                }
                if(List) 
                    delete[]List;
                List = newList;
                List[StudentCount-1] = AddStudent();
                break;
            }
            case 2: 
                PrintList(List, StudentCount);
                break;
 
            case 3: 
                Sort(List,StudentCount);
                break;
 
            case 4:
                WriteToFile(List,StudentCount);
                if(List)
                    delete[]List;
                return;
 
            default:                
                cout<<"\nWrong choice\n";
                system("pause >> void");
                break;
        }
    }   
}
1
man9ik
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 4
10.01.2013, 18:15  [ТС] #6
Спасибо большое! Сейчас буду разбираться. на первый взгляд все понятно. доделаю по мелочам сам.
0
10.01.2013, 18:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 18:15
Привет! Вот еще темы с ответами:

Сортировка структур - C++
struct Man{ char name; Название книги char avtor; Автор int day; год издания float kol; ...

Сортировка структур - C++
Задание такое: Разработайте программу для обработки структурных типов данных. Реализуйте отдельные функции для ввода, вывода, поиска...

Сортировка структур - C++
Ведомости про участников конкурса имеют следующую информацию: имя, фамилия, секция, адрес, набранный бал. Стоит задание вывести информацию...

Сортировка структур - C++
1 Структура: № комнаты в общежитии, площадь, число жителей, балкон. Отсортировать по площади и вывести все, где жителей меньше 3. 2...


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

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

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