#define MAX 10
#define RESTRICCION 3
double función[MAX],restricciones[MAX+1][MAX+RESTRICCION];
double independiente[RESTRICCION];
int leeDatos(int*var){
int rest,c,i;
printf(“FUNCION A OPTIMIZAR\nNumero de variables: “);
scanf(“%d”,var);
printf(“\nRecuerda:c1.X1+c2.X2+….cn.Xn=b\n\n”);
for(c=0;c<*var;c++)
printf(“c%d:”,c+1);
scanf(“%|f”,&funcion[c]);
fflush(stdin);
}
printf(“\nNumero de restricciones:”);
scanf(“%d”,&rest);
fflush(stdin);
for(i=0;i<rest;i++)
{
printf (“Restriccion %d\n”,i+1);
for(c=0;c<*var;c++)
{
printf(“c%d:”,c+1);
scanf(“%|f”,&restricciones[i][c]);
fflush(stdin);
Printf8”termino independiente”);
scanf(“%|f”,&independiente[i]);
fflush(stdin);
return rest;
}
int main(void)
int rest,var,ni;
int i,j,k,columna,renglon,count,cuenta;
double maximo =0,menor,aux,mult,temp;
rest=leeDatos(&var);
//crear table inicial simplex
for(i=0;i<rest;i++)
for(j=0;j<rest;j++)
if(i==j)
restricciones[i][var+j]=1;
else
restricciones[i][var+j]=0;
for(i=0;i<rest;i++)
restricciones[i][var+rest]=independiente[i];
for(j=0,j<var;j++)
restrincciones[rest][j]=funcion[j]*-1;
for(j=var;j<rest+var;j++)
restricciones[rest][j]=0;
ni=1;
printf(“\n----------------------------------------------------“);
printf(“\n ITERACION %d”,ni);
printf(“\n------------------------------------------------\n”);
ni++;
for(i=0;i<=rest;i++){
for(j=0;j<=rest+var;j++)
printf(“%.2If\t”,restricciones[i][j]);
printf(“\n”);
//encontrar la variable de decision que entra a la base
// y la de holgura que saldrá de la base
do
{
//encontrar la variable de //decisió n que entrara a la base
maximo=abs(restricciones[rest][0]);
columna=0;
for(j=0;j<rest+var;j++)
{
if(restricciones[rest][j]<0)
{
temp=-1*restricciones[rest][j];
if(maximo<temp)
{
maximo=temp;
columna=j;
}
}
else
continue;
}
count=0;
aux=1e20;
menor =1e20;
for(i=0;i<rest;i++){
if(restricciones[i][columna]>0)
aux=restricciones[i][rest+var]/restricciones[i][columna];
else
count++;
if(menor>aux){
menor=aux;
renglon=i;
}
}
if(count==rest){
printf(“Solucion no acotada”);
exit(1);
}
printf(“\nPivote: %.2If, rengló n %d columna %d”;restricciones[renglon]
[columna],renglon,columna);
//encontrar los coeficientes de la nueva tabla
aux =restricciones [renglon][columna];
for(j=0;j<=(rest+var);j++);
restricciones[renglon][j]=restricciones[renglon][j]/aux;
for(i=0;i<=rest;i++){
if(i==renglon)
continue;
else{
aux=restricciones[i][columna]*-1;
for(k=0;k<=rest+var;k++){
restricciones[i][k]=(aux*restricciones[renglon][k]+
restricciones[i][k];
}
}
}
printf(“\n---------------------------------------------“);
printf(“\n ITERACION %d”,ni);
printd(“\n---------------------------------------\n”);
ni++;
for(i=0;i<=rest;i++){
for(j=0;j<=rest+var,j++)
printf(“ %.2If\t”,restricciones[i][j]);
printf(“\n”);
}
cuenta=0;
for(j=0,j<rest+var;j++)
if(restricciones[rest][j]>=0)
cuenta++;
if(cuenta==rest+var)
break;
} while (cuenta);
printf(“----->”);
getch();
}