diff --git a/du2/program.c b/du2/program.c index 44ae17e..dfbfada 100644 --- a/du2/program.c +++ b/du2/program.c @@ -6,78 +6,85 @@ #define SIZE 128 -int najdi_studenta(struct student* students,int size, const char* name); +int compare(const void* p1, const void* p2); + +struct student { + int pocetHlasov; + char meno[SIZE]; +}; int main() { - //pomocne premeny - struct student databaza[SIZE]; - memset(databaza,0,SIZE*sizeof(struct student)); - int size = 0; + //citanie vstupu char line[SIZE]; - memset(line,0,SIZE); + memset(line,0, sizeof(name)); char* r = fgets(line,SIZE,stdin); - + if (r == NULL) - { + { printf("Chyba: Zlyhalo nacitavanie vstupu.\n"); } - - char* konecPtr = NULL; - char meno[SIZE]; - memset(meno,0,SIZE); - char* zaciatokMena = konecPtr + 1; + //helper/pomocne lok. premeny + char najdMeno [32]; + int najdPocetHlasov = 0; - int size_mena = strlen(zaciatokMena) - 1; - if (size_mena > 0) - { - memcpy(meno,zaciatokMena,size_mena); - } - else - { - printf("Chyba: Nepodarilo sa nacitat meno.\n"); - } - - int value = strtol(line,&konecPtr,10); - if (value == 0) - { - printf("Chyba: Zlyhala premena vstupu.\n"); - } - int id = find_student(databaza,size,meno); - if (id < 0) - { - memcpy(databaza.name,meno,velkost_mena); - size+=1; - } - else - { - s1.votes += 1; - } - return 0; -} + //array instancii struktur studentov + struct student DBStudenti[20]; -int najdi_studenta(struct student* students,int size, const char* name) -{ - for (int i = 0; i < size, i++) + //prednastavenie pamati + memset(student, 0, sizeof(student)); + + //pomocny index + int x = 0; + + //spracovanie inputu, vycitavanie najdenych mien a najdenych poctov hlasov z retazca + while (sscanf(line, "%d %s", &najdPocetHlasov, najdMeno) != -1) { - if (struct student databaza[i] == name) + // DBStudenti[x].meno = najdMeno; + // DBStudenti[x].pocetHlasov = najdPocetHlasov; + strcpy(DBStudenti[x].meno, najdMeno); + strcpy(DBStudenti[x].pocetHlasov, najdPocetHlasov); + x += 1; + + //reset nacitanych hodnot na konci kazdeho cyklu + memset(najdMeno, 0, SIZE); + najdPocetHlasov = 0; + } + + //zoradenie zoznamu, resp. arrayu + qsort(DBStudenti, 20, sizeof(struct student), compare); + + //vypis vysledkov + printf("Vysledky:\n"); + for (int i = 0; i < 20; i++) + { + //20 je nahodne cislo, resp. realne budeme vypisovat userov + //, pokial nenarazime na prazdny student ID zaznam + if (DBStudent[i].meno == '\0') { - return i; + break; } + //malo by vypisovat zaznamy takto: + //10_Tomas_Vlcek + printf("%d %s", DBStudent[i].pocetHlasov, DBStudent[i].meno); } - return -1; + return 0; } -struct student -{ - char name[SIZE]; - int votes; -}; -int komparator(const void* p1, const void* p2) -{ - struct student* s1 = (struct student*)p1; - struct student* s2 = (struct student*)p2; + int compare(const void* p1, const void* p2) + { + //casting, resp. premena dat. typu pointerov na ich spravny typ + //nakolko qsort() pozaduje od porovnavaciej funkcie, aby akceptovala pointery s lubovolnym dat. typom (const void*) + struct student *s1 = (struct student *)p1; + struct student *s2 = (struct student *)p2; - return 0; -} \ No newline at end of file + if (s1->pocetHlasov == s2->pocetHlasov) + { + //vrati lexikografciky zorad. instancie v poli + return strcmp(s2->meno, s1->meno); + } + + //vrati zaznamy zorad. zostupne + return s2->pocetHlasov - s1->pocetHlasov; + } \ No newline at end of file