Informatică, întrebare adresată de Patrick100, 8 ani în urmă

Structura Elev
Ești rugat la sfârșitul anului 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"

Răspunsuri la întrebare

Răspuns de Sergetec
0

Salut!

Ai functia in C++ mai jos

void sortare(int n, Elev elevi[30])

{

 for (int i = 0; i < n - 1; ++i)

 {

   for (int j = i + 1; j < n; ++j)

   {

     if (elevi[i].medie > elevi[j].medie)

     {

       swap(elevi[i], elevi[j]);

     }

     if (elevi[i].medie == elevi[j].medie)

     {

       if (strcmp(elevi[i].nume, elevi[j].nume) > 0)

       {

         swap(elevi[i], elevi[j]);

       }

     }

   }

 }

}

Explicatie:

  • Folosim algoritmul de sortare prin selectie
  • Daca media unui elevi este mai mare decat a altui elevi atunci ii interschimbam intre ei
  • Dar daca mediile sunt egale, atunci comparam alfabetic numele lor si in functie de rezultat le dam sau nu swap

Patrick100: Multumesc frumos!
Alte întrebări interesante