// Student rank // M.Menault 2024 #include #include #include "heapsort.h" #include "bubblesort.h" void generate_grades(int **students_array, int students_number, int grades_number) { int i = 0; for (i = 0; i < students_number; i++) { students_array[i] = (int *)malloc(grades_number * sizeof(int)); generate_array(students_array[i], grades_number); } } void generate_ranks(int **students_array, int students_number, int grades_number) { int i = 0; int j = 0; for (i = 0; i < students_number; i++) { students_array[i] = (int *)malloc(grades_number * sizeof(int)); for (j = 0; j < grades_number; j++) { students_array[i][j] = -1; } } } void free_array(int **students_array, int students_number) { int i = 0; for (i = 0; i < students_number; i++) { free(students_array[i]); } } void print_student_array(int **students_array, int students_number, int grades_number) { int i = 0; printf("----------------------\n"); for (i = 0; i < students_number; i++) { printf("Student %d : ", i); print_array(students_array[i], grades_number); } printf("----------------------\n"); } int find_rank_student(int student_grade, int *grades_array, int students_number) { int position = -1; int i = 0; for (i = students_number - 1; i >= 0; i--) { if (grades_array[i] == student_grade) { position = students_number - i; break; } } return position; } void sort_students(int **students_rank, int **students_array, int students_number, int grades_number) { int i = 0, j = 0; for (i = 0; i < grades_number; i++) { int *grades = (int *)malloc(students_number * sizeof(int)); for (j = 0; j < students_number; j++) { grades[j] = students_array[j][i]; } bubblesort(grades, students_number); for (j = 0; j < students_number; j++) { students_rank[j][i] = find_rank_student(students_array[j][i], grades, students_number); } free(grades); } } int main(int argc, char **argv) { int **student_grades = NULL; int **student_ranks = NULL; int students_length = 0; int grades_length = 0; int debug_mode = 0; if (argc != 4) { printf("Usage : %s \n", argv[0]); return -1; } students_length = atoi(argv[1]); grades_length = atoi(argv[2]); debug_mode = atoi(argv[3]); student_grades = (int **)malloc(students_length * sizeof(int *)); student_ranks = (int **)malloc(students_length * sizeof(int *)); generate_grades(student_grades, students_length, grades_length); generate_ranks(student_ranks, students_length, grades_length); sort_students(student_ranks, student_grades, students_length, grades_length); if (debug_mode) { print_student_array(student_grades, students_length, grades_length); print_student_array(student_ranks, students_length, grades_length); } free_array(student_grades, students_length); free_array(student_ranks, students_length); free(student_grades); free(student_ranks); return 0; }