From 58f5fffce7262272077c81d0e0a0d02f2ef7d92e Mon Sep 17 00:00:00 2001 From: Jannaire Date: Wed, 15 Oct 2025 16:42:59 +0200 Subject: [PATCH] CONTROLE --- README.md | 9 ++++ RacineCarree.c | 71 +++++++++++++++++++++++++ Reponse.txt | 29 +++++++++++ TriSpecial.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 248 insertions(+) create mode 100644 RacineCarree.c create mode 100644 Reponse.txt create mode 100644 TriSpecial.c diff --git a/README.md b/README.md index e69de29..1f7f635 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,9 @@ +### Pour le fichier RacineCarree.c + +Pour Compiler : ```gcc -g -pg RacineCarree.c ``` +Pour Profiler : ```gprof a.out``` + +### Pour le fichier TriSpecial.C + +Pour Compiler : ```gcc -g -pg TriSpecial.c ``` +Pour Profiler : ```gprof a.out``` diff --git a/RacineCarree.c b/RacineCarree.c new file mode 100644 index 0000000..69a1023 --- /dev/null +++ b/RacineCarree.c @@ -0,0 +1,71 @@ +//Ex 1: + +#include +#include +#include + + +int racineCarree(long long x) { + if (x < 0) return -1; + long long i = 0; + while (i * i <= x) { + if (i * i == x) return (int)i; + i++; + } + return -1; +} + + +int* racineCarreeTab(const long long *arr, size_t n) { + int *out = malloc(n * sizeof(int)); + if (!out) return NULL; + for (size_t i = 0; i < n; i++) { + out[i] = racineCarree(arr[i]); + } + return out; +} + +static void print_int_tab(const int *a, size_t n) { + printf("["); + for (size_t i = 0; i < n; i++) { + printf("%d", a[i]); + if (i + 1 < n) printf(", "); + } + printf("]\n"); +} + +int main(void) { + { + long long x = 9; + printf("RacineCarree(9) ->", x); + + long long tab1[] = {81,58,9}; + int *r1 = racineCarreeTab(tab1, 3); + printf("racineCarreeTab([81,58,9]) -> "); + print_int_tab(r1, 3); + free(r1); + + long long tab2[] = {25,48,2}; + int *r2 = racineCarreeTab(tab2, 3); + printf("racineCarreeTab([25,48,2]) -> "); + print_int_tab(r2, 3); + free(r2); + + size_t n = 10000; + long long *test = malloc(n * sizeof(long long)); + if (!test) return 1; + + srand(42); + for (size_t i = 0; i < n; i++) { + + test[i] = 1000001LL + (rand() % 2000000); + } + int *racine_test = racineCarreeTab(test, n); + free(racine_test); + free(test); + return 0; +} + } + + + diff --git a/Reponse.txt b/Reponse.txt new file mode 100644 index 0000000..1aee85d --- /dev/null +++ b/Reponse.txt @@ -0,0 +1,29 @@ +Ex2 - Qualité de code + +Profiler : +time ./a.out -> 0m0.004s + +Pour Compiler : gcc -g -pg RacineCarree.c +Pour Profiler gprof a.out + +Complexité cyclomatique de RacineCarree et RacineCarreeTab() : + +racineCarree : Base 1 + boucle while + if donc on obtient une compléxité cyclomaique de M = 3. +racineCarreeTab: Base 1 + boucle for donc on obtien une compléxité cyclomaique de M = 2. + +Complexité algorithmique de RacineCarree et RacineCarreeTab + +racineCarree : boucle while avec un if a l'interieur O(√n) +racineCarreeTab : boucle for O(n*√M) + + +Ex 4 + +Pour Compiler : gcc -g -pg TriSpecial.c +Pour Profiler gprof a.out + +Complexité cyclomaique de TriSpecial : + + Base 1 + boucle de pré-calcul + if dans la boucle + if de parité + boucle de construction + if parité d’index M = 6 + +TrieSpecial : Avec racineCarree O(√x) : O(n·√M). diff --git a/TriSpecial.c b/TriSpecial.c new file mode 100644 index 0000000..186576c --- /dev/null +++ b/TriSpecial.c @@ -0,0 +1,139 @@ + +/* +Comme j'ai eu des soucis que je ne comprend pas en faisant appel +a des fonctions d'un autre fichier je recrit les fonction +racineCarree et racineCarreeTab ici +*/ + +#include +#include +#include + +///Ex2 +int racineCarree(long long x) { + if (x < 0) return -1; + + long long i = 0; + while (i * i <= x) { + if (i * i == x) return (int)i; + i++; + } + return -1; +} + +int* racineCarreeTab(const long long *arr, size_t n) { + int *out = malloc(n * sizeof(int)); + if (!out) return NULL; + for (size_t i = 0; i < n; i++) { + out[i] = racineCarree(arr[i]); + } + return out; +} + +///Ex3 +long long* TriSpecial(const long long *arr, size_t n) { + if (!arr || n == 0) return NULL; + + long long somme_arr = 0; + long long *rc = malloc(n * sizeof(long long)); + + size_t nonIntCount = 0; + long long somme_rc = 0; + + for (size_t i = 0; i < n; i++) { + somme_arr += arr[i]; + int r = racineCarree(arr[i]); + rc[i] = r; + if (r == -1) nonIntCount++; + somme_rc += rc[i]; + } + + + long long *out = malloc(n * sizeof(long long)); + if (!out) { free(rc); return NULL; } + + if (nonIntCount % 2 == 0) { + + for (size_t i = 0; i < n; i++) { + if (i % 2 == 0) out[i] = arr[i]; + else out[i] = somme_arr * arr[i]; + } + } else { + + for (size_t i = 0; i < n; i++) { + if (i % 2 == 0) out[i] = rc[i]; + else out[i] = somme_rc * arr[i]; + } + } + + free(rc); + return out; +} + + +static void print_all_tab(const long long *a, size_t n) { + printf("["); + for (size_t i = 0; i < n; i++) { + printf("%lld", a[i]); + if (i + 1 < n) printf(", "); + } + printf("]\n"); +} + +static void print_int_tab(const int *a, size_t n) { + printf("["); + for (size_t i = 0; i < n; i++) { + printf("%d", a[i]); + if (i + 1 < n) printf(", "); + } + printf("]\n"); +} + +int main(void) { + + { + long long tab1[] = {25,48,2}; + int *r1 = racineCarreeTab(tab1, 3); + printf("racineCarreeTab([25,48,2]) -> "); + print_int_tab(r1, 3); + free(r1); + + long long tab2[] = {81,58,9}; + int *r2 = racineCarreeTab(tab2, 3); + printf("racineCarreeTab([81,58,9]) -> "); + print_int_tab(r2, 3); + free(r2); + + long long tab3[] = {68,10,54,16}; + long long *ts1 = TriSpecial(tab3, 4); + printf("TriSpecial([68,10,54,16]) -> "); + print_all_tab(ts1, 4); + free(ts1); + + long long tab4[] = {58,45,100,74,6,9}; + long long *ts2 = TriSpecial(tab4, 6); + printf("TriSpecial([58,45,100,74,6,9]) -> "); + print_all_tab(ts2, 6); + free(ts2); + } + + + size_t n = 10000; + long long *test = malloc(n * sizeof(long long)); + if (!test) return 1; + + srand(42); + for (size_t i = 0; i < n; i++) { + + test[i] = 1000001LL + (rand() % 2000000); + } + + + int *racine_test = racineCarreeTab(test, n); + long long *ts_test = TriSpecial(test, n); + + free(racine_test); + free(ts_test); + free(test); + return 0; +}