From b47adbf2130c1b80fce3a0ae6c0d3790a97f6adb Mon Sep 17 00:00:00 2001 From: Anzhelika Nikolaieva Date: Fri, 24 Mar 2023 21:01:15 +0000 Subject: [PATCH] Update 'du5/program.c' --- du5/program.c | 203 +++++++++++++++++++++++++------------------------- 1 file changed, 100 insertions(+), 103 deletions(-) diff --git a/du5/program.c b/du5/program.c index 78dc2a7..06cd83e 100644 --- a/du5/program.c +++ b/du5/program.c @@ -1,111 +1,108 @@ -#include +#include #include -#include -#include +#include +#define SIZE 100 +struct student +{ + int votes; + char name[SIZE]; -struct celovek{ ////definovanie štruktúry s názvom 'celovek' - int golos; - char name[60]; }; -void printAll(struct celovek celovek[50],int number_celovek){ //funkcia na vytlačenie všetkých prvkov poľa 'celovek' - printf("Vysledky:\n"); - for (size_t i = 0; i < number_celovek; i++){ - printf("%d", celovek[i].golos); - printf("%s", celovek[i].name); - } -} +int find_student(struct student* students,int size, const char* name) +{ + int index = -1; -void readDellSame(bool odinakovyi, bool dobre, int* number_celovek, struct celovek celovek[50]){ //funkcia na čítanie a mazanie duplicitných záznamov z poľa 'celovek' - for (size_t i = 0; i >=0; i++){ - char step_name[60]; - int step_golos =0; - int b = scanf("%d", &step_golos); - if (b == -1){ - break; - } - - if (step_golos == 0){ - dobre = true; - } - - fgets(step_name, 60 , stdin); //čítanie riadku zo štandardného vstupu - - for (size_t j = 0; j <*number_celovek; j++){ - if(strcmp (celovek[j].name, step_name)==0 && dobre == false ){ //porovnanie dvoch reťazcov - celovek[j].golos += step_golos; - odinakovyi = true; - i--; - } - } - if ((odinakovyi == false|| *number_celovek == 0) && dobre == false){ - celovek[i].golos = step_golos; - strcpy(celovek[i].name, step_name); //kopírovanie obsahu jedného reťazca do druhého - *number_celovek = *number_celovek +1 ; - } - odinakovyi = false; - } -} - -void sort(int number_celovek, struct celovek celovek[50]){ //funkcia na triedenie poľa 'celovek' na základe počtu 'golov' a 'name' - for (size_t i = 0; i celovek[j].name[1]){ - int tmp = celovek[i].golos; - char tmp_name[60]; - strcpy(tmp_name, celovek[i].name); - - celovek[i].golos = celovek[j].golos; - strcpy(celovek[i].name, celovek[j].name); - - celovek[j].golos = tmp; - strcpy(celovek[j].name, tmp_name); - } - - if(celovek[i].name[1] == celovek[j].name[1]){ - if(celovek[i].name[2] > celovek[j].name[2]){ - int tmp = celovek[i].golos; - char tmp_name[60]; - strcpy(tmp_name, celovek[i].name); - - celovek[i].golos = celovek[j].golos; - strcpy(celovek[i].name, celovek[j].name); - - celovek[j].golos = tmp; - strcpy(celovek[j].name, tmp_name); - } - } - } - } - } -} -int main(){ - struct celovek celovek[50]; - int number_celovek = 0; - bool odinakovyi = false; - bool dobre = false; - readDellSame(odinakovyi, dobre, &number_celovek,celovek); - for (size_t i = 0; i < number_celovek-1; i++) + for(int i = 0; i < size; i++) { - for (size_t j = 0; j < number_celovek - i-1; j++) - { - if (celovek[j].golos < celovek[j+1].golos) - { - int tmp = celovek[j+1].golos; - char tmp_name[60]; - strcpy(tmp_name, celovek[j+1].name); - - celovek[j+1].golos = celovek[j].golos; - strcpy(celovek[j+1].name, celovek[j].name); - - celovek[j].golos = tmp; - strcpy(celovek[j].name, tmp_name); - } - - } + if(strcmp(students[i].name, name) == 0) + { + index = i; + break; + } } - sort(number_celovek, celovek); - printAll(celovek, number_celovek); + + return index; +} + +int compare(const void* p1, const void* p2) +{ + struct student* s1 = (struct student*)p1; + struct student* s2 = (struct student*)p2; + + if(s2->votes != s1->votes) + { + return s2->votes - s1->votes; + } + + else + { + return strcmp(s1->name, s2->name); + } +} + +int main() +{ + struct student database[SIZE]; + memset(database,0, SIZE*sizeof(struct student)); + + + char string[SIZE]; + + int k = 0; + int index = 0; + + int size_name = 0; + + while(fgets(string, SIZE, stdin)) + { + string[strcspn(string, "\n")] = '\0'; + char *end = NULL; + + if(string[0] == '\0') + { + break; + } + + int value = strtol(string, &end, 10); + char *name = end + 1; + + size_name = strlen(name); + + if(value == 0 || name == NULL || size_name <= 0) + { + break; + } + + + index = find_student(database, k, name); + + if(index == -1) + { + database[k].votes = value; + memcpy(database[k].name,name,size_name+1); + k++; + } + else + { + database[index].votes = database[index].votes + value; + } + + } + + qsort(database, k, sizeof(struct student), compare); + + if( k == 0) + { + printf("Nepodarilo nacitat nic\n"); + return 0; + } + + printf("Vysledky:\n"); + for (int i = 0; i < k; i++) + { + printf("%d %s\n", database[i].votes, database[i].name); + } + return 0; -} \ No newline at end of file +}