#include #include #include using namespace std; typedef struct { int anno; float num; char parola[10+1]; } Struttura; int cmp_str(const void * a, const void * b) { const Struttura * pa = (const Struttura*)a; const Struttura * pb = (const Struttura*)b; // return (strcmp(pa -> parola, pb -> parola)); // Ordinati per stringa crescente return (pb -> anno - pa -> anno); // Ordinati per anno decrescente // return (pa -> num > pb -> num) - (pa -> num < pb -> num); // Ordinati per float crescente } int main(void) { srand(time(NULL)); cout << "sizeof(Struttura): " << sizeof(Struttura) << endl << endl; FILE * file = fopen("esercizio_qsort.bin", "wb"); if (file != NULL) { Struttura s[5]; cout << "Dati originali:" << endl; for (int i = 0; i < 5; i++) { s[i].anno = rand() % (2025 - 1900 + 1) + 1900; s[i].num = rand() % (50 + 0 + 1) + 0; float dec = s[i].num; dec = dec / 10; s[i].num += dec; for (int j = 0; j < 10; j++) { s[i].parola[j] = rand() % (25 + 0 + 1) + 'A'; } s[i].parola[10] = '\0'; cout << s[i].anno << " " << s[i].num << " " << s[i].parola << endl; } cout << endl << "Dati ordinati:" << endl; qsort(&s, 5, sizeof(Struttura), cmp_str); for (int i = 0; i < 5; i++) { cout << s[i].anno << " " << s[i].num << " " << s[i].parola << endl; } fwrite(&s, sizeof(Struttura), 5, file); fclose(file); } else { perror("Error"); } return 0; }