diff --git a/cv5/program.c b/cv5/program.c index e43b400..06a93ba 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -1,36 +1,50 @@ #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[SIZE]; + char name[MAX_NAME_LENGTH]; int votes; }; -// Funkcia pre porovnanie dvoch študentov +// 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 podla poctu hlasov + return s2->votes - s1->votes; // Zoradenie zostupne podľa počtu hlasov } else { - // Ak maju rovnaky pocet hlasov, zoradime lexikograficky podla mena + // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa mena return strcmp(s1->name, s2->name); } } -// Funkcia na hladanie studenta v databaze +// 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; // Student najdeny + return i; // Študent nájdený } } - return -1; // Student nenajdeny + 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() { @@ -38,38 +52,33 @@ int main() { memset(database, 0, SIZE * sizeof(struct student)); int size = 0; - char line[SIZE]; - while (fgets(line, SIZE, stdin) != NULL) { - int votes; - char name[SIZE]; - - // Nacitanie hlasov a mena - if (sscanf(line, "%d %[^\n]", &votes, name) != 2) { - fprintf(stderr, "Chyba pri citani riadku: %s", line); - return 1; - } - - // Hladanie studenta v databaze + 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) { - // Student nie je v databaze, pridame ho + // Študent nie je v databáze, pridáme ho if (size >= SIZE) { - fprintf(stderr, "Prekroceny limit databazy\n"); + fprintf(stderr, "Prekročený limit databázy\n"); return 1; } strcpy(database[size].name, name); database[size].votes = votes; size++; } else { - // Student je v databaze, pripocitame hlasy + // Študent je v databáze, pripočítame hlasy database[idx].votes += votes; } } - // Zoradenie databazy + // Zoradenie databázy qsort(database, size, sizeof(struct student), compare); - // Vypis databazy + // Výpis databázy for (int i = 0; i < size; i++) { printf("%d %s\n", database[i].votes, database[i].name); }