- #pragma hdrstop
-
- #include <conio.h>
- #include <iomanip.h>
- #include <iostream.h>
- #include <stdlib.h>
-
- //---------------------------------------------------------------------------
-
- int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB);
-
- #pragma argsused
- int main(int argc, char* argv[])
- {
- int lignes1;
- int colonnes1 ;
- int lignes2 ;
- int colonnes2 ;
- int **m1 ;
- int **m2 ;
- int **m3 ;
- int i, j ;
-
- do
- {
- cout << "1ere matrice : " << endl ;
- cout << "combien de lignes ? " ;
- cin >> lignes1 ;
-
- cout << endl << "combien de colonnes ? " ;
- cin >> colonnes1 ;
-
- cout << endl << "2eme matrice : " << endl ;
- cout << "combien de lignes ? " ;
- cin >> lignes2 ;
-
- cout << endl << "combien de colonnes ? " ;
- cin >> colonnes2 ;
-
- if (colonnes1!= lignes2)
- cout << "erreur, les matrices ne peuvent pas etre multipliees!!! " << endl ;
-
- }
- while (colonnes1 != lignes2) ;
-
- // si les matrices sont ok : colonnes1 == lignes2
-
- m1 = (int**)malloc(lignes1 * sizeof(int*)) ;
- m2 = (int**)malloc(lignes2 * sizeof(int*)) ;
-
- if (!m1)
- {
- free(m1) ;
- cout << endl << "erreur d'alloc 1ere matrice!!! " ;
- return NULL ;
- }
-
- for (i=0 ; i<lignes1 ; i++)
- {
- m1[i] = (int*)malloc(colonnes1 * sizeof(int)) ;
-
- if (!m1[i])
- {
- free(m1) ;
- cout << endl << "erreur d'alloc lignes!!! " ;
- return NULL ;
- }
- }
-
- if (!m2)
- {
- free(m2) ;
- cout << endl << "erreur d'alloc 1ere matrice!!! " ;
- return NULL ;
- }
-
- for (i=0 ; i<lignes2 ; i++)
- {
- m2[i] = (int*)malloc(colonnes2 * sizeof(int)) ;
-
- if (!m2[i])
- {
- free(m2) ;
- cout << endl << "erreur d'alloc lignes!!! " ;
- return NULL ;
- }
- }
-
-
- cout << endl << "1ere matrice : " << endl ;
-
- for (i=0 ; i<lignes1 ; i++)
- {
- for (j=0 ; j<colonnes1 ; j++)
- {
- cout << endl << "nombre en place " << i << " ; " << j << " ? " ;
- cin >> m1[i][j] ;
- }
- }
-
- cout << endl ;
-
- // affichage 1ere matrice
- for (i=0 ; i<lignes1 ; i++)
- {
- for (j=0 ; j<colonnes1 ; j++)
- {
- cout << setw(3) << m1[i][j] ;
- }
- cout << endl ;
- }
-
- cout << endl << "2eme matrice : " << endl ;
-
- for (i=0 ; i<lignes2 ; i++)
- {
- for (j=0 ; j<colonnes2 ; j++)
- {
- cout << "nombre en place " << i << " ; " << j << " ? " ;
- cin >> m2[i][j] ;
- }
- }
-
- cout << endl ;
-
- // affichage 2eme matrice
- for (i=0 ; i<lignes2 ; i++)
- {
- for (j=0 ; j<colonnes2 ; j++)
- cout << setw(3) << m2[i][j] ;
- cout << endl ;
- }
-
- // multiplication des matrices
-
- m3 = multiplieMatrice(m1, colonnes1, lignes1, m2, colonnes2, lignes2) ;
-
- cout << endl << "Multiplication des matrices......" << endl ;
- cout << endl << "Matrice Resultat : " << endl ;
-
- for (i=0 ; i<lignes1 ; i++)
- {
- for (j=0 ; j<colonnes2 ; j++)
- cout << setw(3) << m3[i][j] ;
- cout << endl ;
- }
-
- free(m1) ;
- free(m2) ;
- free(m3) ;
-
- cout << endl << endl << "appuyer sur une touche pour quitter..." ;
- getch () ;
- return 0 ;
-
- }
- //---------------------------------------------------------------------------
-
- // fonction multiplication des 2 matrices
-
- int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB)
- {
- int **matriceR ;
- int i, j, k ;
-
- matriceR = (int**)malloc(lignesA * sizeof(int*)) ;
-
- if (!matriceR)
- {
- free(matriceR) ;
- cout << endl << "erreur d'alloc matrice reponse !!! " ;
- return NULL ;
- }
-
- for (i=0 ; i<lignesA ; i++)
- {
- matriceR[i] = (int*)malloc(colonnesB * sizeof(int)) ;
-
- if (!matriceR[i])
- {
- free(matriceR) ;
- cout << endl << "erreur d'alloc lignes!!! " ;
- return NULL ;
- }
- }
-
- for (i=0 ; i<lignesA; i++)
- for (j=0 ; j<colonnesB; j++)
- {
- matriceR[i][j] = 0 ;
-
- for (k=0 ; k<colonnesA ; k++)
- matriceR[i][j] += matriceA[i][k] * matriceB[k][j] ;
- }
- return matriceR ;
- }
#pragma hdrstop
#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB);
#pragma argsused
int main(int argc, char* argv[])
{
int lignes1;
int colonnes1 ;
int lignes2 ;
int colonnes2 ;
int **m1 ;
int **m2 ;
int **m3 ;
int i, j ;
do
{
cout << "1ere matrice : " << endl ;
cout << "combien de lignes ? " ;
cin >> lignes1 ;
cout << endl << "combien de colonnes ? " ;
cin >> colonnes1 ;
cout << endl << "2eme matrice : " << endl ;
cout << "combien de lignes ? " ;
cin >> lignes2 ;
cout << endl << "combien de colonnes ? " ;
cin >> colonnes2 ;
if (colonnes1!= lignes2)
cout << "erreur, les matrices ne peuvent pas etre multipliees!!! " << endl ;
}
while (colonnes1 != lignes2) ;
// si les matrices sont ok : colonnes1 == lignes2
m1 = (int**)malloc(lignes1 * sizeof(int*)) ;
m2 = (int**)malloc(lignes2 * sizeof(int*)) ;
if (!m1)
{
free(m1) ;
cout << endl << "erreur d'alloc 1ere matrice!!! " ;
return NULL ;
}
for (i=0 ; i<lignes1 ; i++)
{
m1[i] = (int*)malloc(colonnes1 * sizeof(int)) ;
if (!m1[i])
{
free(m1) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}
if (!m2)
{
free(m2) ;
cout << endl << "erreur d'alloc 1ere matrice!!! " ;
return NULL ;
}
for (i=0 ; i<lignes2 ; i++)
{
m2[i] = (int*)malloc(colonnes2 * sizeof(int)) ;
if (!m2[i])
{
free(m2) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}
cout << endl << "1ere matrice : " << endl ;
for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes1 ; j++)
{
cout << endl << "nombre en place " << i << " ; " << j << " ? " ;
cin >> m1[i][j] ;
}
}
cout << endl ;
// affichage 1ere matrice
for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes1 ; j++)
{
cout << setw(3) << m1[i][j] ;
}
cout << endl ;
}
cout << endl << "2eme matrice : " << endl ;
for (i=0 ; i<lignes2 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
{
cout << "nombre en place " << i << " ; " << j << " ? " ;
cin >> m2[i][j] ;
}
}
cout << endl ;
// affichage 2eme matrice
for (i=0 ; i<lignes2 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
cout << setw(3) << m2[i][j] ;
cout << endl ;
}
// multiplication des matrices
m3 = multiplieMatrice(m1, colonnes1, lignes1, m2, colonnes2, lignes2) ;
cout << endl << "Multiplication des matrices......" << endl ;
cout << endl << "Matrice Resultat : " << endl ;
for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
cout << setw(3) << m3[i][j] ;
cout << endl ;
}
free(m1) ;
free(m2) ;
free(m3) ;
cout << endl << endl << "appuyer sur une touche pour quitter..." ;
getch () ;
return 0 ;
}
//---------------------------------------------------------------------------
// fonction multiplication des 2 matrices
int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB)
{
int **matriceR ;
int i, j, k ;
matriceR = (int**)malloc(lignesA * sizeof(int*)) ;
if (!matriceR)
{
free(matriceR) ;
cout << endl << "erreur d'alloc matrice reponse !!! " ;
return NULL ;
}
for (i=0 ; i<lignesA ; i++)
{
matriceR[i] = (int*)malloc(colonnesB * sizeof(int)) ;
if (!matriceR[i])
{
free(matriceR) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}
for (i=0 ; i<lignesA; i++)
for (j=0 ; j<colonnesB; j++)
{
matriceR[i][j] = 0 ;
for (k=0 ; k<colonnesA ; k++)
matriceR[i][j] += matriceA[i][k] * matriceB[k][j] ;
}
return matriceR ;
}