From 842bba42ff7cbaf8cc97724f5d4e1aa090db06e8 Mon Sep 17 00:00:00 2001 From: VIliam Date: Thu, 21 Mar 2024 23:55:24 +0100 Subject: [PATCH] du5 --- du5/program.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/du5/program.c b/du5/program.c index e69de29..5e7a146 100644 --- a/du5/program.c +++ b/du5/program.c @@ -0,0 +1,76 @@ +#include +#include +#include + +// Štruktúra reprezentujúca jedného študenta +typedef struct { + char meno[100]; // Meno študenta + int hlasy; // Počet hlasov +} Student; + +// Funkcia na porovnávanie študentov pre qsort +int porovnaj(const void *a, const void *b) { + const Student *studentA = (const Student *)a; + const Student *studentB = (const Student *)b; + + // Ak majú rôzny počet hlasov, zoradíme ich zostupne + if (studentA->hlasy != studentB->hlasy) { + return studentB->hlasy - studentA->hlasy; + } else { + // Ak majú rovnaký počet hlasov, zoradíme ich podľa mena vzostupne + return strcmp(studentA->meno, studentB->meno); + } +} + +int main() { + // Deklarácia poľa študentov + Student studenti[1000]; // Predpokladáme, že môže byť maximálne 1000 študentov + int pocetStudentov = 0; + + // Načítanie hlasov + char riadok[200]; + while (fgets(riadok, sizeof(riadok), stdin) != NULL) { + // Načítanie počtu hlasov a mena študenta z riadka + int hlasy; + char meno[100]; + if (sscanf(riadok, "%d %[^\n]", &hlasy, meno) != 2) { + fprintf(stderr, "Chyba pri nacitani hlasov z riadku.\n"); + return 1; + } + + // Prehľadanie existujúcich študentov, či už sme nejakého načítali + int najdeny = 0; + for (int i = 0; i < pocetStudentov; i++) { + // Ak sme našli študenta s rovnakým menom, pridáme k jeho počtu hlasov + if (strcmp(studenti[i].meno, meno) == 0) { + studenti[i].hlasy += hlasy; + najdeny = 1; + break; + } + } + + // Ak sme nenašli existujúceho študenta s rovnakým menom, pridáme nového + if (!najdeny) { + strcpy(studenti[pocetStudentov].meno, meno); + studenti[pocetStudentov].hlasy = hlasy; + pocetStudentov++; + } + } + + // Ak sme nedostali žiadne hlasy, vypíšeme chybovú správu + if (pocetStudentov == 0) { + fprintf(stderr, "Neboli zadane ziadne hlasy.\n"); + return 1; + } + + // Zoradenie študentov podľa počtu hlasov a mena + qsort(studenti, pocetStudentov, sizeof(Student), porovnaj); + + // Výpis výsledkov + printf("Vysledky:\n"); + for (int i = 0; i < pocetStudentov; i++) { + printf("%d %s\n", studenti[i].hlasy, studenti[i].meno); + } + + return 0; +}