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

Cum să așez o lista de studenti in ordine alfabetica..



#include <iostream>

using namespace std;

int
main ()
{
struct Data
{
int Ziua;
int Luna;
int Anul;
};
struct Student
{
char Numele[20];
char Prenumele[30];
};
struct Persoana
{
Student NumelePrenumele;
Data DataNasterii;
string Se*ul;
int Notele;
};
Persoana LP[99];
int i;
int e;
int n;

cout « "Cati studenti sunt ?" « endl;
cin » n;
cout « "Cate examene au intr-o sesiune ?" « endl;
cin » e;

for (i = 1; i <= n; i++)
{
cout «"Scrieti numele si prenumele fiecarui student aparte in format (Nume Prenume): "
« endl;
cin » LP[i].NumelePrenumele.Numele » LP[i].NumelePrenumele.Prenumele;
cout «
"Scrieti data nasterii acestui student in format ( ziua luna anul):"
« endl;
cin » LP[i].DataNasterii.Ziua » LP[i].DataNasterii.Luna » LP[i].
DataNasterii.Anul;
cout « "Scrieti nota studentului la o sesiune in format ( 8/9/10 )" «
endl;
cin » LP[i].Notele;
cout « "Scrieti de ce s*x este studentul in format ( Masculin/Femenin)"
« endl;
cin » LP[i].Se*ul;
}
cout « "Lista alfabetica este :" « endl;
// cum sa fac ca mai departe sa se aseze studentii in ordine alfabetica??
return 0;
}​


VxF: E obligatorie mixtura asta de C++ cu C? Dacă ai face pur C++ și ai folosi vector pentru lista de elevi, atunci ai putea folosi biblioteca de rutine algorithm pentru sortare, cum am făcut aici: https://brainly.ro/tema/10224210
sn1kers777: așa m invațat pe mine la colegiu, dar altă idee nu ai cum aș putea s-a ii sortez?
VxF: În condiţiile astea n-am altă idee decât implementat manual careva algoritm de sortare. Dacă nu primești rezolvare mai bună până dimineaţa, îmi încerc norocul.
sn1kers777: ok ms

Răspunsuri la întrebare

Răspuns de VxF
2

Răspuns:

Pas 1: la început de fișier incluzi biblioteca de rutine cstring:

#include <cstring>

Pas 2: înlocuiești comentariul „cum sa fac…” cu următorul cod:

   for (i = 1; i <= n - 1; i++) {

       int min = i;

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

           if ((strcasecmp(LP[min].NumelePrenumele.Numele, LP[j].NumelePrenumele.Numele) ?: strcasecmp(LP[min].NumelePrenumele.Prenumele, LP[j].NumelePrenumele.Prenumele)) > 0) {

               min = j;

           }

       }

       if (min > i) {

           Persoana temp = LP[min];

           LP[min] = LP[i];

           LP[i] = temp;

       }

   }

Explicație:

În stdlib există o funcţie dedicată qsort(), dar n-am reușit să-l folosesc că la terminarea programului crăpa cu „free(): invalid pointer”. Dacă cineva furnizează rezolvarea cu qsort(), folosește-l pe ăla. Între timp și ăsta ar trebui să-și facă treaba.


sn1kers777: Thx bro
Alte întrebări interesante