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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 14:20   #1
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию Симплекс метод на с++ или на си#!!!!!

Всем Добрый день!
Мне нужно написать программу ,вычисляющую
L = 6 x1 + 5 x2 + 9 x3
при следующих ограничениях
5 x1 + 2x2 + 3 x3<= 25
x1 + 6 x2 + 2 x3 <= 20
4 x1 + 3 x3 <= 18
Помогите,пожалуйста!!!!!!
Нет,не блондинка!!
Аделинкка вне форума Ответить с цитированием
Старый 18.06.2012, 03:59   #2
Аделинкка
Пользователь
 
Аватар для Аделинкка
 
Регистрация: 24.03.2012
Сообщений: 68
По умолчанию

Ураааа)))Я решила))))чудо свершилось))
Код:
#include <iostream>
using namespace std;

int main ()
{
 int n, k, st,sv ;
 int i = 0, j = 0;
 double **mas;

 setlocale (LC_CTYPE, "rus");

 cout << "Введите количесво строк массива(к-во у-й): ";
 cin >> st; //Число строк
 n=st+1;

 cout <<"Введите количесво столбцов массива(к-во х): ";
 cin >>sv; //Число столбцов
 k=sv+n;

 mas = new double*[n]; //Выделение памяти под n-строк

 for(i = 0; i < n; i++)
   {
	 mas[i] = new double[k]; //Выделение памяти для каждой строки по k-столбцов 
   }

 for(i = 0; i < n; i++)
	{
		if (i<n-1)	  
		  cout <<"Введите коэффициенты(значения базисных переменных,свободные члены) "<<i+1<<" -го ур-ия"<<endl;
	    else 
	      cout <<"Введите целевую функцию с ОТРИЦАТЕЛЬНЫМ ЗНАКОМ: "<<endl;  
        for(j = 0; j < k; j++)
          {
		    cout<< "mas["<< i<< "][" <<j <<"]="; //Ввод массива 
            cin>> mas[i][j];
          } 
     }

 //вывод массива
cout<<endl;
cout<<endl<<"***********************************"<<endl;
cout<<" Таблица: "<<endl;
int min;
  for(i = 0; i < n; i++)
    {	  
	  for(j = 0; j < k; j++)
        {          
          cout<< " "<<mas[i][j]<<" ";
	    }
	  cout<<" "<<endl;
    }
   cout<<endl<<"***********************************"<<endl;  
   
   int w=0;
   w=sv+1;
   
   //определяем оптимальность решения
int kpol=0;
 for (j = 0; j < k; j++)
	{
		if (mas[n-1][j]>0)
			kpol++;	
		 }
// cout<<"kpol="<<kpol<<"\n";если в последней строчке 4 положительных числа,то мы нашли решение
	cout<<"целевая функция равняется"<<mas[n-1][k-1]<<"\n";
 
		while (kpol<w)   
		{
			kpol=0;

  // поиск минимального
min = 0;
  for (j = 1; j < sv; j++)
    if (mas[n-1][j] < mas[n-1][min]) min = j; 
  cout << " этот столбец ведущий "<<mas[n-1][min] << endl;
double t;

t=mas[n-1][min];

// поиск столбца
cout<<endl<<"***********************************"<<endl;
int myn=0;
double r=0,z=0; 
z=(mas[myn][k-1])/(mas[myn][min]);
  for (i= 1; i < st; i++)
	  {
		  r=  (mas[i][k-1])/(mas[i][min]);
      if (z>r) myn=i;
	 }
  cout << "эта строка ведущая "<<mas[myn][k-1]<< endl;
  cout<<"строка"<<myn;
  cout<<endl<<"***********************************"<<"\n";
  cout <<"коэффицент"<<mas[myn][min]<<endl;

//деление на выбранный элемент
double l=0;
l=mas[myn][min];//для деления на коэффициент
for (j = 0; j < k; j++)
	{	  
		mas[myn][j]=mas[myn][j]/l; 
    }
cout<<endl;

 //вывод массива
cout<<endl<<"***********************************"<<endl;
 cout<<endl;  
  for(i = 0; i < n; i++)
    {	  
	  for(j = 0; j < k; j++)
        {  
          cout<< " "<<mas[i][j]<<" ";
	    }
	    cout<<" "<<endl;
     }


//из элеметов соответствующих строк вычитаем элементы найденной нам строки
double p=0;
 for(i = 0; i < n; i++)	
	{
		p=mas[i][min];
			if (i!=myn)       
			{
				for(j = 0; j < k; j++)
					{
						mas[i][j]=mas[i][j]-mas[myn][j]*p;
					}
			}
     }


 //вывод массива
cout<<endl<<"***********************************"<<endl;
 cout<<endl;  
  for(i = 0; i < n; i++)
    {	  
	  for(j = 0; j < k; j++)
        {  
          cout<< " "<<mas[i][j]<<" ";
	    }
	    cout<<" "<<endl;
     }

cout<<endl<<"***********************************"<<endl; 
//cout<<"целевая функция равняется"<<mas[n-1][k-1]<<"\n";
  for (j = 0; j < k; j++)
	{
		if (mas[n-1][j]>0)
			kpol++;	
 }	
  // cout<<"kpol="<<kpol<<"\n";если в последней строчке  положительных числа столько, сколько было x(+1 своб.член),то мы нашли решение
  		}
		cout<<"решение оптимально,целевая функция равняется"<<mas[n-1][k-1]<<"\n";		
 system ("pause");
 return 0;
}
Нет,не блондинка!!

Последний раз редактировалось Аделинкка; 18.06.2012 в 04:41.
Аделинкка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Симплекс метод BeZone Помощь студентам 1 24.11.2012 18:25
Симплекс-метод (с++) $ereg@ Помощь студентам 0 02.01.2012 21:57
симплекс метод bakir Помощь студентам 3 11.04.2011 16:35
Симплекс - метод PaLb14 Помощь студентам 4 22.05.2010 12:19
симплекс-метод zajigalka Помощь студентам 1 03.05.2010 20:58