cv10
This commit is contained in:
parent
40a85c9f89
commit
1c4bcb18c1
100
cv10/program.c
100
cv10/program.c
@ -2,89 +2,57 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// Porovnávací funkcia pre qsort
|
||||
#define SIZE 100
|
||||
|
||||
int porovnaj_mena(const void *a, const void *b) {
|
||||
return strcmp(*(const char **)a, *(const char **)b);
|
||||
const char *s1 = *((const char **)a);
|
||||
const char *s2 = *((const char **)b);
|
||||
return strcmp(s1, s2);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
char *pole_smernikov[SIZE];
|
||||
memset(pole_smernikov, 0, SIZE * sizeof(char *));
|
||||
int pocet_mien_v_poli = 0;
|
||||
|
||||
// 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') {
|
||||
char riadok[SIZE];
|
||||
char *r = fgets(riadok, SIZE, stdin);
|
||||
while (r != NULL && riadok[0] != '\n') {
|
||||
int pocet_znakov = strlen(riadok) - 1; // Odstránenie konca riadka
|
||||
// Kontrola, či sa meno už nachádza v poli smerníkov
|
||||
int najdene = 0;
|
||||
for (int i = 0; i < pocet_mien_v_poli; i++) {
|
||||
if (memcmp(pole_smernikov[i], riadok, pocet_znakov) == 0) {
|
||||
najdene = 1;
|
||||
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);
|
||||
}
|
||||
// Ak sa meno nenachádza v poli, pridáme ho
|
||||
if (!najdene) {
|
||||
pole_smernikov[pocet_mien_v_poli] = malloc(pocet_znakov + 1);
|
||||
if (pole_smernikov[pocet_mien_v_poli] == NULL) {
|
||||
puts("Chyba alokacie pamate");
|
||||
return 1;
|
||||
}
|
||||
zoznam = nove_zoznam;
|
||||
memcpy(pole_smernikov[pocet_mien_v_poli], riadok, pocet_znakov);
|
||||
pole_smernikov[pocet_mien_v_poli][pocet_znakov] = '\0'; // Nulový ukončovač reťazca
|
||||
pocet_mien_v_poli++;
|
||||
}
|
||||
// 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++;
|
||||
r = fgets(riadok, SIZE, stdin);
|
||||
}
|
||||
|
||||
// Kontrola, či boli prihlásení nejakí študenti
|
||||
if (pocet_prihlasok == 0) {
|
||||
puts("Ziadne prihlasky");
|
||||
free(zoznam);
|
||||
return 1;
|
||||
}
|
||||
// Triedenie zoznamu mien
|
||||
qsort(pole_smernikov, pocet_mien_v_poli, sizeof(char *), porovnaj_mena);
|
||||
|
||||
// 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]);
|
||||
}
|
||||
// Vypísanie zotriedených mien
|
||||
for (int i = 0; i < pocet_mien_v_poli; i++) {
|
||||
printf("%s\n", pole_smernikov[i]);
|
||||
}
|
||||
|
||||
// Uvoľnenie pamäte
|
||||
for (int i = 0; i < pocet_prihlasok; i++) {
|
||||
free(zoznam[i]);
|
||||
for (int i = 0; i < pocet_mien_v_poli; i++) {
|
||||
free(pole_smernikov[i]);
|
||||
}
|
||||
free(zoznam);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user