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

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

Войти
Регистрация
Восстановить пароль
 
Heusake94
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 11
#1

Как собрать этот проект? - C++

09.12.2013, 17:19. Просмотров 385. Ответов 6
Метки нет (Все метки)

Програ по симплекс методу



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* user_data.h */
#ifndef _USER_DATA_H_
#define _USER_DATA_H_
 
class user_data {
    public:
        void get_data_from_user();
        void user_data_is_valid();
    protected:
        double *function;
        double *fm;
        double **system;
        int *sign;
        int num_v;
        int num_l;
        bool way;
};
 
#endif /* _USER_DATA_H_ */

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* user_data.cpp */
#include <iostream>
#include <string>
#include <cstdlib>
 
#include "user_data.h"
 
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
void error(int err_no)
{
    switch(err_no) {
        case 0:
            cout << "\nВы ввели некорректное значение.\n" << endl;
            break;
        case 1:
            cout << "\nВы не можете задать менее двух ограничений.\n" << endl;
            break;
        case 2:
            cout << "\nВы не можете задать больше 500 ограничений.\n" << endl;
            break;
        case 3:
            cout << "\nВы не можете задать менее двух переменных.\n" << endl;
            break;
        case 4:
            cout << "\nВы не можете задать более 500 уравнений.\n" << endl;
            break;
    }
}
 
void user_data::get_data_from_user()
{
    string num_limits, num_vars, s_var, fr_m, sn, func, w;
    int i, j;
    bool validator = false;
 
    do {
        cout << "Введите количество ограничений в системе: ";
        getline(cin, num_limits);
        if (atoi(num_limits.c_str()) < 2)
            error(1);
        else if (atoi(num_limits.c_str()) > 500)
            error(2);
        else
            validator = true;
 
    } while (!validator);
 
    num_l = atoi(num_limits.c_str());
    validator = false;
 
    do {
        cout << "Введите количество переменных в системе ограничений: ";
        getline(cin, num_vars);
    if (atoi(num_vars.c_str()) < 2) 
        error(3);
    else if (atoi (num_vars.c_str()) > 500)
        error(4);
    else
        validator = true;
    } while (!validator);
 
    num_v = atoi(num_vars.c_str());
    validator = false;
 
    function = new double [num_v];
    system = new double *[num_l];
    for (i = 0; i < num_l; i++)
        system[i] = new double [num_v];
    fm = new double [num_l];
    sign = new int [num_l];
 
    cout << "\nЗаполните коэффициенты при целевой функции.\n" << endl;
 
    for (i = 0; i < num_v; i++) {
        do {
            cout << "Введите коэффициент целевой фукнции при x" << i + 1 << ": ";
            getline(cin, func);
            if (atof(func.c_str()) == 0)
                error(0);
            else {
                validator = true;
                function[i] = atof(func.c_str());
            }
        } while (!validator);
        validator = false;
    }
 
    do {
        cout << "Введите направление целевой функции ( min, max ) : ";
        getline(cin, w);
        if (w == "max" || w == "MAX" || w == "min" || w == "MIN") {
            validator = true;
            if (w == "max" || w == "MAX")
                way = true;
            else
                way = false;
        }
        else
            error (0);
 
    } while (!validator);
    cout << "\nЗаполните систему ограничений.\n" << endl;
 
    for (i = 0; i < num_l; i++) {
        cout << "Заполните " << i + 1 << "-е ограничение.\n" << endl;
        for (j = 0; j < num_v; j++) {
            do {
                cout << "Введите коэффициэнт при x" << j + 1 << ": ";
                getline(cin, s_var);
                if (atof(s_var.c_str()) == 0)
                    error (0);
                else {
                    validator = true;
                }
            } while (!validator);
            system[i][j] = atof(s_var.c_str());
            validator = false;
        }
 
        do {
            cout << "Введите знак при " << i + 1 << "-м ограничении ( <=, =, >= ) : ";
            getline(cin, sn);
            if (sn == "<=" || sn == "=" || sn == ">=") {
                validator = true;
                if (sn == "<=")
                    sign[i] = 0;
                if (sn == "=")
                    sign[i] = 1;
                if (sn == ">=") 
                    sign[i] = 2;
                }
            else
                error(0);
            cout << sign[i] << endl;
        } while (!validator);
 
        validator = false;
 
        do {
            cout << "Введите свободный член при " << i + 1 << "-м ограничении: ";
            getline(cin, fr_m);
            if (atof(fr_m.c_str()) == 0)
                error(0);
            else
                validator = true;
        } while (!validator);
 
        fm[i] = atof(fr_m.c_str());
        validator = false;
 
        cout << endl;
    }
 
}
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
/* simplex.h */
#ifndef _SIMPLEX_H_
#define _SIMPLEX_H_
 
