Code:
#include<stdio.h>
#include <stdlib.h>
void matrix_display(int **A, int row_size1, int col_size1);
void matrix_free(int **A, int row_size1);
int **matrix_alloc(int row_size1, int col_size1);
void matrix_fill(int **A, int row_size1, int col_size1);
void matrix_add( int **A, int **B, int row_size1[], int col_size1[],int,int);
void matrix_multiply( int **A, int **B, int row_size1[], int col_size1[],int,in\
t);
void matrix_transpose( int **A, int row_size1[], int col_size1[], int);
int main(void)
{
int row_size1[5],col_size1[5],flag=1;
int **A = NULL;
int **B = NULL;
int **C = NULL;
int **D = NULL;
int **p1, **p2;
char c,k1,k2;
do {
printf("\ncmd > ");
c = getchar();
if (c == 'A') {
scanf("%d %d", &row_size1[0], &col_size1[0]);
A = matrix_alloc(row_size1[0],col_size1[0]);
matrix_fill(A,row_size1[0],col_size1[0]);
matrix_display(A,row_size1[0],col_size1[0]);
// matrix_free(A,row_size1);
}
if (c == 'B') {
scanf("%d %d", &row_size1[1], &col_size1[1]);
B = matrix_alloc(row_size1[1],col_size1[1]);
matrix_fill(B,row_size1[1],col_size1[1]);
matrix_display(B,row_size1[1],col_size1[1]);
// matrix_free(B,row_size1);
}
if (c == 'C') {
scanf("%d %d", &row_size1[2], &col_size1[2]);
C = matrix_alloc(row_size1[2],col_size1[2]);
matrix_fill(C,row_size1[2],col_size1[2]);
matrix_display(C,row_size1[2],col_size1[2]);
// matrix_free(C,row_size1);
}
if (c == 'D') {
scanf("%d %d", &row_size1[3], &col_size1[3]);
D = matrix_alloc(row_size1[3],col_size1[3]);
matrix_fill(D,row_size1[3],col_size1[3]);
matrix_display(D,row_size1[3],col_size1[3]);
// matrix_free(D,row_size1);
}
int num1, num2;
if ( c == '+'){
scanf(" %c %c", &k1, &k2);
num1= k1-65;
num2=k2-65;
if (k1=='A')
p1 = A;
else
if (k1=='B')
p1= B;
else
if (k1 == 'C')
p1 = C;
else
if (k1=='D')
p1 =D;
if (k2=='A')
p2 = A;
else
if (k2=='B')
p2= B;
else
if (k2 == 'C')
p2 = C;
else
if (k2=='D')
p2 =D;
/* A = A + B */
matrix_add(p1, p2, row_size1, col_size1,num1,num2);
matrix_free(A,row_size1);
matrix_free(B,row_size1);
}
if ( c == '*'){
scanf(" %c %c", &k1, &k2);
printf ("%c %c\n",k1,k2);
num1= k1-65;
num2=k2-65;
if (k1=='A')
p1 = A;
else
if (k1=='B')
p1= B;
else
if (k1 == 'C')
p1 = C;
else
if (k1=='D')
p1 =D;
if (k2=='A')
p2 = A;
else
if (k2=='B')
p2= B;
else
if (k2 == 'C')
p2 = C;
else
if (k2=='D')
p2 =D;
matrix_multiply(p1, p2, row_size1, col_size1,num1,num2);
}
if ( c == '^'){
scanf(" %c", &k1);
printf (" %c\n",k1);
num1= k1-65;
if (k1=='A')
p1 = A;
else
if (k1=='B')
p1= B;
else
if (k1 == 'C')
p1 = C;
else
if (k1=='D')
p1 =D;
matrix_transpose(p1, row_size1, col_size1,num1);
}
if (c == '$') {
flag = 0;
}
}
while (flag == 1);
return 0;
}
void matrix_display(int **A, int row_size1, int col_size1)
{
int i, j;
printf("The required matrix is\n");
for (i = 0; i < row_size1; i++) {
for (j = 0; j < col_size1; j++)
printf("%d ", A[i][j]);
printf("\n");
}
}
void matrix_free(int **A, int row_size1)
{
int i;
for (i = 0; i < row_size1; i++) {
free(A[i]);
}
free(A);
}
int **matrix_alloc(int row_size1, int col_size1)
{
int i;
int **result = malloc(row_size1 * sizeof(int *));
for (i = 0; i < row_size1; i++) {
result[i] = malloc(col_size1 * sizeof(int));
}
return result;
}
void matrix_fill(int **A, int row_size1, int col_size1)
{
int i, j;
printf("Enter matrix of %d rows and %d columns\n", row_size1, col_size1);
for (i = 0; i < row_size1; i++) {
for (j = 0; j < col_size1; j++) {
scanf("%d", &A[i][j]);
}
}
}
void matrix_add( int **A, int **B, int row_size1[], int col_size1[],int x,int y\
)
{
if (row_size1[x]!= row_size1[y]||col_size1[x]!=col_size1[y])
{
fprintf (stderr,"Matrix incompatible for addition\n");
exit (1);
}
int i,j;
for(i=0;i<row_size1[x];i++)
for(j=0;j<col_size1[x];j++)
A[i][j]=A[i][j]+B[i][j];
printf("\n\nThe Sum Of Matrices Is:");
for(i=0;i<row_size1[x];i++){
printf("\n");
for(j=0;j<col_size1[x];j++)
printf("%d ",A[i][j]);
}
}
void matrix_multiply( int **A, int **B, int row_size1[], int col_size1[],int x,\
int y)
{
printf ("\n\n");
int mult[10][10];
int i,j,k;
printf ("lets see");
for(i=0;i<row_size1[x];i++)
{
for(j=0;j<col_size1[y];j++)
{
mult[i][j]=0;
}
}
for(i=0; i<row_size1[x]; i++) {
for(j=0; j<col_size1[y]; j++) {
for(k=0;k<row_size1[y];k++)
{
mult[i][j] = mult[i][j]+ A[i][k]*B[k][j];
//printf("%d\t",mult[i][j]);
}
printf ("%d\t",mult[i][j]);
}
printf("\n");
}
}
void matrix_transpose( int **A, int row_size1[], int col_size1[], int x)
{
printf ("\n\n");
int transpose [10][10];
int i,j;
for( i = 0 ; i < row_size1[x] ; i++ )
{
for( j = 0 ; j < col_size1[x] ; j++ )
{
transpose[j][i] = A[i][j]; //defining the transpose
}
}
printf("Transpose of entered matrix :-\n");
for( i = 0 ; i < col_size1[x] ; i++ ) //changing entries of the for loop t
{
for( j = 0 ; j < row_size1[x] ; j++ )
{
printf("%3d\t",transpose[i][j]);
}
printf("\n");
}
}
dont mind the indenting I am just so excited its working and I can finally show you guys