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