Вход
Приветствую Вас Гость
 

easy.math.qsp v. 2.4.0

Операции над массивами

#array.rand#

Генерирует случайные числа и заполняет ими указанный массив. Если массив существует, его значения будут перезаписаны.

$args[0]- название массива, элементы которого необходимо сформировать (исследуемый массив), обязательный параметр
 args[1] - количество формируемых элементов, обязательный параметр
 args[2] - номер элемента, с которого необходимо начать.
 args[3] - нижняя граница случайного числа (по умолчанию - ноль)
 args[4] - верхняя граница случайного числа (по умолчанию - тысяча)

Результат работы функции:
gosub '#array.rand#','mass',8

mass[0]=574
mass[1]=668
mass[2]=413
mass[3]=765
mass[4]=478
mass[5]=205
mass[6]=701
mass[7]=272

gosub '#array.rand#','mass',6,2

mass[0]=0
mass[1]=0
mass[2]=174
mass[3]=371
mass[4]=69
mass[5]=732
mass[6]=334
mass[7]=950

gosub '#array.rand#','mass',6,2,10,20

mass[0]=0
mass[1]=0
mass[2]=12
mass[3]=19
mass[4]=19
mass[5]=13
mass[6]=10
mass[7]=17

#array.strt#

Заполняет массив порядковыми числами. Если массив существует, его значения будут перезаписаны.

$args[0]- название массива, элементы которого необходимо сформировать (исследуемый массив), обязательный параметр
 args[1] - количество формируемых элементов, обязательный параметр
 args[2] - верхняя граница чисел. До какого числа вести заполнение.
 args[3] - нижняя граница чисел. С какого числа начинать заполнение.
 args[4] - с какого элемента начинать заполнение.

Результат работы функции:
gosub '#array.strt#','a',8

a[0]=0
a[1]=1
a[2]=2
a[3]=3
a[4]=4
a[5]=5
a[6]=6
a[7]=7

gosub '#array.strt#','a',8,4

a[0]=0
a[1]=1
a[2]=2
a[3]=3
a[4]=4
a[5]=0
a[6]=1
a[7]=2

gosub '#array.strt#','a',8,0,2

a[0]=2
a[1]=1
a[2]=0
a[3]=2
a[4]=1
a[5]=0
a[6]=2
a[7]=1

gosub '#array.strt#','a',8,5,3,2

a[0]=0
a[1]=0
a[2]=3
a[3]=4
a[4]=5
a[5]=3
a[6]=4
a[7]=5

#array.sort#

Программа сортирует значения массива (используется метод сортировки "пузырьком"). Результатом работы программы могут быть три разных массива. Направление сортировки: от нулевого элемента к последнему.

$args[0] - название массива, элементы которого необходимо отсортировать (исследуемый массив), обязательный параметр
$args[1] - порядок сортировки элементов массива: '[up]' или ничего - значения сортируются от большего к меньшему, '[down]' - значения сортируются от меньшего к большему.
$args[2] - имя массива, в который будут помещены исходные номера элементов исследуемого массива в порядке сортировки. Например, если при сортировке местами поменялись первый и второй элемент, первый элемент указанного массива получит номер 2, а второй - 1.
$args[3] - название массива результатов, т.е. массива, в который будут переданы результаты сортировки. Если не указано, массивом результатов становится исследуемый.

Результат работы функции:
Простая сортировка. Результат записывается в исходный массив.
gosub '#array.rand#','old_mass',8    (0) Генерируем массив случайных чисел
gosub '#array.sort#','old_mass'    (1) Сортируем полученный массив

