Методы отсечения

getch();

exit(1);

}

fread (mi, sizeof(int), n, fp1);

qsort (mi, n, sizeof(int), sort);

fclose(fp1);

remove («hell1»);

for (fl=0; fl<m+1; fl++)

for (i=0; i<n; i++)

*(mc+fl*n+i)=0;

fl=m;

do {fread(&c, sizeof (struct koef), 1, fp);

if (! feof(fp))

{if (c.ind)

{for (i=1; i<n; i++)

if (c.ind==*(mi+i))

{*(mc+fl*n+i)=*(mc+fl*

n+i)+c.coef;

break;

}

}

else{*(mc+fl*n)=c.coef;

if (fl==m) fl=0;

else fl++;

}

}

} while (! feof(fp));

}

void simplex:iterac()

{int i, j, fl, fl1, k, l;

float s, min;

for (i=1; i<n; i++)

{if(*(mc+m*n+i)!=0)

{fl=1;

for (j=0; j<m; j++)

if(*(mc+j*n+i)!=0) {fl=0;

break;

}

if(fl) {printf («Не все перменные целевой функции входят в ограничения»);

getch();

exit(1);

}

}

}

basis=(int *) malloc (sizeof(int)*m);

if(! basis) {printf («Ошибка выделения памяти»);

getch();

exit(1);

}

for (i=0; i<m; i++)

*(basis+i)=0;

i=0;

do

{fl=1;

fl1=0;

for (j=1; j<n; j++)

if(*(mc+i*n+j)>0) {fl=0;

break;

}

if(fl) {printf («Переменные должны быть положительны»);

getch();

exit(1);

}

s=*(mc+i*n+j);

for (l=0; l<n; l++)

*(mc+i*n+l)=*(mc+i*n+l)/s;

for (l=0; l<=m; l++)

if (l!=i) {s=*(mc+l*n+j);

for (k=0; k<n; k++)

*(mc+n*l+k)=*(mc+l*n+k) – s*(*(mc+i*n+k));

}

for (l=0; l<m; l++)

{s=0;

for (k=1; k<n; k++)

s=s+fabs(*(mc+l*n+k));

if (s==0) {if(*(mc+l*n)==0) printf («Уравнения линейно зависимы»);

else printf («Система ограничений несовместна»);

getch();

exit(1);

}

}

*(basis+i)=j;

for (l=0; l<m; l++)

if(*(mc+l*n)<0)

for (k=0; k<n; k++)

*(mc+l*n+k)= – (*(mc+l*n+k));

for (l=0; l<m; l++)

if((*(basis+l)==0)||(*(mc+l*n+(*(basis+l)))<0)) {i=l; fl1=1; break;}

} while(fl1);

printsimtable(0);

do {min=100000;

fl=0;

for (l=1; l<n; l++)

{if(*(mc+m*n+l)>0) {fl=1;

fl1=1;

for (k=0; k<m; k++)

if(*(mc+k*n+l)>0)

{fl1=0;

s=*(mc+k*n)/(*(mc+k*n+l));

if (s<min) {min=s;

i=k;

j=l;

}

}

if(fl1) {printf («Решения нет»);

getch();

exit(1);

}

break;

}

}

if(fl) {s=*(mc+i*n+j);

for (l=0; l<n; l++)

*(mc+i*n+l)=*(mc+i*n+l)/s;

for (l=0; l<=m; l++)

if (l!=i) {s=*(mc+l*n+j);

for (k=0; k<n; k++)

*(mc+l*n+k)=*(mc+l*n+k) – s*(*(mc+i*n+k));

}

printsimtable(0);

*(basis+i)=j;

}

} while(fl);

}

void simplex:resultat()

{int i, j, fl;

if (flag==-1) printf («Минимальное значение функции цели равно % 8.2f\n»,*(mc+m*n));

else printf («Максимальное значение функции цели равно % 8.2f\n», – (*(mc+m*n)));

printf («Оптимальный план:»);

for (i=1; i<n; i++)

{fl=0;

for (j=0; j<m; j++)

if(*(mi+i)==*(basis+j)) {fl=1;

break;

}

if(fl) printf («x % 02d=%-5.2f\n»,*(mi+i),*(mc+j*n));

else printf («x % 02d=0 \n»,*(mi+i));

printf(«»);

}

}

void simplex:printsimtable (int g)

{int i, j, k, v=g, raz;

clrscr();

raz=n-1–6*(v+1);

if((raz<=0)&&(abs(raz)<6)) raz=6+raz;

else if (raz>0) raz=6;

else return;

for (j=0; j<3; j++)

{if (j!=1) {printf(«* * *»);

for (i=0; i<raz; i++)

printf(» *»);

if (raz<6) printf («\n»);

}

else {if(*(mc+m*n)>=0) printf («* *%8.2f *»,*(mc+m*n));

else printf («* * -%-7.2f *», – (*(mc+m*n)));

for (i=1; i<=raz; i++)

if(*(mc+n*k+6*v+i)>=0) printf («%8.2f *»,*(mc+n*k+6*v+i));

else printf («-%-7.2f *», – (*(mc+n*k+6*v+i)));

if (raz<6) printf («\n»);

}

}

for (i=0; i<20+raz*10; i++)

printf(«*»);

getch();

rewind(fp);

simplex ob (no, fp, f);

gomori();

ob.iterac();

ob.resultat();

}

Страница:  1  2  3  4  5  6  7  8 


Другие рефераты на тему «Математика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы