Mat PTR
Mat PTR
2521
//MATRIX OPERAITIONS WITH POINTERS
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define lim 10
//Function Delcarations
void add(int *a[lim], int *b[lim]);
void sub(int *a[lim], int *b[lim]);
void matmul(int *a[lim], int *b[lim]);
void display(int *op[lim],int,int,int flag,char);
void read(int *a[lim],char ch);
void transpose(int *a[lim],int,int,char ch);
void saddle(int *a[lim],int,int,char ch);
void main()
{
//Function Definitions:-
if(ca!=rb)
printf("\n\nMultiplication not possible...");
else
{
for(i=0;i<=ra;i++)
c[i]=(int*)malloc(cb*sizeof(int));
for(k=0;k<ra;k++)
{
for(i=0;i<cb;i++)
{
sum=0;
for(j=0;j<rb;j++)
sum += *(a[k]+j) * (*(b[j]+i));
*(c[k]+i)=sum;
}
}
printf("\n\nA x B => ");
display(a,ra,ca,2,'x');
display(b,rb,cb,2,'=');
display(c,ra,cb,1,'-');
}
}
void display(int *op[lim],int r,int c,int flag,char ch)
{
int i,j,x,y,x1,y1,temp,temp2;
x1=wherex();
y1=wherey();
upl
gotoxy(x1,y1+1);
for(i=0;i<(r+r-1);i++)
{
line
gotoxy(x1,y1+i+2);
}
lowl;
x1++;
y1++;
gotoxy(x1,y1);
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%-5d",*(op[i]+j));
}
x=wherex();
gotoxy(x1,y1+(2*i+2));
}
gotoxy(x-3,y1-1);
upr
gotoxy(x-3,y1);
for(i=0;i<(r+r-1);i++)
{
line
gotoxy(x-3,y1+i+1);
}
lowr;
if(flag==1)
printf("\n");
else if(flag==0)
gotoxy(x,y1-1);
else
{
gotoxy(x,y1+(r/2)+1);
printf("%c",ch);
gotoxy(x+2,y1-1);
}
}
void add(int *a[lim],int *b[lim])
{
int i,j;
int *c[lim];
if((ra!=rb)||(ca!=cb))
printf("\n\nAddition Not possible...\n");
else
{
for(i=0;i<=ra;i++)
c[i]=(int*)malloc(ca*sizeof(int));
for(i=0;i<ra;i++)
{
for(j=0;j<ca;j++)
*(c[i]+j)=(*(a[i]+j))+(*(b[i]+j));
}
printf("\n\nA + B => ");
display(a,ra,ca,2,'+');
display(b,rb,cb,2,'=');
display(c,ra,ca,1,'-');
}
}
for(i=0;i<ra;i++)
{
for(j=0;j<ca;j++)
*(c[i]+j)=(*(a[i]+j))-(*(b[i]+j));
}
printf("\n\nA - B => ");
display(a,ra,ca,2,'-');
display(b,rb,cb,2,'=');
display(c,ra,ca,1,'-');
}
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
*(t[j]+i)= (*(a[i]+j));
}
printf("\n\n%c' => ",ch);
display(t,c,r,1,'-');
}
void saddle(int *a[lim],int ra,int ca,char ch)
{
int i,j,k,mx[lim][3],mn[lim],temp,m,n,r,c;
//max in rows - min
for(i=0;i<ra;i++)
{
temp=*(a[i]+0);
for(j=1;j<ca;j++)
{
if(*(a[i]+j)>temp)
{
temp=*(a[i]+j);
mx[i][2]=j;
}
}
mx[i][1]=temp;
}
temp=mx[0][1];
r=0;
c=mx[0][2];
for(i=1;i<ra;i++)
{
if(temp>mx[i][1])
{
temp=mx[i][1];
r=i;
c=mx[i][2];
}
}
m=temp;
//min in col-max
for(i=0;i<ca;i++)
{
temp=*(a[0]+i);
for(j=1;j<ra;j++)
{
if(temp>(*(a[j]+i)))
temp=(*(a[j]+i));
}
mn[i]=temp;
}
temp=mn[0];
for(i=1;i<ca;i++)
{
if(temp<mn[i])
temp=mn[i];
}
n=temp;
if(m==n)
printf("\n\nSADDLE POINT of %c : %d\n\nPOSITION : (%d,
%d)\n",ch,m,r+1,c+1);
else
printf("\n\nNo Saddle Point.");
}
OUTPUT:
4 5 6
7 8 9
0 1 0
0 0 1
A B
┌ ┐ ┌ ┐
│1 2 3│ │1 0 0│
│ │ │ │
│4 5 6│ │0 1 0│
│ │ │ │
│7 8 9│ │0 0 1│
└ ┘ └ ┘
Matrix Operations:
Press
1 => Addition
2 => Subtraction
3 => Multiplication
4 => Transpose of Matrix A
5 => Transpose of Matrix B
6 => Saddle Point of Matrix A
7 => Saddle Point of Matrix B
0 => Exit
Your Choice : 1
A + B => ┌ ┐ ┌ ┐ ┌ ┐
│1 2 3│ │1 0 0│ │2 2 3 │
│ │ │ │ │ │
│4 5 6│ + │0 1 0│ = │4 6 6 │
│ │ │ │ │ │
│7 8 9│ │0 0 1│ │7 8 10│
└ ┘ └ ┘ └ ┘
A - B => ┌ ┐ ┌ ┐ ┌ ┐
│1 2 3│ │1 0 0│ │0 2 3│
│ │ │ │ │ │
│4 5 6│ - │0 1 0│ = │4 4 6│
│ │ │ │ │ │
│7 8 9│ │0 0 1│ │7 8 8│
└ ┘ └ ┘ └ ┘
Matrix Operations:
Press
1 => Addition
2 => Subtraction
3 => Multiplication
4 => Transpose of Matrix A
5 => Transpose of Matrix B
6 => Saddle Point of Matrix A
7 => Saddle Point of Matrix B
0 => Exit
Your Choice : 3
A x B => ┌ ┐ ┌ ┐ ┌ ┐
│1 2 3│ │1 0 0│ │1 2 3│
│ │ │ │ │ │
│4 5 6│ x │0 1 0│ = │4 5 6│
│ │ │ │ │ │
│7 8 9│ │0 0 1│ │7 8 9│
└ ┘ └ ┘ └ ┘
A' => ┌ ┐
│1 4 7│
│ │
│2 5 8│
│ │
│3 6 9│
└ ┘
Matrix Operations:
Press
1 => Addition
2 => Subtraction
3 => Multiplication
4 => Transpose of Matrix A
5 => Transpose of Matrix B
6 => Saddle Point of Matrix A
7 => Saddle Point of Matrix B
0 => Exit
Your Choice : 6
SADDLE POINT of A : 3
POSITION : (1,3)