,   CyberForum.ru

- C++

 
:  :  - 45,   - 4.91
nasmon
0 / 0 / 0
: 23.03.2010
: 18
22.05.2010, 23:50     #1

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++ VS ( -)
C++
C++
C++
C++ -
C++ -



:
.
vet
   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;
                        
                }
 
        }
Yandex
02.06.2010, 19:11    

: 00:31. GMT +3.
- , ,
-
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
@Mail.ru