#include #include #include #define SIZE 100 #define MAX_NAME_LENGTH 20 // Definícia štruktúry pre uloženie jednej položky databázy struct student { char name[MAX_NAME_LENGTH]; int votes; }; // Funkcia pre porovnanie dvoch záznamov študentov 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 počtu hlasov if (s1->votes != s2->votes) { return s2->votes - s1->votes; // Zoradenie zostupne podľa počtu hlasov } else { // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa mena return strcmp(s1->name, s2->name); } } // Funkcia na vyhľadanie študenta v databáze int find_student(struct student *students, int size, const char *name) { for (int i = 0; i < size; i++) { if (strcmp(students[i].name, name) == 0) { return i; // Študent nájdený } } return -1; // Študent nenájdený } int main() { struct student database[SIZE]; memset(database, 0, SIZE * sizeof(struct student)); int size = 0; // Zadefinovaný vstup mien a počtu hlasov char input[][MAX_NAME_LENGTH] = { "2 Bardos Mrtakrys", "1 Rita Umhi", "1 Prylenn Alak", "10 Lak'hi Elavorg", "3 Prylenn Alak", "3 Prylenn Alak", "3 Prylenn Alak", "1 Rita Umhi" }; int input_size = sizeof(input) / sizeof(input[0]); // Spracovanie vstupu for (int i = 0; i < input_size; i++) { char name[MAX_NAME_LENGTH]; int votes; sscanf(input[i], "%d %s", &votes, name); int idx = find_student(database, size, name); if (idx == -1) { // Študent nie je v databáze, pridáme ho if (size >= SIZE) { fprintf(stderr, "Prekročený limit databázy\n"); return 1; } strcpy(database[size].name, name); database[size].votes = votes; size++; } else { // Študent je v databáze, pripočítame hlasy database[idx].votes += votes; } } // Zoradenie databázy qsort(database, size, sizeof(struct student), compare); // Výpis databázy for (int i = 0; i < size; i++) { printf("%d %s\n", database[i].votes, database[i].name); } return 0; }