Ești rugat la sfârșitul anului de către diriginta clasei să introduci în baza de date a școlii clasamentul clasei tale, în ordine crescătoare în funcție de mediile pe care le-au avut colegii tăi la sfârșitul anului.
Pentru a face acest lucru te vei folosi de o structură de felul următor:
struct Elev {
double medie;
char nume[21];
};
Cerință
Definește o funcție sortare care primește ca parametru un numar natural n și un șir de n elevi. Funcția va sorta elevii crescător în funcție de medie, iar în caz de egalitate în funcție de nume.
Semnătură funcție
void sortare(int n, Elev elevi[30]);
Restricții și precizări
1.00 ≤ media fiecărui elev ≤ 10.00
mediile elevilor sunt numere raționale cu 2 zecimale
numele unui elev nu va depăși 20 de caractere
0 ≤ n ≤ 30
elementele șirului elevi vor fi indexate începând cu poziția 0
Exemplu
Pentru n = 4 și elevii:
medie = 5.00; nume[] = "Popescu Ioana"
medie = 5.00; nume[] = "Popescu Dani"
medie = 8.79; nume[] = "Cristescu Aurel"
medie = 6.98; nume[] = "Cristescu Ioan"
la finalul apelului funcției sortare, șirul va conține, în această ordine, elevii:
medie = 5.00; nume[] = "Popescu Dani"
medie = 5.00; nume[] = "Popescu Ioana"
medie = 6.98; nume[] = "Cristescu Ioan"
medie = 8.79; nume[] = "Cristescu Aurel"
Atenție!
Codul tău va conține doar definiția funcției cerute.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
struct Elev
{
double medie;
char nume[21];
};
void sortare(int n, Elev elevi[30]);
void afisareVector(int n, Elev elevi[30]);
int main()
{
/* am creat 4 elevi cu datele din problemă */
Elev elevul1{ 5.00, "Popescu Ioana" };
Elev elevul2{ 5.00, "Popescu Dani" };
Elev elevul3{ 8.79, "Cristescu Aurel" };
Elev elevul4{ 6.98, "Cristescu Ioan" };
/* pe care mai apoi i-am adăugat într-un array */
Elev vectorElevi[]{ elevul1, elevul2, elevul3, elevul4 };
/* am sortat vectorul */
sortare(4, vectorElevi);
/* și o funcție ca să-ți afișeze vectorul de elevi sortat */
afisareVector(4, vectorElevi);
return 0;
}
void sortare(int n, Elev elevi[30])
{
/* am folosit bubble sort pentru sortare */
for (int i{}; i < n - 1; i++) {
for (int j{}; j < n - i - 1; j++) {
if (elevi[j].medie > elevi[j + 1].medie) {
/* std::swap schimba valorile între ele */
std::swap(elevi[j], elevi[j + 1]);
}
}
}
}
void afisareVector(int n, Elev elevi[30])
{
for (int i{}; i < n; i++) {
std::cout << elevi[i].nume << " are media " << elevi[i].medie << "!\n";
}
}