Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
- Accueil
- » Programmation
- » [C++] Multiplication de deux matrices
- » Répondre
Répondre
Résumé de la discussion (messages les plus récents en premier)
- ngatilio
- 05-05-2012 13:45:13
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
@++
- mseeker
- 09-12-2011 21:49:36
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.
- Golgup
- 10-11-2011 20:46:25
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!







