Quanto ao seu código: Beleza, funcionou corrigindo para:
Código: Selecionar todos
for i := 1 to Len(aMeses)
nMax := if( (n:=aMeses[i]*if(tAllNeg,-1,1))>nMax,(nMes:=i,n), nMax )
next
Só não entendo porque mudar o sinal do valor, se a proposta é descobrir qual o maior valor. Se todos forem negativos e o problema for o zero inicial, é só iniciar nMax com um valor impossível. Algo do tipo -999999
Pois é, eu fiz isso e ainda achei que o resultado estava ERRADO. Mas eu me enganei e concordo contigo que não haveria necessidade de converter sinal, ora porquê ? Porque o resultado de todos os elementos negativos, será o maior aquele que for mais próximo do ZERO e convertendo este resultado muda o critério. Portanto apresento a versão corrigida:
Código: Selecionar todos
aMeses:={-12.22,-33.44,-55.78,-11.01,-66.38,-23.34}
nMax:=aMeses[1] // Corrigido conforme sugirido por Adalberto/Maligno
nMes:=0
FOR i=1 TO LEN(aMeses)
n:=aMeses[i]
IF n>nMax
nMax:=n
nMes:=i
ENDIF
NEXT
? nMes
? nMax
ou no seu modo sintético:
Código: Selecionar todos
aMeses:={-12.22,-33.44,-55.78,-11.01,-66.38,-23.34}
nMax:=aMeses[1] // Corrigido conforme sugirido por Adalberto/Maligno
nMes:=0
Aeval(aMeses,{|n,i|nMax := if(n>nMax, (nMes:=i,n), nMax)})
? nMes
? nMax
Então podemos esquecer a razão de converter os elementos que estão como números negativos. Valeu Maligno pelo esclarecimento.
Obs.: Desculpe Maligno não ter respondido no chat, não te ví porque eu estava no Prompt de comando ocupado com os testes do número negativo e como o chat não possue recurso de avisar usuário quando está em outra sessão: acabei perdendo a oportunidade de dialogar contigo. E também não estavam ligadas as caixas de som. Sorry.