#include <sstream>
#include "user_data.h"
 
class simplex : public user_data {
    public:
        void init();
        void gen_plane();
        bool plane_is_valid();
        bool function_is_undefined();
        void print_result_to_file(int it_num);
    private:
        double func;
        double **bv;
        double **sv;
        double *istr;
        double *th;
        double alm;
        int i_lrow;
        int i_lcol;
        std::stringstream table;
};[CPP]
 
#endif /* _SIMPLEX_H_ */


/* simplex.cpp */
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <string>

#include "user_data.h"
#include "simplex.h"

using std::cout;
using std::endl;

void simplex::init()
{
int i, j;
func = 0;
sv = new double *[num_l];
for (i = 0; i < num_l; i++)
sv[i] = new double [num_v * 2];
for (i = 0; i < num_l; i++) {
for (j = 0; j < num_v; j++)
sv[i][j] = system[i][j];
for (; j < num_v * 2; j++)
if (i + num_v == j)
if (way)
sv[i][j] = 1;
else
sv[i][j] = -1;
else
sv[i][j] = 0;
}
istr = new double [num_v * 2];
bv = new double *[num_l];
for (i = 0; i < num_l; i++) {
bv[i] = new double [2];
bv[i][0] = i + num_v;
bv[i][1] = fm[i];
}
for (i = 0; i < num_v * 2; i++)
if (i < num_v)
istr[i] = function[i] * -1;
else
istr[i] = 0;
i_lcol = 0;
for (i = 0; i < num_v * 2 - 1; i++) {
if (istr[i] < 0)
if (fabs(istr[i + 1]) > fabs(istr[i]))
i_lcol = i + 1;
}
th = new double [num_l];
for (i = 0; i < num_l; i++)
th[i] = bv[i][1] / sv[i][i_lcol];
i_lrow = 0;
for (i = 0; i < num_l - 1; i++)
if (th[i] > th[i + 1])
i_lrow = i + 1;
alm = sv[i_lrow][i_lcol];
print_result_to_file(0);
}
bool simplex:lane_is_valid()
{
int i;
bool result = true;
if (way)
for (i = 0; i < num_v * 2; i++)
if (istr[i] < 0) {
result = false;
break;
}
if (!way)
for (i = 0; i < num_v * 2; i++)
if (istr[i] >= 0) {
result = false;
break;
}

return result;
}
bool simplex::function_is_undefined()
{
int i;
for (i = 0; i < num_l; i++)
if (th[i] < 0) {
return false;
}
return true;
}
void simplex::gen_plane()
{
int i, j, it_num = 0;
double A, B;
while (!plane_is_valid() && function_is_undefined()) {
A = bv[i_lrow][1];
B = istr[i_lcol];
func -= A * B / alm;
double *tmp_bv = new double [num_l];
bv [i_lrow][0] = i_lcol;
A = bv[i_lrow][1];
for (i = 0; i < num_l; i++) {
B = sv[i][i_lcol];
tmp_bv[i] = bv[i_lrow][1];
if (i != i_lrow)
tmp_bv[i] = bv[i][1] - A * B / alm;
else
tmp_bv[i] /= alm;
}
for (i = 0; i < num_l; i++)
bv[i][1] = tmp_bv[i];
double *tmp_istr = istr;
B = istr[i_lcol];
for (i = 0; i < num_v * 2; i++) {
A = sv[i_lrow][i];
tmp_istr[i] = istr[i] - A * B / alm;
}
istr = tmp_istr;
double **tmp_sv = new double *[num_l];
for (i = 0; i < num_l; i++)
tmp_sv[i] = new double [num_v * 2];
for (i = 0; i < num_l; i++)
for (j = 0; j < num_v * 2; j++) {
tmp_sv[i][j] = sv[i][j];
A = sv[i_lrow][j];
B = sv[i][i_lcol];
if (i == i_lrow)
tmp_sv[i][j] /= alm;
else
tmp_sv[i][j] = sv[i][j] - A * B / alm;
}
sv = tmp_sv;
i_lcol = 0;
for (i = 0; i < num_l; i++)
th[i] = bv[i][1] / sv[i][i_lcol];
i_lrow = 0;
for (i = 0; i < num_l -1; i++)
if (th[i] > th[i + 1])
i_lrow = i + 1;
alm = sv[i_lrow][i_lcol];
it_num++;
print_result_to_file(it_num);
}

if (!function_is_undefined())
cout << "\nЦелевая фукнция не ограничена, данная задача решений не имеет\n" << endl;
else {
cout << "\nf(x) = " << func << "\n" << endl;
for (i = 0; i < num_l; i++) {
cout << "x" << bv[i][0] + 1 << " = " << bv[i][1] << endl;
}
cout << "\nВсе вычисления были записаны в файл table.txt\n" << endl;
}
}
void simplex:rint_result_to_file(int it_num)
{
int i, j;
if (!it_num) {
table << "Задана целевая функция:\n" << endl;
std::stringstream f_x;
f_x << "f(x) = ";
for (i = 0; i < num_v; i++) {
if (!i)
f_x << function[i] << "x" << i + 1 << " ";
else {
if (function[i] < 0)
f_x << "- " << fabs(function[i]) << "x" << i + 1 << " ";
if (function[i] > 0)
f_x << "+ " << function[i] << "x" << i + 1 << " ";
}
}
std::string minmax;
if (way)
minmax = "max";
else
minmax = "min";
f_x << "=> " << minmax << "\n" << endl;
table << f_x.str();
table << "И система ограничений:\n" << endl;
std::stringstream math_sys;
std::string math_sign;
for (i = 0; i < num_l; i++) {
for (j = 0; j < num_v; j++) {
if (!j)
math_sys << system[i][j] << "x" << j + 1 << " ";
else
if (system[i][j] == 1)
if (!j)
math_sys << "x" << j + 1 << " ";
else
math_sys << "+ x" << j + 1 << " ";
else
if (system[i][j] == -1)
if (!j)
math_sys << "-x" << j + 1 << " ";
else
math_sys << "- x" << j + 1 << " ";
else {
if (system[i][j] < 0)
math_sys << "- " << fabs(system[i][j])<< "x" << j + 1 << " ";
else
math_sys << "+ " << system[i][j] << "x" << i + 1 << " ";
if (!sign[i])
math_sign = "<=";
if (sign[i] == 1)
math_sign = "=";
if (sign[i] == 2)
math_sign = ">=";
}
}

math_sys << math_sign << " " << fm[i];
math_sys << endl;
}
std::string min_or_max;
if (way)
min_or_max = "максимум";
else
min_or_max = "минимум";
table << math_sys.str() << endl;
table << "Решим данную задачу на " << min_or_max << " методом симплексных таблиц.\nПостроим первый опорный план:\n" << endl;
}
for (i = 0; i < num_l; i++) {

table << "x" << bv[i][0] + 1 << "\t" << bv[i][1] << "\t";
for (j = 0; j < num_v * 2; j++)
table << sv[i][j] << "\t";
if (!plane_is_valid())
table << th[i];
table << "\n" << endl;
}
table << "f(x)\t" << func << "\t";
for (i = 0; i < num_v * 2; i++)
table << istr[i] << "\t";
table << "\n";
if (plane_is_valid()) {
if (plane_is_valid() && function_is_undefined())
table << "\nДанный план является оптимальным и не требует улучшения. Решение найдено." << endl;
std::ofstream outfile ("table.txt");
outfile << table.str();
}
else {
std::string ln_or_gn;
if (way)
ln_or_gn = "неположительные";
else
ln_or_gn = "положительные";
std::stringstream num_of_plane;
if (!it_num)
num_of_plane << "Первый опорный план";
else
num_of_plane << it_num + 1 << "-й план также";
table << "\n" << num_of_plane.str() << " не является оптимальным, поскольку\nв индексной строке присутствуют " << ln_or_gn << " элементы.\nErо необходимо улучшить.\n" << endl;
}

}[/CPP]


