#include #include #include #include #define SIZE 100 #define MAX_VOTES 50 #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ý } // Funkcia na generovanie náhodného mena void generate_random_name(char *name) { static const char charset[] = "abcdefghijklmnopqrstuvwxyz"; int len = rand() % (MAX_NAME_LENGTH - 1) + 1; // Dĺžka mena (1 až MAX_NAME_LENGTH) for (int i = 0; i < len; i++) { name[i] = charset[rand() % (sizeof(charset) - 1)]; } name[len] = '\0'; } int main() { struct student database[SIZE]; memset(database, 0, SIZE * sizeof(struct student)); int size = 0; srand(time(NULL)); // Inicializácia generátora náhodných čísel // Generovanie náhodného vstupu mien a počtu hlasov for (int i = 0; i < SIZE; i++) { int votes = rand() % (MAX_VOTES + 1); // Náhodný počet hlasov (0 až MAX_VOTES) char name[MAX_NAME_LENGTH]; generate_random_name(name); // Generovanie náhodného mena 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; }