powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск МАХ значения из переменных
9 сообщений из 9, страница 1 из 1
Поиск МАХ значения из переменных
    #39331295
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потребовалось перебор 25 переменных на предмет поиска МАХ-симального значения.
Раньше было 3 переменных и поступал просто
Код: plaintext
1.
2.
 Set MAXperemen=Peremen1
 if Peremen2>MAXperemen {Set MAXperemen=Peremen2}
 if Peremen3>MAXperemen {Set MAXperemen=Peremen3}
Меня такое решение устраивало.
Сейчас - явно получается огород по такой схеме.

Чую жабрами, что можно сделать что то типа
Код: sql
1.
Find MAX from(Peremen1,Peremen2,Peremen3,...,Peremen25)

С SQL запросами из БД не работал. Работаю напрямую с глобалами.
PeremenХ расположены в оперативной памяти, но берутся из Глобалов (разных).
То есть вытаскиваю их из разных БД и затем уже сравниваю.
По ходу выполнения кода, сравнения происходит с частично повторяющимеся выборками (PeremenХ), потому и сидят они в Оперативке.
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331301
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О,

Сделай массив переменных:
Parray("Peremen1")=...
Parray("Peremen2")=...
...
и считай максимум в цикле по массиву.
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331306
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DirksDR,

С тем же успехом можно создать список
(Peremen1,Peremen2,Peremen3....)

и в виде цикла вытаскивать поочерёдно значения по порядку и сравнивать с МАХ.

Но есть что либо попроще. Типа сразу выбрать МАХ из таких то переменных
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331309
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а Cache уже сам из переменных делает массив или список и сам их между собою сравнивает.
Ну что то типа встроенной функции.
.
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331340
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, нашёл. Только стоило написать на форум.
Совсем мозг усох.
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331523
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О,
А почудить? :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ClassMethod max(args...) {
  for i=1:1:args {  s max(+$g(args(i))) = i }
  s i="", max=$o(max(i),-1, i) Q $lb(max, i)
}
ClassMethod testMax() {
  s a1=2, a2=3.6, a3=5, a4=-4
  #; s max="" for var=a1,a2,a3,a4 s:var>max max=var
  s max = ..max(a1,a2,a3,a4)
  zw max
}
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331757
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О ,

Выбирайте на свой вкус:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Include %qadctabinc

Class tmp.testMax [ Abstract ]
{

ClassMethod test()
{
  &sql(select GREATEST(2,3.6,5,-4) into :max)
  w "1)",?3,max,!

  &sql(select max(a) into :max from (select 3 a union select 1.6 union select 3.6 union select -1))
  w "2)",?3,max,!
  
  f v=2,3.6,5,-4 $$$SetMax(max,v)
  w "3)",?3,max,!
  
  w "4)",?3,$ZMAX(1,2.6,3,-4),!
}

}

-------------------------

 ; implementation of ^%ZLANGF00
 ; custom functions for ObjectScript
 QUIT
 
ZMAX(par...) public {
 S max=+par(1) F i=2:1:par I $D(par(i)) S:par(i)>max max=+par(i)
 Q max
}
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39331823
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit&sql(select GREATEST(2,3.6,5,-4) into :max)при всём уважении, это напоминает ответ из анекдота: "Где вы находитесь? - В самолёте". Вы ведь прекрасно знаете, какой примерно код при этом
генерируется.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  ;---&sql(select GREATEST(2,3.6,5,-4) into :max)
   ;--- ** SQL PUBLIC Variables: %ROWCOUNT, %ROWID, %msg, SQLCODE, max
 Do %0Ao
 q
%0AmBx1 s %mmmsqld(6)=$s(1]]%mmmsqld(6):1,1:"")
 q
%0Ao 
 n %mmmsqlc,%mmmsqld,%mmmsqlE,%mmmsqll,%mmmsqln,%mmmsqlp,%mmmsqlR,%mmmsqls,%mmmsqlt,%mmmsqlZ,%mmmsqlEOO s $zt="%0Aerr" d:$zu(115,15) $system.ECP.Sync()
 s %mmmsqld(1)=2,%mmmsqld(1)=$s($isvalidnum(%mmmsqld(1)):+%mmmsqld(1),1:%mmmsqld(1)),%mmmsqld(2)=3.6,%mmmsqld(2)=$s($isvalidnum(%mmmsqld(2)):+%mmmsqld(2),1:%mmmsqld(2)),%mmmsqld(3)=5,%mmmsqld(3)=$s($isvalidnum(%mmmsqld(3)):+%mmmsqld(3),1:%mmmsqld(3)),%mmmsqld(4)=-4,%mmmsqld(4)=$s($isvalidnum(%mmmsqld(4)):+%mmmsqld(4),1:%mmmsqld(4))
 s %mmmsqld(5)=$S($zu(115,12)=-1:0,$zu(115,12)>0:$zu(115,12),1:$zu(35,4))
 if %mmmsqld(5)>1 { 
      new StatsParams set StatsParams=4, StatsParams(1)=2, StatsParams(2)=3.6, StatsParams(3)=5, StatsParams(4)=-4
      do ##class(%SYS.PTools.SQLStats).Init("USER",$zn,"A",.StatsParams)
  }
 s SQLCODE=100
 s max=$$GREATEST^%qarfunc(%mmmsqld(1),%mmmsqld(2),%mmmsqld(3),%mmmsqld(4))
 ; asl MOD# 2
 d:%mmmsqld(5)=3 ##class(%SYS.PTools.SQLStats).Start("USER",$zn,"A",2)
 s %mmmsqld(6)=""
%0AmBk1 d %0AmBx1
 i %mmmsqld(6)="" g %0AmBdun
 d:%mmmsqld(5)=3 ##class(%SYS.PTools.SQLStats).Stop("USER",$zn,"A","2,1")
 s SQLCODE=0 g %0Ac
 g %0AmBk1
%0AmBdun d:%mmmsqld(5)=3 ##class(%SYS.PTools.SQLStats).Stop("USER",$zn,"A",2)
%0AmAdun 
%0Ac s %ROWCOUNT='SQLCODE
 d:$g(%mmmsqld(5))>1 ##class(%SYS.PTools.SQLStats).Report("USER",$zn,"A",%ROWCOUNT)
 q
%0Aerr s $zt="" d SQLRunTimeError^%apiSQL($ze,.SQLCODE,.%msg)
 g %0Ac
...
Рейтинг: 0 / 0
Поиск МАХ значения из переменных
    #39332487
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О-О-О ,

Если в функцию нужно передать переменные вида

Код: plaintext
1.
2.
Parray(1)=Peremen1
Parray(2)=Peremen2
...

, а не вида

Код: plaintext
(Peremen1,Peremen2,Peremen3....)

, то можно воспользоваться готовыми заготовками из LANGFxx.inc, например:%ZLANGF00.mac
Код: plaintext
1.
2.
3.
#include LANGFdsm
 ; implementation of ^%ZLANGF00
 ; custom functions for ObjectScript
 QUIT
tmp.testMax.cls
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Class tmp.testMax [ Abstract ]
{

ClassMethod test()
{
  ;...

  s par=4
  s par(1)=2
  s par(2)=3.6
  s par(3)=5
  s par(4)=-4

  w "5)",?3,$$%max^%ZLANGF00(.par),!
}

}
PS: там же есть и %min.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск МАХ значения из переменных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]