Исследуемый массив до сортировки Исследуемый массив после сортировки Изменение в позициях элементов массива Массив результатов
(0) (1) em_array new_mass
old_mass[0]=157
old_mass[1]=250
old_mass[2]=709
old_mass[3]=413
old_mass[4]=532
old_mass[5]=779
old_mass[6]=730
old_mass[7]=565
old_mass[0]=779
old_mass[1]=730
old_mass[2]=709
old_mass[3]=565
old_mass[4]=532
old_mass[5]=413
old_mass[6]=250
old_mass[7]=157
не указано в параметрах не указано в параметрах
Обратная сортировка с получением позиций. Результат записывается в исходный массив.
gosub '#array.rand#','old_mass',8    (0) Генерируем массив случайных чисел
gosub '#array.sort#','old_mass','[down]','em_array'    (1) Сортируем полученный массив вниз
Исследуемый массив до сортировки Исследуемый массив после сортировки Изменение в позициях элементов массива Массив результатов
(0) (1) em_array new_mass
old_mass[0]=966
old_mass[1]=812
old_mass[2]=796
old_mass[3]=304
old_mass[4]=678
old_mass[5]=118
old_mass[6]=901
old_mass[7]=132
old_mass[0]=118
old_mass[1]=132
old_mass[2]=304
old_mass[3]=678
old_mass[4]=796
old_mass[5]=812
old_mass[6]=901
old_mass[7]=966
em_array[0]=5
em_array[1]=7
em_array[2]=3
em_array[3]=4
em_array[4]=2
em_array[5]=1
em_array[6]=6
em_array[7]=0
не указано в параметрах
Обратная сортировка с получением позиций. Результат записывается в новый массив.
gosub '#array.rand#','old_mass',8    (0) Генерируем массив случайных чисел
gosub '#array.sort#','old_mass','[down]','em_array','new_mass'    (1) Сортируем полученный массив вниз

Исследуемый массив до сортировки Исследуемый массив после сортировки Изменение в позициях элементов массива Массив результатов
(0) (1) em_array new_mass
old_mass[0]=967
old_mass[1]=629
old_mass[2]=541
old_mass[3]=290
old_mass[4]=852
old_mass[5]=334
old_mass[6]=318
old_mass[7]=529
old_mass[0]=967
old_mass[1]=629
old_mass[2]=541
old_mass[3]=290
old_mass[4]=852
old_mass[5]=334
old_mass[6]=318
old_mass[7]=529
em_array[0]=3
em_array[1]=6
em_array[2]=5
em_array[3]=7
em_array[4]=2
em_array[5]=1
em_array[6]=4
em_array[7]=0
new_mass[0]=290
new_mass[1]=318
new_mass[2]=334
new_mass[3]=529
new_mass[4]=541
new_mass[5]=629
new_mass[6]=852
new_mass[7]=967
Простая сортировка текстовых значений с получением позиций. Результат записывается в исходный массив.
gosub '#array.sort#','old_mass','[down]','em_array'    (0) Сортировка текстовых значений массива

Исследуемый массив до сортировки Исследуемый массив после сортировки Изменение в позициях элементов массива Массив результатов
$old_mass (0) em_array new_mass
$old_mass[0]=88ff88
$old_mass[1]=ff00ff
$old_mass[2]=0ff0f8
$old_mass[3]=ffffff
$old_mass[4]=8888ff
$old_mass[5]=fff8f8
$old_mass[0]=0ff0f8
$old_mass[1]=8888ff
$old_mass[2]=88ff88
$old_mass[3]=ff00ff
$old_mass[4]=fff8f8
$old_mass[5]=ffffff
em_array[0]=2
em_array[1]=4
em_array[2]=0
em_array[3]=1
em_array[4]=5
em_array[5]=3
параметр не задан

Наверное необходимо пояснить смысл столбца "Изменения в позициях элементов", прежде чем переходить к следующей функции. Покажу на примере предпоследней таблицы.

В массиве old_mass число 967 было в нулевой позиции (было значением нулевого элемента). После сортировки оно было помещено в седьмую позицию, поэтому в массиве em_array в седьмую позицию добавлен номер старой позиции элемента со значением 967.

Далее число 629, которое в массиве old_mass было в первой позиции, переместилось в пятую позицию массива результатов (new_mass). Поэтому в массиве em_array в пятую позицию был добавлен номер 1.

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

ВНИМАНИЕ! Сортировка затрагивает лишь ту часть массива, которая указана. Если вы отсортировали текстовую часть массива, числовая останется неизменной. И наоборот: при сортировке числовой части массива, текстовая не меняется. Для сортировки обеих частей нужно отсортировать одну из них, с сохранением значений перестановки в массив фиксации, а затем по массиву фиксации функцией #array.rstd# перетасовать значения в другой части.

ВНИМАНИЕ!!! Во избежание ошибок не следует хранить в массиве одновременно текстовые и числовые значения!

