From e39b1fefbbb7f64ce4452640ed7bae71f280c533 Mon Sep 17 00:00:00 2001 From: gastonchenet Date: Wed, 10 Sep 2025 16:25:05 +0000 Subject: [PATCH] Projet fini yey --- README | 52 +++++++++++++++++ gmon.out | Bin 0 -> 3964 bytes student_rank | Bin 0 -> 22464 bytes student_rank.c | 153 +++++++++++++++++++++---------------------------- 4 files changed, 118 insertions(+), 87 deletions(-) create mode 100644 gmon.out create mode 100755 student_rank diff --git a/README b/README index e5798f1..ef280e3 100644 --- a/README +++ b/README @@ -6,3 +6,55 @@ Pour lancer : ./student_rank +## Reponse + +index % time self children called name + +[1] 100.0 0.00 4.03 main [1] +0.01 4.00 1/1 sort_students [2] +0.01 0.00 1/1 generate_ranks [5] +0.00 0.01 1/1 generate_grades [7] +0.00 0.00 2/2 free_array [8] + +--- + + 0.01 4.00 1/1 main [1] + +[2] 99.6 0.01 4.00 1 sort_students [2] +0.81 3.19 1000000/1000000 find_rank_student [3] +0.00 0.00 1000/1001000 bubblesort [4] + +--- + + 0.81 3.19 1000000/1000000 sort_students [2] + +[3] 99.3 0.81 3.19 1000000 find_rank_student [3] +3.19 0.00 1000000/1001000 bubblesort [4] + +--- + + 0.00 0.00 1000/1001000 sort_students [2] + 3.19 0.00 1000000/1001000 find_rank_student [3] + +## [4] 79.2 3.19 0.00 1001000 bubblesort [4] + + 0.01 0.00 1/1 main [1] + +## [5] 0.2 0.01 0.00 1 generate_ranks [5] + + 0.01 0.00 1000/1000 generate_grades [7] + +## [6] 0.1 0.01 0.00 1000 generate_array [6] + + 0.00 0.01 1/1 main [1] + +[7] 0.1 0.00 0.01 1 generate_grades [7] +0.01 0.00 1000/1000 generate_array [6] + +--- + + 0.00 0.00 2/2 main [1] + +## [8] 0.0 0.00 0.00 2 free_array [8] + +On peut voir que le programme perds son temps sur le tri (79.2% du temps d'execution est dédié à l'execution de la fonction de tri). diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..e64fb38d5cae01b36ac10631d7997286eb0e3b96 GIT binary patch literal 3964 zcmYe#&Cg?GzyX%XKqPe785mL+7#NCElk@XZiXnmw3~&ZaV3ZyWfzc2c4S~@R7!85Z z5Eu=C(GZ|V2rx208gNVuY+&n{85kG@8JHQw8JNKQfg@lpL%0CsA`n&ryA9-0W(E#0 zTNa^+3>GW|7@%PRp+TaaAOdV6$X+mmfq{XS0ir@4CcwbJzy#L|5d>)jxemg^M>2wa zz>c8=WFp8Ehy=Pk$oC*ufK))(AayKYvp{054AKk?47p%eA>=`7MlogxFoWX{l;S`v z1_lTTQ^y63Z#D)-26hGsm@oq?n8gAnVFV->!FUiF5&ocH;j84$OCY!N__ zgsA3*i-A;Nb17T_76uywD>yZ=Ft9N&F>oNM5Cw~qY95jSRAn+w5Q3P;4axxw3=9J5 z3=E79L?MFyQV<#}ct8xoaTS5k3=hAuGF}jeaLl2`fWnIL0aS25vLGxeEQD$Yt8{>- qk3?aJF<`+2Y=Q<*r$|deR93$hVPI@P6PzIan~CuQn&5|>Us(YkX&kix literal 0 HcmV?d00001 diff --git a/student_rank b/student_rank new file mode 100755 index 0000000000000000000000000000000000000000..e7cb851db6134ab9a9376f1693cb9eddf7919709 GIT binary patch literal 22464 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 literal 0 HcmV?d00001 diff --git a/student_rank.c b/student_rank.c index af84003..b938b10 100644 --- a/student_rank.c +++ b/student_rank.c @@ -4,122 +4,101 @@ #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= 0; i--) - { - if(grades_array[i] == student_grade) - { - position = students_number-i; - break; - } +int find_rank_student(int student_grade, int *grades_array, size_t students_number) { + for (size_t i = 0; i < students_number; i++) { + if (grades_array[i] == student_grade) { + return i + 1; + } } - return position; + return -1; } -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); +void sort_students(int **students_rank, int **students_array, size_t students_number, size_t grades_number) { + int *grades = malloc(students_number * sizeof(int)); + int *sorted_grades = malloc(students_number * sizeof(int)); + int *sums = calloc(students_number, sizeof(int)); + + for (size_t i = 0; i < grades_number; i++) { + for (size_t j = 0; j < students_number; j++) { + sums[j] += students_array[j][i]; + grades[j] = sums[j] / (i + 1); + sorted_grades[j] = grades[j]; + } + + heapsort(sorted_grades, students_number); + for (size_t j = 0, k = students_number - 1; j < k; j++, k--) { + int temp = sorted_grades[j]; + sorted_grades[j] = sorted_grades[k]; + sorted_grades[k] = temp; + } + + for (size_t j = 0; j < students_number; j++) { + students_rank[j][i] = find_rank_student(grades[j], sorted_grades, students_number); + } } + + free(grades); + free(sorted_grades); + free(sums); } -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]); +int main(int argc, char **argv) { + 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); + size_t students_length = atoi(argv[1]); + size_t grades_length = atoi(argv[2]); + int debug_mode = atoi(argv[3]); + + int **student_grades = malloc(students_length * sizeof(int *)); + int **student_ranks = 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_array(student_grades, students_length); + free_array(student_ranks, students_length); free(student_grades); free(student_ranks); return 0; } -