Перейти к содержанию

Описание работы и синтаксиса скриптов: различия между версиями

Материал из Химсофт Вики
 
(не показано 19 промежуточных версий этого же участника)
Строка 76: Строка 76:


==Переменные формул калькулятора==
==Переменные формул калькулятора==
Переменные предназначены для хранения и вывода результатов промежуточных вычислений.
Переменные предназначены для хранения и вывода результатов промежуточных вычислений.


Переменные могут хранить следующие типы данных: число, строка или массив.
Переменные могут хранить следующие типы данных: число, строка или массив.


Значение переменных задаются при помощи оператора присваивания =, например:
Значение переменных задаются при помощи оператора присваивания <code>=</code>, например:


<syntaxhighlight>
a = 100
a = 100
b = Sin(Sqrt(10^3))
b = Sin(Sqrt(10^3))
Строка 87: Строка 89:


SetResult(c)
SetResult(c)
Правила названия переменных:
</syntaxhighlight>
 
===Правила названия переменных===
Имя переменной может включать в себя:
*латиницу в любом регистре
*кириллицу в любом регистре
*цифры и нижнее подчёркивание (кроме первого символа)


имя переменной может включать в себя:
латиницу в любом регистре
кириллицу в любом регистре
цифры и нижнее подчёркивание (кроме первого символа)
Обращение к переменной возможно только после её объявления, иначе вычисление останавливается:
Обращение к переменной возможно только после её объявления, иначе вычисление останавливается:


<syntaxhighlight>
SetResult(a)
SetResult(a)
a = 10
a = 10


// Ошибка расчёта. Переменная "a" не существует в контексте
// Ошибка расчёта. Переменная "a" не существует в контексте
</syntaxhighlight>


==Встроенные функции в формулах==
==Встроенные функции в формулах==
! Все функции необходимо вызывать с передачей им параметров в круглых скобках
! При наличии нескольких параметров, передача их значений в функцию осуществляется в строго заданном порядке


SetResult
<div style="background-color: #fff3cd; border-left: 5px solid #ffc107; padding: 15px; margin: 10px 0;">
'''Внимание!'''
*Все функции необходимо вызывать с передачей им параметров в круглых скобках.
*При наличии нескольких параметров, передача их значений в функцию осуществляется в строго заданном порядке.
</div>
 
===SetResult===
Рассчитывает результат.
Рассчитывает результат.
Например, объявили переменную X и присвоили ей значение 10
Например, объявили переменную <code>X</code> и присвоили ей значение <code>10</code>.


<syntaxhighlight>
X = 10
X = 10
SetResult(X)
SetResult(X)


// Результат 15
// Результат 15
CreateArray
</syntaxhighlight>
Создаёт пустой массив.
 
Массив - набор последовательно заданных значений
===CreateArray===
У массива существуют методы Add и Get
 
Создаёт пустой массив (набор последовательно заданных значений). У массива существуют методы <code>Add</code> и <code>Get</code>.


Код ниже делает следующее:
Код ниже делает следующее:
*создаёт пустой массив;
*добавляет в массив последовательно значения <code>10</code>, <code>20</code>, <code>30</code>;
*получает элемент массива с индексом <code>1</code> при помощи метода <code>Get</code>;
*возвращает значение элемента массива.
<div style="background-color: #fff3cd; border-left: 5px solid #ffc107; padding: 15px; margin: 10px 0;">
'''Внимание!'''
*Нумерация элементов массива начинается с индекса <code>0</code>.
</div>


Создаёт пустой массив
<syntaxhighlight>
Добавляет в массив последовательно значения 10, 20, 30
Получает элемент массива с индексом 1 при помощи метода Get
Возвращает значение элемента массива
! Нумерация элементов массива начинается с индекса 0
arr = CreateArray()
arr = CreateArray()


Строка 133: Строка 150:


// Результат 20
// Результат 20
Sqrt
</syntaxhighlight>
Принимает один параметр: число Вычисляет квадратный корень числа
 
===Sqrt===
Вычисляет квадратный корень числа. Принимает один параметр: <code>число</code>.


<syntaxhighlight>
SetResult(Sqrt(144))
SetResult(Sqrt(144))


// Результат 12
// Результат 12
Sin
</syntaxhighlight>
Принимает один параметр: число (угол в градусах)
 
