programming-examples/c++/Others/Matrix Multiplication.cpp

147 lines
3.0 KiB
C++
Raw Normal View History

2019-11-15 12:59:38 +01:00
Matrix Multiplication
void main()
{
int row1=0,
col1=1,
row2=0,
col2=0,
**matrix1,
**matrix2,
**result;
clrscr();
printf(" Enter number of row for first matrix ");
scanf("%d",&row1);
while (col1!=row2)
{
printf(" Enter number of column for first matrix ");
scanf("%d",&col1);
printf(" Enter number of row for second matrix ");
scanf("%d",&row2);
if (col1!=row2)
{
clrscr();
printf("Column number of first matrix must be same as the row number of second matrix");
}
}
printf(" Enter number of column for second matrix ");
scanf("%d",&col2);
matrix1=init(matrix1,row1,col1);
matrix2=init(matrix2,row2,col2);
/* setting values in matrix */
printf("First matrix \n");
set(matrix1,row1,col1);
printf("Second matrix \n");
set(matrix2,row2,col2);
/* printint matrix */
clrscr();
printf(" [ First matrix ]\n");
get(matrix1,row1,col1);
printf(" [ Second matrix ]\n");
get(matrix2,row2,col2);
printf(" [ Multiplication Result ]\n");
result=mul(matrix1,matrix2,row1,col2,col1);
get(result,row1,col2);
printf("\n\t\t Thanks from debmalya jash");
getch();
free(matrix1);
free(matrix2);
fress(result);
} /* end main */
/* to initialize matrix */
int** init(int** arr,int row,int col)
{
int i=0,
j=0;
arr=(int**)malloc(sizeof(int)*row*col);
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
*((arr+i)+j)=(int*)malloc(sizeof(int));
*(*(arr+i)+j)=0;
}
}
return arr;
}
/* to set value in matrix */
int** set(int** arr,int row,int col)
{
int i=0,
j=0,
val=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("Enter value for row %d col %d :",(i+1),(j+1));
scanf("%d",&val);
*(*(arr+i)+j)=val;
}
}
return arr;
}
/* print values of the passed matrix */
void get(int** arr,int row,int col)
{
int i=0,
j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d\t",*(*(arr+i)+j));
}
printf("\n");
}
}
/* mutiply two matrices and return the resultant matrix */
int** mul(int** arr1,int** arr2,int row,int col,int col1)
{
int **result,
i=0,
j=0,
k=0;
result=init(result,row,col);
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
for(k=0;k<col1;k++)
{
printf("%dX%d(%d)",*(*(arr1+i)+k),*(*(arr2+k)+j),(*(*(arr1+i)+k))*(*(*(arr2+k)+j)));
*(*(result+i)+j)+=(*(*(arr1+i)+k))*(*(*(arr2+k)+j));
if (k!=(col1-1))
printf("+");
}
printf("\t");
}
printf("\n");
}
return result;