//manipulation des matrices carres //on utilise des pointeurs pour parcourrir les matrices //et l'allocation dynamique de la memoire pour creer les matrices #include #include #include using namespace std; //la fonction calcule la trsnsposee d'une matrice carre //le resultat est enregistre dans un nouvelle matrice //la fonction renvoie un pointeur qui "point" sur l'adress memoire //du premier element de la matrice resultat double *transMat(double *mat, int n); //la fonction calcule le produit de deux matrices double *prodMat(double *mat1, double *mat2, int n); //la fonction affiche sur l'ecran une matrice n*n void imprimeMat(double *mat, int n); int main() { int n; cout << "Quelle est la taille de la matrice carree ? "; cin >> n; //creation dynamique de la matrice carree n*n //un tableau bidimensionnel n*n est un tableau unidimensionnel //compose de n tableaux unidimensionnels de dimension n //donc il faut alluer de l'espace memoire suffisant pour stocker n*n elements double *mat1 = new double[n*n]; double *mat2 = new double[n*n]; //remplissage de les matrices cout << "Entrez les " << n*n << " elementes de la premiere matrice ligne par colonne :" << endl; for (int i=0; i> mat1[i*n+j]; } cout << "et de la deuxieme matrice ligne par colonne :" << endl; for (int i=0; i> mat2[i*n+j]; } cout << "La premiere matrice est :" << endl; imprimeMat(mat1,n); cout << "et sa trasposee" << endl; double *matT1 = transMat(mat1,n); imprimeMat(matT1,n); cout << "La deuxieme matrice est :" << endl; imprimeMat(mat2,n); cout << "et sa trasposee" << endl; double *matT2 = transMat(mat2,n); imprimeMat(matT2,n); cout << "Le produit M1*M2 est :" << endl; double *matR = prodMat(mat1,mat2,n); imprimeMat(matR,n); //on libere la memoire allouee dynamiquement, //c'est a dire on detruit les pointeurs crees avec "new" delete[] mat1; delete[] mat2; delete[] matT1; delete[] matT2; delete[] matR; return 0; } //calcul du produit de deux matrices //le deux matrices sont passees par pointeur et //la fonction renvoie un pointuer sur la matrice - produit /*le produit ligne par colonne peut etre aussi calcule comme produit ligne par ligne en utilisant la transposee de la deuxieme matrice */ double *prodMat(double *mat1, double *mat2, int n) { double *resultat = new double[n*n]; double *auxMat1 = 0; double *newMat2 = transMat(mat2,n); double *auxMat2 = 0; for (int i=0; i