Calcul matriciel en C++ - Multiplication de deux matrices

Produit multiplication de deux matrice en C++


#include<stdio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
typedef struct matrice
{
int ligne;
int colonne;
int** data;
}matrice;
struct matrice creer_matrice(int ligne, int colonne){
struct matrice m;
m.ligne = ligne;
m.colonne = colonne;
m.data = (int**)malloc(m.ligne*sizeof(int *));
for(int i = 0; i< m.ligne; ++i){
// initialiser les cases à 0 avec calloc
m.data[i] = (int *)calloc(m.colonne,sizeof(int));
}
return m;
}

void afficher_matrice(matrice M){
for(int i = 0; i < M.ligne; i++) {
for(int j = 0; j < M.colonne; j++) {
cout << M.data[i][j] ;
cout << "\t";
}
//retour à la ligne
cout << "\n";
}
cout << "\n";
}

struct matrice produit(matrice A, matrice B)
{
matrice C = creer_matrice(A.ligne, B.colonne);
for(int I = 0; I < A.ligne; I++)
for(int J = 0; J < B.colonne; J++)
{
C.data[I][J] = 0;
for(int K = 0; K < A.colonne; K++)
{
C.data[I][J] += A.data[I][K] * B.data[K][J];
}
}
return C;
}

int main(int argc, char *argv[])
{
/*
matrice A
*/
matrice A = creer_matrice(4,3);
srand(time(NULL));
for(int i=0; i<A.ligne ;i++)
for(int j=0; j<A.colonne; j++)
//Générer des nombre aléatoires entre 0 et 20 et soustraire 10
//pour avoir des nombres négatives
//ex : si rand génere 74 alors 74-100 = -36
A.data[i][j] =rand()%20-10;
afficher_matrice(A);

/*
2ème matrice
*/
matrice B = creer_matrice(3,5);
srand(time(NULL));
for(int i=0; i<B.ligne ;i++)
for(int j=0; j<B.colonne; j++)
//Générer des nombre aléatoires entre 0 et 20 et soustraire 10
//pour avoir des nombres négatives
//ex : si rand génere 74 alors 74-100 = -36
B.data[i][j] =rand()%20-10;
afficher_matrice(B);

//produit
//matrice C = produit(A,B);
//afficher_matrice(C);
afficher_matrice(puissance(A));
system("pause");
}