Zad. 2. Napisz program, który posortuje tablicę struktur przechowujących nazwisko studenta oraz jego średnią według średnich (od najwyższej do najniższej). Do sortowania wykorzystaj funkcję sort z biblioteki algorithm.
Rozwiązanie.
Do rozwiązania problemu posłużymy się funkcją operatorową i przeciążymy operator "<" aby dane zostały posortowane malejąco. Funkcja sort przy porównywaniu dwóch elementów tablicy $$studenci$$ zamieni je miejscami w sytuacji, gdy pierwszy element będzie mniejszy od drugiego.
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
struct student{ //stworzenie własnego typu o nazwie student
char nazwisko[25];
double srednia;
bool operator < (const student &x)const //zdefiniowanie zachowania się
{ //operatora < potrzebnego przy sortowaniu
return srednia>x.srednia;
}
};
int main()
{
//stworzenie studentów i przypisanie do nich przykładowych danych
student studenci[] = { //tablica będzie się składać z 10 studentów
{"Kowalski", 3.12},
{"Kasprowicz", 4.40},
{"Nowak", 6.00},
{"Kosak", 5.44},
{"Nasiadka", 5.32},
{"Nowicki", 3.44},
{"Kanigowski", 4.00},
{"Danusiak", 4.00},
{"Dworznik", 4.20},
{"Kaminski", 3.00}
};
cout<<"Dane studentów przed sortowaniem: "<<endl;
for(int i=0;i<10;i++)
cout<<"Nazwisko: "<<studenci[i].nazwisko
<<", srednia: "<<fixed<<setprecision(2)
<<studenci[i].srednia<<endl;
sort(studenci,studenci+10); //sortowanie studentów
cout<<endl;
cout<<"Dane studentów po sortowaniu: "<<endl;
for(int i=0;i<10;i++)
cout<<"Nazwisko: "<<studenci[i].nazwisko
<<", srednia: "<<fixed<<setprecision(2)
<<studenci[i].srednia<<endl;
return 0;
}
Out: