Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 10-11-2011 20:46:25
- Golgup
- Membre actif
- Inscription : 09-07-2008
- Messages : 574
[C++] Multiplication de deux matrices
Hello!
Pour changer voici un petit programme qui calcul le produit de deux matrices:
L'interface peut etre ameliorée mais je ne connais pas encore assez c++ pour l'instant. Enfet on pouvait rendre beucoup plus simple le programme en utilisant les nouveaux tableaux <array> ou meme <vector> de c++11 (2011), mais d'une part beaucoup de gens n'y sont pas habitués et en plus, je retrouvais plein d'erreurs. Du coup je me retrouve avec trois "for" imbriqués. Pas facile de faire sans utiliser de definition!
#include <iostream>
using namespace std;
int main()
{
int c1;
int l2;
int l1;
int c2;
do {
cout << "Quel nombre de lignes de matrice 1 ?: " ;
cin >> l1;
cout << "Quel nombre de colones de matrice 1 ?: " ;
cin >> c1;
cout << "Quel nombre de lignes de matrice 2 ?: " ;
cin >> l2;
cout << "Quel nombre de colones de matrice 2 ?: ";
cin >> c2;
} while ( l2 != c1 );
double M1[l1][c1];
double M2[l2][c2];
cout << "" << endl;
cout << " MATRICE 1 " << endl;
cout << "" << endl;
for (int i(1) ; i <= l1 ; ++i){
for (int j(1) ; j <= c1 ; ++j){
cout << "M1[" << i << "," << j << "]=";
cin >> M1[i][j];
}
}
cout << "--------------------" << endl;
cout << "" << endl;
cout << " MATRICE 2 " << endl;
cout << "" << endl;
for (int k(1) ; k <= l2 ; ++k){
for (int l(1) ; l <= c2 ; ++l){
cout << "M2[" << k << "," << l << "]=";
cin >> M2[k][l];
}
}
cout << "" << endl;
cout << "RESULTAT : " << endl;
cout << "--------------------" << endl;
for ( int x(1) ; x<=l1 ; ++x){
for (int r(1) ; r<=c2 ; ++r){
int z(0);
for (int y(1) ; y<=c1 ; ++y){
z=z+M1[x][y]*M2[y][r];
}
cout << z << " ";
if (r==c2){
cout << "" << endl;
}
}
}
return 0;
}
ps: Python est quand meme beaucoup plus agréable et facile!
Dernière modification par Golgup (11-11-2011 00:07:12)
Hors ligne
#2 09-12-2011 21:49:36
- mseeker
- Membre
- Inscription : 27-10-2011
- Messages : 5
Re : [C++] Multiplication de deux matrices
Bonsoir,
Une proposition pour éviter l'imbrication de boucles :
int x = 1,y=1,r=1;
int z=0;
while (x <= l1){
if(y<=c1){
z+=M1[x][y]*M2[y][r];
y++;
}
else {
y=1;
cout << z << " ";
z=0;
if(r==c2){
cout << endl;
r=1;
x++;
}
else
r++;
}
}
(pas à l'abri d'une erreur)
C'est pas tellement plus élégant mais le principe est utile lorsqu'on travaille sur un certain nombre de dimensions.
Remarques :
En vérifiant que le produit matriciel est bien défini tu pourrais éviter de demander à la fois le nombre de colonnes de M1 et le nombre de lignes de M2, tout en t'assurant que le produit a un sens.
Pour la multiplication de grandes matrices il existe l'aglorithme de Strassen qui est bien plus efficace.
Je ne me suis pas mis à jour niveau C++, mais le type vector de la STL existait déjà avant C++11.
Hors ligne
#3 05-05-2012 13:45:13
- ngatilio
- Membre
- Inscription : 18-09-2010
- Messages : 14
Re : [C++] Multiplication de deux matrices
C'est bien beau les codes mais faut gérer:
--> la saisie (vous pouvez utiliser les MoveTo (j+x.pos(),i+y.pos()));
--> gérer les erreurs . vous pouvez créer un classe ErreurMatrice
//ou le constructeur sera :
ErreurMatrice::ErreurMatrice(Int i)
{
Switch(i)
{
Case 0 : const char* message0 ="Ecrire le message d'erreur ici ";
printf("%s",message);
Break;
Case 1: instructions 2;
Break;
etc...
}
Int main()
{
if( booleen)
{intructions;}
Else Throw ErreurMatrice(0);
etc...
}
//pour gerer les erreurs( de taille , de mauvaise saisie , d'un caractere non reconnu etc...)
juste pour ameliorer vos codes
@++
Hors ligne
Pages : 1







