C-Program to add, subtract or multiply two 2D matrices

//Program to add, subtract or multiply two 2D matrices.
 
#include<malloc.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
 
void main()
{
	int **a, **b, r1, r2, c1, c2, i, j, ch;
	//Function prototypes
	void add(int **, int **, int, int, int, int);
	void sub(int **, int **, int, int, int, int);
	void mul(int **, int **, int, int, int, int);
 
	//Accepting row and column sizes from user
	printf("Enter row and column sizes of Matrix 1 n");
	printf("Row ");
	scanf("%d\n", &r1);
	printf("Column ");
	scanf("%d\n", &c1);
	printf("Enter row and column sizes of Matrix 2 n");
	printf("Row ");
	scanf("%d\n", &r2);
	printf("Column ");
	scanf("%d\n", &c2);
 
	//Allocating memory to the 2D arrays
	a = (int **)malloc(r1*sizeof(int *));
	for (i = 0; i < r1; i++)
		a[i] = (int *)malloc(c1*sizeof(int));
 
	b = (int **)malloc(r2*sizeof(int *));
	for (i = 0; i < r2; i++)
		b[i] = (int *)malloc(c2*sizeof(int));
 
	//Accepting array elements
	printf("Enter elements of Matrix 1n");
 
	for (i = 0; i < r1; i++)
		for (j = 0; j < c1; j++)
			scanf("%d\n", &a[i][j]);
 
	printf("Enter elements of Matrix 2n\n");
 
	for (i = 0; i < r2; i++)
		for (j = 0; j < c2; j++)
			scanf("%d\n", &b[i][j]);
 
	//clrscr();
 
	//Displaying inputted arrays
	printf("Array 1 is : n\n");
 
	for (i = 0; i < r1; i++)
	{
		for (j = 0; j < c1; j++)
			printf("%d \n", a[i][j]);
		printf("n");
	}//end of loop i
 
	printf("Array 2 is : n\n");
 
	for (i = 0; i < r2; i++)
	{
		for (j = 0; j < c2; j++)
			printf("%d \n", b[i][j]);
		printf("n\n");
	}//end of loop i
 
	printf("n\n");
	printf(" MENU n\n");
	printf(" 1.ADDITION n\n");
	printf(" 2.DIFFERENCE n\n");
	printf(" 3.MULTIPLICATION n\n");
	printf(" 4.EXIT n\n");
	printf("n\n");
 
 
	do
	{
		printf("n\n");
		printf("Enter choice n\n");
		scanf("%d", &ch);//Accepting users choice
		switch (ch)//Switching through the different functions according to choice
		{
		case 1:add(a, b, r1, c1, r2, c2);
			break;
		case 2:sub(a, b, r1, c1, r2, c2);
			break;
		case 3:mul(a, b, r1, c1, r2, c2);
			break;
		case 4:printf("Terminating program n\n");
			break;
		default:printf("Wrong choice entered n\n");
		}//end of switch
	}//end of do
	while (ch != 4);
}//end of main
 
void add(int **a, int **b, int r1, int c1, int r2, int c2)
{
	int i, j, temp;
	if (r1 == r2 && c1 == c2)//If row and column sizes of both arrays match
	{
		printf("The summation matrix is :n\n");
		for (i = 0; i < r1; i++)
		{
			for (j = 0; j < c1; j++)
			{
				temp = a[i][j] + b[i][j];
				printf("%d \n", temp);
			}//end of loop j
			printf("n\n");
		}//end of loop i
	}//end of if
	else
		printf("The matrices cannot be added as we have different row and column no.s for the two matrices n");
}//end of add
 
void sub(int **a, int **b, int r1, int c1, int r2, int c2)
{
	int i, j, temp;
	if (r1 == r2 && c1 == c2)//If row and column sizes of both arrays match
	{
		printf("The difference matrix is :n\n");
		for (i = 0; i < r1; i++)
		{
			for (j = 0; j < c1; j++)
			{
				temp = abs(a[i][j] - b[i][j]);
				printf("%d \n", temp);
			}//end of loop j
			printf("n\n");
		}//end of loop i
	}//end of if
	else
		printf("The difference cannot be found as we have different row and column no.s for the two matrices n\n");
}//end of sub
 
void mul(int **a, int **b, int r1, int c1, int r2, int c2)
{
	int i, j, k, sum;
	if (c1 == r2)//if row of 1st and column of 2nd array is equal
	{
		for (i = 0; i < r1; i++)
		{
			for (j = 0; j < c2; j++)
			{
				sum = 0;
				for (k = 0; k < r2; k++)//loop to generate column of 1st and row of 2nd array
					sum = sum + (a[i][k] * b[k][j]);
				printf("%d ", sum);
			}//end of loop j
			printf("n");
		}//end of loop i
	}//end of if
	else
		printf("\nThe matrices could not be multiplied because no. of columns in first matrix is not equal to no of rows in second matrix\n");
}//end of mul

Capture.PNG
Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s