UWAGA konkurs!
Mistrz Programowania

PROGRAMOWANIE I ALGORYTMY

szkoła fraktal
Zapraszamy na lekcję otwartą wrzesień 2023

Sortowanie struktur


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:

struktura