Вычисляет синус угла
===Sin===
 
Вычисляет синус угла. Принимает один параметр: <code>число (угол в градусах)</code>.


<syntaxhighlight>
SetResult(Sin(90))
SetResult(Sin(90))


// Результат 1
// Результат 1
Cos
</syntaxhighlight>
Принимает один параметр: число (угол в градусах)
 
Вычисляет косинус угла
===Cos===
 
Вычисляет косинус угла. Принимает один параметр: <code>число (угол в градусах)</code>.


<syntaxhighlight>
SetResult(Cos(0))
SetResult(Cos(0))


// Результат 1
// Результат 1
Abs
</syntaxhighlight>
Принимает один параметр: число
 
Вычисляет модуль числа
===Abs===
 
Вычисляет модуль числа. Принимает один параметр: <code>число</code>.


<syntaxhighlight>
SetResult(Abs(-100))
SetResult(Abs(-100))


// Результат 100
// Результат 100
Round
</syntaxhighlight>
Принимает параметры: число, тип округления, количество знаков после запятой
 
Округляет число
===Round===
 
Округляет число. Принимает параметры: <code>число</code>, <code>тип округления</code>, <code>количество знаков после запятой</code>.


<syntaxhighlight>
SetResult(Round(2.55894, 'decimal_places', 3))
SetResult(Round(2.55894, 'decimal_places', 3))


// Результат 2.559
// Результат 2.559
Второй параметр (тип округления) может принимать 2 значения:
</syntaxhighlight>


'decimal_places' (знаки после запятой)
Второй параметр (<code>тип округления</code>) может принимать 2 значения:
'significant' (значащие цифры)


==Синтаксические конструкции используются для разработки алгоритмов математических вычислений с различными условиями.==
*<code>decimal_places</code> - знаки после запятой,
- Условия и ветвления, оператор if
*<code>significant</code> - значащие цифры.
Простое условие
 
==Синтаксические конструкции используются для разработки алгоритмов математических вычислений с различными условиями==
 
===Условия и ветвления, оператор <code>if</code>===
 
'''Простое условие'''
*условие обозначается ключевым словом <code>if</code> (если);
*в круглых скобках записывается выражение, результатом которого должно быть логическое значение;
*в фигурных скобках записывается код, который выполнится, если условие в круглых скобках равно <code>true</code>.
 
<syntaxhighlight>
a = 10
a = 10
b = 5
b = 5
Строка 183: Строка 224:


// Результат 5
// Результат 5
Условие обозначается ключевым словом if (если)
</syntaxhighlight>
В круглых скобках записывается выражение, результатом которого должно быть логическое значение
 
в фигурных скобках записывается код, который выполнится, если условие в круглых скобках равно true
'''Ветвления'''
Ветвления
*ветвления условий начинаются после блока <code>if</code> и реализуются с помощью ключевых слов <code>else if</code>, <code>else</code>;
Ветвления условий начинаются после блока if и реализуются с помощью ключевых слов, else if, else
*блок <code>else if</code> задаёт новое условие, если условие предыдущего блока <code>if</code> или <code>else if</code> не выполнилось;
Блок else if задаёт новое условие, если условие предыдущего блока if или else if не выполнилось
*блок <code>else</code> пишется только в конце последовательности блоков <code>if</code> и <code>else if</code> и выполняется только если ни одно из условий последовательности не выполнилось.
Блок else пишется только в конце последовательности блоков if и else if и выполняется только если ни одно из условий последовательности не выполнилось
 
<syntaxhighlight>
a = 10
a = 10
b = 50
b = 50
Строка 204: Строка 246:


// Результат 100
// Результат 100
</syntaxhighlight>
Условия могут быть вложенными, например:
Условия могут быть вложенными, например:


<syntaxhighlight>
a = 10
a = 10
b = 50
b = 50
Строка 226: Строка 271:


// Результат 30
// Результат 30
- Циклы, оператор for
</syntaxhighlight>
 
===Циклы, оператор <code>for</code>===
 
*цикл начинается с ключевого слова <code>for</code>;
*<code>итерация</code> - выполнение кода внутри фигурных скобок цикла;
*<code>i = 1</code> - объявление переменной (число) с которого начинается первая итерация цикла;
*<code>i < 10</code> - указывает ограничение количества итераций цикла, то есть цикл будет выполняться, пока переменная <code>i</code> меньше <code>10</code>;
*<code>i = i + 1</code> - означает, что на каждой итерации переменная <code>i</code> будет увеличиваться на <code>1</code>.
 
