Calculer le produit de deux matrices de taille different

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 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

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 : ");
}

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.