Matrix operations in c language
Simple matrix operations in c language with Source Code for performing Matrix Operations in C and C++ Language . Operations on matrix which have to perform on matrix are as follows :
- Input Operations
- Display Operations
- Addition Operations
- Difference Operations
- Multiplications Operations
- Magic Square Operations
- Saddle Point Operations
- Transpose of Matrix
Above matrix operations in c language operations on matrix are divided into two categories as …..
- Without Pointers
- With Pointers
Matrix operations in c language Program Code
#include
#include
#define max 25
void input_p(int*,int*,int*);
void display_p(int*,int,int);
void add_p(int(*)[max],int(*)[max],int(*)[max],int,int);
void difference_p(int(*)[max],int(*)[max],int(*)[max],int,int);
void mul_p(int[][max],int[][max],int[][max],int,int,int);
int ms_p(int[][max],int);
int sp_p(int [][max],int,int);
void transpose_p(int a[][max],int m);
void input(int[][max],int*,int*);
void display(int[][max],int,int);
void add(int[][max],int[][max],int[][max],int,int);
void difference(int[][max],int[][max],int[][max],int,int);
void mul(int[][max],int[][max],int[][max],int,int,int);
int ms(int[][max],int);
int sp(int [][max],int,int);
void transpose(int a[][max],int m);
void withoutp(int [][max],int[][max],int*,int*,int*,int*);
void withp(int [][max],int[][max],int*,int*,int*,int*);
void main()
{
int a[max][max],b[max][max],c[max][max],r1,c1,r2,c2,ch;
r1=r2=c1=c2=0;
do
{
clrscr();
flushall();
printf("\n\n\n\t\t>>>>---------- MAIN MENU ----------<<<<<\n\n");
printf("\n\t1\tWITH POINTERS\n");
printf("\n\t2\tWITHOUT POINTERS\n");
printf("\n\t3\tEXIT");
printf("\n\n\n\tENTER YOUR CHOICE\t");
scanf("%c",&ch);
switch(ch)
{
case '1':
withp(a,b,&r1,&c1,&r2,&c2);
break;
case '2':
withoutp(a,b,&r1,&c1,&r2,&c2);
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch!='3');
getch();
} //end of main
/******************************************************************
WITHP FUNCTION
********************************************************************/
void withp(int a[][max],int b[][max],int* r1,int* c1,int* r2,int* c2)
{
int c[max][max],m;
char ch,ch1;
do
{
flushall();
clrscr();
printf("\n\n\t===>>>\tWITHOUT POINTERS MENU\t<<<===\n");
printf("\n\t1\tINPUT\n");
printf("\t2\tDISPLAY\n");
printf("\t3\tADDITION\n");
printf("\t4\tDIFFERENCE\n");
printf("\t5\tMULTIPLICATION\n");
printf("\t6\tMAGIC SQUARE\n");
printf("\t7\tSADDLE POINT\n");
printf("\t8\tTRANSPOSE\n");
printf("\t9\tRETURN TO MAIN MENU\n");
printf("\n\tENTER YOUR CHOICE\t:\t");
scanf("%c",&ch);
switch(ch)
{
case '1':
do
{
flushall();
clrscr();
printf("\n\t>>>>---- INPUT MENU ----<<<<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE\t:\t");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
input_p(&a[0][0],r1,c1);
break;
case '2':
input_p(&b[0][0],r2,c2);
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '2':
do
{
clrscr();
flushall();
printf("\n\n\t>---- DISPLAY MENU ----<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
display_p(&a[0][0],*r1,*c1);
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
display_p(&b[0][0],*r2,*c2);
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '3':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r1==*r2 && *c1==*c2)
{
add_p(a,b,c,*r1,*c1);
printf("ADDITION HAS BEEN PERFORMED >>>>>\n");
display_p(&c[0][0],*r1,*c1);
}
else
{
printf("\n\n\n\t!!! CAN'T ADD !!!!\n");
}
getch();
break;
case '4':
if(*r1==*r2 && *c1==*c2)
{
do
{
clrscr();
flushall();
printf("\n\n\t>>>>---- DIFFERENCE MENU -----<<<<\n");
printf("\n\t1\tMATRIX A - MATRIX B\n");
printf("\t2\tMATRIX B - MATRIX A\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
difference_p(a,b,c,*r1,*c1);
printf("\n\n!!! SUBSTRACTION COMPLETE !!!\n");
display_p(&c[0][0],*r1,*c1);
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
difference_p(b,a,c,*r1,*c1);
printf("\n\n!!! SUBSTRACTION COMPLETE !!!\n");
display_p(&c[0][0],*r1,*c1);
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
}//end of if statement
else
printf("\n\n!!! SUBSTRACTION NOT POSSIBLE !!!");
getch();
break;
case '5':
do
{
if(*r2==0 || *c2==0 ||*c1==0 ||*r1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
clrscr();
flushall();
printf("\t\t\t\tMULTIPLICATION MENU\n");
printf("\t1\tMATRIX A * MATRIX B\n");
printf("\t2\tMATRIX B * MATRIX A\n");
printf("\t3\tRETURN\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r2==*c1)
{
mul_p(a,b,c,*r1,*r2,*c2);
printf("\n\t\t!!! MULTIPLICATION COMPLETE !!!\n");
display_p(&c[0][0],*r1,*c2);
}
else
printf("\n\n\t!!! MULTIPLICATION NOT POSSIBLE !!!\n");
getch();
break;
case '2':
if(*r1==*c2)
{
mul_p(b,a,c,*r2,*r1,*c1);
printf("\n\t\t!!! MULTIPLICATION COMPLETE !!!\n");
display_p(&c[0][0],*r2,*c1);
break;
}
else
printf("\n\n!!! MULTIPLICATION NOT POSSIBLE !!!\n");
getch();
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '6':
do
{
clrscr();
flushall();
printf("\n\n\t>>>>---- MAGIC SQUARE MENU ----<<<<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE\t");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r1!=*c1)
printf("\n\n\t!!! NOT MAGIC SQUARE !!!\n");
else
{
if(ms_p(a,*r1)==0)
printf("\n\n\tTHE GIVEN MATRIX IS NOT A MAGIC SQUARE");
else
printf("\n\n\tTHE GIVEN MATRIX IS A MAGIC SQUARE\n");
}
getch();
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r2 != *c2)
printf("\n\t!!! THE GIVEN MATRIX IS NOT A MGIC SQUARE !!!\n");
else
{
if(ms_p(b,*r2)==0)
printf("\n\t!!! THE GIVEN MATRIX IS NOT A MAGIC SQUARE !!!");
else
printf("\n\t!!! THE GIVEN MATRIX IS A MAGIC SQUARE !!!\n");
}
getch();
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '7':
do
{
clrscr();
flushall();
printf("\n\n\t>--- SADDLE POINT MENU ---<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRERURN\n");
printf("\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
m=sp_p(a,*r1,*c1);
if(m==0)
printf("\n\n\t !!!! NO SADDLE POINTS !!!!");
else
printf("\n\n\tTOTAL %d SADDLE POINTS R PRESENT",m);
getch();
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
m=sp_p(b,*r2,*c2);
if(m==0)
printf("\n\n\t !!!! NO SADDLE POINTS !!!!");
else
printf("\n\n\tTOTAL %d SADDLE POINTS R PRESENT",m);
getch();
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '8':
do
{
clrscr();
flushall();
printf("\n\n\t>---- TRANSPOSE MENU ----<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tEXIT\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r1>*c1)
transpose_p(a,*r1);
else
transpose_p(a,*c1);
m=*r1;
*r1=*c1;
*c1=m;
printf("\n\n\tMATRIX HAS BEEN TRANSPOSED\n");
display_p(&a[0][0],*r1,*c1);
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r2>*c2)
transpose_p(b,*r2);
else
transpose_p(b,*c2);
m=*r2;
*r2=*c2;
*c2=*r2;
printf("\n\n\tMATRIX HAS BEEN TRANSPOSED\n");
display_p(&b[0][0],*r2,*c2);
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '9':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch!='9');
}
/***************************************************************
INPUT_P FUNCTION
***************************************************************/
void input_p(int*a,int *r,int *c)
{
int i,j;
char st[max];
printf("NO. OF ROW \t");
scanf("%d",r);
printf("NO. OF COLUMN \t");
scanf("%d",c);
printf("\nENTER THE MATRIX \n");
for(i=0;i<*r;i++)
for(j=0;j<*c;j++)
{
scanf("%s",st);
if(valid(st)==1)
*(a+ i*(max) +j)=atoi(st);
else
{
printf("\n\t!!! ENTER AGAIN !!!!");
j--;
}
}
}
/***************************************************************
DISPLAY_P FUNCTION
***************************************************************/
void display_p(int*a,int r,int c)
{
int i,j;
printf("\n\nTHE MATRIX IS\n");
for(i=0;i<r;i++) <br=""> {
printf("\n\t");
for(j=0;j<c;j++) <br=""> {
printf("%-5d",*(a+ i*max +j) );
}
}
getch();
}
/***************************************************************
ADD_P FUNCTION
***************************************************************/
void add_p(int (*a)[max],int (*b)[max],int(*c)[max],int r,int c1)
{
int i,j;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c1;j++) <br=""> {
*(c[i]+j) = *(a[i]+j) + *(b[i]+j);
}
}
}
/***************************************************************
DIFFERENCE_P FUNCTION
***************************************************************/
void difference_p(int (*a)[max],int(*b)[max],int (*c)[max],int r,int c1)
{
int i,j;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c1;j++) <br=""> *(c[i]+j)= *(a[i]+j) - *(b[i]+j);
}
}
/***************************************************************
MUL_P FUNCTION
***************************************************************/
void mul_p(int (*a)[max],int (*b)[max],int (*c)[max],int r1,int r2,int c2)
{
int i,j,k;
for(i=0;i<r1;++i) <br=""> {
for(j=0;j<c2;++j) <br=""> {
c[i][j]=0;
for(k=0;k<r2;++k) <br=""> *(c[i]+j) += *(a[i]+k) * ( *(b[k]+j) );
}
}
}
/***************************************************************
MS_P FUNCTION
***************************************************************/
int ms_p(int (*a)[max],int r)
{
int s1=0,i,j,s2=0,s3=0;
for(i=0,j=r-1;i<r;i++,j--) <br=""> {
s1+=*(a[i]+i);
s2+=*(a[i]+j);
}
if(s1!=s2)
return 0;
for(i=0;i<r;i++) <br=""> {
s2=0;
s3=0;
for(j=0;j<r;j++) <br=""> {
s2+=*(a[i]+j);
s3+=*(a[j]+i);
}
if(s1!=s2 || s3!=s1)
return 0;
}
return 1;
}
/***************************************************************
SP_P FUNCTION
***************************************************************/
int sp_p(int (*a)[max],int r,int c)
{
int i,j,k,m=0;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c;j++) <br=""> {
for(k=0;k<c;k++) <br=""> if( *(a[i]+j) > *(a[i]+k) )
break;
if(k==c)
{
for(k=0;k<r;k++) <br=""> if( *(a[i]+j) < *(a[k]+j) )
break;
if(k==r)
{
printf("\n\tSADDLE POINT AT (%d,%d) AND IS %d ",i+1,j+1,*(a[i]+j));
m++;
}
}
}//end of 2nd for
}
return m;
}
/***************************************************************
TRANSPOSE_P FUNCTION
***************************************************************/
void transpose_p(int (*a)[max],int m)
{
int i,j,temp;
for(i=0;i<m;i++) <br=""> {
for(j=0;j<i;j++) <br=""> {
temp=*(a[i]+j);
*(a[i]+j)=*(a[j]+i);
*(a[j]+i)=temp;
}
}
}
/********************************************************************
WITOUTP FUNCTION
*********************************************************************/
void withoutp(int a[][max],int b[][max],int* r1,int* c1,int* r2,int* c2)
{
int c[max][max],m;
char ch,ch1;
do
{
flushall();
clrscr();
printf("\n\n\t===>>>\tWITHOUT POINTERS MENU\t<<<===\n");
printf("\n\t1\tINPUT\n");
printf("\t2\tDISPLAY\n");
printf("\t3\tADDITION\n");
printf("\t4\tDIFFERENCE\n");
printf("\t5\tMULTIPLICATION\n");
printf("\t6\tMAGIC SQUARE\n");
printf("\t7\tSADDLE POINT\n");
printf("\t8\tTRANSPOSE\n");
printf("\t9\tRETURN TO MAIN MENU\n");
printf("\n\tENTER YOUR CHOICE\t:\t");
scanf("%c",&ch);
switch(ch)
{
case '1':
do
{
flushall();
clrscr();
printf("\n\t>>>>---- INPUT MENU ----<<<<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE\t:\t");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
input(a,r1,c1);
break;
case '2':
input(b,r2,c2);
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '2':
do
{
clrscr();
flushall();
printf("\n\n\t>---- DISPLAY MENU ----<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
display(a,*r1,*c1);
break;
case '2':
display(b,*r2,*c2);
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '3':
if(*r1==*r2 && *c1==*c2)
{
add(a,b,c,*r1,*c1);
printf("ADDITION HAS BEEN PERFORMED >>>>>\n");
display(c,*r1,*c1);
}
else
{
printf("\n\n\n\t!!! CAN'T ADD !!!!\n");
}
getch();
break;
case '4':
if(*r1==*r2 && *c1==*c2)
{
do
{
clrscr();
flushall();
printf("\n\n\t>>>>---- DIFFERENCE MENU -----<<<<\n");
printf("\n\t1\tMATRIX A - MATRIX B\n");
printf("\t2\tMATRIX B - MATRIX A\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
difference(a,b,c,*r1,*c1);
printf("\n\n!!! SUBSTRACTION COMPLETE !!!\n");
display(c,*r1,*c1);
break;
case '2':
difference(b,a,c,*r1,*c1);
printf("\n\n!!! SUBSTRACTION COMPLETE !!!\n");
display(c,*r1,*c1);
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
}//end of if statement
else
printf("\n\n!!! SUBSTRACTION NOT POSSIBLE !!!");
getch();
break;
case '5':
do
{
if(*r2==0 || *c2==0 ||*c1==0 ||r1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
clrscr();
flushall();
printf("\t\t\t\tMULTIPLICATION MENU\n");
printf("\t1\tMATRIX A * MATRIX B\n");
printf("\t2\tMATRIX B * MATRIX A\n");
printf("\t3\tRETURN\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r2==*c1)
{
mul(a,b,c,*r1,*r2,*c2);
printf("\n\t\t!!! MULTIPLICATION COMPLETE !!!\n");
display(c,*r1,*c2);
}
else
printf("\n\n\t!!! MULTIPLICATION NOT POSSIBLE !!!\n");
getch();
break;
case '2':
if(*r1==*c2)
{
mul(b,a,c,*r2,*r1,*c1);
printf("\n\t\t!!! MULTIPLICATION COMPLETE !!!\n");
display(c,*r2,*c1);
break;
}
else
printf("\n\n!!! MULTIPLICATION NOT POSSIBLE !!!\n");
getch();
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '6':
do
{
clrscr();
flushall();
printf("\n\n\t>>>>---- MAGIC SQUARE MENU ----<<<<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRETURN\n");
printf("\tENTER YOUR CHOICE\t");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r1!=*c1)
printf("\n\n\t!!! NOT MAGIC SQUARE !!!\n");
else
{
if(ms(a,*r1)==0)
printf("\n\n\tTHE GIVEN MATRIX IS NOT A MAGIC SQUARE");
else
printf("\n\n\tTHE GIVEN MATRIX IS A MAGIC SQUARE\n");
}
getch();
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r2 != *c2)
printf("\n\t!!! THE GIVEN MATRIX IS NOT A MGIC SQUARE !!!\n");
else
{
if(ms(b,*r2)==0)
printf("\n\t!!! THE GIVEN MATRIX IS NOT A MAGIC SQUARE !!!");
else
printf("\n\t!!! THE GIVEN MATRIX IS A MAGIC SQUARE !!!\n");
}
getch();
break;
case '3':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch1!='3');
break;
case '7':
do
{
clrscr();
flushall();
printf("\n\n\t>--- SADDLE POINT MENU ---<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tRERURN\n");
printf("\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
m=sp(a,*r1,*c1);
if(m==0)
printf("\n\n\t !!!! NO SADDLE POINTS !!!!");
else
printf("\n\n\tTOTAL %d SADDLE POINTS R PRESENT",m);
getch();
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
m=sp(b,*r2,*c2);
if(m==0)
printf("\n\n\t !!!! NO SADDLE POINTS !!!!");
else
printf("\n\n\tTOTAL %d SADDLE POINTS R PRESENT",m);
getch();
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '8':
do
{
clrscr();
flushall();
printf("\n\n>---- TRANSPOSE MENU ----<\n");
printf("\t1\tMATRIX A\n");
printf("\t2\tMATRIX B\n");
printf("\t3\tEXIT\n");
printf("\n\tENTER YOUR CHOICE:");
scanf("%c",&ch1);
switch(ch1)
{
case '1':
if(*r1==0 || *c1==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r1>*c1)
transpose(a,*r1);
else
transpose(a,*c1);
m=*r1;
*r1=*c1;
*c1=m;
printf("\n\n\tMATRIX HAS BEEN TRANSPOSED\n");
display(a,*r1,*c1);
break;
case '2':
if(*r2==0 || *c2==0)
{
printf("\n\n\t!!! FIRST ENTER THE MATRIX !!!");
getch();
break;
}
if(*r2>*c2)
transpose(a,*r2);
else
transpose(a,*c2);
m=*r2;
*r2=*c2;
*c2=*r2;
printf("\n\n\tMATRIX HAS BEEN TRANSPOSED\n");
display(a,*r2,*c2);
break;
case '3':
break;
default:
printf("\n\n\n\t!!! INVALID CHOICE !!! ");
getch();
}
}while(ch1!='3');
break;
case '9':
break;
default:
printf("\n\n\t!!! INVALID CHOICE !!!");
getch();
}
}while(ch!='9');
}
/***************************************************************
INPUT FUNCTION
***************************************************************/
void input(int a[][max],int *r,int *c)
{
int i,j;
char st[max];
printf("NO. OF ROW \t");
scanf("%d",r);
printf("NO. OF COLUMN \t");
scanf("%d",c);
printf("\nENTER THE MATRIX \n");
for(i=0;i<*r;i++)
for(j=0;j<*c;j++)
{
scanf("%s",st);
if(valid(st)==1)
a[i][j]=atoi(st);
else
{
printf("\n\t!!! ENTER AGAIN !!!!");
j--;
}
}
}
/***************************************************************
VALID FUNCTION
***************************************************************/
int valid(char st[])
{
int i=0;
for(;st[i]!=NULL;i++)
{
if(st[i]<48 ||st[i]>58)
return 0;
}
return 1;
}
/***************************************************************
DISPLAY FUNCTION
***************************************************************/
void display(int a[][max],int r,int c)
{
int i,j;
printf("\n\nTHE MATRIX IS\n");
for(i=0;i<r;i++) <br=""> {
printf("\n\t");
for(j=0;j<c;j++) <br=""> {
printf("%-5d",a[i][j]);
}
}
getch();
}
/***************************************************************
ADD FUNCTION
***************************************************************/
void add(int a[][max],int b[][max],int c[][max],int r,int c1)
{
int i,j;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c1;j++) <br=""> {
c[i][j]=a[i][j] + b[i][j];
}
}
}
/***************************************************************
DIFFERENCE FUNCTION
***************************************************************/
void difference(int a[][max],int b[][max],int c[][max],int r,int c1)
{
int i,j;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c1;j++) <br=""> {
c[i][j]=a[i][j] - b[i][j];
}
}
}
/***************************************************************
MUL FUNCTION
***************************************************************/
void mul(int a[][max],int b[][max],int c[][max],int r1,int r2,int c2)
{
int i,j,k;
for(i=0;i<r1;++i) <br=""> {
for(j=0;j<c2;++j) <br=""> {
c[i][j]=0;
for(k=0;k<r2;++k) <br=""> c[i][j]+=a[i][k] * b[k][j];
}
}
}
/***************************************************************
MS FUNCTION
***************************************************************/
int ms(int a[][max],int r)
{
int s1=0,i,j,s2=0,s3=0;
for(i=0,j=r-1;i<r;i++,j--) <br=""> {
s1+=a[i][i];
s2+=a[i][j];
}
if(s1!=s2)
return 0;
for(i=0;i<r;i++) <br=""> {
s2=0;
s3=0;
for(j=0;j<r;j++) <br=""> {
s2+=a[i][j];
s3+=a[j][i];
}
if(s1!=s2 || s3!=s1)
return 0;
}
return 1;
}
/***************************************************************
SP FUNCTION
***************************************************************/
int sp(int a[][max],int r,int c)
{
int i,j,k,m=0;
for(i=0;i<r;i++) <br=""> {
for(j=0;j<c;j++) <br=""> {
for(k=0;k<c;k++) <br=""> if(a[i][j] > a[i][k])
break;
if(k==c)
{
for(k=0;k<r;k++) <br=""> if(a[i][j] < a[k][j])
break;
if(k==r)
{
printf("\n\tSADDLE POINT AT (%d,%d) AND IS %d ",i+1,j+1,a[i][j]);
m++;
}
}
}//end of 2nd for
}
return m;
}
/***************************************************************
TRANSPOSE FUNCTION
***************************************************************/
void transpose(int a[][max],int m)
{
int i,j,temp;
for(i=0;i<m;i++) <br=""> {
for(j=0;j<i;j++) <br=""> {
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}



