Самые простые и доступные языки: Visual Basic Script (VBS),
Visual Basic Application (VBA), JavaScript (JS).
VBS и JS работают с файлами с расширениями: .vbs и .js
и файлах с расширением .html в Интернет (Internet Explorer). VBA используется,
как простое и удобное средство программирования в Word, Excel, AutoCAD
и СorelDraw и, в каждом случае, расширение фалов там свое или файлы, вообще,
встроены в проект текущего основного файла и вызываются через макросы.
Все эти три языка, как правило, автоматически устанавливаются на машине
при установке Window 2000 и выше. И поэтому, создав файлы, например,
*.vbs, *.js, *.html и, щелкнув по тому или другому, вы автоматически
запустите программу. При наличии команды вывода на печать (в каждом
случае свои опреаторы), вы получите результаты расчета на экране дисплея.
В случае ошибки, в этом же окне указывается строка, в которой произошла
ошибка.
1) На VBS
<Test.vbs>
' Сложить два числа
a = 20
b = 30
S = a + b
MsgBox "S = " & S' вывод значения на экран дисплея
2) На JS
<Test.js>
var a =20;
var b =30;
var S = a + b
WScript.Echo("S= " + S ); // WScript - это готовый "встроенный"
объект
var a =20;
var b =30;
var S = a + b
alert("Сумма = " + S) // вывод значения на экран дисплея
</SCRIPT>
Домашнее задание 1: создать
файлы всех 3 примеров с соответствующим расширением и запустить их
в классе или на своих домашних ПК.
Домашнее задание 2: По аналогии написать программы на разных
языках расчета объема посылки, у которой полуобхват - 72 см, длину выбрать
в промежутке от 36 до 72 см.
1) На VBS
<Test2.vbs>
' Перебрать сравнить и выбрать мин. число из заданных
S = Array(70,50,80,60,10,20,5,70,90,35)
Smin=10000
For n=0 To 9 Step 1
' if (s(n) < Smin) Then
' Smin = S(n)
' End if
if s(n) < Smin Then Smin = S(n)
Next
VBSmsg "минимальное число = " & Smin
<SCRIPT LANGUAGE="JavaScript">
// Перебрать сравнить и выбрать мин. число из заданных
var S = Array(70,50,80,60,10,20,5,70,90,35) // массив чисел
var Smin=10000 //наперед заданное большее число
for (n=0; n < 9; n++) { // организация цикла от 0 до
9 с шагом 1
if (S[n] < Smin) Smin = S[n] // сравнить и выбрать - положить
в регистр
}
alert("минимальное число = " + Smin) // вывод значения на экран
дисплея
</SCRIPT>
x1 = 1
y1 = 1
x2 = 15
y2 = 4
x3 = 7
y3 = 10
smin=10000
For t=0 To 1 Step 0.1
x = (1-t)*x1 + t*x2
y = (1-t)*y1 + t*y2
dlina = sqr((x3-x)*(x3-x)+(y3-y)*(y3-y))
if (dlina < smin) Then
smin = dlina
xmin = x
ymin = y
End if
Next
MsgBox "минимальное число = " & Smin
MsgBox " x = " & x
MsgBox " y = " & y
var x1 = 1
var y1 = 1
var x2 = 15
var y2 = 4
var x3 = 7
var y3 = 10
var smin=10000
for ( var t=0; t <= 1 ; t+=0.1 ) {
var x = (1.-t)*x1 + t*x2
var y = (1.-t)*y1 + t*y2
dlina = Math.sqrt((x3-x)*(x3-x)+(y3-y)*(y3-y))
if (dlina < smin) {
smin = dlina
xmin = x
ymin = y
}
}
WScript.Echo("smin= " + smin )
WScript.Echo("xmin = " + x )
WScript.Echo("ymin = " + y )
// Определить минимальное расстояние от точки р3(7,10) до прямой р1(1,1)-р2(4,7)
var x1 = 1;
var y1 = 1;
var x2 = 15;
var y2 = 4;
var x3 = 7;
var y3 = 10;
var smin=10000;
for ( var t=0; t <= 1 ; t+=0.1 ) {
var x = (1-t)*x1 + t*x2;
var y = (1-t)*y1 + t*y2;
dlina = Math.sqrt((x3-x)*(x3-x)+(y3-y)*(y3-y));
if (dlina < smin) {
smin = dlina;
xmin = x
ymin = y
}
}
alert("smin= " + smin );
alert("x= " + x );
alert("y= " + y );
</SCRIPT>
var x1 = Ax; var y1 = Ay; var x2 = Bx; var y2 = By;
var v1 = 10; var v2 = 6;
// Оптимизация - перебрать, сравнить и выбрать.
var tmin=10000; var xmin; var ymin;
for ( var u = 0; u <= 1.01 ; u+=1/8 ) {
var x = (1-u)*x11 + u*x12;
var y = y11;
var s1 = Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
var s2 = Math.sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
var t = s1/v1 + s2/v2;
if (t < tmin) {
xmin = x
ymin = y
tmin = t;
}
}
WScript.Echo(" vmax = " + rzn(tmin)); // вывод на
печать с функцией округления rzn();
WScript.Echo( " x = " + rzn(xmin) + "
b = " + rzn(ymin));
function rzn ( vv ) { // функция округления
return ( Math.round ( vv * 100 ) ) / 100 ;
}
x1 = 29
y1 = 30
x2 = 271
y2 = 269
v1 = 10
v2 = 6
' Оптимизация
tmin=10000
For u = 0 To 1.01 Step 1/8
x = (1-u)*x11 + u*x12
y = y11
s1 = sqr((x1-x)*(x1-x)+(y1-y)*(y1-y))
s2 = sqr((x2-x)*(x2-x)+(y2-y)*(y2-y))
t = s1/v1 + s2/v2
if t < tmin Then
xmin = x
ymin = y
tmin = t
End IF
Next
MsgBox "tmin = " & tmin ' минимальное время
MsgBox " x = " & xmin & "
y = " & ymin
var x1 = Ax;
var y1 = Ay;
var x2 = Bx;
var y2 = By;
var v1 = 10;
var v2 = 6;
// Оптимизация. Отрисовать ЦФ
var tmin=10000; var xmin; var ymin;
for ( var u = 0; u <= 1.01 ; u+=1/8 ) {
var x = (1-u)*x11 + u*x12;
var y = y11;
var s1 = Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
var s2 = Math.sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
var t = s1/v1 + s2/v2;
if (t < tmin) {
xmin = x
ymin = y
tmin = t;
}
}
WScript.Echo(" tmin = " + rzn(tmin)); // вывод на
печать с функцией округления rzn();
WScript.Echo( " x = " + rzn(xmin) + "
b = " + rzn(ymin));
function rzn ( vv ) { // функция округления
return ( Math.round ( vv * 100 ) ) / 100 ;
}
var Ax=29; var Ay=30; var Bx=271; var By = 269;
var x11=29; var y11=150; var x12=271; var y12 = 150;
var x1 = Ax;
var y1 = Ay;
var x2 = Bx;
var y2 = By;
var v1 = 10;
var v2 = 6;
// Оптимизация. Отрисовать ЦФ
var tmin=10000; var xmin; var ymin;
for ( var u = 0; u <= 1.01 ; u+=1/8 ) {
var x = (1-u)*x11 + u*x12;
var y = y11;
var s1 = Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
var s2 = Math.sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
var t = s1/v1 + s2/v2;
if (t < tmin) {
xmin = x
ymin = y
tmin = t;
}
}
alert(" tmin = " + rzn(tmin)); // вывод на печать
с функцией округления rzn();
alert( " x = " + rzn(xmin) + " b =
" + rzn(ymin));
function rzn ( vv ) { // функция округления
return ( Math.round ( vv * 100 ) ) / 100 ;
}
</SCRIPT>
Найти коэффицент a прямой y=ax, наилучшим образом (с меньшим отклонением)
проходящей от трех заданных точек
Мистерия. Через
заданные в диалоге 5 точек, провести наилучшую прямую y=ax
Мистерия. Провести
наилучшую прямую y=ax (псевдографика HTML
xi = Array(30,50,80) ' массив абсцис задаваемых точек
yi = Array(40,30,50) ' массив ординат задаваемых
точек
Dmin=1000000000 ' наперед
заданное большее число для ЦФ отклонений
' a_opt ' искомый оптитмальный коэффициент
а
For a = 0.1 To 3.14/2 Step 3.14/18
' вычисляем сумму отклонений
D = ((yi(0)-a*xi(0))*(yi(0)-a*xi(0))+ _
(yi(1)-a*xi(1))*(yi(1)-a*xi(1))+ _
(yi(2)-a*xi(2))*(yi(2)-a*xi(2)))
' Сравнить и выбрать
If ( D < Dmin) Then
Dmin = D
a_opt = a
End If
Next
MsgBox "a_opt = " & a_opt ' искомое
оптимальное значение коэффициента а
MsgBox "Dmin = " & Dmin ' искомое
оптимальное значение коэффициента а
var xi = Array(30,50,80) // массив абсцис задаваемых
точек
var yi = Array(40,30,50) // массив ординат задаваемых
точек
var Dmin=1000000000 // наперед
заданное большее число для ЦФ отклонений
var a_opt; // искомый оптитмальный коэффициент
а
for ( var a = 0.1; a <= Math.PI/2; a+= Math.PI/18 ) {
// вычисляем сумму отклонений
var D = ((yi[0]-a*xi[0])*(yi[0]-a*xi[0])*1+
(yi[1]-a*xi[1])*(yi[1]-a*xi[1])*1+
(yi[2]-a*xi[2])*(yi[2]-a*xi[2]))
// Сравнить и выбрать
if ( D < Dmin) {
Dmin = D
a_opt = a
}
}
WScript.Echo("a_opt = " + a_opt ); // искомое оптимальное значение
коэффициента а
WScript.Echo("Dmin = " + Dmin ); // минимальная сумма
отклонений
// Метод наименьших квадратов найти коэффицент a прямой y=ax, наилучшим
//образом (с меньшим отклонением) проходящей от трех заданных точек
var xi = Array(30,50,80) // массив абсцис задаваемых
точек
var yi = Array(40,30,50) // массив ординат задаваемых
точек
var Dmin=1000000000 // наперед
заданное большее число для ЦФ отклонений
var a_opt; // искомый оптитмальный коэффициент
а
for ( var a = 0.1; a <= Math.PI/2; a+= Math.PI/18 ) {
// вычисляем сумму отклонений
var D = ((yi[0]-a*xi[0])*(yi[0]-a*xi[0])*1+
(yi[1]-a*xi[1])*(yi[1]-a*xi[1])*1+
(yi[2]-a*xi[2])*(yi[2]-a*xi[2]))
// Сравнить и выбрать
if ( D < Dmin) {
Dmin = D
a_opt = a
}
}
alert("a_opt = " + a_opt)
// минимальная сумма отклонений
alert("Dmin = " + Dmin)
// минимальная сумма отклонений
</SCRIPT>
Скрипт. Найти лучшую парямую y= ax только на псевдографике HTML.
Скрипт. Найти лучшую парямую y= ax+b с применение Png-графики.
Скрипт 10. Определить рост человека
в зависимости от возраста.
Скрипт 11. Определить
коэффициенты экстрополирования роста человека от возраста.
Скрипт 12. Определить коэффициенты
экстрополирования фондоотдачи в условиях производства.
Скрипт 13. Вычисление
технико-экономических показателей динамики производства (более полный расчет
на странице зарегистрированных
пользователей).
Скрипт 14.
Парето-оптимальное моделирование*. При различных условиях от 2-х городов
построить завод в заданной области ограничений.
Мистерия. Определить
положения точек на трассе, отвечающим частным условиям на минимум
и общий компромисс.
Мистерия. Определить
зону Парето при разных условиях оптимизации.
Скрипт 15. 4-критериальная
задача.
Скрипт 16. Двухкритериальная задача: 1. Определить зону Парето
при максимуме прибыли и минимуме расходов. 2. Определить минимум расходов
при заданной прибыли (скрипт на стр. зарегистрированных
пользователей).
Скрипт 17. Зона Парето
в 3-критериальной задаче о трех городах: девять условий на мин/мах и компромисс.
Скрипт 18. Оптимизация
местоположения космических станций и пункта заправки при различных
условиях.
MsgBox " Минимум ЦФ компромисса = " & smin ' вывод
на печать;
MsgBox " в точке: x = " & cx & "
y = " & cy
WScript.Echo(" Минимум ЦФ компромисса = " + smin);
// вывод на печать;
WScript.Echo( " в точке: x = " + cx + "
y = " + cy);
alert(" Минимум ЦФ компромисса = " + smin); // вывод
на печать;
alert( " в точке: x = " + cx + " y
= " + cy);
</SCRIPT>
Скрипт 19.
Графы, сетевой график и сетевое планирование.
Скрипт 19_2. Метод Богданова-Белмана безусловной оптимизации на простом
примере и сложном
(оптимальный путь не показывается).
s1 = Array(20,11,10,27,0) ' массив трудозатрат на 1-м пути
s2 = Array(20,4,18,30,0) ' массив трудозатрат на 2-м пути
s3 = Array(24,2,18,30,0) ' массив трудозатрат на 3-м пути
s4 = Array(5,23,1,30,0) ' массив трудозатрат на 4-м
пути
s5 = Array(5,23,18,5,30) ' массив трудозатрат на 5-м пути
summa = Array(0,0,0,0,0,0) ' объявили, что summa - это массив из 5 членов
' суммирование трудозотрат по каждому пути
summa(1) = s1(0) + s1(1) + s1(2) + s1(3)
summa(2) = s2(0) + s2(1) + s2(2) + s2(3)
summa(3) = s3(0) + s3(1) + s3(2) + s3(3)
summa(4) = s4(0) + s4(1) + s4(2) + s4(3)
summa(5) = s5(0) + s5(1) + s5(2) + s5(3) + s5(4)
' Найти критическитй путь, в котором тружозатраты наименьшие
Smin = 100000 ' на входе задаем заведомо ниабольшее число
' перебрать, сравнить и выбрать
for i=1 To 5 Step 1
If (summa(i) < Smin) Then
Smin = summa(i)
imin = i
End If
Next
MsgBox "минимальное затраты = " & Smin
MsgBox " на пути = " & imin
var s1 = [20,11,10,27,0] // массив трудозатрат на 1-м пути
var s2 = [20,4,18,30,0] // массив трудозатрат на 2-м пути
var s3 = [24,2,18,30,0] // массив трудозатрат на 3-м пути
var s4 = [5,23,1,30,0] // массив трудозатрат на 4-м
пути
var s5 = [5,23,18,5,30] // массив трудозатрат на 5-м пути
var summa = new Array(5) // объявили, что summa - это массив из 5 членов
// суммирование трудозотрат по каждому пути
summa[1] = s1[0] + s1[1] + s1[2] + s1[3]
summa[2] = s2[0] + s2[1] + s2[2] + s2[3]
summa[3] = s3[0] + s3[1] + s3[2] + s3[3]
summa[4] = s4[0] + s4[1] + s4[2] + s4[3]
summa[5] = s5[0] + s5[1] + s5[2] + s5[3] + s5[4]
// Найти критическитй путь, в котором тружозатраты наименьшие
Smin = 100000 // на входе задаем заведомо ниабольшее число
// перебрать, сравнить и выбрать
for ( i=1; i < 6; i++) {
if (summa[i] < Smin) {
Smin = summa[i]
imin = i
}
}
WScript.Echo(" Минимальные затраты = " + Smin); //
вывод на печать;
WScript.Echo( " на пути = " + imin);
// трудозотрады в сетевом графе определены в пяти путях (массивах)
var s1 = [20,11,10,27,0] // массив трудозатрат на 1-м пути
var s2 = [20,4,18,30,0] // массив трудозатрат на 2-м пути
var s3 = [24,2,18,30,0] // массив трудозатрат на 3-м пути
var s4 = [5,23,1,30,0] // массив трудозатрат на 4-м
пути
var s5 = [5,23,18,5,30] // массив трудозатрат на 5-м пути
var summa = new Array(5) // объявили, что summa - это массив из 5 членов
// суммирование трудозотрат по каждому пути
summa[1] = s1[0] + s1[1] + s1[2] + s1[3]
summa[2] = s2[0] + s2[1] + s2[2] + s2[3]
summa[3] = s3[0] + s3[1] + s3[2] + s3[3]
summa[4] = s4[0] + s4[1] + s4[2] + s4[3]
summa[5] = s5[0] + s5[1] + s5[2] + s5[3] + s5[4]
// Найти критическитй путь, в котором тружозатраты наименьшие
Smin = 100000 // на входе задаем заведомо ниабольшее число
// перебрать, сравнить и выбрать
for ( i=1; i < 6; i++) {
if (summa[i] < Smin) {
Smin = summa[i]
imin = i
}
}
alert(" Минимальные затраты = " + Smin); // вывод
на печать;
alert( " на пути = " + imin);
</SCRIPT>
Скрипт 20. Линейное
программирование: при заданных ограничениях, найти маx/мin ЦФ.
Мистерия 20.1. Определить
min/max ЦФ, задать область ограничений.
Мистерия 20.2. Автоматически
"Изобразить" область ограничений, в диалоге задать точки максимума/минимума
ЦФ или точки всего контура ограничений и "Вычислить...".
Мистерия 20.3. Второй
вариант (функция ограничений может быть
вырождена в линию, параллельную координатной оси).
Мистерия 20.4. Определить
min/max ЦФ, задать область ограничений (графика средствами HTML).
Определение min/max ЦФ через макрос (в Exell)
(текст макроса).
Решение в CorelDraw (макрос здесь).
a1 = 30
b1 = 20
a2 = 15
b2 = 40
a3 = 40
b3 = 5
a4 = 100
b4 = 80
a5 = 80
b5 = 95
' Ищем точки пересечения области ограничений (через вспомогтальную функцию)
PerOtrxyS a1,0, 0,b1, a2,0, 0,b2,Kc1x,Kc1y
PerOtrxyS a1,0, 0,b1, a3,0, 0,b3,Kc2x,Kc2y
PerOtrxyS a4,0, 0,b4, a5,0, 0,b5,Kc3x,Kc3y
' В точках области ограничений (при x,y > 0 - их три) ищем значения
ЦФ F=x+y
F1 = Kc1x+Kc1y
F2 = Kc2x+Kc2y
F3 = Kc3x+Kc3y
' перебираем, сравниваем и выбираем максимум ЦФ
Fmax = 0
if (F1 > Fmax ) Then Fmax = F1
if (F2 > Fmax ) Then Fmax = F2
if (F3 > Fmax ) Then Fmax = F3
' перебираем, сравниваем и выбираем минимум ЦФ
Fmin =1000
if (F1 < Fmin ) Then Fmin = F1
if (F2 < Fmin ) Then Fmin = F2
if (F3 < Fmin ) Then Fmin = F3
MsgBox " Fmax = " & Fmax
MsgBox " Fmin = " & Fmin
Function PerOtrxyS(x1, y1, x2, y2, x3, y3, x4, y4, x, y)
s11 = y4 - y3
s12 = x3 - x4
s13 = (x3 * y3 - x3 * y4) * 1 + (y3 * x4 - y3 * x3)
s = (-s11 * x1 - s12 * y1 - s13) / (s11 * (x2 - x1) + s12 * (y2 - y1))
x = (1 - s) * x1 * 1 + s * x2 * 1
y = (1 - s) * y1 * 1 + s * y2 * 1
End Function
// Уравнения ЦФ и ограничений приведены к уравнению прямой в отрезках:
x/a+y/b=1
// отсюда задаем величины отсекаемых отрезков
var a1 = 30; var b1 = 20;
var a2 = 15; var b2 = 40;
var a3 = 40; b3 = 5;
var a4 = 100; b4 = 80;
var a5 = 80; var b5 = 95;
var a = 100; b = 100;
// Ищем точки пересечения области ограничений (через вспомогтальную
функцию)
Kc1=PerOtrxyS (a1,0,0, 0,b1,0, a2,0,0, 0,b2,0 )
Kc2=PerOtrxyS (a1,0,0, 0,b1,0, a3,0,0, 0,b3,0 )
Kc3=PerOtrxyS (a4,0,0, 0,b4,0, a5,0,0, 0,b5,0 )
// В точках области ограничений (при x,y > 0 - их три) ищем значения
ЦФ F=x+y
var F1 = Kc1.x+Kc1.y
var F2 = Kc2.x+Kc2.y
var F3 = Kc3.x+Kc3.y
// перебираем, сравниваем и выбираем максимум ЦФ
Fmax = 0
if (F1 > Fmax ) Fmax = F1
if (F2 > Fmax ) Fmax = F2
if (F3 > Fmax ) Fmax = F3
// перебираем, сравниваем и выбираем минимум ЦФ
Fmin =1000
if (F1 < Fmin ) Fmin = F1
if (F2 < Fmin ) Fmin = F2
if (F3 < Fmin ) Fmin = F3
WScript.Echo(" Fmax = " + Fmax)
WScript.Echo(" Fmin = " + Fmin)
function PerOtrxyS (x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4 ) {
var s11=y4-y3;
var s12=x3-x4;
var s13=(x3*y3-x3*y4)*1 + (y3*x4-y3*x3);
var s=(-s11*x1-s12*y1-s13)/(s11*(x2-x1)*1 + s12*(y2-y1));
var x=(1.-s)*x1*1 + s*x2*1;
var y=(1.-s)*y1*1 + s*y2*1;
var Delit3 =(x2-x1);
var z;
if (Delit3 == 0. ) {
Delit3 =(y2-y1);
z=z1*1 + (z2-z1)*(y-y1)/Delit3;
}
else {
Delit3 =(x2-x1);
z=z1*1 + (z2-z1)*(x-x1)/Delit3;
}
var Delit4 =(x3-x);
if ( x3 == x ) {
Delit4 =(y3-y);
z = z*1 + (z3-z)*(y4-y)/Delit4;
}
else {
z = z*1 + (z3-z)*(x4-x)/Delit4;
}
var p99 = {};
p99.x = x; p99.y = y; p99.z = z;
return ( p99 );
}
На HTML
<SCRIPT LANGUAGE="JavaScript">
// Задача линейного программирования. Найти мin/max линейной задачи
// Уравнения ЦФ и ограничений приведены к уравнению прямой в отрезках:
x/a+y/b=1
// отсюда задаем величины отсекаемых отрезков
var a1 = 30; var b1 = 20;
var a2 = 15; var b2 = 40;
var a3 = 40; b3 = 5;
var a4 = 100; b4 = 80;
var a5 = 80; var b5 = 95;
var a = 100; b = 100;
// Ищем точки пересечения области ограничений (через вспомогтальную
функцию)
Kc1=PerOtrxyS (a1,0,0, 0,b1,0, a2,0,0, 0,b2,0 )
Kc2=PerOtrxyS (a1,0,0, 0,b1,0, a3,0,0, 0,b3,0 )
Kc3=PerOtrxyS (a4,0,0, 0,b4,0, a5,0,0, 0,b5,0 )
// В точках области ограничений (при x,y > 0 - их три) ищем значения
ЦФ F=x+y
var F1 = Kc1.x+Kc1.y
var F2 = Kc2.x+Kc2.y
var F3 = Kc3.x+Kc3.y
// перебираем, сравниваем и выбираем максимум ЦФ
Fmax = 0
if (F1 > Fmax ) Fmax = F1
if (F2 > Fmax ) Fmax = F2
if (F3 > Fmax ) Fmax = F3
alert (" Fmax = " + Fmax)
// перебираем, сравниваем и выбираем минимум ЦФ
Fmin =1000
if (F1 < Fmin ) Fmin = F1
if (F2 < Fmin ) Fmin = F2
if (F3 < Fmin ) Fmin = F3
alert (" Fmin = " + Fmin)
function PerOtrxyS (x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4 ) {
var s11=y4-y3;
var s12=x3-x4;
var s13=(x3*y3-x3*y4)*1 + (y3*x4-y3*x3);
var s=(-s11*x1-s12*y1-s13)/(s11*(x2-x1)*1 + s12*(y2-y1));
var x=(1.-s)*x1*1 + s*x2*1;
var y=(1.-s)*y1*1 + s*y2*1;
var Delit3 =(x2-x1);
var z;
if (Delit3 == 0. ) {
Delit3 =(y2-y1);
z=z1*1 + (z2-z1)*(y-y1)/Delit3;
}
else {
Delit3 =(x2-x1);
z=z1*1 + (z2-z1)*(x-x1)/Delit3;
}
var Delit4 =(x3-x);
if ( x3 == x ) {
Delit4 =(y3-y);
z = z*1 + (z3-z)*(y4-y)/Delit4;
}
else {
z = z*1 + (z3-z)*(x4-x)/Delit4;
}
var p99 = {};
p99.x = x; p99.y = y; p99.z = z;
return ( p99 );
}
</SCRIPT>
For v=0 To 1.02 Step 1/21 ' перебрать
x91=(1-v)*x1+v*x3
y91=(1-v)*y1+v*y3
z91=(1-v)*z1+v*z3
x92=(1-v)*x2+v*x3
y92=(1-v)*y2+v*y3
z92=(1-v)*z2+v*z3
For u=0 To 1.01 Step 1/21 ' внутренний цикл
x=(1-u)*x91+u*x92
y=(1-u)*y91+u*y92
z=(1-u)*z91+u*z92
Vp=x*y*z
If (Vp > vmax) Then ' сравнить и выбрать
vmax = Vp
ctxv = x
ctyv = y
ctzv = z
End If
Next
Next
MsgBox "Vmax = " & vmax
MsgBox "a = " & ctxv & "
b = " & ctyv & " c = " & ctzv
for ( var u=0; u <= 1.01 ; u+=1/21 ) {
var x=(1-u)*x91+u*x92 ;
var y=(1-u)*y91+u*y92 ;
var z=(1-u)*z91+u*z92 ;
var Vp=x*y*z ;
if (Vp > vmax) { // сравнить и выбрать
vmax = Vp; var ctxv = x; var ctyv = y; var ctzv = z;
}
}
}
WScript.Echo(" vmax = " + rzn(vmax)); // вывод на
печать с функцией округления rzn();
WScript.Echo( " a = " + rzn(ctxv) + "
b = " + rzn(ctyv) + " c = " +
rzn(ctzv));
function rzn ( vv ) { // функция округления
return ( Math.round ( vv * 100 ) ) / 100 ;
}
var x1 = 72; var y1 = 0; var z1 = 0; // точки отсекаемой плоскости ограничений
на оси x
var x2 = 0; var y2 = 36; var z2 = 0; // точки отсекаемой плоскости
ограничений на оси y
var x3 = 0; var y3 = 0; var z3 = 36; // точки отсекаемой плоскости
ограничений на оси z
var vmax = 0;
for ( var v=0; v <= 1.02 ; v+=1/21 ) { // перебрать
var x91=(1-v)*x1+v*x3 ;
var y91=(1-v)*y1+v*y3 ;
var z91=(1-v)*z1+v*z3 ;
var x92=(1-v)*x2+v*x3 ;
var y92=(1-v)*y2+v*y3 ;
var z92=(1-v)*z2+v*z3 ;
for ( var u=0; u <= 1.01 ; u+=1/21 ) {
var x=(1-u)*x91+u*x92 ;
var y=(1-u)*y91+u*y92 ;
var z=(1-u)*z91+u*z92 ;
var Vp=x*y*z ;
if (Vp > vmax) { // сравнить и выбрать
vmax = Vp; var ctxv = x; var ctyv = y; var ctzv = z;
}
}
}
alert ( " vmax = " + rzn(vmax) ); // вывод на печать
с функцией округления rzn()
alert ( " a = " + rzn(ctxv) + " b =
" + rzn(ctyv) + " c = " + rzn(ctzv)
);
function rzn ( vv ) { // функция округления
return ( Math.round ( vv * 100 ) ) / 100 ;
}
</SCRIPT>