Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2015, 16:29   #1
Polina B.
 
Регистрация: 08.02.2015
Сообщений: 3
По умолчанию Симплекс-метод

Уважаемые программисты,очень нужна помощь.
!Помогите пожалуйста с программой.Дана задача:

Для изготовления изделий двух видов склад может отпустить металла не более 150 кг, причем на изделие первого вида расходуется пять килограмм, а на изделие второго вида три килограмма. Требуется спланировать производство так, чтобы была обеспечена наибольшая прибыль, если изделий первого вида требуется изготовить не более 20 штук, а изделий второго вида не более 25 штук, причем одно изделие первого вида стоит 7 руб., а изделие второго вида стоит 8 руб.

И написать программу для решения этой задачи симплекс методом.

5x1 + 3x2 +x3 =150

x1 +x4 =20

x2 +x5 =25

x1, x2, x3, x4, x5≥0

F(x)= 7x1 +8x2 +x3 +x4 +x5

Задача решена.
Программа тоже есть,но с ней небольшие проблемы.

#include "iostream"
#include "locale"

using namespace std;

int main()

{ int a,b,stl,str,l=0;
float tab[10][10],min=1000,c[10],tab1[10][10],x=1000;

setlocale(LC_ALL, "russian");

cout<<"Введите количество строк и столбцов: "<<endl;
cin>>a>>b;


//заполнение начальной матрицы
for (int i=0;i<a;i++)
{
for (int j=0;j<b;j++){
cout<<"Введите ["<<i+1<<"]["<<j+1<<"] элемент таблицы: "<<endl;
cin>>(tab[i][j]);

}
}

cout<<"первая итерация"<<endl;
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
cout<<tab[i][j]<<" ";
}
cout<<endl;
}

//проверка на оптимальность
while(1){
l=0;

for (int i=0;i<b;i++){
if (tab[a-1][i]<0) {l=l+1;}
}

if (l==0){
for (int j=1;j<b-a+1;j++){
int kol=0,nol=0,ind;
for (int i=0;i<a-1;i++){
if (tab[i][j]==1) {
kol++;ind=i;
}
else nol++;
}

if ((kol==1) && (a-nol==2)) cout<<"x="<<j<<"="<<tab[ind][0]<<endl;
} cout<<"Решение оптимально"<<endl;


//ВЫВОД МАТРИЦЫ
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
cout<<tab[i][j]<< "\t" ;
} cout<<endl;
}

cout<<"F(x)="<<tab[a-1][0];

for (int j=0;j<a-1;j++){
if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl];
else c[j]=1000;
}

for (int j=0;j<a-1;j++){
if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl];
else c[j]=1000;
}


//пересчетновойтаблицы
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
tab1[i][j]=tab[i][j]-(tab[i][stl]*tab[str][j]/tab[str][stl]);
tab1[i][stl]=0;
tab1[str][stl]=1;
tab1[str][j]=tab[str][j]/tab[str][stl];
}
}

//переприсвоенние матриц и вывод их на экран
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
tab[i][j]=tab1[i][j];
}
}
system("pause");
return 0;
}

x=1000;
//поискключевогостолбца

for (int i=1;i<b;i++){
if (tab[a-1][i]<=x){
x=tab[a-1][i];
stl=i;
}
}

//поискключевойстроки

for (int j=0;j<a-1;j++){
if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl];
else c[j]=1000;
}

cout<<endl<<"Массив для нахождения ключевой строки"<<endl;
for (int j=0;j<a-1;j++) cout<<c[j]<<" ";
cout<<endl;

for (int i=0;i<(a-1);i++)
if (c[i]<min){
min=c[i];
str=i;
}

cout<<endl<<"Kлючевой столбец и ключевая строка "<<stl<<" "<<str<<" "<<endl<<endl;
cout<<"Ключевой элемент: "<<tab[str][stl]<<endl<<endl;

//пересчетновойтаблицы
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
tab1[i][j]=tab[i][j]-(tab[i][stl]*tab[str][j]/tab[str][stl]);
tab1[i][stl]=0;
tab1[str][stl]=1;
tab1[str][j]=tab[str][j]/tab[str][stl];
}
}

//переприсвоенние матриц и вывод их на экран
for (int i=0;i<a;i++){
for (int j=0;j<b;j++){
tab[i][j]=tab1[i][j];
}
}


}
system("pause");
return 0;
}

Помогите пожалуйста,как добавить вторую итерацию вот так вот:
Вторая итерация

75 5 0 1 0 -3

20 1 0 0 1 0

25 0 1 0 0 1

200-7 0 0 0 8

Вот чтобы она стояла до этого

Массив для нахождения ключевой строки

15 20 1000

Ключевой столбец и ключевая строка

1 0

Ключевой элемент:5
Polina B. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симплекс-метод Polina B. Помощь студентам 0 09.02.2015 20:51
Симплекс метод HUGO+GO Общие вопросы по Java, Java SE, Kotlin 0 18.05.2014 10:53
Симплекс метод kobe8241 Помощь студентам 0 01.12.2011 15:14
симплекс метод ASPknopixx Помощь студентам 1 16.05.2011 22:08
симплекс метод Антонина@com Microsoft Office Excel 1 13.04.2011 18:27