pvjc24/cv10/program.c

91 lines
2.5 KiB
C
Raw Normal View History

2024-04-25 23:40:20 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 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;
}