Correction d'un programme pour les opérations des Matrices
MohammedKarim
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
MohammedKarim Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
MohammedKarim Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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.
EDIT: Ajout de la coloration syntaxique.
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> void menu(){ 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"); } void additionMatrice(); void soustractionMarice(); void produitMatrice(); void transposeMatrice(); void miseazero(); void inverse(); int main() { int choix,fin=1; menu(); while(fin){ printf("quel est votre choix : \n"); scanf("%d",&choix); switch(choix){ case 1: additionMatrice();break; case 2: soustractionMarice();break; case 3: produitMatrice();break; case 4: transposeMatrice();break; case 5: miseazero();break; case 6: inverse();break; case 7: fin=0;break; default: printf("ce choix n'existe pas !\n");} } system("PAUSE"); return 0; } void additionMatrice(){ /* 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"); } } void soustractionMarice(){ /* 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"); } } void produitMatrice(){ /* 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"); } } void transposeMatrice() { /* 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"); } void miseazero() { /* 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"); } void inverse() { float determinant(float[][],float); void cofactor(float[][],float); void transpose(float[][],float[][],float); int main() { 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"); else cofactor(a,k); getch(); } /*pour le calcul du Determinant de la Matrice */ float determinant(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); } void cofactor(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*/ void transpose(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"); } } }
EDIT: Ajout de la coloration syntaxique.
A voir également:
- Correction d'un programme pour les opérations des Matrices
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Activer correction automatique android - Guide
1 réponse
Bonjour,
T'es sûr que ce programme compile ?
Il manque l'accolade fermante pour finir la fonction inverse().
Cdlt,
T'es sûr que ce programme compile ?
void inverse() { float determinant(float[][],float); void cofactor(float[][],float); void transpose(float[][],float[][],float);
Il manque l'accolade fermante pour finir la fonction inverse().
Cdlt,
MohammedKarim
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
où ? s'il vous plait.
fiddy
Messages postés
11069
Date d'inscription
Statut
Contributeur
Dernière intervention
1 846
A la fin de ta fonction inverse()...
MohammedKarim
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
:/ pas de résultat