diff --git a/TP2/E3.c b/TP2/E3.c new file mode 100644 index 0000000..adda74a --- /dev/null +++ b/TP2/E3.c @@ -0,0 +1,114 @@ +/* Résolution d'un système à matrice triangulaire */ + +#include +#include + +#define N 10 // Ordre maximal + +void afficherMatrice(float A[N][N], int n) { + int i, j; + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + printf("%10f ", A[i][j]); + } + printf("\n"); + } +} +void afficherVecteur(float Y[N], int n) { + int i; + for (i = 0; i < n; i++) { + printf("%10f ", Y[i]); + } + printf("\n"); +} + +bool estTriangulaireSuperieure(float A[N][N], int n) { + int i, j; + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + if (i > j && A[j][i] != 0) { + return false; + } + } + } + return true; +} + +bool estTriangulaireInferieure(float A[N][N], int n) { + int i, j; + for (j = 0; j < n; j++) { + for (i = 0; i < n; i++) { + if (i < j && A[j][i] != 0) { + return false; + } + } + } + return true; +} + +int main() { + + int n; + printf("Saisir l'ordre du système : "); + scanf("%i", &n); + if (n < 1 || n > N) { + printf("L'ordre doit être compris entre 1 et %i", N); + } + + float A[N][N]; + float X[N], Y[N]; + int i, j; + + printf("-- Saisie de la matrice A\n"); + for (i = 0; i < n; i++) { + for (j = 0; j < n; j++) { + printf("Élément de la matrice en (%i, %i) : ", i, j); + scanf("%f", &A[j][i]); + } + } + printf("-- Saisie du vecteur Y\n"); + for (i = 0; i < n; i++) { + printf("Élément du vecteur en (%i) : ", i); + scanf("%f", &Y[i]); + } + printf("\n"); + + + printf("-- Affichage de la matrice A\n"); + afficherMatrice(A, n); + printf("-- Affichage du vecteur Y\n"); + afficherVecteur(Y, n); + + if (estTriangulaireSuperieure(A, n)) { + printf("-- Matrice triangulaire supérieure\n"); + X[n-1] = Y[n-1] / A[n-1][n-1]; + for (i = n - 2; i >= 0; i--) { + float s = 0; + for (j = i + 1; j < n; j++) { + s += A[j][i] * X[j]; + } + X[i] = (Y[i] - s) / A[i][i]; + } + + } else if (estTriangulaireInferieure(A, n)) { + printf("-- Matrice triangulaire inférieure\n"); + X[0] = Y[0] / A[0][0]; + for (i = 1; i < n; i++) { + float s = 0; + for (j = 0; j < i; j++) { + s += A[j][i] * X[j]; + } + X[i] = (Y[i] - s) / A[i][i]; + } + + } else { + printf("La matrice doit être triangulaire (supérieure ou inférieure).\n"); + return 2; + } + + printf("\n"); + printf("-- Affichage du vecteur X\n"); + afficherVecteur(X, n); + + return 0; +} diff --git a/TP2/Makefile b/TP2/Makefile index 0870721..4f88d43 100644 --- a/TP2/Makefile +++ b/TP2/Makefile @@ -9,6 +9,9 @@ E1-3.exe: E1-3.c E2.exe: E2.c gcc E2.c -o E2.exe +E3.exe: E3.c + gcc E3.c -o E3.exe + E5.exe: E5.c gcc E5.c -o E5.exe