commit 177d370b6fa4f406cd411c81f7b899994f1a7c4d Author: Michaela Šaková Date: Sat Mar 23 19:14:52 2019 +0100 test diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c02bb17 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +CFLAGS= -c -g -Wall -std=c99 + +all: anketa + +%.o: %.c + gcc $(CFLAGS) $< -o $@ + +clean: + rm *.o anketa + +anketa: anketa.o main.o + gcc anketa.o main.o -o anketa diff --git a/anketa b/anketa new file mode 100755 index 0000000..4a02f4a Binary files /dev/null and b/anketa differ diff --git a/anketa.c b/anketa.c new file mode 100644 index 0000000..3743643 --- /dev/null +++ b/anketa.c @@ -0,0 +1,75 @@ +#include "anketa.h" +#include +#include +#include + +int count_students(struct student* students){ + int x=0; + for(int i=0; ivotes==stud2->votes?0:stud1->votesvotes?1:-1; +} + +void sort_students(struct student* students){ + qsort(students, count_students(students), sizeof(struct student), compare); +} + +void print_students(struct student* students){ + for(int i=0;i + +/** + * Jedna položka v databáze + * Neplatná položka je taká ktorá má počet hlasov 0 alebo meno je prázdny reťazec. + */ +struct student { + // Meno študenta + char name[BUFSIZE]; + // Počet získaných hlasov + int votes; +}; +/** + * Spočítanie platných položiek v databáze. + * Databáza je ukončená prvou neplatnou položkou alebo koncom poľa. + * Maximálny počet položiek je MAXSTUDENTS. + * + * @return nezáporný počet platných položiek. + */ +int count_students(struct student* students); +/** + * Vyhľadanie záznamu s daným menom v databáze. + * Databáza je ukončená prvou neplatnou položkou alebo koncom poľa. + * + * @param pole záznamov + * @param meno na vyhľadanie + * @return Index prvého záznamu, ktorý má dané meno. -1 ak sa v poli taký záznam nenachádza. + */ +int search(struct student* students,const char* name); + +/** + * Porovnanie dvoch položiek v databáze podľa počtu hlasov. + * + * @return Nula v prápade, že sú položky rovnaké. Kladná hodnota v prípade, že počet hlasov prvej položky je menší ako počet hlasov druhej položky. Záporná hodnota inak. + */ +int compare(const void* s1,const void* s2); + + +/** + * Pridanie novej informácie do databázy. + * + * Ak sa meno v poli už nachádza, funkcia zvýši počet hlasov pre danú položku. + * Ak sa meno v databáze nenachádza, funkcia vytvorí nový záznam na prvom voľnom mieste od začiatku. + * + * @param pole záznamov + * @param meno na pridanie + * @param početnosť na pridanie + * @return index, kde bola položka pridaná. -1 ak nebolo v poli dosť miesta. + */ +int add_student(struct student* students, const char* name, int votes); + +/** + * Zotriedenie všetkých záznamov podľa počtu hlasov. + * Databáza je ukončená prvou neplatnou položkou alebo koncom poľa. + * + * @param pole na zotriedenie. + */ +void sort_students(struct student* students); + +/** + * Výpis všetkých záznamov na štandardný výstup. + * Databáza je ukončená prvou neplatnou položkou alebo koncom poľa. + * + * @param pole na výpis + */ +void print_students(struct student* students); + +/** + * Načítanie záznamov z otvoreného súboru do poľa. + * + * Funkcia načíta maximálne MAXSTUDENTS záznamov, potom skončí. + * Načítanie skončí aj v prípade načítania neplatnej položky. + * Jedna položka v textovom súbore je vo formáte: + * + * meno + * početnosť + * + * @param otvorený súbor. Otvorený súbor je rovný stdin v prípade načítania zo štandardného vstupu. + * @param pole kam sa uložia výsledky. + */ +void read_students(FILE* file,struct student* students); + +#endif diff --git a/anketa.o b/anketa.o new file mode 100644 index 0000000..5cabc1b Binary files /dev/null and b/anketa.o differ diff --git a/main.c b/main.c new file mode 100644 index 0000000..4515f14 --- /dev/null +++ b/main.c @@ -0,0 +1,16 @@ +#include "anketa.h" +#include + +int main(){ + struct student students[MAXSTUDENTS]; + memset(students,0,sizeof(struct student)*(MAXSTUDENTS)); + read_students(stdin,students); + int sz = count_students(students); + if (sz <= 0){ + // Nenacitalo sa nic + return 0; + } + sort_students(students); + print_students(students); + return 0; +} diff --git a/main.o b/main.o new file mode 100644 index 0000000..e618f77 Binary files /dev/null and b/main.o differ