How to rewrite this program by using various functions. Program to find the sum and difference of two dynamic matrices. It uses pointer to pointer instead of two dimensional matrix for dynamic size of the matrix
#include<stdio.h>
#include<stdlib.h>
int main()
{ int i, n, j, **a, **b, **c, **d;
printf("Input the size of matrix [if n x n, input n]: ");
scanf("%d", &n);
printf("\nInput matrix A\n");
a=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
if(!*a)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(a+i)+j));
printf("%d", *(*(a+i)+j));
}
}
printf("\nInput matrix B\n");
b=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(b+i)=(int*)calloc(n, sizeof(int));
if(!*b)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(b+i)+j));
printf("%d", *(*(b+i)+j));
}
}
c=(int**)calloc(n, sizeof(int*));
d=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(c+i)=(int*)calloc(n, sizeof(int));
*(d+i)=(int*)calloc(n, sizeof(int));
if(!(*c&&*d))
{ printf("Insufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{ *(*(c+i)+j)=(*(*(a+i)+j))+(*(*(b+i)+j));
*(*(d+i)+j)=(*(*(a+i)+j))-(*(*(b+i)+j));
printf("\nA[%d][%d]= %d B[%d][%d]= %d \t Sum= %d \t Diff= %d", i, j, *(*(a+i)+j), i, j, *(*(b+i)+j), *(*(c+i)+j), *(*(d+i)+j));
}
}
free(c);
free(d);
free(a);
free(b);
return 0;
}
I have written this code but, it is not working correctly
#include<stdio.h>
#include<stdlib.h>
void input(int n, int **a);
void operation(int n, int **a, int **b);
int main()
{ int i, n, j, **a, **b, **c, **d;
printf("Input the size of matrix [if n x n, input n]: ");
scanf("%d", &n);
printf("\nInput matrix A\n");
input(n, a);
printf("\nInput matrix B\n");
input(n, b);
operation(n, a, b);
free(c);
free(d);
free(a);
free(b);
return 0;
}
void input(int n, int **a)
{ int i, j;
a=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
if(!*a)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(a+i)+j));
printf("%d", *(*(a+i)+j));
}
}
}
void operation(int n, int**a, int**b)
{ int i, j, **c, **d;
a=(int**)calloc(n, sizeof(int*));
b=(int**)calloc(n, sizeof(int*));
c=(int**)calloc(n, sizeof(int*));
d=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
*(b+i)=(int*)calloc(n, sizeof(int));
*(c+i)=(int*)calloc(n, sizeof(int));
*(d+i)=(int*)calloc(n, sizeof(int));
if(!(*a&&*b&&*c&&*d))
{ printf("Insufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{ *(*(c+i)+j)=(*(*(a+i)+j))+(*(*(b+i)+j));
*(*(d+i)+j)=(*(*(a+i)+j))-(*(*(b+i)+j));
printf("\nA[%d][%d]= %d B[%d][%d]= %d \t Sum= %d \t Diff= %d", i, j, *(*(a+i)+j), i, j, *(*(b+i)+j), *(*(c+i)+j), *(*(d+i)+j));
}
}
free(c);
free(d);
}