/*
Programmer : JAGADISH KUMAR SETHI
Description :
*/
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
int minck(float **m,int c,int &op)
{
int i,p=0,ck=0;
float a;
a=m[0][0];
for(int i=0;i<c-1;i++)
{
printf("\nbefMaxim +ve=%.2f\t%.2f\t%d",m[0][p],a,p);
if(m[0][i]>0)
{ ck=1;
if(a<m[0][i])
{
a=m[0][i];
p=i;
}
}
printf("\nMaxim +ve=%.2f\t%.2f\t%d",m[0][p],a,p);
}
if(ck==0)
{
op=1;
return -1;
}
printf("\nfunc opti =%d\n",op);
printf("\n\n\n\nEntering vector=%.2f",m[0][p]);
return p;
}
int maxck(float **m,int c,int &op)
{
int i,p=0,ck=0;
float a;
a=m[0][0];
for(int i=0;i<c;i++)
{
if(m[0][i]<0)
{
printf("\nDEban %f %f",m[0][i],a);
ck=1;
if(a>m[0][i])
{
a=m[0][i];
p=i;
}
}
}
if(ck==0)
{
op=1;
return -1;
}else
{
op=0;
}
printf("\nfunc opti =%d\n",op);
printf("\n\n\n\nEntering vector=%.2f",m[0][p]);
return p;
}
int getdepart(float **m,int r,int c,int y)
{
int i,p;
float ratio,a;
a=100000;
for(i=1;i<r;i++)
{
if(m[i][y]==0.0)
{
ratio=0.0;
}else
{
ratio=m[i][c-1]/m[i][y];
printf("\n\n\n\nratio=%.2f",ratio);
}
if(a>ratio&&ratio>0.0)
{
a=ratio;
p=i;
}
}
//printf("\n\n\n\nPivot Element%.2f",m[p][y]);
return p;
}
void display(float **m,int r,int c)
{
int i,j;
printf("\nThe value in the matrix ::\n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%.1f ",m[i][j]);
}printf("\n");
}
}
void enter(float **m,int r,int c)
{
int i,j;
printf("\nEnter the Z equation ::");
for(j=0;j<c-r;j++)
{
printf("\nEnter:");
scanf("%f",&m[0][j]);
m[0][j]=m[0][j]*(-1);
}
for(j=c-r;j<c;j++)
{
m[0][j]=0.0;
}
printf("\nEnter the Constraint equation ::");
for(i=1;i<r;i++)
{
for(j=0;j<c-r;j++)
{
scanf("%f",&m[i][j]);
}
for(j=c-r;j<c-1;j++)
{
if(j==i+c-r-1)
m[i][j]=1;
else
m[i][j]=0;
}
scanf("%f",&m[i][c-1]);
}
}
void iterate(float **m,int r,int c,int x,int y)
{
int i,j;
float piv;
piv=m[x][y];
for(j=0;j<c;j++)
{
m[x][j]=m[x][j]/piv;
}
for(i=0;i<r;i++)
{
piv=m[i][y];
printf("\nJagan %.3f\t%.3f\n",piv,m[i][y]);
for(j=0;j<c;j++)
{
if(i==x)
{
continue;
}else
{
m[i][j]=m[i][j]-piv*m[x][j];
}
}
}
}
int main()
{
int r,c,i,j,max,pivot,op=0,x,y;
float **m;
char **z,**col;
printf("\nEnter the no of variables::");
scanf("%d",&c);
printf("\nEnter the no of constraints ::");
scanf("%d",&r);
c=c+r+1;
r++;
m=(float **)malloc(sizeof(float*)*r);
for(i=0;i<r;i++)
{
*(m+i)=(float *)malloc(sizeof(float)*c);
}
printf("\nEnter 1 for max,0 for min");
scanf("%d",&max);
enter(m,r,c);
display(m,r,c);
do
{
if(max==1)
{
y=maxck(m,c,op);
if(op==0)
{
x=getdepart(m,r,c,y);
printf("Pivot Element %.2f",m[x][y]);
iterate(m,r,c,x,y);
}
}else
if(max==0)
{
y=minck(m,c,op);
printf("\nmain opti =%d\n",op);
if(op==0)
{
x=getdepart(m,r,c,y);
printf("Pivot Element %.2f",m[x][y]);
iterate(m,r,c,x,y);
}
}
display(m,r,c);
system("pause");
}while(op!=1);
system("pause");
}