Операторы

Для каждой константы или переменной в SimInTech тип определяется своим значением и принадлежит к какому-либо типу данных.

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

В общем случае выражение состоит из нескольких элементов (операндов) и знаков операций (операторов), а тип данных его значения определяется типом операндов и видом применяемых к ним операций.

Если операции имеют равный приоритет, то они будут выполняться последовательно, слева направо.

Если приоритет операции выше, то она будет выполнена в первую очередь, независимо от расположения знака операции. В первую очередь вычисляются также выражения, заключенные в скобки, после чего они рассматриваются как операнды. В выражении (x > 0) and (y > 0) скобки необходимы, поскольку операции отношения имеют самый низкий приоритет.

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

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

Операции над матрицами определены в соответствии с правилами линейной алгебры, а операции над массивами выполняются поэлементно (в последнем случае размеры массивов должны совпадать).

Массив воспринимается как вектор-строка. Вектор-столбец задается как матрица размером n x 1, например A=[[1],[3],[2]]; либо как транспонированный массив: A=transp([1,3,2]);

Оператор Семантика Назначение Пример
+ слагаемое 1+слагаемое 2 Сложение двух выражений. Матрицы и вектора складываются поэлементно. Для строк сложение соответствует конкатенации.
//Сложение чисел
//Целые числа
a1 = 1 + 10;       //a1 =  11
//Вещественные числа 
a2 = 2.43 + 5.46;  //a2 =  7.89
//Сложение векторов
//Вектор с целыми числами
v1 = [1, 1] + [5, 7];
//v1 = [6, 8]
//Вектор с вещественными числами
v2 = [2.23, -0.47] + [5.48, 2.96]; 
//v2 = [7.71 , 2.49]
//Сложение матриц
m1 = [[8, 6], [2, 4]] + [[12, 1],[-8, 6]]; 
//m1 = [[20, 7],[-6, 10]]
//Объединение строк
str = "Язык программирования" + " " + "SimInTech";
//str = "Язык программирования SimInTech"
- уменьшаемоевычитаемое Вычитание из первого выражения второго. Для строк не определено. Матрицы и вектора вычитаются поэлементно
//Вычитание чисел
//Целые числа
a1 = 10 - 5;       //a1 = 5
//Вещественные числа
a2 = 8.86 - 2.37;  //a2 = 6.49
//Вычитание векторов
//Вектор с целыми числами
v1 = [1, 1] - [5, 7];
//v1 = [-4, -6]
//Вектор с вещественными числами
v2 = [2.23, -0.47] - [5.48, 2.96]; 
//v2 = [-3.25, -3.43]
//Вычитание матриц
m1 = [[8, 6], [2, 4]] - [[12, 1],[-8, 6]]; 
//m1 = [[-4, 5];[10, -2]]
+= базовое значение += значение инкремента Оператор инкремента. Выражение, сформированное с помощью оператора +=
x += y
эквивалентно выражению
x = x + y

Оператор может быть использован для чисел, векторов, матриц и строк.

//Инкремент чисел
//Целые числа
var a1: integer;

a1 = 0;
a1 += 1; //a1 = 1
a1 += 5; //a1 = 6

//Вещественные числа 
var a2: double;

a2 = 0.1;
a2 += 1.5;  //a2 = 1.6
a2 += 0.73; //a2 = 2.33
//Инкремент векторов 
var v1: array;

v1  = [1, 1];
v1 += [3, 4]; //v1 = [4, 5]
v1 += [1, 3]; //v1 = [5, 8]
//Инкремент строк
var str: string;

str = "Sim";
str += "In";    //str = "SimIn"
str += "Tech";  //str = "SimInTech"
-= базовое значение –= значение декремента Оператор декремента. Выражение, сформированное с помощью оператора -=
x -= y
эквивалентно выражению
x = x - y

Оператор может быть использован для чисел, векторов, матриц.

//Декремент чисел
//Целые числа
var a1: integer;

a1 = 0;
a1 -= 1; //a1 = -1
a1 -= 5; //a1 = -6

//Вещественные числа 
var a2: double;

a2 = 0.1;
a2 -= 1.5;  //a2 = -1.4
a2 -= 0.73; //a2 = -2.13
//Декремент векторов
var v1: array;

