domaca_uloha_5
This commit is contained in:
		
							parent
							
								
									a413aea3aa
								
							
						
					
					
						commit
						3356530cd7
					
				
							
								
								
									
										
											BIN
										
									
								
								du5/program
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								du5/program
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										80
									
								
								du5/program.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								du5/program.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,80 @@
 | 
			
		||||
#include <stdio.h>	//pripojím si potrebné knižnice
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#define POCET_PRIHLASENYCH_STUDENTOV 100	//zadefinujem potrebné konštanty
 | 
			
		||||
#define MAXIMALNA_DLZKA_RIADKU 80
 | 
			
		||||
 | 
			
		||||
typedef struct {		//vytvorím štruktúru pre prihlásených súťažiacich
 | 
			
		||||
	char meno[MAXIMALNA_DLZKA_RIADKU];
 | 
			
		||||
	int pocetHlasov;
 | 
			
		||||
} PRIHLASENY;
 | 
			
		||||
 | 
			
		||||
int nacitanieSutaziacich(int maximalnaDlzkaRiadku, char riadok[maximalnaDlzkaRiadku]);	//inicializujem vlastné funkcie
 | 
			
		||||
int skontrolujDatabazu(int velkostDatabazy, PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV], char* vstup);
 | 
			
		||||
int zotriedenieZaznamov(const void *prvok1, const void *prvok2);
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
	PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV];	//nainicializujem databázu prihlásených
 | 
			
		||||
	memset(databaza, 0, POCET_PRIHLASENYCH_STUDENTOV * sizeof(struct PRIHLASENY*));	//načítam do nej nulové hodnoty
 | 
			
		||||
	
 | 
			
		||||
	char riadok[MAXIMALNA_DLZKA_RIADKU];	//nainicializujem potrebné premenné
 | 
			
		||||
	char* sutaziaci;
 | 
			
		||||
	int i, stavNacitania, pocetNacitanychHlasov, kontrolaDatabazy = -2, pocetHlasov;
 | 
			
		||||
	
 | 
			
		||||
	for (i = 0; i < POCET_PRIHLASENYCH_STUDENTOV; i++) {	//v cykle načítam mená súťažiacich a počty hlasov
 | 
			
		||||
		stavNacitania = nacitanieSutaziacich(MAXIMALNA_DLZKA_RIADKU, riadok);
 | 
			
		||||
		
 | 
			
		||||
		if (stavNacitania == -1) return 0;	//ak načítanie vstupu zlyhá, tak program ukončím
 | 
			
		||||
		else if (stavNacitania == 0) break;		//ak načítam prázdny riadok, tak vyskočím z cyklu (ukončím načítavanie vstupu)
 | 
			
		||||
		
 | 
			
		||||
		pocetHlasov = strtof(riadok, &sutaziaci);
 | 
			
		||||
		kontrolaDatabazy = skontrolujDatabazu(i - 1, databaza, sutaziaci);		//skontrolujem, či sa súťažiaci nachádza v databáze prihlásených
 | 
			
		||||
		
 | 
			
		||||
		if (kontrolaDatabazy == -1) {	//ak sa nenachádza, tak ho pridám do databázy
 | 
			
		||||
			databaza[i].pocetHlasov = pocetHlasov;	//oddelím od seba počet hlasov od mena súťažiaceho a počet hlasov uložím do pamäte
 | 
			
		||||
			strcpy(databaza[i].meno, sutaziaci);	//meno súťažiaceho uložím do databázy
 | 
			
		||||
		} else {	//ak je súťažiaci už prihlásený (nachádza sa v databáze),
 | 
			
		||||
			databaza[kontrolaDatabazy].pocetHlasov += pocetHlasov;	//tak iba pripočítam počet zadaných hlasov
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	pocetNacitanychHlasov = i;	//počet načítaných hlasov si uložím do pamäte
 | 
			
		||||
	qsort(databaza, pocetNacitanychHlasov, sizeof(PRIHLASENY), zotriedenieZaznamov);		//zotriedim súťažiacich podľa počtu hlasov a ak saa počet hlasov bude zhodovať, tak ich zotriedim lexikograficky (podľa abecedy)
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	printf("Vysledky:\n");
 | 
			
		||||
	for (i = 0; i <= pocetNacitanychHlasov - 1; i++) {
 | 
			
		||||
		if (databaza[i].pocetHlasov == 0) continue;		//ak je daná pozícia prázdna, tak ju nevypíšem
 | 
			
		||||
		printf("%d%s\n", databaza[i].pocetHlasov, databaza[i].meno);	//vypíšem zotriedený zoznam súťažiacich
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int nacitanieSutaziacich(int maximalnaDlzkaRiadku, char riadok[maximalnaDlzkaRiadku]) {		//funkcia načíta počet hlasov a meno účastníka
 | 
			
		||||
	char* stav_vstupu = fgets(riadok, maximalnaDlzkaRiadku, stdin);		//načítam údaje zo vstupu
 | 
			
		||||
	if (stav_vstupu == NULL) return -1;	//ak načítanie zlyhá, tak vrátim NULL
 | 
			
		||||
	else if (strcmp(riadok, "\n") == 0) return 0;	//ak načítam prázdny riadok, tak vrátim 0
 | 
			
		||||
	riadok[strlen(riadok) - 1] = '\0';
 | 
			
		||||
	return 1;	//inak vrátim 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int skontrolujDatabazu(int velkostDatabazy, PRIHLASENY databaza[POCET_PRIHLASENYCH_STUDENTOV], char* vstup) {		//funkcia skontroluje výskyt mena v databáze
 | 
			
		||||
	int j;
 | 
			
		||||
	
 | 
			
		||||
	for (j = 0; j <= velkostDatabazy; j++) {		//preskúmam celú databázu
 | 
			
		||||
		if (strcmp(databaza[j].meno, vstup) == 0) return j;	//ak nájdem zhodu, tak vrátim index, na ktorom sa nájdené meno nachádza
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return -1;	//inak vrátim -1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int zotriedenieZaznamov(const void *prvok1, const void *prvok2) {	//vytvorím triediacu funkciu pre funkciu qsort
 | 
			
		||||
	PRIHLASENY* zaznam1 = (PRIHLASENY*) prvok1;	//beztypové prvky prevediem na prvky príslušného typu
 | 
			
		||||
	PRIHLASENY* zaznam2 = (PRIHLASENY*) prvok2;
 | 
			
		||||
	
 | 
			
		||||
	if (zaznam1->pocetHlasov < zaznam2->pocetHlasov) return 1;		//vykonám porovnanie prvkov pre ich zotriedenie
 | 
			
		||||
	else if(zaznam1->pocetHlasov == zaznam2->pocetHlasov) return strcmp(zaznam1->meno, zaznam2->meno);
 | 
			
		||||
	else return -1;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user