C++
1
2
3
4
5
6
7
8
9
10
11
#include "simplex.h"
 
int main()
{
    setlocale(LC_ALL, "Russian");
    simplex *ud = new simplex;
    ud->get_data_from_user();
    ud->init();
    ud->gen_plane();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как собрать этот проект? (C++):

Как собрать этот проект? - C++
/* user_data.h */ #ifndef _USER_DATA_H_ #define _USER_DATA_H_ class user_data { public: void get_data_from_user();...

Как собрать проект - C++
#include &lt;winbgim.h&gt; #include &lt;alloc.h&gt; #include &lt;stdio.h&gt; using namespace std; int COL=15, //основной цвет ...

Как собрать проект из исходников - C++
Добрый день. У меня есть проект, точнее 3 файла. Main.cpp #include &quot;func.h&quot; int main() { //Тут вызов процедур из func ...

Как собрать проект из исходников для COM порта? - C++
Не получается собрать проект для MSVS10. Нужно работать с COM-портом вот как здесь: На сайте есть исходные файлы. В третьей папке...

Этот проект не запускается в Clion на си++ - C++
codes-sources . commentcamarche.net/source/53456-sokoban-en-c-pour-debutant-version-amelioree-basee-sur-le-tutoriel-du-site-du-zero ...

Не могу собрать проект в exe (MVS2012) - C++
Использую mvs2012. Никак не могу понять, как собрать проект в готовый exe. Нажимал там всякие компиляции, сборки, отладку в режиме релиза....

6
Croessmah
Эксперт CЭксперт С++
13508 / 7666 / 866
Регистрация: 27.09.2012
Сообщений: 18,858
Записей в блоге: 3
Завершенные тесты: 1
09.12.2013, 17:21 #2
а какой компилятор мы должны догадаться?
0
Heusake94
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 11
09.12.2013, 17:52  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
а какой компилятор мы должны догадаться?
Visual Studio 10 или 12
0
Croessmah
Эксперт CЭксперт С++
13508 / 7666 / 866
Регистрация: 27.09.2012
Сообщений: 18,858
Записей в блоге: 3
Завершенные тесты: 1
09.12.2013, 17:53 #4
Ну тогда создавайте пустой консольный проект Win32 и добавляйте файлы
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 692
09.12.2013, 17:57 #5
только, что лень было по файлам расскидывать..
1
Вложения
Тип файла: rar console.rar (15.2 Кб, 11 просмотров)
Heusake94
0 / 0 / 0
Регистрация: 30.11.2013
Сообщений: 11
09.12.2013, 18:12  [ТС] #6
Цитата Сообщение от Aloir Посмотреть сообщение
только, что лень было по файлам расскидывать..
проверял работает?
Спасибо
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 692
09.12.2013, 18:14 #7
Цитата Сообщение от Heusake94 Посмотреть сообщение
проверял работает?
Спасибо
ну, собрался и запустился, дальше не смотрел.

пс: пересобирите и посмотрите.
1
09.12.2013, 18:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 18:14
Привет! Вот еще темы с ответами:

Собрать проект MSVS со всеми dll-ками - C++
Привет! есть проектWIN32 MSVS. все работает. как собрать его таким образом, чтобы не требовались студийные библиотеки на чистой винде? ...

Не получается собрать проект из задания книги Страуструпа - C++
Здравствуйте уважаемые форумчане. Изучаю материал &quot;Принципы и практика использования C++&quot; Страуструпа. Выполняют задание из 8 главы. ...

Собрать многофайловый проект в Turbo C++ (ошибка Linker error Undefined symbol f (int) in module) - C++
Столкнулся с проблемой, сам не ожидал. Вот три файла main.cpp #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &quot;menu.h&quot; ...

Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)? - C++
(Visual Studio 2013) Например я сделал один проект, пусть это будет проект версия №1, затем я захотел улучшить проект версии №1 и сделать...


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

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

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