This commit is contained in:
Geoffrey Frogeye 2016-02-10 09:34:51 +01:00
parent bc44b44f29
commit 05ce5c70c7
2 changed files with 117 additions and 0 deletions

114
TP2/E3.c Normal file
View file

@ -0,0 +1,114 @@
/* Résolution d'un système à matrice triangulaire */
#include <stdio.h>
#include <stdbool.h>
#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;
}

View file

@ -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