Correction d'un programme pour les opérations des Matrices
Fermé
MohammedKarim
Messages postés3Date d'inscriptionmardi 23 décembre 2014StatutMembreDernière intervention23 décembre 2014
-
Modifié par Whismeril le 23/12/2014 à 15:43
MohammedKarim
Messages postés3Date d'inscriptionmardi 23 décembre 2014StatutMembreDernière intervention23 décembre 2014
-
23 déc. 2014 à 19:23
Bonjour,
s'il vous plait j'ai un problème dans ce programme qui fait les opérations sur les matrices il marche mais quand il arrive à l'inverse ne donne rien. si vous trouvez des erreurs lesquels s'il vous plait.
#include<stdio.h>#include<stdlib.h>voidmenu(){printf("menu\n---------\n");printf("1:addition\n");printf("2:soustraction\n");printf("3:produit\n");printf("4:transpose\n");printf("5:miseazero\n");printf("6:inverse\n");printf("7:sortie\n");}voidadditionMatrice();voidsoustractionMarice();voidproduitMatrice();voidtransposeMatrice();voidmiseazero();voidinverse();intmain(){int choix,fin=1;menu();while(fin){printf("quel est votre choix : \n");scanf("%d",&choix);switch(choix){case1:additionMatrice();break;case2:soustractionMarice();break;case3:produitMatrice();break;case4:transposeMatrice();break;case5:miseazero();break;case6:inverse();break;case7: fin=0;break;default:printf("ce choix n'existe pas !\n");}}system("PAUSE");return0;}voidadditionMatrice(){/* Déclarations */int A[50][50];/* matrice donnée */int B[50][50];/* matrice donnée */int C[50][50];/* matrice résultat */int N, M;/* dimensions des matrices */int I, J;/* indices courants *//* Saisie des données */printf("Nombre de lignes (max.50) : ");scanf("%d",&N );printf("Nombre de colonnes (max.50) : ");scanf("%d",&M );printf("*** Matrice A ***\n");for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&A[I][J]);}printf("*** Matrice B ***\n");for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&B[I][J]);}/* Affichage des matrices */printf("Matrice donnée A :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", A[I][J]);printf("\n");}printf("Matrice donnée B :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", B[I][J]);printf("\n");}/* Affectation du résultat de l'addition à C */for(I=0; I<N; I++)for(J=0; J<M; J++)
C[I][J]= A[I][J]+B[I][J];/* Edition du résultat */printf("Matrice résultat d'addition est :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", C[I][J]);printf("\n");}}voidsoustractionMarice(){/* Déclarations */int A[50][50];/* matrice donnée */int B[50][50];/* matrice donnée */int C[50][50];/* matrice résultat */int N, M;/* dimensions des matrices */int I, J;/* indices courants *//* Saisie des données */printf("Nombre de lignes (max.50) : ");scanf("%d",&N );printf("Nombre de colonnes (max.50) : ");scanf("%d",&M );printf("*** Matrice A ***\n");for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&A[I][J]);}printf("*** Matrice B ***\n");for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&B[I][J]);}/* Affichage des matrices */printf("Matrice donnée A :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", A[I][J]);printf("\n");}printf("Matrice donnée B :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", B[I][J]);printf("\n");}/* Affectation du resultat de la soustraction à c */for(I=0; I<N; I++){for(J=0; J<M; J++)
C[I][J]= A[I][J]-B[I][J];}/*Edition du resultat */printf("Matrice résultat de soustraction est :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", C[I][J]);printf("\n");}}voidproduitMatrice(){/* Déclarations */int A[50][50];/* matrice donnée */int B[50][50];/* matrice donnée */int C[50][50];/* matrice résultat */int N, M, P;/* dimensions des matrices */int I, J, K;/* indices courants *//* Saisie des données */printf("*** Matrice A ***\n");printf("Nombre de lignes de A (max.50) : ");scanf("%d",&N );printf("Nombre de colonnes de A (max.50) : ");scanf("%d",&M );for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&A[I][J]);}printf("*** Matrice B ***\n");printf("Nombre de lignes de B : %d\n", M);printf("Nombre de colonnes de B (max.50) : ");scanf("%d",&P );for(I=0; I<M; I++)for(J=0; J<P; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&B[I][J]);}/* Affichage des matrices */printf("Matrice donnée A :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", A[I][J]);printf("\n");}printf("Matrice donnée B :\n");for(I=0; I<M; I++){for(J=0; J<P; J++)printf("%7d", B[I][J]);printf("\n");}/* Affectation du résultat de la multiplication à C */for(I=0; I<N; I++)for(J=0; J<P; J++){
C[I][J]=0;for(K=0; K<M; K++)
C[I][J]+= A[I][K]*B[K][J];}/* Edition du résultat */printf("Matrice résultat C :\n");for(I=0; I<N; I++){for(J=0; J<P; J++)printf("%7d", C[I][J]);printf("\n");}}voidtransposeMatrice(){/* Déclarations */int A[50][50];/* matrice donnée */int N, M;/* dimensions de la matrice */int I, J;/* indices courants */int AIDE;/* pour la permutation */int DMAX;/* la plus grande des deux dimensions *//* Saisie des données */printf("Nombre de lignes (max.50) : ");scanf("%d",&N );printf("Nombre de colonnes (max.50) : ");scanf("%d",&M );for(I=0; I<N; I++)for(J=0; J<M; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&A[I][J]);}/* Affichage de la matrice */printf("Matrice donnée :\n");for(I=0; I<N; I++){for(J=0; J<M; J++)printf("%7d", A[I][J]);printf("\n");}/* Transposition de la matrice A par permutation des *//* éléments [I][J] à gauche de la diagonale principale *//* avec les éléments [J][I] à droite de la diagonale. */
DMAX =(N>M)? N : M;for(I=0; I<DMAX; I++)for(J=0; J<I; J++){
AIDE = A[I][J];
A[I][J]= A[J][I];
A[J][I]= AIDE;}/* Edition du résultat *//* Attention: maintenant le rôle de N et M est inversé. */printf("transpose du Matrice donnée est :\n");for(I=0; I<M; I++){for(J=0; J<N; J++)printf("%7d", A[I][J]);printf("\n");}system("pause");}voidmiseazero(){/* Déclarations */int A[50][50];/* matrice carrée */int N;/* dimension de la matrice carrée */int I, J;/* indices courants *//* Saisie des données */printf("Dimension de la matrice carrée (max.50) : ");scanf("%d",&N);for(I=0; I<N; I++)for(J=0; J<N; J++){printf("Elément[%d][%d] : ",I,J);scanf("%d",&A[I][J]);}/* Affichage de la matrice */printf("Matrice donnée :\n");for(I=0; I<N; I++){for(J=0; J<N; J++)printf("%7d", A[I][J]);printf("\n");}/* Mise à zéro de la diagonale principale */for(I=0; I<N; I++)
A[I][I]=0;/* Edition du résultat */printf("Matrice résultat :\n");for(I=0; I<N; I++){for(J=0; J<N; J++)printf("%7d", A[I][J]);printf("\n");}system("pause");}voidinverse(){floatdeterminant(float[][],float);voidcofactor(float[][],float);voidtranspose(float[][],float[][],float);intmain(){float a[25][25],k,d;int i,j;printf("\n C Program pour trouver l'inverse d'une Matrice\n\n");printf("Entrer l'ordre de la Matrice : ");scanf("%f",&k);printf("Entrer les elements de %.0fX%.de la Matrice : \n",k,k);for(i=0;i<k;i++){for(j=0;j<k;j++){scanf("%f",&a[i][j]);}}
d=determinant(a,k);printf("Determinant de la Matrice = %f",d);if(d==0)printf("\nInverse de la Matrice is not possible\n");elsecofactor(a,k);getch();}/*pour le calcul du Determinant de la Matrice */floatdeterminant(float a[25][25],float k){float s=1,det=0,b[25][25];int i,j,m,n,c;if(k==1){return(a[0][0]);}else{
det=0;for(c=0;c<k;c++){
m=0;
n=0;for(i=0;i<k;i++){for(j=0;j<k;j++){
b[i][j]=0;if(i !=0&& j != c){
b[m][n]=a[i][j];if(n<(k-2))
n++;else{
n=0;
m++;}}}}
det=det + s *(a[0][c]*determinant(b,k-1));
s=-1* s;}}return(det);}voidcofactor(float num[25][25],float f){float b[25][25],fac[25][25];int p,q,m,n,i,j;for(q=0;q<f;q++){for(p=0;p<f;p++){
m=0;
n=0;for(i=0;i<f;i++){for(j=0;j<f;j++){if(i != q && j != p){
b[m][n]=num[i][j];if(n<(f-2))
n++;else{
n=0;
m++;}}}}
fac[q][p]=pow(-1,q + p)*determinant(b,f-1);}}transpose(num,fac,f);}/*trouver transpose de la matrice*/voidtranspose(float num[25][25],float fac[25][25],float r){int i,j;float b[25][25],inverse[25][25],d;for(i=0;i<r;i++){for(j=0;j<r;j++){
b[i][j]=fac[j][i];}}
d=determinant(num,r);for(i=0;i<r;i++){for(j=0;j<r;j++){
inverse[i][j]=b[i][j]/ d;}}printf("\n\n\nl'inverse de la matrice est : \n");for(i=0;i<r;i++){for(j=0;j<r;j++){printf("\t%f",inverse[i][j]);}printf("\n");}}}
23 déc. 2014 à 18:53
23 déc. 2014 à 19:07
23 déc. 2014 à 19:23