Calculer le produit de deux matrices de taille different

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 062 fois - Téléchargée 20 fois

Contenu du snippet

Un programme qui fait le produit de deux matrices de taille matrice1: [n,p] et matrice2 [p,m] qui donnent une matrice de taille: [n,m]...

Source / Exemple :


#include <stdio.h>
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);
   }
void main()
{
const n=20;
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");
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 dexieme matrice \n",i+1,j+1);
						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 première et la deuxième matrice donne :");

for(i=0;i<l1;i++)
{
printf("(");
for(j=0;j<c2;j++)
{
printf("%4.0f",matres[i][j]);
}
printf(")\n");
}
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
4
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.
Messages postés
4
Date d'inscription
jeudi 18 février 2010
Statut
Membre
Dernière intervention
10 mars 2010
4
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 : ");
}
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 ^^
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
3
A au fait, tu as mis le niveau de difficulté un peu haut, c'est du niveau débutant (pas initié ^^).
Messages postés
23
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
10 juin 2011
3
Il y a d'autres petites fautes mais rien qui empêche le programme de fonctionner.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.