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

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

Материал из Химсофт Вики
Новая страница: «==Типы данных== Математический язык программирования поддерживает следующие типы данных: *числовой тип Целое число, либо число с десятичной частью, записываемой через точку *строковый тип Записывается либо в одиночных либо в двойных кавычках *логиче...»
 
Нет описания правки
Строка 3: Строка 3:
Математический язык программирования поддерживает следующие типы данных:
Математический язык программирования поддерживает следующие типы данных:


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


*строковый тип
Строковый тип
Записывается либо в одиночных либо в двойных кавычках
Записывается либо в одиночных либо в двойных кавычках:
str1 = 'Строковое значение 1'
str2 = 'Строковое значение 2'


*логический тип
Логический тип
Может принимать значения true либо false (логические истина или ложь)
Может принимать значения 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
Простое условие
a = 10
b = 5
 
if(a > b) {
    SetResult(b)
}
 
// Результат 5
Условие обозначается ключевым словом if (если)
В круглых скобках записывается выражение, результатом которого должно быть логическое значение
в фигурных скобках записывается код, который выполнится, если условие в круглых скобках равно true
Ветвления
Ветвления условий начинаются после блока 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
x = 2
 
for i = 1; i < 10; i = i + 1 {
    x = x^i
}
 
SetResult(x)
 
// Результат 2147483647
Цикл всегда начинается с ключевого слова for
i = 1 - объявление переменной (число) с которого начинается первая итерация цикла
i < 10 - указвает ограничнеие количества итераций цикла, т.е. цикл будет выполняться, пока переменная 'i' меньше 10
i = i + 1 - означает, что на каждой итерации переменная i будет увеличиваться на 1
итерация - это выполнение кода внутри фигурных скобок цикла
 
==Примеры расчетных формул калькулятора==
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. умеренная степень токсичности

Версия от 02:28, 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 Простое условие a = 10 b = 5

if(a > b) {

   SetResult(b)

}

// Результат 5 Условие обозначается ключевым словом if (если) В круглых скобках записывается выражение, результатом которого должно быть логическое значение в фигурных скобках записывается код, который выполнится, если условие в круглых скобках равно true Ветвления Ветвления условий начинаются после блока 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 x = 2

for i = 1; i < 10; i = i + 1 {

   x = x^i

}

SetResult(x)

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

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

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. умеренная степень токсичности