Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.91
nasmon
0 / 0 / 0
Регистрация: 23.03.2010
Сообщений: 18
#1

Симплекс метод - C++

22.05.2010, 23:50. Просмотров 5924. Ответов 2
Метки нет (Все метки)

почему незапускается прога
C++
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <string.h>
using namespace std;
 
fstream in( "lptask.txt", ios_base::in );
 
double tbl[4][8]={
{3, 11, 0, 0, 0, 0, 0, 0},
{-3, 8, 1, 0, 0, 30, 0, 2},
{2, 7, 0, 1, 0, 62, 0, 3},
{1, 6, 0, 0, 1, 98, 0, 4}
};
int m=8,n=4, col, row;
 
 
void input_tbl() { // Г§Г*ïîëГ*ГҐГ*ГЁГҐ ñèìïëåêñ-ГІГ*áëèöû Г·ГІГҐГ*ГЁГҐГ¬ ââîäГ*
int i=0, j=0;
while(true) {
string x;
in >> x;
if( x == "/" ) {
if( j==0 ) break;
if( i==0 ) m = j + 1;
else {
int j1; in >> j1;
tbl[i][m+1] = j1;
}
tbl[i][m] = 0;
j = 0;
++i;
continue;
}
tbl[i][j] = atof(x.c_str());
++j;
}
n = i;
tbl[0][m-1] = 0;
tbl[0][m+1] = 0;
}
 
void output_tbl() { // âûâîäèò ГІГ*áëèöó ñèìïëåêñ-ìåòîäГ* Гў óäîáГ*îì äëÿ Г·ГІГҐГ*ГЁГї âèäå
for( int i=0; i<n; ++i ) {
for( int j=0; j<=m+1; ++j ) {
cout << setw(9) << tbl[i][j];
}
cout << "\n";
}
}
 
void choose_col_row() { // îïðåäåëÿåò âåäóùèé ñòîëáåö è âåäóùóþ ñòðîêó
 
col = 0;
bool flag = (tbl[0][col] < 0);
for( int j=0; j<m; ++j ) {
double ci = tbl[0][j];
if( ci<0 && ci<tbl[0][col] ) {
flag = true;
col = j;
}
}
if( !flag ) {
col = -1;
row = -1;
return;
}
 
for( int i=1; i<n; ++i ) {
if( tbl[i][m] != 0 ) continue;
double den = tbl[i][col];
if( den == 0 )
tbl[i][m] = 1.e100;
else
tbl[i][m] = tbl[i][m-1]/den;
}
row = 1;
for( int i=1; i<n; ++i ) {
if( tbl[i][m] < tbl[row][m] ) row = i;
}
if( tbl[row][m] >= 1.e98 ) row = -1;
}
 
void transform() {
double den = tbl[row][col];
for( int j=0; j<m; ++j ) {
tbl[row][j] /= den;
}
for( int i=0; i<n; ++i ) {
if( i == row ) continue;
double k = tbl[i][col];
for( int j=0; j<m; ++j ) {
tbl[i][j] -= k*tbl[row][j];
}
}
tbl[row][m+1] = col;
 
for( int i=1; i<=n; ++i ) {
tbl[i][m] = 0;
}
tbl[row][m] = 1e100;
}
 
bool solve() { // ðåøГ*ГҐГІ Г§Г*Г¤Г*Г·Гі - âûïîëГ*ГїГҐГІ Г*ГіГ¦Г*Г® êîëè÷åñòâî ГЁГІГҐГ°Г*öèé
while(1) {
cout << "\n";
 
choose_col_row();
 
output_tbl();
cout << "col = " << col << "\n";
cout << "row = " << row << "\n";
 
if( col == -1 ) {
cout << "\nnajdeno optimalnoe reshenie\n";
return true;
}
if( row == -1 ) {
cout << "\nluchevoe reshenie\n";
return false;
}
 
transform();
}
}
 
