CALCULER LE PRODUIT DE DEUX MATRICES DE TAILLE DIFFERENT

Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
- - Dernière réponse : besilent
Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
- 1 mars 2010 à 22:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51358-calculer-le-produit-de-deux-matrices-de-taille-different

Minilogus
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
-
il y a quelque petite erreurs:

#include <stdio.h>
//conio.h n'est pas reconnu par tout les OS et est inutile ici.
int valide(int x)
{
do
{
scanf("%i",&x);
if ((x<0)||(x>20))
printf("vous devez entrer une valeur entre 1 et 20 : ");
}while((x<=0)||(x>20));
return(x);
}

int main()//int au lieu de void car return 0 à la fin
{
const int n=20;// ne pas oublier le type (int)
int i,j,k,l1,l2,c1,c2;
float mat1[n][n],mat2[n][n],matres[n][n];

do
{
printf("Donner le nombre de lignes de la matrice n°1 \n");
l1=valide(l1);
printf("Donner le nombre de colonnes de la matrice n°1 \n");
c1=valide(c1);
printf("Donner le nombre de lignes de la matrice n°2 \n");// 2 et non 1;
l2=valide(l2);
printf("Donner le nombre de colonnes de la matrice n°2 \n");
c2=valide(c2);
if(c1!=l2)
printf("Les tailles des deux matrices sont incompatible \n Il faut que le nombre de colonnes de la premiere matrice egal au nombre de lignes de la deuxieme matrice . \n");
}while(c1!=l2);

printf("Tailles des matrices est bien choisis \n Votre nouvelle matrice aura cet taille %i lignes et %i colonnes ",l1,c2);

for(i=0;i<l1;i++)
{
for(j=0;j<c1;j++)
{
printf("Donner l'element d'emplacement [%i,%i] de la premiere matrice \n",i+1,j+1);
scanf("%f",&mat1[i][j]);
}
}

for(i=0;i<l2;i++)
{
for(j=0;j<c2;j++)
{
printf("Donner l'element d'emplacement [%i,%i] de la deuxieme matrice \n",i+1,j+1);// deuxieme (et non pas dexieme ^^).
scanf("%f",&mat2[i][j]);
}
}
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
matres[i][j]=0;
for(k=0;k<c1;k++)
{
matres[i][j]=matres[i][j]+mat1[i][k]*mat2[k][j];
}
}
}

printf("le produit de la premiere et la deuxieme matrice donne : \n");// rajout d'un "\n" pour faire plus propre

for(i=0;i<l1;i++)
{
printf("(");
for(j=0;j<c2;j++)
{
printf("%4.0f",matres[i][j]);
}
printf(")\n");
}
return 0;// enlevement de getch et mise en place de return 0.
}
Minilogus
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
-
Il y a d'autres petites fautes mais rien qui empêche le programme de fonctionner.
Minilogus
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
-
A au fait, tu as mis le niveau de difficulté un peu haut, c'est du niveau débutant (pas initié ^^).
aymenet1
Messages postés
1
Date d'inscription
samedi 27 février 2010
Statut
Membre
Dernière intervention
28 février 2010
-
merci Minilogus j'apprecis pour ton passage ^^
besilent
Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
3 -
J'avais fais un code en C sur les calculs matricielles.
Voici ma fonction, elle ressemble évidemment beaucoup à la tienne.

void Multiplier_Matrice( int **Matrice, int **Matrice_A, int **Matrice_B, int Ligne_A, int Colonne_A, int Ligne_B, int Colonne_B )
{
if ( Matrice != NULL && Matrice_A != NULL && Matrice_B != NULL && Sont_Multipliables( Colonne_A, Ligne_B ) == 1 )
{
int i,j;
int Repeter=0;
for ( i=0 ; i<Ligne_A ; i++ )
{
for ( j=0 ; j<Colonne_B ; j++ )
{
while ( Repeter != Colonne_A )
{
Matrice[i][j]=Matrice[i][j]+ Matrice_A[i][Repeter]*Matrice_B[Repeter][j];
Repeter++;
}
Repeter=0;
}
}
}

else perror("\n\n Multiplier_Matrice : ");
}
besilent
Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
3 -
int Sont_Multipliables( int Colonne_A, int Ligne_B )
{
if ( Colonne_A == Ligne_B )
{
return 1;
}

else return 0;
}

C'est la fonction que je n'ai pas mise mais qui se trouve dans la structure de contrôle if afin de vérifier que les matrices sont bien multipliables.