#include <iostream>
#include <stdio.h>
#include <ctime>
#define NUMBER 10000
using namespace std;
double diffclock(clock_t clock1,clock_t clock2)
{
double diffticks=clock1-clock2;
double diffms=(diffticks*10)/CLOCKS_PER_SEC;
return diffms;
}
void getTranspose(int C[4][4], int T[4][4])
{
for (int i=0;i<4;i++)
for (int j=0;j<4;j++)
T[i][j]=C[j][i];
}
void MatrixMultiply_CX(int C[4][4], int X[4][4],int R[4][4])
{
cout << endl;
for (int i=0;i<4;i++)
for (int j=0;j<4;j++) R[i][j]=0;
for (int i=0;i<4;i++)
for (int j=0;j<4;j++)
for (int k=0;k<4;k++)
R[i][j] +=C[i][k]*X[k][j];
}
void MatrixMultiply_RT(int R[4][4], int T[4][4],int D[4][4])
{
cout << endl;
for (int i=0;i<4;i++)
for (int j=0;j<4;j++) D[i][j]=0;
for (int i=0;i<4;i++)
for (int j=0;j<4;j++)
for (int k=0;k<4;k++)
D[i][j] +=R[i][k]*T[k][j];
}
int main()
{
int C[4][4] ={1,1,1,1,2,1,-1,-2,1,-1,-1,1,1,-2,2,-1};
int X[4][4] ={4,8,6,9,7,6,3,11,1,9,8,3,15,5,15,6};
int R[4][4];
int T[4][4];
int D[4][4];
clock_t begin=clock();
getTranspose(C, T);
for (int i=0;i<4;i++) {
for (int j=0;j<4;j++)cout << T[i][j] << " ";
cout << endl;
}
MatrixMultiply_CX(C, X, R);
for(int i = 0; i<4; i++){
for(int j = 0; j<4; j++)cout << R[i][j] << " ";
cout << endl;
}
MatrixMultiply_RT(R, T, D);
for(int i = 0; i<4; i++){
for(int j = 0; j<4; j++) cout << D[i][j] << " ";
cout << endl;
}
clock_t end=clock();
cout<<"Execution time: "<<diffclock(end,begin)<<" ms."<<endl;
system ("PAUSE");
return EXIT_SUCCESS;
}