int main(void) { // ГЈГ«Г*ГўГ*Г*Гї òî÷êГ* âõîäГ*
 
input_tbl();
 
bool flag = solve();
 
if( flag ) {
for( int i=1; i<n; ++i ) {
cout << tbl[i][m+1] << " = " << tbl[i][m-1] << "\n";
}
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2010, 23:50     Симплекс метод
Посмотрите здесь:

Симплекс-метод - C++
Здраствуйте!Помогите пожалуйста с программой.Дана задача: Для изготовления изделий двух видов склад может отпустить металла не более...

Симплекс-метод - C++
Задали по дисциплине &quot;Математическое моделирование&quot; написать программу на C++,выбрав любую задачу на тему &quot;Симплекс-метод в случае...

Симплекс метод - C++
недавно начал изучать С++ мне дали задали такое ,которое я сам не зделаю(( задание такое зделать прогу, которая решит систему...

Преобразование матрицы симплекс метод - C++
Приветствую всех) Очень нуждаюсь в вашей помощи. Взялся за реализацию симплекс-метода, но столкнулся с такой проблемой. К примеру дана...

Симплекс метод. Задача с двусторонними ограничениями - C++
Нужна задачка, без разницы как реализована....главное чтобы работала. И именно не просто симлекс метод, а пример на задаче с двусторонними...

Симплекс метод решения задач линейного программирования - C++
Как реализовать в программе симплек метод решения задач линейного программирования

Двойственность симплекс-метода - C++
Нашел код, но разобраться не смог, не могу понять, чего ему не хватает...помогите разобраться, может у кого есть аналог этой программы...

Решение задачи симплекс методом - C++
Всем доброго времени суток. Помогите, пожалуйста, при компиляции выдает такую ошибку:&quot; fatal error C1083: Не удается открыть файл...

Применение симплекс-метода для решения задач - C++
Напишите программку для решения этой задачи ,можно решить её также желательно решить её математически)

Ввод данных из файла для решения симплекс метода - C++
Доброго времени суток. Помогите пожалуйста, мне надо брать данные из текстового файла, обрабатывать их и выдавать в другой файл. В...

Применение симплекс-метода для решения экономических задач - C++
Напишите программку для решения этой задачи

Симплекс-метод - 1С
Уважаемые, необходимо реализовать решение задач симплекс-методом, находил подобное здесь - http://evsenkin.ru, но там с использованием...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
23.05.2010, 03:30     Симплекс метод #2
Пишет,что ошибка сегментации здесь:
C++
1
tbl[i][j] = atof(x.c_str());
nasmon
0 / 0 / 0
Регистрация: 23.03.2010
Сообщений: 18
02.06.2010, 19:11  [ТС]     Симплекс метод #3
Почему прграмма выдает все нули:
C++
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
//#include "stdafx.h"
#include <iostream.h>
#include <stdlib.h>
#include <windows.h> 
#include <fstream.h>
 
using namespace std;
 
const int str=3;
const int stb=5;
float mas[str][stb];
float R_mas[str][stb];
bool flag=false;
int minI, minJ=1;
 
//ÔóГ*êöèè
int min_J(float temp[str][stb], int minI)
{
int num;
        if      ((temp[str-1][minJ]/temp[str-1][1]) <= (temp[str][minJ]/temp[str][1]) )
                num=1;
        else
                num=0;
        return num;
}//??
 
int min_I(float temp[str][stb])
{
        int min[2]={};
        for(int i=0; i<str; i++)
        if (temp[i][stb-1]<min[0])
        {
                min[0]=int(temp[0][i]);
                min[1]=i;
        }
        return min[1];
}
 
 
int main()
{
//Г—ГІГҐГ*ГЁГҐ ГЁГ§ ГґГ*éëГ*
        //FILE *myFile;
       // myFile=fopen("3.txt", "rt"); 
        char temp[4];
        for (int i=0; i<str; i++)
                for (int j=0; j<stb; j++)
                {
                        //fgets(temp, 4, myFile);
                        mas[i][j]=float(atoi(temp));
                }
 
//îòðèöГ*òåëüГ*ûå 1,2 ГЁ 5 ñòîëáöû
for (int i=0; i<str; i++)
        for (int j=0; j<stb; j++)
                if ((j != 2) && (j != 3) )
                        mas[i][j]*=-1;
 
//Âûâîä 
        for (int i=0; i<str; i++)
        {
                cout<<endl;
                for (int j=0; j<stb; j++)
                        cout<<mas[i][j]<<"\t";
        }
 
        cout<<endl<<endl;
        int min[2]={};
        for (int j=1; j<stb; j++)
                
                
 
        while(!flag)
                        
//Ïîèñê îòðèöГ*òåëüГ*ûõ Г·ГЁГ±ГҐГ«
                for (int j=1; j<stb; j++)
                        for(int i=0; i<stb-1;i++)
                {                       
                        if(mas[i][j]<0)
                        {
                                flag=true; //ГґГ«Г*ГЈ
                                
//Ïîèñê ìèГ*ГЁГ¬Г*ëüГ*îé ñòðîêè                              
                                minI=min_I(mas);
 
//Ïîèñê ìèГ*ГЁГ¬Г*ëüГ*îãî ñòîëáöГ*
                                minJ=min_J(mas, minI);
 
//ГЋГ±Г*îâГ*ûå âû÷èñëåГ*ГЁГї
                                for(int i=0; i<stb;i++)
                                        R_mas[minI][i]=mas[minI][i]/mas[minI][minJ];            
                                for (int i=0; i<str;i++)
                                        for(int j=0; j<stb;j++)
                                                if (i != minI)
                                                        R_mas[i][j]=mas[i][j]-(R_mas[minI][j] * mas[i][minJ]);
                    }
                }
       
                        
 
//Âûâîä Г¬Г*Г±Г±ГЁГўГ*
                for (int i=0; i<str; i++)
                {
                        for (int j=0; j<stb; j++)
                cout<<R_mas[i][j]<<"\t";
                cout<<endl;
                        
                }
 
        }
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru