domaca_uloha_6
This commit is contained in:
		
							parent
							
								
									3356530cd7
								
							
						
					
					
						commit
						7b1bae7de2
					
				
							
								
								
									
										
											BIN
										
									
								
								du6/program
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								du6/program
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										73
									
								
								du6/program.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								du6/program.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
			
		||||
#include <stdio.h>	//pripojím si potrebné knižnice
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#define DLZKA_RETAZCA 100	//zadefinujem si potrebnú konštantu
 | 
			
		||||
 | 
			
		||||
int zotriedeniePodlaAbecedy(const void *retazec1, const void *retazec2);	//nainicializujem vlastné funkcie
 | 
			
		||||
int kontrolaDatabazy(int pocetRetazcov, char** zoznamRetazcov, char* vstup);
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
	int pocetMien = 1, i;	//nainicializujem si potrebné premenné
 | 
			
		||||
	char vstup[DLZKA_RETAZCA];
 | 
			
		||||
	char** zoznamMien;
 | 
			
		||||
 | 
			
		||||
	if (fgets(vstup, DLZKA_RETAZCA, stdin) == NULL) {		//načítam počet prijatých žiakov a ak načítanie zlyhá,
 | 
			
		||||
		printf("Nespravny vstup\n");	//tak vypíšem chybovú hlášku
 | 
			
		||||
		return 0;	//a program ukončím
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	int pocetPrijatychZiakov = (int) strtol(vstup, NULL, 10);		//zadané číslo prevediem zo znaku na matematické číslo
 | 
			
		||||
	if (pocetPrijatychZiakov == 0) {	//ak je prevod neúspešný, alebo ak zadané číslo je 0,
 | 
			
		||||
		printf("Ziadne prihlasky\n");	//tak vypíšem chybovú hlášku
 | 
			
		||||
		return 0;	//a program ukončím
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	zoznamMien = (char**) malloc(sizeof(char*));	//dynamicky alokujem potrebnú časť pamäte počítača	
 | 
			
		||||
	zoznamMien[0] = (char*) malloc(DLZKA_RETAZCA * sizeof(char));	//dynamicky alokujem bunku dvojrozmerného poľa
 | 
			
		||||
	
 | 
			
		||||
	while (1) {
 | 
			
		||||
		if (fgets(vstup, DLZKA_RETAZCA, stdin) == NULL) return 0;	//načítam meno uchádzača a ak zlyhá načítanie vstupu, tak program ukončím 
 | 
			
		||||
		else if (strcmp(vstup, "\n") == 0) break;	//ak bude vstupom iba prázdny riadok, tak program ukončím
 | 
			
		||||
		
 | 
			
		||||
		if (kontrolaDatabazy(pocetMien, zoznamMien, vstup) == EXIT_SUCCESS) continue;	//ak sa už meno v databáze nachádza, tak ho už znova do databázy nezaradím
 | 
			
		||||
		
 | 
			
		||||
		memcpy(zoznamMien[pocetMien - 1], vstup, DLZKA_RETAZCA);	//meno žiaka skopírujem do databázy
 | 
			
		||||
		
 | 
			
		||||
		pocetMien++;		//zvýšim množstvo alokovanej pamäte pre zaznamenívanie hlásiacich sa študentov
 | 
			
		||||
		zoznamMien = realloc(zoznamMien, pocetMien * sizeof(char*));	//realokujem (zväčším) pamäť
 | 
			
		||||
		zoznamMien[pocetMien - 1] = (char*) malloc(DLZKA_RETAZCA * sizeof(char));	//následne dynamicky alokujem novovytvorenú pamäťovú bunku
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	qsort(zoznamMien, pocetMien, sizeof(char**), zotriedeniePodlaAbecedy);		//vytvorený zoznam zotriedim podľa abecedy
 | 
			
		||||
	
 | 
			
		||||
	//vypíšem kompletný menný zoznam prihlásených študentov
 | 
			
		||||
	printf("Prijati studenti:\n");		//najprv prijatých
 | 
			
		||||
	for (i = 0; i < pocetMien; i++) {
 | 
			
		||||
		printf("%s", zoznamMien[i]);	//vypíšem jednotlivé mená
 | 
			
		||||
		if (pocetMien > pocetPrijatychZiakov + 1) {		//ak je prihládených viac študentov, než je prijatých,
 | 
			
		||||
			if (i == pocetPrijatychZiakov) printf("Neprijati studenti:\n");		//tak vypíšem aj mená neprijatýách študentov (funkcia na tomto riadku v skutočnosti iba vypíše oznam, že študenti v pokračujúcom výpise nie sú prijatí)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	for (i = 0; i < pocetMien; i++) free(zoznamMien[i]);
 | 
			
		||||
	free(zoznamMien);	//vyčistím dynamicky alokovanú pamäť
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int kontrolaDatabazy(int pocetRetazcov, char** zoznamRetazcov, char* vstup) {	//funkcia skontroluje výskyt rovnakých reťazcov v databáze
 | 
			
		||||
	int j;	//nainicializujem potrebnú premennú
 | 
			
		||||
	
 | 
			
		||||
	for (j = 0; j < pocetRetazcov - 1; j++) {	//porovnám všetky reťazce
 | 
			
		||||
		if (strcmp(zoznamRetazcov[j], vstup) == 0) return EXIT_SUCCESS;		//ak som našiel zhodný reťazec, tak vrátim hodnotu EXIT_SUCCESS
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return EXIT_FAILURE;	//inak vrátim hodnotu EXIT_FAILURE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int zotriedeniePodlaAbecedy(const void *retazec1, const void *retazec2) {	//vytvorím funkciu pre zotriedenie reťazcov podľa abecedy (logika pre qsort)
 | 
			
		||||
	char** vstupnyRetazec1 = (char**) retazec1;		//prevediem neutrálne vstupy na polia s reťazcami
 | 
			
		||||
	char** vstupnyRetazec2 = (char**) retazec2;
 | 
			
		||||
	
 | 
			
		||||
	return strcmp(*vstupnyRetazec1, *vstupnyRetazec2);		//a následne porovnám jednotlivé reťazce
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user