-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnswerer.js
132 lines (116 loc) · 3.43 KB
/
Answerer.js
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
function Answerer(){
// private:
var wrapper = document.createElement("DIV");
var answersIndexes; // array
wrapper.setAttribute("class", "answer");
var text = "X = (";
var srcVarsCount;
var M = 9999;
/*
Инициализация answersIndexes. В нем -
индексы базисных переменных в результирующей таблице
*/
function setIndexes(BasisVect){
var rE = /\d/ig;
answersIndexes = BasisVect.join("").match(rE);
for (var i=0; i<answersIndexes.length; i++){
var value = parseInt(answersIndexes[i], 10);
answersIndexes[i] = value-1; // real indexes
}
}
function getCopy(obj){
var ret = {};
for (var key in obj){
ret[key] = obj[key];
}
return ret;
}
/*
Есть ли val в answersIndexes? Вернуть с индексом
*/
function inAnswers(val){
for (var i=0; i<answersIndexes.length; i++){
if (answersIndexes[i] == val)
return {
ind: i,
bool: true
};
}
return {
ind: -1,
bool: false
};
}
/*
Окончательное определение ответа.
Формирование ответа по кол-ву исходных переменных
*/
function setText(B){
for (var i=0; i<srcVarsCount; i++){
var res = inAnswers(i);
if (res.bool == true){
text += (B[res.ind].toFixed(2) + "; ");
}else{
text += "0; ";
}
}
text = text.trim();
text = text.split("").slice(0, -1).join("");
text += ")";
}
// public:
this.show = function(BasisVect, BVect, zValue, varsCount, minOrMax){
srcVarsCount = varsCount;
setIndexes(BasisVect);
setText(BVect);
if (minOrMax == "min") zValue *= -1;
//text += "<br>Z = " + (minOrMax == "min"? "-":"") + zValue.toFixed(2);
text += "<br>Z = " + zValue.toFixed(2);
wrapper.innerHTML = text;
document.getElementsByClassName("container")[0].appendChild(wrapper);
};
this.showNonOptimum = function(minOrMax){
text = "Задача не имеет оптимального решения<br>";
text += "Целевая функция Z неограничена " + (minOrMax == "max"? "сверху": "снизу");
wrapper.innerHTML = text;
document.getElementsByClassName("container")[0].appendChild(wrapper);
};
this.showIncompatible = function(){
text = "Задача не имеет решений<br>";
text += "Cистема ограничений несовместна";
wrapper.innerHTML = text;
document.getElementsByClassName("container")[0].appendChild(wrapper);
};
/*
показать решение двойственной задачи.
Кол-во переменных в двойств. задаче == кол-во ограничений в прямой
*/
this.showDual = function(deltaArr, confinesCount){
text = "Y = (";
var varsCount = confinesCount;
for (var j=0; j<deltaArr.length; j++){
var o = deltaArr[j];
if (o.isBalanced && varsCount){
text += o.val.toFixed(2) + "; ";
varsCount--;
}
}
if (varsCount){
var j = 0;
while (varsCount){
text += deltaArr[j++].val.toFixed(2) + "; ";
varsCount--;
}
}
text = text.trim();
text = text.split("").slice(0, -1).join("");
text += ")";
wrapper.innerHTML = text;
document.getElementsByClassName("container")[0].appendChild(wrapper);
};
this.showOptimumMsg = function(){
text = "Альтернативный оптимум";
wrapper.innerHTML = text;
document.getElementsByClassName("container")[0].appendChild(wrapper);
};
}