v1  = [1, 1];
v1 -= [3, 4]; //v1 = [-2, -3]
v1 -= [1, 3]; //v1 = [-3, -6]
* множитель 1 * множитель 2 Умножение первого выражения на второе. Вектора умножаются поэлементно. Матрицы перемножаются по правилам умножения матриц
//Умножение чисел
a1 = 5*3;      //a1 = 15
a2 = 7.86*2.1; //a2 = 16.506
//Умножение векторов
//Вектор с целыми числами
v1 = [2,3] * [5,7]; 
//v1 = [10, 21]
//Вектор с вещественными числами
v2 = [2.2, -0.4] * [5.4, 2.9]; 
//v2 = [11.88, -1.16]
//Умножение матриц
m1 = [[8, 6], [2, 4]] * [[12, 1],[-8, 6]]; 
//m1 = [[48, 44];[-8, 26]]
.* матрица 1.* матрица 2 Поэлементное перемножение действительных или комплексных матриц
//Поэлементное умножение матриц
m1 = [[9, 6], [2, 3]] .* [[12, 1],[-8, 6]]; 
//m1 = [[96, 6]; [-16, 24]]
/ делимое / делитель Прямое деление первого выражения на второе. Вектора делятся поэлементно. Для матриц производится умножение на обратную матрицу
//Деление чисел
a1 = 3/10;        //a1 = 0.3
a2 = 20.484/3.75; //a2 = 5.4624
//Деление векторов
v1 = [1,1]/[10,20]; //v1 = [0.1, 0.05]
//Деление матриц
m1 = [[9, 6], [2, 3]] / [[12, 1],[-8, 6]]; 
//m1 = [[96, 6]; [-16, 24]]
./ матрица 1 ./ матрица 2 Поэлементное деление действительных или комплексных матриц
//Поэлементное деление матриц
m1 = [[9, 6], [2, 3]] ./ [[12, 1],[-8, 6]]; 
//m1 = [[0.75, 6]; [-0.25, 0.5]]
\ матрица A \ матрица B Обратное деление матриц. Соответствует операции A-1*B
//Обратное деление матриц
m1 = [[9, 6], [2, 3]] \ [[12, 1],[-8, 6]];
m1 = [[5.6 , -2.2];[-6.4 , 3.466666667]]
^ базовое значение ^ степень Возведение первого выражение в степень второго. Вектора обрабатываются поэлементно. Матрицы возводятся в степень по правилам умножения матриц
//Возведение в степень
a1 = 2^3;      //Результат 8
a2 = 2^3^3;    //Результат 512
a3 = (2^3)^3;  //Результат 512
 //Возведение в степень матрицы
m1 = [[1, 2], [3, 4]] .^ 2;
m1 = [[7 , 10];[15 , 22]]
.^ матрица 1 .^ матрица 2 Возведение матрицы в степень или поэлементное возведение в степень двух матриц
//Поэлементное возведение матриц в степень
m1 = [[1, 2], [3, 4]] .^ 2;
m1 = [[1 , 4];[9 , 16]]
//Поэлементное возведение матриц в степень
m1 = [[1, 2], [3, 4]] .^ [[1, 2], [3, 4]];
m1 = [[1 , 4];[27 , 256]]
! целое число! Вычисление факториала целого числа
//Вычисление факториала
a = 4!; //a = 1*2*3*4 = 24
.. A..B

Вычисление интервала чисел от A до B.

Опционально при использовании оператора может быть задан шаг интервала. Шаг интервала указывается через символ ":", после которого указывается значение шага.

Также опционально только при указании шага интервала оператор может быть использован при вычислении интервала вещественных чисел

//Интервал целых чисел
a = 1..5; //a = [1,2,3,4,5] 
//Интервал целых чисел 
//с заданием шага интервала
a = 1..9:2; //a = [1,3,5,7,9]
//Интервал вещественных чисел 
//с заданием шага интервала
a = 1.1..1.9:0.2; //a = [1.1,1.3,1.5,1.7,1.9]
# A#B Размножение числа B в вектор размерностью A
//Размножение числа в вектор
v = 3#0.1; //v = [0.1, 0.1, 0.1]
& A&B Объединение векторов A и B
//Объединение векторов
v = [1,2] & 3..6 & 2#7; 
//v = [1, 2, 3, 4, 5, 6, 7, 7]

Целочисленные и логические операторы

Оператор Семантика Назначение Пример
or выражение 1 or выражение 2 Побитовая логическая операция ИЛИ
Данная операция в SimInTech также представлена в виде блоков:
var a: boolean,
     b: boolean;

if a or b then c = 1 else c = 0;
var a: double,
     b: double;

if a or b then c = 1 else c = 0;
and выражение 1 and выражение 2 Побитовая логическая операция И
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
     b: double;

if (a > 0) and (b < -1) then c = 1 else c = 0;
xor выражение 1 xor выражение 2 Побитовая логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
     b: double;

if (a xor b) then c = 1 else c = 0;
not выражение 1 not выражение 2 Побитовая логическая операция НЕ
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
     b: double;

if (not a) then c = 1 else c = 0;
div делимое div делитель Целочисленное деление
var a1: double,
     a2: double,
     a3: double,
     a4: double;

a1 = 5/2;     //a1 = 2.5
a2 = 5 div 2; //a2 = 2
a3 = 3 div 2; //a3 = 1
a4 = 3 div 4; //a4 = 0
mod делимое mod делитель Остаток от целочисленного деления
var a1: double,
    a2: double,
    a3: double;

a1 = 5 mod 2; //a1 = 1
a2 = 3 mod 2; //a2 = 1
a3 = 3 mod 4; //a3 = 0
shl число shl количество сдвигов Побитовый сдвиг влево
var a: double,
    b1: double,
    b2: double,
    b3: double;

