Problème su opération de matrices en C

Fermé
audrenyta - 30 déc. 2008 à 16:47
 loupius - 30 déc. 2008 à 21:28
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");

}

2 réponses

Profil bloqué
30 déc. 2008 à 16:57
Bjr,ce que je vois pas c'est la pertie main() ?? ?
0
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.
0
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.
0
loupius > audrenyta
30 déc. 2008 à 21:28
Il est certain que dans la fonction: float determinant (float m[50][50], int n)
et avec la déclaration: float B;

on va rencontrer une erreur lorsqu'on arrive à: determinant (B, n-1);
0