#include #include #include #define SIZE 100 struct student { char name[SIZE]; int votes; }; // Funkcia pre porovnanie dvoch študentov pri triedení int compare(const void* p1, const void* p2) { const struct student* s1 = (const struct student*)p1; const struct student* s2 = (const struct student*)p2; // Porovnanie podľa počtu hlasov int result = s2->votes - s1->votes; if (result == 0) { // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa mena return strcmp(s1->name, s2->name); } return result; } int main() { struct student students[SIZE]; memset(students, 0, SIZE * sizeof(struct student)); int size = 0; char line[SIZE]; char name[SIZE]; int votes; printf("Enter votes for 'Student of the Year' contest (or 'q' to quit):\n"); while (fgets(line, SIZE, stdin) != NULL) { // Kontrola ukončenia vstupu if (strcmp(line, "q\n") == 0 || strcmp(line, "Q\n") == 0) { break; } // Načítanie počtu hlasov a mena zo vstupu if (sscanf(line, "%d %[^\n]", &votes, name) != 2) { printf("Invalid input format. Exiting.\n"); return 1; } // Vyhľadanie študenta v databáze int index = -1; for (int i = 0; i < size; i++) { if (strcmp(students[i].name, name) == 0) { index = i; break; } } // Ak študent nie je v databáze, pridáme ho if (index == -1) { if (size < SIZE) { strcpy(students[size].name, name); students[size].votes = votes; size++; } else { printf("Database is full. Exiting.\n"); return 1; } } else { // Ak študent už existuje, zvýšime počet hlasov students[index].votes += votes; } } // Triedenie databázy podľa počtu hlasov a mena qsort(students, size, sizeof(struct student), compare); // Výpis výsledkov printf("\nResults:\n"); for (int i = 0; i < size; i++) { printf("%d %s\n", students[i].votes, students[i].name); } return 0; }