CALCULER LE PRODUIT DE DEUX MATRICES DE TAILLE DIFFERENT
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 2011
-
27 févr. 2010 à 16:34
besilent
Messages postés4Date d'inscriptionjeudi 18 février 2010StatutMembreDernière intervention10 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.
besilent
Messages postés4Date d'inscriptionjeudi 18 février 2010StatutMembreDernière intervention10 mars 20104 1 mars 2010 à 22:20
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.
besilent
Messages postés4Date d'inscriptionjeudi 18 février 2010StatutMembreDernière intervention10 mars 20104 1 mars 2010 à 22:17
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 : ");
}
aymenet1
Messages postés1Date d'inscriptionsamedi 27 février 2010StatutMembreDernière intervention28 février 2010 28 févr. 2010 à 11:53
merci Minilogus j'apprecis pour ton passage ^^
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 27 févr. 2010 à 16:42
A au fait, tu as mis le niveau de difficulté un peu haut, c'est du niveau débutant (pas initié ^^).
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 27 févr. 2010 à 16:39
Il y a d'autres petites fautes mais rien qui empêche le programme de fonctionner.
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 27 févr. 2010 à 16:34
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.
}
1 mars 2010 à 22:20
{
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.
1 mars 2010 à 22:17
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 : ");
}
28 févr. 2010 à 11:53
27 févr. 2010 à 16:42
27 févr. 2010 à 16:39
27 févr. 2010 à 16:34
#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.
}