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

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

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

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

22.05.2010, 23:50. Просмотров 5935. Ответов 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++
недавно начал изучать С++ мне дали задали такое ,которое я сам не зделаю(( задание такое зделать прогу, которая решит систему...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
                        
                }
 
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2010, 19:11
Привет! Вот еще темы с ответами:

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя) - C++
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для массива из 10000 элементов, результаты...

Мой код - метод бисекции, метод секущих (метод хорд) - C++
Всем привет!!! Изучаем в институте С++. Сделал код, и там, и там одна и та же проблема - при любых вбиваемых значениях программа делает...

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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