diff --git a/cv5/program.c b/cv5/program.c index 56922ac..256eff8 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -2,81 +2,72 @@ #include #include -#define MAX_STUDENTS 100 #define MAX_NAME_LENGTH 100 +#define MAX_BUFFER_LENGTH 256 -// Structure to hold student information (name and votes) +// Štruktúra pre uchovanie informácií o študentovi typedef struct { - char name[100]; + char name[MAX_NAME_LENGTH]; int votes; } Student; -// Function to compare two students based on their votes and names +// Porovnávacia funkcia pre zoradenie študentov podľa počtu hlasov a mena int compare_students(const void *a, const void *b) { - const Student *student1 = (const Student *)a; - const Student *student2 = (const Student *)b; - - // Sort by number of votes in descending order - if (student1->votes != student2->votes) { - return student2->votes - student1->votes; - } else { - // If votes are equal, sort lexicographically by name - return strcmp(student1->name, student2->name); + const Student *student_a = (const Student *)a; + const Student *student_b = (const Student *)b; + + // Najprv porovnajte počet hlasov + if (student_a->votes != student_b->votes) { + return student_b->votes - student_a->votes; // Zoradiť zostupne } + + // Ak majú rovnaký počet hlasov, porovnajte podľa mena + return strcmp(student_a->name, student_b->name); } int main() { - char line[256]; - Student students[100]; - int total_students = 0; + // Inicializácia poľa študentov + Student students[MAX_BUFFER_LENGTH]; + int num_students = 0; - // Read votes from standard input - while (fgets(line, sizeof(line), stdin)) { + // Načítanie hlasov zo štandardného vstupu + char buffer[MAX_BUFFER_LENGTH]; + while (fgets(buffer, sizeof(buffer), stdin) != NULL) { + // Načítajte počet hlasov a meno študenta int votes; - char name[100]; - - // Parse votes and name from input line - if (sscanf(line, "%d %99[^\n]", &votes, name) != 2) { - fprintf(stderr, "Error: Invalid input format.\n"); + char name[MAX_NAME_LENGTH]; + if (sscanf(buffer, "%d %99[^\n]", &votes, name) != 2) { + fprintf(stderr, "Chyba: Neplatný formát vstupu.\n"); return 1; } - // Check if the votes are positive - if (votes <= 0) { - fprintf(stderr, "Error: Invalid number of votes.\n"); + + // Uložte študenta do poľa + strncpy(students[num_students].name, name, MAX_NAME_LENGTH); + students[num_students].votes = votes; + num_students++; + + // Kontrola prekročenia maximálnej veľkosti poľa študentov + if (num_students >= MAX_BUFFER_LENGTH) { + fprintf(stderr, "Chyba: Príliš veľa študentov.\n"); return 1; } - // Find if the student is already in the list - int found = 0; - for (int i = 0; i < total_students; i++) { - if (strcmp(students[i].name, name) == 0) { - students[i].votes += votes; - found = 1; - break; - } - } - - // If student not found, add to the list - if (!found) { - if (total_students >= MAX_STUDENTS) { - fprintf(stderr, "Error: Too many students.\n"); - return 1; - } - strcpy(students[total_students].name, name); - students[total_students].votes = votes; - total_students++; - } } - // Sort the list of students based on votes and names - qsort(students, total_students, sizeof(Student), compare_students); - - // Print the outcome - printf("Results:\n"); - for (int i = 0; i < total_students; i++) { + // Ak neboli načítané žiadne dáta, vypíšte chybovú správu + if (num_students == 0) { + fprintf(stderr, "Chyba: Žiadne záznamy načítané.\n"); + return 1; + } + + // Zoradenie študentov podľa počtu hlasov a mena + qsort(students, num_students, sizeof(Student), compare_students); + + // 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); } - return 0; }