#array.rstd#

Процедура перетасовывает элементы массива согласно сведениям в массиве фиксации.

$args[0]- массив, данные в котором необходимо перетасовать (исследуемый)
$args[1] - массив фиксации, где находится список, согласно которому тасуются элементы
$args[2] - массив результатов - сюда помещается итог перетасовки, если не указан результат помещается в исходный массив.

Результат работы функции:
gosub '#array.rand#','old_mass',8    (0) Генерируем значения опорного массива (для примера)
gosub '#array.sort#','old_mass','[down]','em_array'    (1) Сортировка значений в опорном массиве
gosub '#array.rstd#','$arr_mass','em_array',$new_mass'    (2) Перетасовка значений из исходного массива в соответствии с данными из массива фиксации позиций

Исследуемый массив до сортировки Опорный массив до сортировки Опорный массив после сортировки Массив фиксации позиций Массив результатов
$arr_mass (0) (1) em_array (2)
$arr_mass[0]=голова
$arr_mass[1]=плечи
$arr_mass[2]=грудь
$arr_mass[3]=живот
$arr_mass[4]=бёдра
$arr_mass[5]=колени
$arr_mass[6]=икры
$arr_mass[7]=ступни
old_mass[0]=722
old_mass[1]=136
old_mass[2]=788
old_mass[3]=177
old_mass[4]=780
old_mass[5]=97
old_mass[6]=649
old_mass[7]=75
old_mass[0]=75
old_mass[1]=97
old_mass[2]=136
old_mass[3]=177
old_mass[4]=649
old_mass[5]=722
old_mass[6]=780
old_mass[7]=788
em_array[0]=7
em_array[1]=5
em_array[2]=1
em_array[3]=3
em_array[4]=6
em_array[5]=0
em_array[6]=4
em_array[7]=2
$new_mass[0]=ступни
$new_mass[1]=колени
$new_mass[2]=плечи
$new_mass[3]=живот
$new_mass[4]=икры
$new_mass[5]=голова
$new_mass[6]=бёдра
$new_mass[7]=грудь

#array.dsrt#

Процедура, восстанавливающая состояние массива до сортировки по значениям в массиве фиксации.

$args[0]- массив, данные в котором необходимо восстановить (исследуемый)
$args[1] - массив фиксации, где находится список, согласно которому тасуются элементы
$args[2] - массив результатов - сюда помещается итог перетасовки, если не указан результат помещается в исходный массив.

Результат работы функции:
gosub '#array.rand#','old_mass',8    (0) Генерируем случайный массив
gosub '#array.sort#','old_mass','[down]','em_array'    (1) Сортируем значения в массиве
gosub '#array.dsrt#','old_mass','em_array','new_mass'    (2) Восстановление массива к исходному состоянию

Исследуемый массив до сортировки Исследуемый массив после сортировки Массив фиксации позиций Массив результатов
(0) (1) em_array (2)
old_mass[0]=949
old_mass[1]=913
old_mass[2]=269
old_mass[3]=901
old_mass[4]=257
old_mass[5]=561
old_mass[6]=529
old_mass[7]=293
old_mass[0]=257
old_mass[1]=269
old_mass[2]=293
old_mass[3]=529
old_mass[4]=561
old_mass[5]=901
old_mass[6]=913
old_mass[7]=949
em_array[0]=4
em_array[1]=2
em_array[2]=7
em_array[3]=6
em_array[4]=5
em_array[5]=3
em_array[6]=1
em_array[7]=0
new_mass[0]=949
new_mass[1]=913
new_mass[2]=269
new_mass[3]=901
new_mass[4]=257
new_mass[5]=561
new_mass[6]=529
new_mass[7]=293

#array.simp#

Процедура сравнения содержимого двух массивов.

  • $args[0]- первый массив (исследуемый).
  • $args[1] - второй массив (исследуемый).
  • $args[2] - управляющая конструкция:
    • Если указано пустое значение - массивы сравниваются на предмет полной идентичности.
    • Если указано [simp] - массивы сортируются по одинаковым правилам и вновь сравниваются. Такое сравнение называется сравнением на подобие, т.е. в обоих массивах присутствуют одинаковые элементы, но расположенные в разном порядке. Сортировка производится во временные массивы и на исследуемые массивы не влияет.
    • Если указано [conc] массивы сравниваются на совпадение хотя бы одного элемента.
    • Если при сравнении необходимо исключить пустые ячейки, необходимо добавить управляющее слово [se] или [space exclude] к управляющей конструкции.
