From 35f39a0a8222fe2ef41a7e870c8d5b0f30aef523 Mon Sep 17 00:00:00 2001 From: dubreuil Date: Wed, 15 Oct 2025 16:42:13 +0200 Subject: [PATCH] ajout controle --- Exercice1.c | 56 ++++++++++++++++++++++++++++++++ Exercice2.c | 45 +++++++++++++++++++++++++ Exercice3.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 75 ++++++++++++++++++++++++++++++++++++++++++ a.out | Bin 0 -> 15688 bytes ex2 | Bin 0 -> 18072 bytes ex3 | Bin 0 -> 18792 bytes gmon.out | Bin 0 -> 3080 bytes 8 files changed, 268 insertions(+) create mode 100644 Exercice1.c create mode 100644 Exercice2.c create mode 100644 Exercice3.c create mode 100644 README.md create mode 100755 a.out create mode 100755 ex2 create mode 100755 ex3 create mode 100644 gmon.out diff --git a/Exercice1.c b/Exercice1.c new file mode 100644 index 0000000..5176f4d --- /dev/null +++ b/Exercice1.c @@ -0,0 +1,56 @@ +#include +#include +#include + + +int racineCarree(int n){ + if(n < 0){ + return -1; + } + + for(int i = 0; i <= n; i++){ + if((i*i) == n){ + return i; + } + } + return -1; +} + +void racineCarreeTab(int tab[], int taille){ + for(int i = 0; i < taille; i++){ + tab[i] = racineCarree(tab[i]); + } +} + + + + +int main(void) { + int Ex1T1[] = {9, 25, 4}; + int Ex1T2[] = {10, 36, 2}; + int Ex1Taille = 3; + + + srand(time(NULL)); + int Ex2Taille = 500; + int Ex2Tableau[Ex2Taille]; + for (int i = 0; i < Ex2Taille; i++) { + Ex2Tableau[i] = 1000 + rand(); + } + + printf("Exercice 1a : %d \n", racineCarree(9)); + + printf("Exercice 1b : "); + racineCarreeTab(Ex1T2, Ex1Taille); + racineCarreeTab(Ex1T1, Ex1Taille); + for(int i = 0; i < Ex1Taille; i++){ + printf("%d ", Ex1T1[i]); + } + printf("\n"); + for(int i = 0; i < Ex1Taille; i++){ + printf("%d ", Ex1T2[i]); + } + printf("\n"); + + +} \ No newline at end of file diff --git a/Exercice2.c b/Exercice2.c new file mode 100644 index 0000000..d62a6ad --- /dev/null +++ b/Exercice2.c @@ -0,0 +1,45 @@ +#include +#include +#include + + +int racineCarree(int n){ + if(n < 0){ + return -1; + } + + for(int i = 0; i <= n; i++){ + if((i*i) == n){ + return i; + } + } + return -1; +} + +void racineCarreeTab(int tab[], int taille){ + for(int i = 0; i < taille; i++){ + tab[i] = racineCarree(tab[i]); + + } +} + + + + +int main(void) { + srand(time(NULL)); + int Ex2Taille = 10000; + int Ex2Tableau[Ex2Taille]; + for (int i = 0; i < Ex2Taille; i++) { + Ex2Tableau[i] = rand() % 1000000; + } + + printf("Exercice 2 : \n"); + racineCarreeTab(Ex2Tableau, Ex2Taille); + //for(int i = 0; i < Ex2Taille; i++){ + //printf("%d ", Ex2Tableau[i]); + //} + //printf("\n"); + + +} \ No newline at end of file diff --git a/Exercice3.c b/Exercice3.c new file mode 100644 index 0000000..3a65500 --- /dev/null +++ b/Exercice3.c @@ -0,0 +1,92 @@ +#include +#include +#include + + +int racineCarree(int n){ + if(n < 0){ + return -1; + } + + for(int i = 0; i <= n; i++){ + if((i*i) == n){ + return i; + } + } + return -1; +} + + +int somme(int tab[], int taille) { + int sum = 0; + for (int i = 0; i < taille; i++) { + sum += tab[i]; + } + return sum; +} + + +int sommeRacines(int tab[], int taille) { + int sum = 0; + for (int i = 0; i < taille; i++) { + int r = racineCarree(tab[i]); + if (r != -1) { + sum += r; + } + } + return sum; +} + +void TriSpecial(int tab[], int taille, int resultat[]){ + int racinesNonEntieres = 0; + + for (int i = 0; i < taille; i++) { + if (racineCarree(tab[i]) == -1) { + racinesNonEntieres++; + } + } + + if (racinesNonEntieres % 2 == 0) { + int sum = somme(tab, taille); + for (int i = 0; i < taille; i++) { + if (i % 2 == 0) { + resultat[i] = tab[i]; + } else { + resultat[i] = sum * tab[i]; + } + } + } else { + int sRacines = sommeRacines(tab, taille); + for (int i = 0; i < taille; i++) { + if (i % 2 == 0) { + resultat[i] = racineCarree(tab[i]); + } else { + resultat[i] = sRacines * tab[i]; + } + } + } +} + + + + +int main(void) { + int Ex3T1[] = {3, 5, 25, 16}; + int Ex3T2[] = {36, 9, 100, 2, 3, 7}; + int Ex3Taille = 4; + int Ex3Taille2 = 6; + + int resultat1[Ex3Taille]; + int resultat2[Ex3Taille2]; + + TriSpecial(Ex3T1, Ex3Taille, resultat1); + for(int i = 0; i < Ex3Taille; i++){ + printf("%d ", resultat1[i]); + } + printf("\n"); + TriSpecial(Ex3T2, Ex3Taille2, resultat2); + for(int i = 0; i < Ex3Taille2; i++){ + printf("%d ", resultat2[i]); + } + printf("\n"); +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2d1f6f --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# Exercice 2 + +Pour un tableau de taille 10 000 : + +racineCarreeTab() est appelé qu'une seule fois et prend près de 0% du temps d'exécution total. +Elle est appelé par le main et fait appel à la fonction racineCarree() 10 000 fois et cette même fonction a 10.63s d'exécution. + +On peut donc conclure que pour optimiser ce temps, on devra soit limité le nombre d'appel à la fonction racineCarree() ou alors optimiser cette fonction. + +``` +index % time self children called name + 10.63 0.00 10000/10000 racineCarreeTab [2] +[1] 100.0 10.63 0.00 10000 racineCarree [1] +----------------------------------------------- + 0.00 10.63 1/1 main [3] +[2] 100.0 0.00 10.63 1 racineCarreeTab [2] + 10.63 0.00 10000/10000 racineCarree [1] +----------------------------------------------- + +[3] 100.0 0.00 10.63 main [3] + 0.00 10.63 1/1 racineCarreeTab [2] +----------------------------------------------- +``` + + + +## Complexité cyclomatique + racineCarree() +La complexité cyclomatique de racineCarree() est 5. + + racineCarreeTab() +La complexité cyclomatique de racineCarreeTab() est 2. + +## Complexité algorithmique + + racineCarree() +La complexité algorithmique de racineCarree() est + + racineCarreTab() + +La complexité algorithmique de racineCarreeTab() est + + +# Exercice 4 + + +``` +index % time self children called name + 0.00 0.00 6/19 sommeRacines [4] + 0.00 0.00 13/19 TriSpecial [2] +[1] 0.0 0.00 0.00 19 racineCarree [1] +----------------------------------------------- + 0.00 0.00 2/2 main [8] +[2] 0.0 0.00 0.00 2 TriSpecial [2] + 0.00 0.00 13/19 racineCarree [1] + 0.00 0.00 1/1 somme [3] + 0.00 0.00 1/1 sommeRacines [4] +----------------------------------------------- + 0.00 0.00 1/1 TriSpecial [2] +[3] 0.0 0.00 0.00 1 somme [3] +----------------------------------------------- + 0.00 0.00 1/1 TriSpecial [2] +[4] 0.0 0.00 0.00 1 sommeRacines [4] + 0.00 0.00 6/19 racineCarree [1] +----------------------------------------------- +``` + +## Complexité cyclomatique + + TriSpecial() +La complexité cyclomatique de TriSpepcial() est de 5. + +## Complexité algorithmique + TriSpecial() +La complexité algorithmique de TriSpecial() est \ No newline at end of file diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..e4714c40dcb04de5eb916a2410bf792a83a26965 GIT binary patch literal 15688 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 literal 0 HcmV?d00001 diff --git a/ex2 b/ex2 new file mode 100755 index 0000000000000000000000000000000000000000..00f4b51011d50715ea92c48101084d5f74f81d4b GIT binary patch literal 18072 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 xPhjZ*R2P6$faZCiN