Методы отсечения
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();
}
Другие рефераты на тему «Математика»:
- Некоторые вопросы геометрии Лобачевского на модели Пуанкаре
- История возникновения и развития методов реконструкции математических моделей динамических систем по порождаемому временному ряду
- Алгебраическая проблема собственных значений
- Пространства Соболева
- Построение эйлерова цикла. Алгоритм Форда и Уоршелла
Поиск рефератов
Последние рефераты раздела
- Анализ надёжности и резервирование технической системы
- Алгоритм решения Диофантовых уравнений
- Алгебраическое доказательство теоремы Пифагора
- Алгоритм муравья
- Векторная алгебра и аналитическая геометрия
- Зарождение и создание теории действительного числа
- Вероятностные процессы и математическая статистика в автоматизированных системах