From a0cbb7dac3feb00970e4a90702b98cb4205b124d Mon Sep 17 00:00:00 2001 From: Vichingo455 Date: Wed, 22 Jan 2025 17:33:01 +0000 Subject: [PATCH] Upload files to "struct" --- struct/ordinamenti_qsort_consegna.cpp | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 struct/ordinamenti_qsort_consegna.cpp diff --git a/struct/ordinamenti_qsort_consegna.cpp b/struct/ordinamenti_qsort_consegna.cpp new file mode 100644 index 0000000..f48e958 --- /dev/null +++ b/struct/ordinamenti_qsort_consegna.cpp @@ -0,0 +1,74 @@ +/* +AUTORE: Manuel Vichi +Esercizio su qsort con array di struct +*/ +#include +#include +#include +#include +#include +using namespace std; + +typedef struct { + char nome; + char cognome; + int annoDiNascita; +} Persona; + +char letteraCasuale() { + return 'A' + rand() % 26; +} + +int annoCasuale() { + return 1990 + rand() % 21; +} + +int confrontaPerCognome(const void* a, const void* b) { + Persona* p1 = (Persona*)a; + Persona* p2 = (Persona*)b; + return p1->cognome - p2->cognome; +} + +int confrontaPerAnnoDiNascita(const void* a, const void* b) { + Persona* p1 = (Persona*)a; + Persona* p2 = (Persona*)b; + return p2->annoDiNascita - p1->annoDiNascita; +} + +int confrontaPerNomeCognome(const void* a, const void* b) { + Persona* p1 = (Persona*)a; + Persona* p2 = (Persona*)b; + if (p1->nome == p2->nome) { + return p2->cognome - p1->cognome; + } + return p2->nome - p1->nome; +} +void stampaPersone(Persona persone[], int size) { + cout << "Nome " << " Cognome " << " Anno di Nascita" << endl; + for (int i = 0; i < size; ++i) { + cout << setw(2) << persone[i].nome << ". " << setw(6) << persone[i].cognome << ". " << setw(12) << persone[i].annoDiNascita << endl; + } +} + +int main(void) { + srand((time(NULL))); + int size = 10; + Persona persone[size]; + for (int i = 0; i < size; ++i) { + persone[i].nome = letteraCasuale(); + persone[i].cognome = letteraCasuale(); + persone[i].annoDiNascita = annoCasuale(); + } + cout << "Persone prima dell'ordinamento:" << endl; + stampaPersone(persone, size); + qsort(persone, size, sizeof(Persona), confrontaPerCognome); + cout << endl << "Ordinamento per cognome crescente:" << endl; + stampaPersone(persone, size); + qsort(persone, size, sizeof(Persona), confrontaPerAnnoDiNascita); + cout << endl << "Ordinamento per anno di nascita decrescente:" << endl; + stampaPersone(persone, size); + qsort(persone, size, sizeof(Persona), confrontaPerNomeCognome); + cout << endl << "Ordinamento per nome decrescente ed eventualmente per cognome decrescente:" << endl; + stampaPersone(persone, size); + return 0; +} \ No newline at end of file