Перейти к основному содержимому

20.7. Есть несколько переменных с разными значениями. Как получить имя переменной, в которой находится наибольшее значение?

В: Есть несколько переменных с разными значениями. Как получить имя переменной, в которой находится наибольшее значение?

О: Для примера возьмём несколько переменных и значений:

VariableA = 1
VariableB = 2
VariableC = 3
VariableD = 4
  1. Вносим названия этих переменных и их значения в два разных массива под одним индексом:
$varname[0]="VariableA" & varvalue[0]=VariableA
$varname[1]="VariableB" & varvalue[1]=VariableB
$varname[2]="VariableC" & varvalue[2]=VariableC
$varname[3]="VariableD" & varvalue[3]=VariableВ
  1. Теперь определяем максимальное значение в массиве varvalue:
varmax=max('varvalue')
  1. Осталось определить индекс элемента с этим значением:
indexMax = arrpos('varvalue',varmax)
  1. Имя переменной получить уже несложно:
*pl "Максимальное значение в переменной <<$varname[indexMax]>>"

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

!#maxVar
! $args[0] — $args[18] — названия переменных
! массивы для временного хранения названий переменных и их значений:
local $varname, varvalue
! 1
loop local i=0 while $args[i] step i+=1:
$varname[] = $args[i] & varvalue[] = arritem($args[i], 0)
end
! 2
local max_ = max('varvalue')
! 3
local index_ = arrpos('varvalue', max_)
! 4
$result = $varname[index_]

Вызов функции:

@maxVar('VariableA','VariableB','VariableC','VariableD')

Поскольку для работы данной функции в любом случае требуется цикл, можно несколько изменить алгоритм:

local max_, cur_
$result = $args[0]
loop local i = 0 while $args[i] step i += 1:
cur_ = arritem($args[i], 0)
if cur_ > max_:
$result = $args[i]
max_ = cur_
end
end

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

Примеры: