From 7b1bae7de210463971f5f0b5c96f3b0938eacb2e 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:46 +0200 Subject: [PATCH] domaca_uloha_6 --- du6/program | Bin 0 -> 6921 bytes du6/program.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100755 du6/program create mode 100644 du6/program.c diff --git a/du6/program b/du6/program new file mode 100755 index 0000000000000000000000000000000000000000..6b2896e30ebc6e415447dd254acf251339848bd0 GIT binary patch literal 6921 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 H-68%1Iw9B( literal 0 HcmV?d00001 diff --git a/du6/program.c b/du6/program.c new file mode 100644 index 0000000..45108d8 --- /dev/null +++ b/du6/program.c @@ -0,0 +1,73 @@ +#include //pripojím si potrebné knižnice +#include +#include + +#define DLZKA_RETAZCA 100 //zadefinujem si potrebnú konštantu + +int zotriedeniePodlaAbecedy(const void *retazec1, const void *retazec2); //nainicializujem vlastné funkcie +int kontrolaDatabazy(int pocetRetazcov, char** zoznamRetazcov, char* vstup); + +int main() { + int pocetMien = 1, i; //nainicializujem si potrebné premenné + char vstup[DLZKA_RETAZCA]; + char** zoznamMien; + + if (fgets(vstup, DLZKA_RETAZCA, stdin) == NULL) { //načítam počet prijatých žiakov a ak načítanie zlyhá, + printf("Nespravny vstup\n"); //tak vypíšem chybovú hlášku + return 0; //a program ukončím + } + + int pocetPrijatychZiakov = (int) strtol(vstup, NULL, 10); //zadané číslo prevediem zo znaku na matematické číslo + if (pocetPrijatychZiakov == 0) { //ak je prevod neúspešný, alebo ak zadané číslo je 0, + printf("Ziadne prihlasky\n"); //tak vypíšem chybovú hlášku + return 0; //a program ukončím + } + + zoznamMien = (char**) malloc(sizeof(char*)); //dynamicky alokujem potrebnú časť pamäte počítača + zoznamMien[0] = (char*) malloc(DLZKA_RETAZCA * sizeof(char)); //dynamicky alokujem bunku dvojrozmerného poľa + + while (1) { + if (fgets(vstup, DLZKA_RETAZCA, stdin) == NULL) return 0; //načítam meno uchádzača a ak zlyhá načítanie vstupu, tak program ukončím + else if (strcmp(vstup, "\n") == 0) break; //ak bude vstupom iba prázdny riadok, tak program ukončím + + if (kontrolaDatabazy(pocetMien, zoznamMien, vstup) == EXIT_SUCCESS) continue; //ak sa už meno v databáze nachádza, tak ho už znova do databázy nezaradím + + memcpy(zoznamMien[pocetMien - 1], vstup, DLZKA_RETAZCA); //meno žiaka skopírujem do databázy + + pocetMien++; //zvýšim množstvo alokovanej pamäte pre zaznamenívanie hlásiacich sa študentov + zoznamMien = realloc(zoznamMien, pocetMien * sizeof(char*)); //realokujem (zväčším) pamäť + zoznamMien[pocetMien - 1] = (char*) malloc(DLZKA_RETAZCA * sizeof(char)); //následne dynamicky alokujem novovytvorenú pamäťovú bunku + } + + qsort(zoznamMien, pocetMien, sizeof(char**), zotriedeniePodlaAbecedy); //vytvorený zoznam zotriedim podľa abecedy + + //vypíšem kompletný menný zoznam prihlásených študentov + printf("Prijati studenti:\n"); //najprv prijatých + for (i = 0; i < pocetMien; i++) { + printf("%s", zoznamMien[i]); //vypíšem jednotlivé mená + if (pocetMien > pocetPrijatychZiakov + 1) { //ak je prihládených viac študentov, než je prijatých, + if (i == pocetPrijatychZiakov) printf("Neprijati studenti:\n"); //tak vypíšem aj mená neprijatýách študentov (funkcia na tomto riadku v skutočnosti iba vypíše oznam, že študenti v pokračujúcom výpise nie sú prijatí) + } + } + + for (i = 0; i < pocetMien; i++) free(zoznamMien[i]); + free(zoznamMien); //vyčistím dynamicky alokovanú pamäť + return 0; +} + +int kontrolaDatabazy(int pocetRetazcov, char** zoznamRetazcov, char* vstup) { //funkcia skontroluje výskyt rovnakých reťazcov v databáze + int j; //nainicializujem potrebnú premennú + + for (j = 0; j < pocetRetazcov - 1; j++) { //porovnám všetky reťazce + if (strcmp(zoznamRetazcov[j], vstup) == 0) return EXIT_SUCCESS; //ak som našiel zhodný reťazec, tak vrátim hodnotu EXIT_SUCCESS + } + + return EXIT_FAILURE; //inak vrátim hodnotu EXIT_FAILURE +} + +int zotriedeniePodlaAbecedy(const void *retazec1, const void *retazec2) { //vytvorím funkciu pre zotriedenie reťazcov podľa abecedy (logika pre qsort) + char** vstupnyRetazec1 = (char**) retazec1; //prevediem neutrálne vstupy na polia s reťazcami + char** vstupnyRetazec2 = (char**) retazec2; + + return strcmp(*vstupnyRetazec1, *vstupnyRetazec2); //a následne porovnám jednotlivé reťazce +}