В массиве, состоящем из 10 структур (у меня пока 3) необходимо упорядочить записи по возрастанию среднего балла. То есть сначала необходимо рассчитать средн.балл каждого студента массива int uspev[5], а уже по нему (возможно нужно сформировать массив средних оценок) отсортировать записи студентов. Если у кого есть идея как написать функцию сортировки подскажите пжлта. | Код |
#include <iostream.h>
struct Student { char fio[30]; // ФИО int nom_gr; // номер группы int uspev[5]; // массив оценок по 5 предметам }staff[3]; // массив структур с данными студентов
// эту структуру попытался сделать в качестве буфера обмена для функции сортировки struct Store { char fio[30]; int nom_gr; int uspev[5]; }str;
void print_student(Student s, float* a); // прототип функции печати void sortStd(Student *staffPtr, Store *strPtr, float* a); // прототип функции сортировки main() { Student *staffPtr = staff; // указатель на массив структур Store *strPtr = &str; // указатель на стуктуру Str float av_grade[5] = {0}; bool f; f= false; cout << "Vvedite dannie studentov" << "\n"; // ввод данных студентов (ФИО, номера группы, массива оценок по 5 предметам) for(int i = 0; i<3; i++) { cin >> staff[i].fio; cin >> staff[i].nom_gr; for (int j = 0; j<5; j++) cin >> staff[i].uspev[j];} //================================================== // Вычисление среднего балла для каждого студента int q = 0;
for( i = 0; i<3; i++ ){ float summ = 0; { for (int j = 0; j<5; j++) summ += staff[i].uspev[j]; } (float) av_grade[q] = summ / 5; q++; } //================================================== // Сортировка sortStd( staff[i], &str, av_grade); //================================================== for(i = 0; i<3; i++) { for (int j = 0; j<5; j++) if (staff[i].uspev[j] >= 4) // вывод на экран { f = true; print_student(staff[i], av_grade); break; } } //================================================== if (!f) cout << "Studentov, imeyushih 4 i 5 net"; cout << endl;
return 0; }
void sortStd(Student *staffPtr, Store *strPtr, float* a) { int f = 0;
while(!f){ float hold = 0; float min = a[0];
for (int i = 1; i<5; i++) if (a[i] < min) { hold = min; min = a[i]; a[i] = hold; f = 1; // если просходил обмен то установим флаг strPtr = (staffPtr+i-1) // вот здесь не получается!!! :qstn (staffPtr+i-1) = (staffPtr+i); (staffPtr+i) = strPtr; }
}
void print_student(Student s, float* a) { cout << endl << "FIO: "<< s.fio << endl << "Nomer gruppi: " << s.nom_gr << endl; cout << "Uspevaemost: "; for (int j = 0; j<5; j++) cout << s.uspev[j] << ' '; cout << endl; for (int k = 0; k<5; k++) cout << a[k] << ' '; }
|
Это сообщение отредактировал(а) Kamaji - 21.7.2006, 09:05
|