diff --git a/cv10/program.c b/cv10/program.c index e69de29..ab02652 100644 --- a/cv10/program.c +++ b/cv10/program.c @@ -0,0 +1,90 @@ +#include +#include +#include + +// Porovnávací funkcia pre qsort +int porovnaj_mena(const void *a, const void *b) { + return strcmp(*(const char **)a, *(const char **)b); +} + +int main() { + int pocet_prijatych; + // Načítanie počtu študentov na prijatie + if (scanf("%d", &pocet_prijatych) != 1 || pocet_prijatych <= 0) { + puts("Nespravny vstup"); + return 1; + } + + // Pole pre zoznam mien študentov + char **zoznam = malloc(pocet_prijatych * sizeof(char *)); + if (zoznam == NULL) { + puts("Chyba alokacie pamäte"); + return 1; + } + + int pocet_prihlasok = 0; + // Načítanie zoznamu prihlášok + while (1) { + char meno[101]; + if (scanf("%100s", meno) != 1) { + puts("Chyba pri citani vstupu"); + free(zoznam); + return 1; + } + // Koniec zoznamu prihlášok + if (meno[0] == '\0') { + break; + } + // Zmena veľkosti poľa, ak už nie je dosť miesta + if (pocet_prihlasok >= pocet_prijatych) { + pocet_prijatych *= 2; + char **nove_zoznam = realloc(zoznam, pocet_prijatych * sizeof(char *)); + if (nove_zoznam == NULL) { + puts("Chyba alokacie pamäte"); + free(zoznam); + return 1; + } + zoznam = nove_zoznam; + } + // Uloženie mena do zoznamu + zoznam[pocet_prihlasok] = strdup(meno); + if (zoznam[pocet_prihlasok] == NULL) { + puts("Chyba alokacie pamäte"); + free(zoznam); + return 1; + } + pocet_prihlasok++; + } + + // Kontrola, či boli prihlásení nejakí študenti + if (pocet_prihlasok == 0) { + puts("Ziadne prihlasky"); + free(zoznam); + return 1; + } + + // Usporiadanie zoznamu mien podľa abecedy + qsort(zoznam, pocet_prihlasok, sizeof(char *), porovnaj_mena); + + // Vypísanie prijatých študentov + puts("Prijati studenti:"); + for (int i = 0; i < pocet_prijatych && i < pocet_prihlasok; i++) { + printf("%s\n", zoznam[i]); + } + + // Vypísanie neprijatých študentov + if (pocet_prihlasok > pocet_prijatych) { + puts("Neprijati studenti:"); + for (int i = pocet_prijatych; i < pocet_prihlasok; i++) { + printf("%s\n", zoznam[i]); + } + } + + // Uvoľnenie pamäte + for (int i = 0; i < pocet_prihlasok; i++) { + free(zoznam[i]); + } + free(zoznam); + + return 0; +}