<syntaxhighlight>
x = 2  
x = 2  


Строка 236: Строка 291:


// Результат 2147483647
// Результат 2147483647
Цикл всегда начинается с ключевого слова for
</syntaxhighlight>
i = 1 - объявление переменной (число) с которого начинается первая итерация цикла
i < 10 - указвает ограничнеие количества итераций цикла, т.е. цикл будет выполняться, пока переменная 'i' меньше 10
i = i + 1 - означает, что на каждой итерации переменная i будет увеличиваться на 1
итерация - это выполнение кода внутри фигурных скобок цикла


==Примеры расчетных формул калькулятора==
==Примеры расчетных формул калькулятора==
1. ГОСТ 21534 (Хлор.соли) Метод А
===1. ГОСТ 21534 (Хлор.соли) Метод А===
Пример без цикла:
 
'''Пример без цикла:'''
 
<syntaxhighlight>
Vраств = 1000
Vраств = 1000
Vр = Vраств
Vр = Vраств
Строка 280: Строка 334:


SetResult(Round(X2, 'decimal_places', 2)) // 1111.11
SetResult(Round(X2, 'decimal_places', 2)) // 1111.11
Пример с циклом:
</syntaxhighlight>
 
'''Пример с циклом:'''
 
<syntaxhighlight>
Vраств = 1000
Vраств = 1000
Vр = Vраств
Vр = Vраств
Строка 320: Строка 378:


SetResult(Round(X2, 'decimal_places', 2)) // 1111.11
SetResult(Round(X2, 'decimal_places', 2)) // 1111.11
2. Биотестирование
</syntaxhighlight>
 
===2. Биотестирование===
 
<syntaxhighlight>
Iср_к = 100
Iср_к = 100
Iср_к_Кр = 80
Iср_к_Кр = 80
Строка 393: Строка 455:


SetResult(СтепеньТоксичности_токс) // II. умеренная степень токсичности
SetResult(СтепеньТоксичности_токс) // II. умеренная степень токсичности
</syntaxhighlight>

Текущая версия от 03:04, 13 мая 2026

Типы данных

Математический язык программирования поддерживает следующие типы данных:

Числовой тип

Целое число, либо число с десятичной частью, записываемой через точку:

X = 10

Строковый тип

Записывается либо в одиночных либо в двойных кавычках:

str1 = 'Строковое значение 1'
str2 = 'Строковое значение 2'

Логический тип

Может принимать значения true либо false (логические истина или ложь):

booleanVar = true

Операторы

Оператор присваивания =

Присваивает переменной значение

a = 100  
b = Sin(Sqrt(10^3))  
c = a^b

Операторы сравнения

  • < - меньше,
  • > - больше,
  • <= - меньше или равно,
  • >= - больше или равно,
  • == - равно.

Использование данных операторов подчиняется правилам математики, например:

a = 5 < 10 // true
b = 10 >= 15 // false
c = 10 == 10.1 // false

Логические операторы

  • or - или,
  • and - и.

Предназначены для организации логических вычислений, например:

a = 5 < 10 // true
b = 10 >= 15 // false
c = 10 == 10.1 // false

d = a or b and c // true

Арифметические операторы

  • +
  • -
  • *
  • /
  • % - остаток от деления (на текущий момент не поддерживается).

Переменные формул калькулятора

Переменные предназначены для хранения и вывода результатов промежуточных вычислений.

Переменные могут хранить следующие типы данных: число, строка или массив.

Значение переменных задаются при помощи оператора присваивания =, например:

a = 100
b = Sin(Sqrt(10^3))
c = a^b

SetResult(c)

Правила названия переменных

Имя переменной может включать в себя:

  • латиницу в любом регистре
  • кириллицу в любом регистре
  • цифры и нижнее подчёркивание (кроме первого символа)

Обращение к переменной возможно только после её объявления, иначе вычисление останавливается:

SetResult(a)
a = 10

// Ошибка расчёта. Переменная "a" не существует в контексте

Встроенные функции в формулах

Внимание!

  • Все функции необходимо вызывать с передачей им параметров в круглых скобках.
  • При наличии нескольких параметров, передача их значений в функцию осуществляется в строго заданном порядке.

