diff --git a/cv5/program.c b/cv5/program.c index b406480..154006d 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -2,53 +2,73 @@ #include #include -#define MAX_STUDENTS 100 -#define MAX_NAME_LENGTH 100 +#define SIZE 100 // Veľkosť pomocného poľa pre načítanie riadku -// Štruktúra pre reprezentáciu študenta -struct Student { - char name[MAX_NAME_LENGTH]; +// Definícia štruktúry pre študenta +struct student { + char name[50]; int votes; }; -// Porovnávacia funkcia pre qsort -int compare_students(const void* a, const void* b) { - const struct Student* studentA = (const struct Student*)a; - const struct Student* studentB = (const struct Student*)b; - - // Porovnanie podľa počtu hlasov - if (studentA->votes != studentB->votes) { - return studentB->votes - studentA->votes; // Zotriedenie zostupne podľa počtu hlasov +// Funkcia na porovnanie študentov pri triedení +int compare(const void *s1, const void *s2) { + struct student *student1 = (struct student *)s1; + struct student *student2 = (struct student *)s2; + + // Ak majú rôzny počet hlasov, porovnáme podľa počtu hlasov + if (student1->votes != student2->votes) { + return student2->votes - student1->votes; // Zoradenie zostupne podľa počtu hlasov } else { - // Ak majú rovnaký počet hlasov, zotriedenie podľa mena - return strcmp(studentA->name, studentB->name); + // Ak majú rovnaký počet hlasov, porovnáme podľa abecedy + return strcmp(student1->name, student2->name); } } int main() { - // Databáza študentov s preddefinovanými hodnotami - struct Student students[MAX_STUDENTS] = { - {"Terian Dis", 10}, // Terian Dis má 10 hlasov - {"Bardos Mrtakrys", 2}, - {"Rita Umhi", 1}, - {"Prylenn Alak", 1}, - {"Lak'hi Elavorg", 9}, // Lak'hi Elavorg má menej ako 10 hlasov - {"Prylenn Alak", 3}, - {"Prylenn Alak", 3}, - {"Prylenn Alak", 3}, - {"Rita Umhi", 1} - }; - int num_students = 9; // Počet študentov v databáze - - // Zoradenie študentov podľa počtu hlasov a mena - qsort(students, num_students, sizeof(struct Student), compare_students); - - // Výpis zoradeného zoznamu študentov - printf("Výsledky:\n"); - for (int i = 0; i < num_students; i++) { - printf("%d %s\n", students[i].votes, students[i].name); + struct student students[100]; // Pole pre ukladanie študentov + int num_students = 0; // Počet načítaných študentov + + // Načítanie hlasov zo vstupu + while (1) { + int votes; + char name[50]; + char line[SIZE]; + + // Načítame riadok zo vstupu + memset(line, 0, SIZE); + char* r = fgets(line, SIZE, stdin); + if (r == NULL) { + // Koniec vstupu + break; + } + + // Načítame hlas a meno študenta zo vstupného riadku + if (sscanf(line, "%d %49[^\n]", &votes, name) == 2) { + // Ak sme načítali záznam úspešne, pridáme študenta do databázy + strcpy(students[num_students].name, name); + students[num_students].votes = votes; + num_students++; + } else { + // Ak sa nepodarilo načítať, skončíme načítavanie + printf("CHYBA: Neplatny zapis na riadku.\n"); + return 1; + } } - + + // Ak sme načítali aspoň jedného študenta, zoradíme ich podľa počtu hlasov a mena + if (num_students > 0) { + qsort(students, num_students, sizeof(struct student), compare); + + // Výpis výsledkov + printf("Vysledky:\n"); + for (int i = 0; i < num_students; i++) { + printf("%d %s\n", students[i].votes, students[i].name); + } + } else { + // Ak sme nenenačítali žiadneho študenta, vypíšeme chybovú správu + printf("CHYBA: Ziadny zaznam na vstupe.\n"); + } + return 0; }