1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| #include <stdio.h>
#include <math.h>
#define CMAX 10
#define VMAX 10
int tabc[2] ,NOPTIMAL,P1,P2,XERR;
double TS[CMAX][VMAX];
FILE *ficbin;
int tabc[2];
void Data() {
double R1,R2;
char R;
int I,J;
printf("\n SIMPLEX METHOD\n\n");
printf(" MAXIMIZE (Y/N) ? "); scanf("%c", &R);
if ((ficbin=fopen("C:/Users/soumaya aafif/Desktop/tt.txt","r+")) != NULL)
{
fread(tabc,sizeof(int),2,ficbin);
// db fach hatbghi tkhdim blast tabc[0] main li sayfty liya hatweli hiya tabc[0] et tabc[1] et tabc[1]
//nafss lhaja hatdiriii les variables loukhrin .
if (R == 'Y' || R=='y')
R1 = 1.0;
else
R1 = -1.0;
printf("\n INPUT COEFFICIENTS OF THE FUNCTION:\n");
for (J = 1; J<= tabc[0]; J++) {
// printf("###################################################");
fscanf(ficbin,"%d",tabc);
TS[1][J+1] = R2 * R1;
}
TS[1][1] = R2 * R1;
for (I = 1; I<= tabc[1]; I++) {
printf("\n CONSTRAINT #%d:\n", I);
for (J = 1; J<= tabc[0]; J++) {
fread(&R2,sizeof(double),1,ficbin);
TS[I + 1][J + 1] = -R2;
}
fread(&TS[I+1][1],sizeof(double),1,ficbin);
}}
printf("\n\n RESULTS:\n\n");
for(J=1; J<= tabc[0]; J++) TS[0][J+1] = J;
for(I= tabc[0]+1; I<= tabc[0]+ tabc[1]; I++) TS[I- tabc[0]+1][0] = I;
}
//void Pivot();
//void Formula();
//void Optimize();
void Simplex() {
e10: Pivot();
Formula();
Optimize();
if (NOPTIMAL == 1) goto e10;
}
void Pivot() {
double RAP,V,XMAX;
int I,J;
XMAX = 0.0;
for(J=2; J<= tabc[0]+1; J++) {
if (TS[1][J] > 0.0 && TS[1][J] > XMAX) {
XMAX = TS[1][J];
P2 = J;
}
}
RAP = 999999.0;
for (I=2; I<= tabc[1]+1; I++) {
if (TS[I][P2] >= 0.0) goto e10;
V = fabs(TS[I][1] / TS[I][P2]);
if (V < RAP) {
RAP = V;
P1 = I;
}
e10:;}
V = TS[0][P2]; TS[0][P2] = TS[P1][0]; TS[P1][0] = V;
}
void Formula() {;
int I,J;
for (I=1; I<= tabc[1]+1; I++) {
if (I == P1) goto e70;
for (J=1; J<= tabc[0]+1; J++) {
if (J == P2) goto e60;
TS[I][J] -= TS[P1][J] * TS[I][P2] / TS[P1][P2];
e60:;}
e70:;}
TS[P1][P2] = 1.0 / TS[P1][P2];
for (J=1; J<= tabc[0]+1; J++) {
if (J == P2) goto e100;
TS[P1][J] *= fabs(TS[P1][P2]);
e100:;}
for (I=1; I<= tabc[1]+1; I++) {
if (I == P1) goto e110;
TS[I][P2] *= TS[P1][P2];
e110:;}
}
void Optimize() {
int I,J;
for (I=2; I<= tabc[1]+1; I++)
if (TS[I][1] < 0.0) XERR = 1;
NOPTIMAL = 0;
if (XERR == 1) return;
for (J=2; J<= tabc[0]+1; J++)
if (TS[1][J] > 0.0) NOPTIMAL = 1;
}
void Results() {
int I,J;
if (XERR == 0) goto e30;
printf(" NO SOLUTION.\n"); goto e100;
e30:for (I=1; I<= tabc[0]; I++)
for (J=2; J<= tabc[1]+1; J++) {
if (TS[J][0] != 1.0*I) goto e70;
printf(" VARIABLE #%d: %f\n", I, TS[J][1]);
e70: ;}
printf("\n ECONOMIC FU tabc[1]TION: %f\n", TS[1][1]);
e100:printf("\n");
}
void main() {
Data();
Simplex();
Results();
} |
Partager