SetResult

Рассчитывает результат. Например, объявили переменную X и присвоили ей значение 10.

X = 10
SetResult(X)

// Результат 15

CreateArray

Создаёт пустой массив (набор последовательно заданных значений). У массива существуют методы Add и Get.

Код ниже делает следующее:

  • создаёт пустой массив;
  • добавляет в массив последовательно значения 10, 20, 30;
  • получает элемент массива с индексом 1 при помощи метода Get;
  • возвращает значение элемента массива.

Внимание!

  • Нумерация элементов массива начинается с индекса 0.
arr = CreateArray()

arr.Add(10)
arr.Add(20)
arr.Add(30)

SetResult(arr.get(1))

// Результат 20

Sqrt

Вычисляет квадратный корень числа. Принимает один параметр: число.

SetResult(Sqrt(144))

// Результат 12

Sin

Вычисляет синус угла. Принимает один параметр: число (угол в градусах).

SetResult(Sin(90))

// Результат 1

Cos

Вычисляет косинус угла. Принимает один параметр: число (угол в градусах).

SetResult(Cos(0))

// Результат 1

Abs

Вычисляет модуль числа. Принимает один параметр: число.

SetResult(Abs(-100))

// Результат 100

Round

Округляет число. Принимает параметры: число, тип округления, количество знаков после запятой.

SetResult(Round(2.55894, 'decimal_places', 3))

// Результат 2.559

Второй параметр (тип округления) может принимать 2 значения:

  • decimal_places - знаки после запятой,
  • significant - значащие цифры.

Синтаксические конструкции используются для разработки алгоритмов математических вычислений с различными условиями

Условия и ветвления, оператор if

Простое условие

  • условие обозначается ключевым словом if (если);
  • в круглых скобках записывается выражение, результатом которого должно быть логическое значение;
  • в фигурных скобках записывается код, который выполнится, если условие в круглых скобках равно true.
a = 10
b = 5

if(a > b) {
    SetResult(b)
}

// Результат 5

Ветвления

  • ветвления условий начинаются после блока if и реализуются с помощью ключевых слов else if, else;
  • блок else if задаёт новое условие, если условие предыдущего блока if или else if не выполнилось;
  • блок else пишется только в конце последовательности блоков if и else if и выполняется только если ни одно из условий последовательности не выполнилось.
a = 10
b = 50
c = 30
d = 100

if(a> b) {
    SetResult(b)
} else if(a > c) {
    SetResult(a)
} else {
    SetResult(d)
}

// Результат 100

Условия могут быть вложенными, например:

a = 10
b = 50
c = 30
d = 100

if(a > b) {
    if(a < c) {
        SetResult(a)
    } else {
        SetResult(b)
    }
} else if (a < c) {
    if(d > c) {
        SetResult(c)
    }
} else {
    SetResult(d)
}

// Результат 30

Циклы, оператор for

  • цикл начинается с ключевого слова for;
  • итерация - выполнение кода внутри фигурных скобок цикла;
  • i = 1 - объявление переменной (число) с которого начинается первая итерация цикла;
  • i < 10 - указывает ограничение количества итераций цикла, то есть цикл будет выполняться, пока переменная i меньше 10;
  • i = i + 1 - означает, что на каждой итерации переменная i будет увеличиваться на 1.
x = 2 

for i = 1; i < 10; i = i + 1 {
    x = x^i
}

SetResult(x)

// Результат 2147483647

Примеры расчетных формул калькулятора

1. ГОСТ 21534 (Хлор.соли) Метод А

Пример без цикла:

Vраств = 1000
Vр = Vраств
V2 = 500

V1_1 = 1000
V1_2 = 700
V1_3 = 850
V1_4 = 550
V1_5 = 650

A = 5
B = 10
C = 15

p = 750

if (V1_1 > 0) {X1_1 = V1_1 - V2} else {X1_1 = 0}
X2_1 = X1_1*100/((B*C)*(p/1000))

if (V1_2 > 0) {X1_2 = V1_2 - V2} else {X1_2 = 0}
X2_2 = X1_2*100/((B*C)*(p/1000))

if (V1_3 > 0) {X1_3 = V1_3 - V2} else {X1_3 = 0}
X2_3 = X1_3*100/((B*C)*(p/1000))

