diff --git a/cv5/program.c b/cv5/program.c new file mode 100644 index 0000000..52e147a --- /dev/null +++ b/cv5/program.c @@ -0,0 +1,77 @@ +#include +#include +#include + +#define MAX_SIZE 100 +#define MAX_STUDENTS 100 + +// Štruktúra pre reprezentáciu študenta +struct Student { + char name[MAX_SIZE]; + int votes; +}; + +// Porovnávacia funkcia pre triedenie š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 hlasov + } + // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa mena + return strcmp(s1->name, s2->name); +} + +// Načíta študentov zo štandardného vstupu do pola +int read_students(struct Student students[], int max_students) { + int num_students = 0; + char line[MAX_SIZE]; + while (fgets(line, sizeof(line), stdin) != NULL) { + char name[MAX_SIZE]; + int votes; + // Načítame počet hlasov + votes = (int)strtol(line, &line, 10); + // Preskočíme medzeru + line++; + // Načítame meno študenta + memcpy(name, line, strlen(line) - 1); // Odstránime znak nového riadka + name[strlen(line) - 1] = '\0'; // Nastavíme koniec reťazca + // Prejdeme všetkých študentov a ak nájdeme rovnaké meno, pripočítame hlasy + int found = 0; + for (int i = 0; i < num_students; i++) { + if (strcmp(students[i].name, name) == 0) { + students[i].votes += votes; + found = 1; + break; + } + } + // Ak sme nenašli rovnaké meno, pridáme nového študenta + if (!found) { + strcpy(students[num_students].name, name); + students[num_students].votes = votes; + num_students++; + if (num_students >= max_students) { + break; // Prekročený maximálny počet študentov + } + } + } + return num_students; +} + +int main() { + struct Student students[MAX_STUDENTS]; + int num_students = read_students(students, MAX_STUDENTS); + + // Zoradíme študentov podľa počtu hlasov a mena + qsort(students, num_students, sizeof(struct Student), compare); + + // Vypíšeme výsledky + printf("Výsledky:\n"); + for (int i = 0; i < num_students; i++) { + printf("%d %s\n", students[i].votes, students[i].name); + } + + return 0; +} +