diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-19 12:16:41 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-19 12:16:41 +0200 |
| commit | 5a08a4e1e055a0a702a54cfa867d7fdebf2c1ad7 (patch) | |
| tree | 470e9aeb90b79f61beaab352fa0e394b9e76b11f /semestre 3/structures des données/tme/tme1-2/exo2 | |
| parent | cac7f3e868e98281f9f2b841101b09f02cf664fd (diff) | |
Cours du 15 au 19 septembre
Diffstat (limited to 'semestre 3/structures des données/tme/tme1-2/exo2')
4 files changed, 94 insertions, 0 deletions
diff --git a/semestre 3/structures des données/tme/tme1-2/exo2/Makefile b/semestre 3/structures des données/tme/tme1-2/exo2/Makefile new file mode 100644 index 0000000..d7fd00b --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo2/Makefile @@ -0,0 +1,12 @@ +all: question2.o question1.o + gcc -ggdb -o main question1.o question2.o + +question2.o: question2.c + gcc -c question2.c + +question1.o: question1.c question1.h + gcc -c question1.h question1.c + +clean: + rm *.o + rm *.gch diff --git a/semestre 3/structures des données/tme/tme1-2/exo2/question1.c b/semestre 3/structures des données/tme/tme1-2/exo2/question1.c new file mode 100644 index 0000000..9341440 --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo2/question1.c @@ -0,0 +1,28 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +#include "question1.h" + +/* j'ai fait le choix d'allouer un tableau et de le renvoyer, car ca me semble plus naturel de proceder comme ça */ +int *alloue_tableau(int n){ + return (int *)malloc(sizeof(int)*n); +} + +int *desalloue_tableau(int *t, int n){ + free(t); +} + +void remplir_tableau(int *t, int n, int V){ + srand(time(NULL)); + for (int i = 0; i < n; i++){ + t[i] = rand()%V; + } +} + +void afficher_tableau(int *t, int n){ + printf("["); + for (int i = 0; i < n; i++){ + printf("%d ", t[i]); + } + printf("]\n"); +} diff --git a/semestre 3/structures des données/tme/tme1-2/exo2/question1.h b/semestre 3/structures des données/tme/tme1-2/exo2/question1.h new file mode 100644 index 0000000..4c450a4 --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo2/question1.h @@ -0,0 +1,9 @@ +#ifndef QUESTION_1_H +#define QUESTION_1_H + +int *alloue_tableau(int n); +int *desalloue_tableau(int *t, int n); +void remplir_tableau(int *t, int n, int V); +void afficher_tableau(int *t, int n); + +#endif // QUESTION_1_H diff --git a/semestre 3/structures des données/tme/tme1-2/exo2/question2.c b/semestre 3/structures des données/tme/tme1-2/exo2/question2.c new file mode 100644 index 0000000..33182ea --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo2/question2.c @@ -0,0 +1,45 @@ +#include "question1.h" +#include <stdio.h> + +/* Calcule la somme des carrés des différences entre les éléments des tableaux pris deux à deux (version quadratique) */ +int diff_quad(int *t, int n){ + int sum = 0; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++){ + sum += (t[i] - t[j])*(t[i] - t[j]); + } + } + return sum; +} + +/* Calcule la somme des carrés des différences entre les éléments des tableaux pris deux à deux (version linéaire) + * + * On a que sum(sum(x_ix_j)) = (sum(x_i))^2. + * En developpant, on obtient : sum(sum(T_i^2-2*T_i*T_j+T_j^2)) + * i.e. : sum(sum(T_i^2))-sum(sum(2*T_i*T_j))+sum(sum(T_j^2)) + * i.e. : sum(sum(T_i^2))-2*sum(sum(T_i*T_j))+sum(sum(T_j^2)) + * i.e. : 2*sum(T_i^2)-2*sum(sum(T_i*T_j))+2*sum(T_j^2) + * i.e. : 2*sum(T_i^2)-2*(sum(T_i))^2+2*sum(T_j^2) + * Ainsi : 2*(2*sum(T_i^2)-(sum(T_i))^2) + * */ +int diff_lin(int *t, int n){ + int sum1 = 0; + int sum2 = 0; + for (int i = 0; i < n; i++){ + sum1 += t[i]*t[i]; + sum2 += t[i]; + } + return 2*(2*sum1-sum2*sum2); +} + +int main(void){ + int n = 10; + int *t = alloue_tableau(n); + remplir_tableau(t, n, 100); + afficher_tableau(t, n); + + printf("quadratique: %d\n",diff_quad(t,n)); + printf("linéaire: %d\n",diff_lin(t,n)); + + return 0; +} |