a = 1; //a = 1 (1 в двоичной)
b1 = a shl 1; //b1 = 2 (10 в двоичной)
b2 = a shl 2; //b2 = 4 (100 в двоичной)
b3 = a shl 3; //b3 = 8 (1000 в двоичной)
shr число shr количество сдвигов Побитовый сдвиг вправо
var a: double,
    b1: double,
    b2: double,
    b3: double,
    b4: double;

a = 8; //a = 8 (1000 в двоичной)
b1 = a shr 1; //b1 = 4 (100 в двоичной)
b2 = a shr 2; //b2 = 2 (100 в двоичной)
b3 = a shr 3; //b3 = 1 (1 в двоичной)
b4 = a shr 4; //b4 = 0 (0 в двоичной)
> операнд 1 > операнд 2 Операция БОЛЬШЕ. Операция возвращает True, если операнд 1 больше чем операнд 2.
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
    b: double;

if (a > 0) then c = 1 else c = 0;
< операнд 1 < операнд 2 Операция МЕНЬШЕ. Операция возвращает True, если операнд 1 меньше чем операнд 2.
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
    b: double;

if (a < 0) then c = 1 else c = 0;
>= операнд 1 >= операнд 2 Операция БОЛЬШЕ ЛИБО РАВНО. Операция возвращает True, если операнд 1 больше либо равен операнду 2.
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
    b: double;

if (a >= 0) then c = 1 else c = 0;
<= операнд 1 <= операнд 2 Операция МЕНЬШЕ ЛИБО РАВНО. Операция возвращает True, если операнд 1 меньше либо равен операнду 2.
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
    b: double;

if (a <= 0) then c = 1 else c = 0;
= операнд 1 = операнд 2 Операция РАВНО. Операция возвращает True, если операнд 1 равен операнду 2.
Данная операция также представлена в SimInTech в виде блоков:
var a: double,
    b: double;

if a = b then c = 1 else c = 0;
if (a = 0) or (b = -1) then c = 1 else c = 0;
<> операнд 1 <> операнд 2 Операция НЕ РАВНО. Операция возвращает True, если операнд 1 не равен операнду 2.

Данная операция также представлена в SimInTech в виде блоков:

var a: double,
    b: double;

if a <> b then c = 1 else c = 0;

Специальные операторы

Оператор Семантика Назначение Пример
() ("выражение") Математические скобки.

Выражение внутри скобок выполняется первым.

//Вычисление арифметического выражения
a1 = 4*(10+7); //Результат a1 = 68
a2 = 4*10 +7 ; //Результат a2 = 47
() ("действительная часть","мнимая часть") Упаковка действительных чисел (векторов, матриц) в комплексное (комплексный вектор, матрицу). Допустимо написание частей комплексного числа через пробел или точку с запятой.
//Объявление комплексного числа
c1 = (10,5); //Вариант 1 с использованием символа ","
c2 = (14 8); //Вариант 2 с использованием символа " "
c3 = (18;0); //Вариант 3 с использованием символа ";"
[] ["элемент 1"{,"элемент 2"}] Упаковка элементов в массив:
  • если элементы – действительные или целые числа, то результат – вектор действительных чисел;
  • если элементы – векторы действительных чисел, результат – матрица действительных чисел;
  • если элементы – комплексные числа, то результат – вектор комплексных чисел
  • если элементы – векторы комплексных чисел, результат – матрица комплексных чисел.
Разделителем элементов вектора могут быть следующие символы:
  • запятая;
  • точка с запятой;
  • пробел.
Примечание:
Если элемент вектора отрицательное число (например, -0.23), то данный элемент в векторе должен отделяться от предыдущего запятой.

Векторы и матрицы можно присваивать, при этом способ расчета для данных векторов и матриц должны быть объявлены как "Переменные".

//Объявление вектора
v1 = [1, 4.5, 7]; //Вариант 1 с использованием символа ","
v2 = [1 4.5 7];   //Вариант 2 с использованием символа " "
v3 = [1; 4.5; 7]; //Вариант 3 с использованием символа ";"
//Пример работы символа " " при объявлении вектора, 
содержащего отрицательное число
v1 = [0, -0.23 2 3]; //Результат [0, -0.23, 2, 3]
v2 = [0 -0.23 2 3];  //Неправильно. Результат [-0.23, 2, 3]
//Объявление матрицы
m1 = [[1,2], [6,7]];
m2 = [[1 2]; [6 7]];
//Присваивание элементов массива
[a,b] = [1, 2];
[] "массив или матрица"["номер элемента или строки"{,"номер столбца"} ] Возвращает значение элемента с указанным номером. Нумерация начинается с 1. Тип возвращаемого значения соответствует типу элементов массива. Если для матрицы указывается один индекс, то возвращается вектор-строка матрицы, если 2 – возвращается число. Этот оператор может быть присвоен. Разделителем элементов может быть запятая, точка с запятой или пробел.
//Доступ
A = C[1,1]
k = arr[i]
//Присваивание
C[1,1] = 10
k[3] = 4
Примечание:
Скобки массивов [ ] могут использоваться для декларации действительных массивов и матриц аналогично блоку "Язык программирования" (см. описание ключевого слова var) .