Manipulation de matrices carrées pour debutants!

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 688 fois - Téléchargée 37 fois

Contenu du snippet

Permet de manipuler des matrices carrées(addition,transposée,produit) Je suis debutant en c++ et je veux juste apporter ma modeste contribution en attendant d'évoluer... Merci

Source / Exemple :


// Programmes de manipulation d'opérations entre matrices carrées

#include<iostream>
using namespace std;

class matrice {
private:
int m,n;
double M[16][16];

public:
matrice(unsigned int,unsigned int);
int getcols() const;           //nbre de lignes;
int getlignes() const;     //nbre de colonnes
void lire();
void ecrire()const;
void setlignescols();
void transposer(matrice T);
void  add_matr(matrice a1,matrice a2);
void  prod_matr(matrice p1,matrice p2);
};
matrice::matrice(unsigned int line=0,unsigned int col=0){
m=line;
n=col;
}

int matrice::getlignes()const {
return m;
}
int matrice::getcols()const {
 return n;}
void matrice::lire(){
	
	for(int i=0;i < getlignes();i++)
	{
		for(int j=0;j < getcols();j++)
		{
		  cout<<	"M(" <<i << "," << j  << ")=";
		    cin>>M[i][j];
		}
	}
}
void matrice::ecrire() const{
	for(int i=0;i < getlignes();i++)
	{
		for(int j=0;j < getcols();j++)
		{
			
		  cout<< M[i][j]<<" ";
		}
		cout<<endl<<endl;
	}

}
void   matrice::add_matr(matrice a1,matrice a2) {
  if(a1.getlignes() != a2.getcols()){ 
    cout<<"somme impossible car matrices incompatibles"; }
  else { 
 
  matrice C(a1.getlignes(),a2.getcols());  
  for( int i=0;i < getlignes();i++)
	{
		for(int j=0;j < getcols();j++)
		
			C.M[i][j]= a1.M[i][j]+ a2.M[i][j];
		
	}
  
   C.ecrire();
  }
}

void  matrice::prod_matr(matrice p1,matrice p2) {
	matrice P(p1.getlignes(),p2.getcols());
	if( p1.getlignes() != p2.getcols() ) 
	{
		cout<<"Matrices incompatibles,operation impossible"<<endl;
	} 
	else {
 for(int i=0;i < getlignes();i++)
	{
		for(int j=0;j < p1.getcols();j++)
		{      
		    P.M[i][j]=0;
		    for(int k=0;k <p2.getcols();k++)
			{
		 P.M[i][j] += p1.M[i][k]*p2.M[k][j] ;
			}
		}
 }
	}
		P.ecrire();
}

void matrice::transposer(matrice a) {
matrice T(a.getlignes(),a.getcols());
	for(int i=0;i < getlignes();++i)
	{
		for(int j=0;j<getcols();++j)
		{
			T.M[i][j]=a.M[j][i];
		}
	}

	T.ecrire();
}

void main() {

matrice a(3,3),b(3,3),s(3,3),t(3,3),p(3,3);
char choix;
cout<<"entrer les elements de la premiere matrice :";cout<<endl;
a.lire();
a.ecrire();
cout<<"entrer les elements de la seconde matrice";cout<<endl;
b.lire();
b.ecrire();
cout<<"entrez votre choix : addition = 1 ,transposee = 2 multiplication = 3 : "; cin>>choix; cout <<endl;

if(choix=='1'){
cout<<"somme des deux matrices precedentes: "<<endl<<endl;
s.add_matr(a,b);
}
else
{
	if(choix=='2'){
cout<<"la transposee de la première matrice est:"<<endl<<endl;
t.transposer(a);
	}
else
{
	if(choix=='3'){
cout<<"produit des matrices" <<endl<<endl;
p.prod_matr(a,b);
	}
else
{ 
cout<<"vous avez choisie une operation non definie :";

}

}
}
}

Conclusion :


On peut bien entendu le modifier pour qu'il puisse calculer des matrices de dimensions m*n quelconques!!!

A voir également

Ajouter un commentaire

Commentaires

wis_soft
Messages postés
2
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
10 octobre 2010
-
Bravo
zbigzo
Messages postés
4
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
19 février 2005
-
tu es vraiment le plus je sais pas moi
pmbala
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008
-
Merci ymca2003,je tiendrais compte de ton conseil,je te remercie.Un jr peut que je serai un vrai Crack (LoL)
ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8 -
Lorsque tu passe tes matrices en paramètres, passe les en référence (const si pas modifiées dans la fct) :

void matrice::add_matr(const matrice& a1, const matrice& a2)
{
}

=> cela évitera de recopier sur la pile les matrices à chaque appel

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.