Problème su opération de matrices en C
audrenyta
-
loupius -
loupius -
Bonjour,
je suis confrontée à un problème que je n'arrive pas à résoudre. G 1 mini projet en informatique qui concerne les opérations sur les matrices. g essayé de programmer ces opérations mais il ya certaines erreurs que je n'arrive pas à corriger. merci de m'aider dans les plus brefs délais. Voici mon programme:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void saisie(int l,int c,float m[50][50])
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("m[%d][%d]=",i,j);
scanf("%f",&m[i][j]);
}
}
}
void affichage(float m[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("m[%d][%d]=%f",i,j,m[i][j]);
}
}
}
float somme(float m1[50][50],float m2[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
return m1[i][j]+=m2[i][j];
}
}
}
float multiplication(float m[50][50],int l,int c,float a)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
return a*=m[i][j];
}
}
}
float produit(float m1[50][50],float m2[50][50],int l1,int k,int c2)
{
int i,j,f;
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
float s=0;
for(f=0;f<k;f++)
{
s+=(m1[i][f]*=m2[f][c2]);
}
return s;
}
}
}
void transposition(float m[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
m[i][j]=m[j][i];
}
}
}
float sous_Mat(float m[50][50],int l,int c,int ib,int jb)
{
int i,j;
int is=0,js=0;
float B[l-1][c-1];
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
if(i!=ib && j!=jb)
{
B[is][js]=m[i][j];
if(js<l-1)
js++;
else
{
js=0;
is++;
}
}
}
}
return B[is][js];
}
float determinant(float m[50][50],int n)
{
int i,j;
float det=0;
float B;
if(n<=1)
printf("impossible de calculer le déterminant");
else
{
for(j=0;j<n;j++)
{
B=sous_Mat(m,n,n,i,j);
if(j%2==0)
{
det+=(m[0][j] *= determinant(B,n-1));
}
else
{
det+=(-1) * m[0][j] * determinant(B,n-1);
}
}
}
return det;
}
float coMat(float m[50][50],int l,int c)
{
int i,j;
float B[l][c];
float S[l-1][c-1];
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
S=sous_Mat(m,l,c,i,j);
if((i+j)%2==0)
{
B[i][j]=determinant(S);
}
else
{
B[i][j]=-1*determinant(S);
}
}
}
return B;
}
float inverse(float m[50][50],int l,int c)
{
float det;
float co_m,t_com,inv_m;
det=determinant(m);
if(det==0)
{
printf("l\'inverse de la matrice n\'existe pas");
}
else
{
co_m=coMat(m,l,c);
t_com=transposition(co_m,l,c);
inv_m=multiplication(t_com,c,l,(1/=det));
return inv_m;
}
}
char menu()
{
char x;
printf("**********CREATION (c)\n***********");
printf("**********AFFICHAGE (a)\n**********");
printf("**********SOMME (s) \n*************");
printf("**********MULTIPLICATION (m)\n*****");
printf("**********PRODUIT (p)\n************");
printf("**********TRANSPOSITION (t)\n******");
printf("**********DETERMINANT (d)\n********");
printf("**********INVERSE (i)\n************");
printf("**********QUITTER (q)\n************");
printf("entrer votre choix: ");
fflush(stdin);
x=getchar();
return x;
}
int main()
{
char w;
do
{
w=menu();
while(w!='c' && w!='a' && w!='s' && w!='m' && w!='p' && w!='t' && w!='d' && w!='i' && w!='q')
{
printf("veuillez retaper votre choix");
fflush(stdin);
w=getchar();
}
switch(w)
{
case'c': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
}
break;
case'a': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
affichage(m,l,c);
}
break;
case's': {
int l,c;
float m1[50][50],m2[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m1);
saisie(l,c,m2);
somme(m1,m2,l,c);
}
break;
case'm': {
int l,c,a; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
printf("entrer le nombre");
scanf("%d",&a);
multiplication(m,l,c,a);
}
break;
case'p': {
int l,c,k;
float m1[50][50],m2[50][50];
printf("entrer le nombre de lignes de la premiere matrice");
scanf("%d",&l);
printf("entrer le nombre de colonnes de la premiere matrice");
scanf("%d",&k);
printf("entrer le nombre de lignes de la deuxieme matrice");
scanf("%d",&k);
printf("entrer le nombre de colonnes de la deuxieme matrice");
scanf("%d",&c);
saisie(l,k,m1);
saisie(k,c,m2);
produit(m1,m2,l,k,c);
}
break;
case't': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
transposition(m,l,c);
}
break;
case'd': {
int n; float m[50][50];
printf("entrer le nombre de lignes et de colonnes");
scanf("%d",&n);
saisie(n,n,m);
determinant(m,n);
}
break;
case'i': {
int n; float m[50][50];
printf("entrer le nombre de lignes et de colonnes");
scanf("%d",&n);
saisie(n,n,m);
inverse(m,n,n);
}
break;
case'q': exit(0);
break;
}
}
while (w!='q');
fflush(stdin);
return(0);
system("pause");
}
je suis confrontée à un problème que je n'arrive pas à résoudre. G 1 mini projet en informatique qui concerne les opérations sur les matrices. g essayé de programmer ces opérations mais il ya certaines erreurs que je n'arrive pas à corriger. merci de m'aider dans les plus brefs délais. Voici mon programme:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void saisie(int l,int c,float m[50][50])
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("m[%d][%d]=",i,j);
scanf("%f",&m[i][j]);
}
}
}
void affichage(float m[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
printf("m[%d][%d]=%f",i,j,m[i][j]);
}
}
}
float somme(float m1[50][50],float m2[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
return m1[i][j]+=m2[i][j];
}
}
}
float multiplication(float m[50][50],int l,int c,float a)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
return a*=m[i][j];
}
}
}
float produit(float m1[50][50],float m2[50][50],int l1,int k,int c2)
{
int i,j,f;
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
float s=0;
for(f=0;f<k;f++)
{
s+=(m1[i][f]*=m2[f][c2]);
}
return s;
}
}
}
void transposition(float m[50][50],int l,int c)
{
int i,j;
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
m[i][j]=m[j][i];
}
}
}
float sous_Mat(float m[50][50],int l,int c,int ib,int jb)
{
int i,j;
int is=0,js=0;
float B[l-1][c-1];
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
if(i!=ib && j!=jb)
{
B[is][js]=m[i][j];
if(js<l-1)
js++;
else
{
js=0;
is++;
}
}
}
}
return B[is][js];
}
float determinant(float m[50][50],int n)
{
int i,j;
float det=0;
float B;
if(n<=1)
printf("impossible de calculer le déterminant");
else
{
for(j=0;j<n;j++)
{
B=sous_Mat(m,n,n,i,j);
if(j%2==0)
{
det+=(m[0][j] *= determinant(B,n-1));
}
else
{
det+=(-1) * m[0][j] * determinant(B,n-1);
}
}
}
return det;
}
float coMat(float m[50][50],int l,int c)
{
int i,j;
float B[l][c];
float S[l-1][c-1];
for(i=0;i<l;i++)
{
for(j=0;j<c;j++)
{
S=sous_Mat(m,l,c,i,j);
if((i+j)%2==0)
{
B[i][j]=determinant(S);
}
else
{
B[i][j]=-1*determinant(S);
}
}
}
return B;
}
float inverse(float m[50][50],int l,int c)
{
float det;
float co_m,t_com,inv_m;
det=determinant(m);
if(det==0)
{
printf("l\'inverse de la matrice n\'existe pas");
}
else
{
co_m=coMat(m,l,c);
t_com=transposition(co_m,l,c);
inv_m=multiplication(t_com,c,l,(1/=det));
return inv_m;
}
}
char menu()
{
char x;
printf("**********CREATION (c)\n***********");
printf("**********AFFICHAGE (a)\n**********");
printf("**********SOMME (s) \n*************");
printf("**********MULTIPLICATION (m)\n*****");
printf("**********PRODUIT (p)\n************");
printf("**********TRANSPOSITION (t)\n******");
printf("**********DETERMINANT (d)\n********");
printf("**********INVERSE (i)\n************");
printf("**********QUITTER (q)\n************");
printf("entrer votre choix: ");
fflush(stdin);
x=getchar();
return x;
}
int main()
{
char w;
do
{
w=menu();
while(w!='c' && w!='a' && w!='s' && w!='m' && w!='p' && w!='t' && w!='d' && w!='i' && w!='q')
{
printf("veuillez retaper votre choix");
fflush(stdin);
w=getchar();
}
switch(w)
{
case'c': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
}
break;
case'a': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
affichage(m,l,c);
}
break;
case's': {
int l,c;
float m1[50][50],m2[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m1);
saisie(l,c,m2);
somme(m1,m2,l,c);
}
break;
case'm': {
int l,c,a; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
printf("entrer le nombre");
scanf("%d",&a);
multiplication(m,l,c,a);
}
break;
case'p': {
int l,c,k;
float m1[50][50],m2[50][50];
printf("entrer le nombre de lignes de la premiere matrice");
scanf("%d",&l);
printf("entrer le nombre de colonnes de la premiere matrice");
scanf("%d",&k);
printf("entrer le nombre de lignes de la deuxieme matrice");
scanf("%d",&k);
printf("entrer le nombre de colonnes de la deuxieme matrice");
scanf("%d",&c);
saisie(l,k,m1);
saisie(k,c,m2);
produit(m1,m2,l,k,c);
}
break;
case't': {
int l,c; float m[50][50];
printf("entrer le nombre de lignes");
scanf("%d",&l);
printf("entrer le nombre de colonnes");
scanf("%d",&c);
saisie(l,c,m);
transposition(m,l,c);
}
break;
case'd': {
int n; float m[50][50];
printf("entrer le nombre de lignes et de colonnes");
scanf("%d",&n);
saisie(n,n,m);
determinant(m,n);
}
break;
case'i': {
int n; float m[50][50];
printf("entrer le nombre de lignes et de colonnes");
scanf("%d",&n);
saisie(n,n,m);
inverse(m,n,n);
}
break;
case'q': exit(0);
break;
}
}
while (w!='q');
fflush(stdin);
return(0);
system("pause");
}
A voir également:
- Problème su opération de matrices en C
- Opérateur de réseau mobile - Guide
- Impossible de terminer l'opération car le fichier contient un virus - Forum Python
- L'opération demandée nécessite une élévation ✓ - Forum LibreOffice / OpenOffice
- Le fichier de pagination est insuffisant pour terminer cette opération ✓ - Forum Logiciels
- Erreur lors d'une opération de pagination ✓ - Forum Matériel & Système
2 réponses
Donnez-nous des programmes indentés; ça me décourage de les lire, surtout s'ils font 300 lignes !!!
Bon y'a au moins une erreur dans la somme et la multiplication:
- la boucle ne s'exécutera qu'une fois pour i = j = 0 ... puisqu'il y a un 'return' qui termine la fonction.
Bon y'a au moins une erreur dans la somme et la multiplication:
- la boucle ne s'exécutera qu'une fois pour i = j = 0 ... puisqu'il y a un 'return' qui termine la fonction.
en fait, lorsque je compile le programme avec le devC++, il apparait des erreurs au niveau des fonctions determinant, comat et inverse. ces erreurs sont dues à une imcopatibilité de conversion des types et je ne sait comment resoudre ces erreurs! est-ce ke tu peux m'aider stp? J'en ai vraiment besoin! merci.