Результат работы функции:
  •  $result - принимает два значения:
    • "true" - массивы идентичны, подобны, либо в них есть совпадающие элементы (в зависимости от условий сравнения)
    • "false" - сравнение показало, что массивы не идентичны, не подобны, или не имеют совпадающих элементов (в зависимости от условий сравнения)

gosub '#array.rand#','mass1',8    (0) Генерируем случайный массив
copyarr 'mass2','mass1'    (1) Создаём точную копию массива
gosub '#array.sort#','mass1','','','mass3'    (2) Сортируем значения и помещаем их в новый массив
$func('#array.simp#','mass1','mass2')    (3) Сравниваем на идентичность идентичные массивы
$func('#array.simp#','mass1','mass3')    (4) Сравниваем на идентичность подобные массивы
$func('#array.simp#','mass1','mass3','[simp]')    (5) Сравниваем на подобие подобные массивы

Исследуемый массив Полностью идентичный массив Массив с тем же набором элементов, но отсортированный результат абсолютного сравнения mass1 и mass2 результат абсолютного сравнения mass1 и mass3 результат сравнения на подобие mass1 и mass3
(0) (1) (2) (3) (4) (5)
mass1[0]=455
mass1[1]=705
mass1[2]=967
mass1[3]=452
mass1[4]=829
mass1[5]=84
mass1[6]=983
mass1[7]=824
mass2[0]=455
mass2[1]=705
mass2[2]=967
mass2[3]=452
mass2[4]=829
mass2[5]=84
mass2[6]=983
mass2[7]=824
mass3[0]=983
mass3[1]=967
mass3[2]=829
mass3[3]=824
mass3[4]=705
mass3[5]=455
mass3[6]=452
mass3[7]=84
true false true

Сравнение текстовых значений массивов происходит аналогично. Если хотя бы у одного из массивов будет стоять выбор по текстовым значениям (т.е. имя массива будет начинаться с $), будут сравниваться текстовые значения.

#array.srch#

Функция производит поиск максимального или минимального значения в массиве. В отличие от функций MAX и MIN можно указать область и пределы поиска, а так же запросить позицию найденного элемента. Если ни одно число по указанным параметрам не подходит, функция возвращает слово false.

$args[0] - название массива.
$args[1] - управление (можно комбинировать):
  • [max] - поиск максимального значения (по умолчанию);
  • [min] - поиск минимального значения;
  • [pos] - в результат возвращается позиция найденного элемента;
  • [all] - в результат возвращются и позиция, и значение элемента в формете 'pos:value'.
$args[2] - нижний предел числа (по умолчанию минимальное число в массиве). Внимание! Для определения границы используются текстовые значения.
$args[3] - верхний предел числа (по умолчанию максимальное число в массиве). Внимание! Для определения границы используются текстовые значения.
 args[4] - от какого элемента вести поиск (по умолчанию от нулевого).
 args[5] - до какого элемента вести поиск (по умолчанию до последнего).
Результат работы функции:

Результат работы функции всегда возвращается в текстовом виде.

Заготовленный массив:

mass[0]=574
mass[1]=668
mass[2]=413
mass[3]=765
mass[4]=478
mass[5]=205
mass[6]=701
mass[7]=272

Поиск максимального значения:

$func('#array.srch#','mass','[max]')='765'

Поиск максимального значения в указанной области:

$func('#array.srch#','mass','[max]','','',0,2)='668'

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

$func('#array.srch#','mass','[min]','400','600')='413'

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

$func('#array.srch#','mass','[min]','400','600',3,6)='478'

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

$func('#array.srch#','mass','[min]','400','600',3,6,'pos')='4'

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

$func('#array.srch#','mass','[min]','900','1000',3,6)='false'

Aleks Versus'Easy Libraries'2013-2024

Aleks Versus'Game Adventure Making'Really Unimaginable Stories'2013-2024

Наверх