Update 'cv10/program.c'
This commit is contained in:
		
							parent
							
								
									0c88c05287
								
							
						
					
					
						commit
						651bd07061
					
				@ -0,0 +1,90 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#define MAX_NAME_LENGTH 100
 | 
			
		||||
 | 
			
		||||
int compare(const void *a, const void *b) {
 | 
			
		||||
    const char *name1 = *(const char **)a;
 | 
			
		||||
    const char *name2 = *(const char **)b;
 | 
			
		||||
    return strcmp(name1, name2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
    int maxStudents;
 | 
			
		||||
    char name[MAX_NAME_LENGTH];
 | 
			
		||||
    char **names = NULL;
 | 
			
		||||
    int count = 0;
 | 
			
		||||
    int capacity = 0;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    if (scanf("%d\n", &maxStudents) != 1 || maxStudents <= 0) {
 | 
			
		||||
        puts("Nespravny vstup");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    while (fgets(name, MAX_NAME_LENGTH, stdin)) {
 | 
			
		||||
        if (name[0] == '\n') break;
 | 
			
		||||
        name[strcspn(name, "\n")] = '\0'; 
 | 
			
		||||
        
 | 
			
		||||
       
 | 
			
		||||
        if (count >= capacity) {
 | 
			
		||||
            capacity = capacity == 0 ? 4 : capacity * 2;
 | 
			
		||||
            names = realloc(names, capacity * sizeof(char *));
 | 
			
		||||
            if (names == NULL) {
 | 
			
		||||
                perror("Failed to reallocate memory");
 | 
			
		||||
                return 1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
       
 | 
			
		||||
        int isDuplicate = 0;
 | 
			
		||||
        for (int i = 0; i < count; i++) {
 | 
			
		||||
            if (strcmp(names[i], name) == 0) {
 | 
			
		||||
                isDuplicate = 1;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if (!isDuplicate) {
 | 
			
		||||
            names[count] = strdup(name);
 | 
			
		||||
            if (names[count] == NULL) {
 | 
			
		||||
                perror("Failed to duplicate name");
 | 
			
		||||
                return 1;
 | 
			
		||||
            }
 | 
			
		||||
            count++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (count == 0) {
 | 
			
		||||
        puts("Ziadne prihlasky");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
   
 | 
			
		||||
    qsort(names, count, sizeof(char *), compare);
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
    puts("Prijati studenti:");
 | 
			
		||||
    int limit = count < maxStudents ? count : maxStudents;
 | 
			
		||||
    for (int i = 0; i < limit; i++) {
 | 
			
		||||
        puts(names[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
    if (count > maxStudents) {
 | 
			
		||||
        puts("Neprijati studenti:");
 | 
			
		||||
        for (int i = maxStudents; i < count; i++) {
 | 
			
		||||
            puts(names[i]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
    for (int i = 0; i < count; i++) {
 | 
			
		||||
        free(names[i]);
 | 
			
		||||
    }
 | 
			
		||||
    free(names);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user