// Student rank // M.Menault 2024 #include #include #include "heapsort.h" #include "bubblesort.h" #include "qiktri.h" void generate_grades(int** students_array, int students_number, int grades_number) { int i = 0; for(i=0;i= 0; i--) { if(sorted_grades[i] == student_grade) { return rank; } if(i > 0 && sorted_grades[i] != sorted_grades[i-1]) { rank++; } } return -1; } void sort_students(int** students_rank, int** students_array, int students_number, int grades_number) { int i, j; for(i = 0; i < grades_number; i++) { int *grades = (int*) malloc(students_number * sizeof(int)); if(grades == NULL) { fprintf(stderr, "Erreur : malloc a échoué\n"); exit(1); } for(j = 0; j < students_number; j++) { grades[j] = students_array[j][i]; } qiktri(grades, 0, students_number - 1); 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; }