if (V1_4 > 0) {X1_4 = V1_4 - V2} else {X1_4 = 0}
X2_4 = X1_4*100/((B*C)*(p/1000))

if (V1_5 > 0) {X1_5 = V1_5 - V2} else {X1_5 = 0}
X2_5 = X1_5*100/((B*C)*(p/1000))

X2 = (X2_1 + X2_2 + X2_3 + X2_4 + X2_5)
X1 = (X1_1 + X1_2 + X1_3 + X1_4 + X1_5)

SetResult(Round(X2, 'decimal_places', 2)) // 1111.11

Пример с циклом:

Vраств = 1000
Vр = Vраств
V2 = 500

V1_1 = 1000
V1_2 = 700
V1_3 = 850
V1_4 = 550
V1_5 = 650

V1Values = CreateArray()

V1Values.Add(V1_1)
V1Values.Add(V1_2)
V1Values.Add(V1_3)
V1Values.Add(V1_4)
V1Values.Add(V1_5)

A = 5
B = 10
C = 15

p = 750

X1 = 0
X2 = 0

for i =0; i < 5; i = i + 1 {
    V1_i = V1Values.Get(i)
    X1_i = 0
    if (V1_i > 0) {
        X1_i = V1_i - V2
    } else {X1_i = 0}
    X2_i = X1_i*100/((B*C)*(p/1000))
    X1 = X1 + X1_i
    X2 = X2 + X2_i
}

SetResult(Round(X2, 'decimal_places', 2)) // 1111.11

2. Биотестирование

Iср_к = 100
Iср_к_Кр = 80

I1ср_а_токс = 60
I2ср_а_токс = 35
I3ср_а_токс = 75

T1_токс = Abs(Iср_к - I1ср_а_токс)/Iср_к_Кр
T2_токс = Abs(Iср_к - I2ср_а_токс)/Iср_к_Кр
T3_токс = Abs(Iср_к - I3ср_а_токс)/Iср_к_Кр

Тср_токс=(T1_токс+T2_токс+T3_токс)/3

// Тмах_токс
if (T1_токс>T2_токс and T1_токс>T3_токс) {
    Тмах_токс = T1_токс
} else if (T2_токс>T1_токс and T2_токс>T3_токс){
     Тмах_токс = T2_токс
} else if (T3_токс>T2_токс and T3_токс>T1_токс) {
    Тмах_токс = T3_токс
} else {
    Тмах_токс = 0
}

// T_мин_токс
if (T1_токс<T2_токс and T1_токс<T3_токс) {
    T_мин_токс = T1_токс
} else if (T2_токс<T1_токс and T2_токс<T3_токс){
     Tмин_токс = T2_токс
} else if (T3_токс<T2_токс and T3_токс<T1_токс) {
    Тмин_токс = T3_токс
} else {
    Tмин_токс = 0
}

SetResult(Тср_токс)
SetResult(Тмах_токс)
SetResult(Тмин_токс)

// Трасч_токс
if (Abs(Тср_токс-Тмах_токс) > Abs(Тср_токс-Тмин_токс) ) {
    Трасч_токс = Тмах_токс
} else if (Abs(Тср_токс-Тмах_токс) < Abs(Тср_токс-Тмин_токс)) {
    Трасч_токс = Тмин_токс
} else {
    Трасч_токс = 0
}

Тр_токс=Abs(Тср_токс-Трасч_токс)
r = Тср_токс * 0.20

if (Тр_токс<=r) {
    Приемл_токс = 'приемлемо'
} else { Приемл_токс = 'неприемлемо' }

Тср_кон=Тср_токс

if (Тср_токс > 0 and Тср_токс <= 0.40) {
    Ст_токс1_токс = 'I. допустимая степень токсичности'
} else {Ст_токс1_токс = ' '}

if (Тср_токс > 0.40 and Тср_токс <= 0.70) {
    Ст_токс2_токс = 'II. умеренная степень токсичности'
} else {Ст_токс2_токс = ' '}

if (Тср_токс > 0.70) {
    Ст_токс3_токс = 'III. высокая степень токсичности'
} else {Ст_токс3_токс = ' '}

СтепеньТоксичности_токс = Ст_токс1_токс + Ст_токс2_токс + Ст_токс3_токс

SetResult(СтепеньТоксичности_токс) // II. умеренная степень токсичности