Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
20.7. Есть несколько переменных с разными значениями. Как получить имя переменной, в которой находится наибольшее значение?
В: Есть несколько переменных с разными значениями. Как получить имя переменной, в которой находится наибольшее значение?
О:
Для примера возьмём несколько переменных и значений:
VariableA=1
VariableB=2
VariableC=3
VariableD=4
VariableB=2
VariableC=3
VariableD=4
Вносим названия этих переменных и их значения в два разных массива под одним индексом:
$varname[0]="VariableA" & varvalue[0]=VariableA
$varname[1]="VariableB" & varvalue[1]=VariableB
$varname[2]="VariableC" & varvalue[2]=VariableC
$varname[3]="VariableD" & varvalue[3]=VariableВ
Теперь определяем максимальное значение в массиве varvalue:
varmax=max('varvalue')
Осталось определить индекс элемента с этим значением:
indexMax=arrpos('varvalue',varmax)
Имя переменной получить уже несложно:
*pl "Максимальное значение в переменной "+$varname[indexMax]
Можно написать функцию, которая будет возвращать название переменной с максимальным значением:
!#maxVar
! $args[0] — $args[8] — названия переменных
! массивы для временного хранения названий переменных и их значений:
local $varname, varvalue
! 1
loop local i=0 while $args[i]<>'' step i+=1:
dynamic "$varname[]='<<$args[i]>>' & varvalue[]=<<$args[i]>>"
end
! 2
local max_=max('varvalue')
! 3
local index_=arrpos('varvalue',max_)
! 4
$result=$varname[index_]
! $args[0] — $args[8] — названия переменных
! массивы для временного хранения названий переменных и их значений:
local $varname, varvalue
! 1
loop local i=0 while $args[i]<>'' step i+=1:
dynamic "$varname[]='<<$args[i]>>' & varvalue[]=<<$args[i]>>"
end
! 2
local max_=max('varvalue')
! 3
local index_=arrpos('varvalue',max_)
! 4
$result=$varname[index_]
Вызов функции:
@maxVar('VariableA','VariableB','VariableC','VariableD')
Поскольку для работы данной функции в любом случае требуется цикл, можно несколько изменить алгоритм:
!#varMax
local $max_='args[19]'
loop local i=0 while $args[i]<>'' step i+=1:
$max_=$dyneval("if <<$args[i]>> > <<$max_>>:
$result='<<$args[i]>>'
else
$result='<<$max_>>'
end")
end
$result=$max_
local $max_='args[19]'
loop local i=0 while $args[i]<>'' step i+=1:
$max_=$dyneval("if <<$args[i]>> > <<$max_>>:
$result='<<$args[i]>>'
else
$result='<<$max_>>'
end")
end
$result=$max_