diff --git a/.gitignore b/.gitignore index 7c38438..93fa994 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ infos *.exe +*.pdf diff --git a/DS1-2015/E1.c b/DS1-2015/E1.c new file mode 100644 index 0000000..4b7f911 --- /dev/null +++ b/DS1-2015/E1.c @@ -0,0 +1,18 @@ +/* Calcul de la mensualité d'emprunt */ +#include +#include + +int main() { + + double S = 10000; + double t = 0.036; + double x = t / 12; + int n = 30; + double R; + + R = (S*x)/(1-pow(1+x, -n)); + + printf("2) %lf\n", R); + + return 0; +} diff --git a/DS1-2015/E2.c b/DS1-2015/E2.c new file mode 100644 index 0000000..47dbf4f --- /dev/null +++ b/DS1-2015/E2.c @@ -0,0 +1,40 @@ +/* Triangle de Pascal */ + +#include + +int main() { + + int N; + int x, y; + printf("Saisir N : "); + scanf("%d", &N); + + // On crée un tableau, et on le remplit de 0 + int T[N+1][N+1]; + for (y = 0; y <= N; y++) { + for (x = 1; x < N; x++) { + T[x][y] = 0; + } + T[0][y] = 1; // On met des 1 sur la première colonne + } + + // On calcule les sommes + for (y = 0; y <= N; y++) { + for (x = 1; x <= y; x++) { + T[x][y] = T[x-1][y-1] + T[x][y-1]; + } + } + + // On affiche le tableau + for (y = 0; y <= N; y++) { + for (x = 0; x < N; x++) { + if (x <= y) { + printf("%11d", T[x][y]); + } + } + printf("\n"); + } + + + return 0; +} diff --git a/DS1-2015/E3.c b/DS1-2015/E3.c new file mode 100644 index 0000000..c29570a --- /dev/null +++ b/DS1-2015/E3.c @@ -0,0 +1,118 @@ +/* Nombres hypercomplexes */ +#include +#include + +// 1) + +typedef struct complexe { + double a, b; +} complexe; + +// 2) + +complexe Csom(complexe z1, complexe z2) { + complexe Z; + Z.a = z1.a + z2.a; + Z.b = z1.b + z2.b; + return Z; +} + +// 3) + +complexe Cprod(complexe z1, complexe z2) { + complexe Z; + Z.a = z1.a * z2.a - z1.b * z2.b; + Z.b = z1.a * z2.b + z1.b * z2.a; + return Z; +} + +// 4) + +int main4() { + complexe z1, z2; + + + printf("Saisissez la partie réelle de z1 : "); + scanf("%lf", &z1.a); + printf("Saisissez la partie immaginaire de z1 : "); + scanf("%lf", &z1.b); + + printf("Saisissez la partie réelle de z2 : "); + scanf("%lf", &z2.a); + printf("Saisissez la partie immaginaire de z2 :"); + scanf("%lf", &z2.b); + + complexe som = Csom(z1, z2); + complexe prod = Cprod(z1, z2); + printf("z1 + z2 = %lf + %lfi\n", som.a, som.b); + printf("z1 × z2 = %lf + %lfi\n", prod.a, prod.b); + + + // Pour z1 = -3 + 4i et z2 = 6 - 8i + // z1 + z2 = 3.000000 + -4.000000i + // z1 × z2 = 14.000000 + 12.000000i + + return 0; +} + +// 5) + +typedef struct qnion { + complexe z1, z2; +} qnion; + +// 6) + +float Qmod(qnion q) { + return sqrt(pow(q.z1.a, 2) + pow(q.z1.b, 2) + pow(q.z2.a, 2) + pow(q.z2.b, 2)); +} + +complexe Cinv(complexe z) { + complexe Z; + Z.a = -z.a; + Z.b = -z.b; + return Z; +} + +int main6() { + qnion q1, q2; + + printf("Quaternion q1\n"); + printf("Saisissez la partie réelle de z11 : "); + scanf("%lf", &q1.z1.a); + printf("Saisissez la partie immaginaire de z11 : "); + scanf("%lf", &q1.z1.b); + printf("Saisissez la partie réelle de z21 : "); + scanf("%lf", &q1.z2.a); + printf("Saisissez la partie immaginaire de z21 :"); + scanf("%lf", &q1.z2.b); + + printf("Quaternion q2\n"); + printf("Saisissez la partie réelle de z12 : "); + scanf("%lf", &q2.z1.a); + printf("Saisissez la partie immaginaire de z12 : "); + scanf("%lf", &q2.z1.b); + printf("Saisissez la partie réelle de z22 : "); + scanf("%lf", &q2.z2.a); + printf("Saisissez la partie immaginaire de z22 :"); + scanf("%lf", &q2.z2.b); + + printf("\n"); + printf("Module de q1 : %lf\n", Qmod(q1)); + printf("Module de q2 : %lf\n", Qmod(q2)); + + qnion P; + P.z1 = Csom(q1.z1, q2.z1); + P.z2 = Csom(q1.z2, q2.z2); + printf("q1 + q2 = (%lf, %lf, %lf, %lf)\n", P.z1.a, P.z1.b, P.z2.a, P.z2.b); + + qnion Q; + Q.z1 = Csom(Cprod(q1.z1, q2.z1), Cinv(Cprod(q1.z2, q2.z2))); + Q.z2 = Csom(Cprod(q1.z1, q2.z2), Cprod(q2.z1, q1.z2)); + printf("q1 × q2 = (%lf, %lf, %lf, %lf)\n", Q.z1.a, Q.z1.b, Q.z2.a, Q.z2.b); + +} + +int main() { + main6(); +} diff --git a/DS1-2015/E4.c b/DS1-2015/E4.c new file mode 100644 index 0000000..c32fa8d --- /dev/null +++ b/DS1-2015/E4.c @@ -0,0 +1,83 @@ +/* Algorithme de Thomas */ + +#include + +// Pas testé + +// 1) + +float D3diag(int n, double* a, double* b, double* c) { + float D[n]; + int i; + D[0] = b[0]; + D[1] = b[0] * b[1] - a[1] * c[0]; + for (i = 2; i < n; i++) { + D[i] = b[i] * D[i-1] - a[i] * c[i-2] * D[i-2]; + } + return D[i]; +} + +// 2) + +#define N_MAX 100 + +int main() { + // - + int n; + printf("Saisir la dimension n du système : "); + scanf("%d", &n); + + if (n < 3 || n > N_MAX) { + printf("N doit doit être compris entre 3 et %d", N_MAX); + } + + // - + double a[n], b[n], c[n], y[n]; + + int i; + for (i = 1; i < n; i++) { + printf("Saisissez l'élément %d de la diagonale A : ", i); + scanf("%lf", &a[i]); + } + for (i = 0; i < n; i++) { + printf("Saisissez l'élément %d de la diagonale B : ", i); + scanf("%lf", &b[i]); + } + for (i = 0; i < n-1; i++) { + printf("Saisissez l'élément %d de la diagonale C : ", i); + scanf("%lf", &c[i]); + } + for (i = 0; i < n; i++) { + printf("Saisissez l'élément %d du second membre y : ", i); + scanf("%lf", &y[i]); + } + + // - + double G[n], B[n], x[n]; + + G[0] = c[0] / b[0]; + B[0] = y[0] / b[0]; + + for (i = 1; i < n-1; i++) { + G[i] = c[i] / (b[i] - a[i] * G[i-1]); + } + + for (i = 1; i < n; i++) { + B[i] = (y[i] - a[i] * B[i-1]) / (b[i] - a[i] * G[i-1]); + } + + x[n-1] = B[n-1]; + for (i = n-2; i >= 0; i--) { + x[i] = B[i] - G[i] * x[i+1]; + } + + // - + printf("Déterminant de T : %lf\n", D3diag(n, a, b, c)); + + printf("X = "); + for (i = 1; i < n; i++) { + printf("%11lf ", x[i]); + } + printf("\n"); + +} diff --git a/DS1-2015/Makefile b/DS1-2015/Makefile new file mode 100644 index 0000000..da63454 --- /dev/null +++ b/DS1-2015/Makefile @@ -0,0 +1,9 @@ +all: $(subst c,exe,$(shell ls *.c)) + +%.exe: %.c + gcc $< -o $@ -lm + +.PHONY: all clean + +clean: + rm *.exe diff --git a/TP2/E4.c b/TP2/E4.c new file mode 100644 index 0000000..5c2fdb9 --- /dev/null +++ b/TP2/E4.c @@ -0,0 +1,37 @@ +/* Tableau des différences */ + +#include + +#define N 10 + +void soustraire(int A[N], int R[N], int n) { + int i; + for (i = 0; i < n-1; i++) { + R[i] = A[i+1] - A[i]; + } +} + +void afficherTableau(int A[N], int n) { + int i; + for (i = 0; i < n; i++) { + printf("%11i ", A[i]); + } + printf("\n"); + +} + +int main() { + + int X[N] = {2,8,-3,5,9,-4,-2,0,1,16}; + int DX[N][N]; + int i; + afficherTableau(X, N); + soustraire(X, DX[0], N); + afficherTableau(DX[0], N-1); + for (i = 0; i < N-1; i++) { + soustraire(DX[i], DX[i+1], N-i); + printf("-- D%dX", i+1); + afficherTableau(DX[i], N-i-1); + } + return 0; +}