add
This commit is contained in:
		
							parent
							
								
									0e9a3610e5
								
							
						
					
					
						commit
						124c790835
					
				| @ -1,7 +1,74 @@ | |||||||
| #include<stdio.h> | #include<stdio.h> | ||||||
|  | #include<string.h> | ||||||
| #include<stdlib.h> | #include<stdlib.h> | ||||||
|  | #define SIZE 100 | ||||||
|  | 
 | ||||||
|  | struct student { | ||||||
|  |     char name[SIZE]; | ||||||
|  |     int votes; | ||||||
|  | }attribute((packed)); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | int find_student(struct student* students,int size, const char* name); | ||||||
|  | 
 | ||||||
|  | int compare(const void* p1, const void* p2); | ||||||
| 
 | 
 | ||||||
| int main(){ | int main(){ | ||||||
| 
 | 
 | ||||||
| 	return 0; |     struct student databaza[SIZE]; | ||||||
|  |         memset(databaza,0,SIZE*sizeof(struct student)); | ||||||
|  |         int size = 0; | ||||||
|  | 
 | ||||||
|  |     while(1){ | ||||||
|  |             char line[SIZE]; | ||||||
|  |             memset(line,0,SIZE); | ||||||
|  |             char* r = fgets(line,SIZE,stdin); | ||||||
|  |             if (r == NULL){ | ||||||
|  |             // Nastal koniec načítania
 | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         char* end = NULL; | ||||||
|  |         int value = strtol(line,&end,10); | ||||||
|  |         if (value == 0){ | ||||||
|  |             // Premena sa nepodarila
 | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         char *name=end+1; | ||||||
|  | 
 | ||||||
|  |         int id = find_student(databaza,size,name); | ||||||
|  |         if (id< 0){ | ||||||
|  |             // Skopirujte zaznam na posledne miesto v poli
 | ||||||
|  |             memcpy(databaza[size].name,name,strlen(name)+1); | ||||||
|  |             databaza[size].votes=value; | ||||||
|  |             // Zvacsite pocet zaznamov
 | ||||||
|  |             size+=1; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             // pripocitajte pocet hlasov
 | ||||||
|  |             databaza[id].votes+=value; | ||||||
|  |         } | ||||||
|  |         if(size>1) | ||||||
|  |             qsort(databaza, size, sizeof(struct student), compare); | ||||||
|  |     } | ||||||
|  |     for(int idx=0;databaza[idx].name[0]!='\0';idx++) | ||||||
|  |         printf("%d %s", databaza[idx].votes, databaza[idx].name); | ||||||
|  | 
 | ||||||
|  |     return EXIT_SUCCESS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int find_student(struct student* students,int size, const char* name){ | ||||||
|  |     // Dopíšte cyklus, ktorý prejde všetky položky v databáze
 | ||||||
|  |     // a ak nájde zhodné meno tak vráti jeho index.
 | ||||||
|  |     for(int idx=0; idx<size;idx++)if(strcmp(students[idx].name,name)==0)return idx; | ||||||
|  |     return -1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int compare(const void* p1, const void* p2){ | ||||||
|  |     struct student* s1 = (struct student*)p1; | ||||||
|  |     struct student* s2 = (struct student*)p2; | ||||||
|  |     // s1->votes je počet hlasov
 | ||||||
|  |     // s1->name je meno študenta
 | ||||||
|  |     return (s2->votes)-(s1->votes); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user