From 3356530cd7e47f07fd8b306d31dbbf372e023032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Vasi=C4=BE?= Date: Tue, 26 Apr 2022 19:39:24 +0200 Subject: [PATCH] domaca_uloha_5 --- du5/program | Bin 0 -> 6797 bytes du5/program.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100755 du5/program create mode 100644 du5/program.c diff --git a/du5/program b/du5/program new file mode 100755 index 0000000000000000000000000000000000000000..06f1c8745b8b4f6ac29b6dfd557a17386354c8c7 GIT binary patch literal 6797 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 GuKpLs41e_i literal 0 HcmV?d00001 diff --git a/du5/program.c b/du5/program.c new file mode 100644 index 0000000..dfd0f1e --- /dev/null +++ b/du5/program.c @@ -0,0 +1,80 @@ +#include //pripojím si potrebné knižnice +#include +#include + +#define POCET_PRIHLASENYCH_STUDENTOV 100 //zadefinujem potrebné konštanty +#define MAXIMALNA_DLZKA_RIADKU 80 + +typedef struct { //vytvorím štruktúru pre prihlásených súťažiacich + char meno[MAXIMALNA_DLZKA_RIADKU]; + int pocetHlasov; +} PRIHLASENY; + +int nacitanieSutaziacich(int maximalnaDlzkaRiadku, char riadok[maximalnaDlzkaRiadku]); //inicializujem vlastné funkcie +int skontrolujDatabazu(int velkostDatabazy, PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV], char* vstup); +int zotriedenieZaznamov(const void *prvok1, const void *prvok2); + +int main() { + PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV]; //nainicializujem databázu prihlásených + memset(databaza, 0, POCET_PRIHLASENYCH_STUDENTOV * sizeof(struct PRIHLASENY*)); //načítam do nej nulové hodnoty + + char riadok[MAXIMALNA_DLZKA_RIADKU]; //nainicializujem potrebné premenné + char* sutaziaci; + int i, stavNacitania, pocetNacitanychHlasov, kontrolaDatabazy = -2, pocetHlasov; + + for (i = 0; i < POCET_PRIHLASENYCH_STUDENTOV; i++) { //v cykle načítam mená súťažiacich a počty hlasov + stavNacitania = nacitanieSutaziacich(MAXIMALNA_DLZKA_RIADKU, riadok); + + if (stavNacitania == -1) return 0; //ak načítanie vstupu zlyhá, tak program ukončím + else if (stavNacitania == 0) break; //ak načítam prázdny riadok, tak vyskočím z cyklu (ukončím načítavanie vstupu) + + pocetHlasov = strtof(riadok, &sutaziaci); + kontrolaDatabazy = skontrolujDatabazu(i - 1, databaza, sutaziaci); //skontrolujem, či sa súťažiaci nachádza v databáze prihlásených + + if (kontrolaDatabazy == -1) { //ak sa nenachádza, tak ho pridám do databázy + databaza[i].pocetHlasov = pocetHlasov; //oddelím od seba počet hlasov od mena súťažiaceho a počet hlasov uložím do pamäte + strcpy(databaza[i].meno, sutaziaci); //meno súťažiaceho uložím do databázy + } else { //ak je súťažiaci už prihlásený (nachádza sa v databáze), + databaza[kontrolaDatabazy].pocetHlasov += pocetHlasov; //tak iba pripočítam počet zadaných hlasov + } + } + + pocetNacitanychHlasov = i; //počet načítaných hlasov si uložím do pamäte + qsort(databaza, pocetNacitanychHlasov, sizeof(PRIHLASENY), zotriedenieZaznamov); //zotriedim súťažiacich podľa počtu hlasov a ak saa počet hlasov bude zhodovať, tak ich zotriedim lexikograficky (podľa abecedy) + + + printf("Vysledky:\n"); + for (i = 0; i <= pocetNacitanychHlasov - 1; i++) { + if (databaza[i].pocetHlasov == 0) continue; //ak je daná pozícia prázdna, tak ju nevypíšem + printf("%d%s\n", databaza[i].pocetHlasov, databaza[i].meno); //vypíšem zotriedený zoznam súťažiacich + } + + return 0; +} + +int nacitanieSutaziacich(int maximalnaDlzkaRiadku, char riadok[maximalnaDlzkaRiadku]) { //funkcia načíta počet hlasov a meno účastníka + char* stav_vstupu = fgets(riadok, maximalnaDlzkaRiadku, stdin); //načítam údaje zo vstupu + if (stav_vstupu == NULL) return -1; //ak načítanie zlyhá, tak vrátim NULL + else if (strcmp(riadok, "\n") == 0) return 0; //ak načítam prázdny riadok, tak vrátim 0 + riadok[strlen(riadok) - 1] = '\0'; + return 1; //inak vrátim 1 +} + +int skontrolujDatabazu(int velkostDatabazy, PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV], char* vstup) { //funkcia skontroluje výskyt mena v databáze + int j; + + for (j = 0; j <= velkostDatabazy; j++) { //preskúmam celú databázu + if (strcmp(databaza[j].meno, vstup) == 0) return j; //ak nájdem zhodu, tak vrátim index, na ktorom sa nájdené meno nachádza + } + + return -1; //inak vrátim -1 +} + +int zotriedenieZaznamov(const void *prvok1, const void *prvok2) { //vytvorím triediacu funkciu pre funkciu qsort + PRIHLASENY* zaznam1 = (PRIHLASENY*) prvok1; //beztypové prvky prevediem na prvky príslušného typu + PRIHLASENY* zaznam2 = (PRIHLASENY*) prvok2; + + if (zaznam1->pocetHlasov < zaznam2->pocetHlasov) return 1; //vykonám porovnanie prvkov pre ich zotriedenie + else if(zaznam1->pocetHlasov == zaznam2->pocetHlasov) return strcmp(zaznam1->meno, zaznam2->meno); + else return -1; +}