Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск МАХ значения из переменных / 9 сообщений из 9, страница 1 из 1
21.10.2016, 10:51
    #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
21.10.2016, 10:56
    #39331301
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск МАХ значения из переменных
О-О-О,

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

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

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

Но есть что либо попроще. Типа сразу выбрать МАХ из таких то переменных
...
Рейтинг: 0 / 0
21.10.2016, 11:02
    #39331309
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск МАХ значения из переменных
а Cache уже сам из переменных делает массив или список и сам их между собою сравнивает.
Ну что то типа встроенной функции.
.
...
Рейтинг: 0 / 0
21.10.2016, 11:27
    #39331340
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск МАХ значения из переменных
Вот, нашёл. Только стоило написать на форум.
Совсем мозг усох.
...
Рейтинг: 0 / 0
21.10.2016, 13:40
    #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
21.10.2016, 16:20
    #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
21.10.2016, 17:23
    #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
24.10.2016, 08:47
    #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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск МАХ значения из переменных / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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