Ordernar Variaveis
Moderador: Moderadores
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Ordernar Variaveis
Amigos n estou conseguindo fazer o seguinte:
Eu tenho 12 variaves com seus respectivos valores exemplo:
vJan,vFev,vMar...
Como eu saberia qual a que contem o valor maior ?
Marcos Roberto
Eu tenho 12 variaves com seus respectivos valores exemplo:
vJan,vFev,vMar...
Como eu saberia qual a que contem o valor maior ?
Marcos Roberto
Agora que vi que você postou em duas seções diferentes. O problema, sendo Clipper e XHarbour, é o mesmo. Você vai ter de comparar uma a uma. Ou, pra facilitar o código, usar uma matriz.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
MARINI
- Usuário Nível 3

- Mensagens: 288
- Registrado em: 06 Jul 2004 08:06
- Localização: Pindamonhangaba SP
Se o valor for númerico ou data poderá usar a função MAX():
http://www.itlnet.net/programming/progr ... 684a1.html
Exemplo com arquivo:
USE arquivo
xnr:=0
DO WHILE !EOF()
xnr:=MAX(xnr,campoarquivo)
DBSKIP()
ENDDO
@ 5,5 SAY "o maior "+STR(xnr)
Exemplo com vetor:
xvr:=ARRAY(3)
xvr[1]:=12
xvr[2]:=30
xvr[3]:=8
xnr:=0
FOR i:=1 TO LEN(xvr)
xnr:=MAX(xnr,xvr)
NEXT
@ 5,5 SAY "o maior "+STR(xnr)
http://www.itlnet.net/programming/progr ... 684a1.html
Exemplo com arquivo:
USE arquivo
xnr:=0
DO WHILE !EOF()
xnr:=MAX(xnr,campoarquivo)
DBSKIP()
ENDDO
@ 5,5 SAY "o maior "+STR(xnr)
Exemplo com vetor:
xvr:=ARRAY(3)
xvr[1]:=12
xvr[2]:=30
xvr[3]:=8
xnr:=0
FOR i:=1 TO LEN(xvr)
xnr:=MAX(xnr,xvr)
NEXT
@ 5,5 SAY "o maior "+STR(xnr)
Editado pela última vez por MARINI em 12 Fev 2008 17:55, em um total de 2 vezes.
Sds
Marini
Marini
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Se forem muitas variáveis, como imagino que são (jan, fev, mar... 12 creio), aconselho guardar esses valores em VETOR unidimencional e dar um ASORT que deixará em ordenado de menor a maior.
Eu por exemplo utilizei um procedimento de comparação de duas variáveis através da função MIN(), mas no meu caso eram três variáveis apenas. Veja como eu fiz:
Nesse meu exemplo, utilizei para comparar data em formato AAMMDDDD, mas é claro poderia ser re-adaptado para seu caso, inclusive utilizando a função MAX().
Código: Selecionar todos
vt:={12.22,33.44,55.78,11.01}
ASORT(VT)
FOR I=1 TO LEN(VT)
? VT[I]
NEXTCódigo: Selecionar todos
V1=STOD(SUBSTR(CLIDTA1,1,8))
V2=STOD(SUBSTR(CLIDTA2,1,8))
V3=STOD(SUBSTR(CLIDTA3,1,8))
V0=MIN(V1,V2)
V0=MIN(V0,V3)
DO CASE
CASE V0=V1
REPLACE CLIDTA1 WITH CLDT
CASE V0=V2
REPLACE CLIDTA2 WITH CLDT
CASE V0=V3
REPLACE CLIDTA3 WITH CLDT
ENDCASE
Editado pela última vez por Pablo César em 12 Fev 2008 19:38, em um total de 1 vez.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Array bidimensional
O uso de array bidimensional usando asort é melhor, pois além do maior, ainda saberá qual foi o mês.
vMeses {{'Jan', 0},;
{'Fev', 0},;
{'Mar', 0},;
{'Abr', 0},;
{'Mai', 0},;
{'Jun', 0},;
{'Jul', 0},;
{'Ago', 0},;
{'Set', 0},;
{'Out', 0},;
{'Nov', 0},;
{'Dez', 0}}
// Guarde os valores em vMeses[<mes>, 2]
asort(vMeses, {|x, y| x[2] > y[2]})
O maior valor estará em vMeses[1, 2] e o mes do maior valor estará em vMeses[2, 2].
O menor estará em vMeses[12, 2].
Ou ainda aeval usando array bidimensional, mas é mais elaborado.
Outra forma, para os escovadores de bits mais antigos.
a1 := 0
if a1 < vJan
a1 := vJan
end
if a1 < vFev
a1 := vFev
end
if a1 < vMar
a1 := vMar
end
if a1 < vAbr
a1 := vAbr
end
if a1 < vMai
a1 := vMai
end
if a1 < vJun
a1 := vJun
end
if a1 < vJul
a1 := vJul
end
if a1 < vAgo
a1 := vAgo
end
if a1 < vSet
a1 := vSet
end
if a1 < vOut
a1 := vOut
end
if a1 < vNov
a1 := vNov
end
if a1 < vDez
a1 := vDez
end
(Ufa! Esse dá trabalho digitar, mas funciona.)
vMeses {{'Jan', 0},;
{'Fev', 0},;
{'Mar', 0},;
{'Abr', 0},;
{'Mai', 0},;
{'Jun', 0},;
{'Jul', 0},;
{'Ago', 0},;
{'Set', 0},;
{'Out', 0},;
{'Nov', 0},;
{'Dez', 0}}
// Guarde os valores em vMeses[<mes>, 2]
asort(vMeses, {|x, y| x[2] > y[2]})
O maior valor estará em vMeses[1, 2] e o mes do maior valor estará em vMeses[2, 2].
O menor estará em vMeses[12, 2].
Ou ainda aeval usando array bidimensional, mas é mais elaborado.
Outra forma, para os escovadores de bits mais antigos.
a1 := 0
if a1 < vJan
a1 := vJan
end
if a1 < vFev
a1 := vFev
end
if a1 < vMar
a1 := vMar
end
if a1 < vAbr
a1 := vAbr
end
if a1 < vMai
a1 := vMai
end
if a1 < vJun
a1 := vJun
end
if a1 < vJul
a1 := vJul
end
if a1 < vAgo
a1 := vAgo
end
if a1 < vSet
a1 := vSet
end
if a1 < vOut
a1 := vOut
end
if a1 < vNov
a1 := vNov
end
if a1 < vDez
a1 := vDez
end
(Ufa! Esse dá trabalho digitar, mas funciona.)
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
A matriz não precisa ser ordenada. É só comparar os elementos:
nMax := 0
Aeval(aMeses,{|n|nMax := Max(nMax,n)})
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Claro Maligno, você deu um exemplo bem objetivo. Inclusive eu mencionei o meu exemplo e mesmo SORTeando também funciona, mas acho que o GVC quis dizer é para saber qual é o mês como resultado e obtendo como exemplo "dez: 1.000" (sendo este o maior), por isso da matriz bidimencional para guardar a descrição do mês.
Editado pela última vez por Pablo César em 13 Fev 2008 13:39, em um total de 1 vez.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Uma outra dimensão só pra guardar o mês me soa como desperdício, já que são apenas 12 meses no ano. Uma matriz com 12 elementos já indicaria o mês pela posição. Fica mais econômico. 
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Ahh sim, tem razão. Por isso você mencionava que não haveria necessidade de ordenar o número que irá retornar é o número do elemento com o seu exemplo:
nMax := 0
nElemento:=Aeval(aMeses,{|n|nMax := Max(nMax,n)})
O nElemento ja seria o número do mês, claro.
Legal. Esta seria a forma mais sintética. Good fellow !
nMax := 0
nElemento:=Aeval(aMeses,{|n|nMax := Max(nMax,n)})
O nElemento ja seria o número do mês, claro.
Legal. Esta seria a forma mais sintética. Good fellow !
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Observe: a função AEval() não retorna um índice, mas apenas uma referência à própria matriz. AEval(), neste caso, só serve mesmo para encontrar o maior valor.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Ahhh certo, o nMax retorna apenas o conteúdo do maior valor. Daí então terá que fazer outra comparação para saber o mês que foi de maior valor. Então a idéia do GVC em fazer matriz bidemensional seria ainda a melhor solução ou então fazer a comparação varrendo um a um para saber qual é o numero do elemento.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Não. Pra saber qual mês tem o maior valor ainda acho que o melhor é a matriz unidimensional. Note que o bloco de código avaliado por AEval() contém outro argumento: o índice. Então:
Neste caso, a função Max() não pode ser utilizada, pois precisamos inserir uma dupla função dentro do bloco. Note que o mês que tem o maior valor é definido dentro do próprio IF(). Tem que ser desse jeito mesmo. Mas o que conta é que na avaliação desse parêntese interno, nMax receberá o último valor avaliado. Ou seja, n.
Código: Selecionar todos
nMax := 0
nMes := 0
Aeval(aMeses,{|n,i|nMax := if(n>nMax, (nMes:=i,n), nMax)})[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
Adalberto
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 01 Set 2007 01:09
- Localização: Santa Cruz de la Sierra - Bolivia
ordenar variaveis
Postei só com a vontade de contribuir, pois postaram já soluções muito boas.
Da certo!
Código: Selecionar todos
LOCAL acMeses := { 'Jan' , 'Feb' , 'Mar' , 'Abr' , 'Mai' , 'Jun' , 'Jul' , 'Ago' , 'Sep' , 'Oct' , 'Nov' , 'Dez' }
LOCAL anValor := { 1000 , 2 , 542 , 120 , 5000 , 60.20 , 78 , 89 , 457 , 82 , 4596 , 45100 }
LOCAL nIndice := 1 , nI
LOCAL nMaior := anValor[ nIndice ]
FOR nI := 1 TO 12
IF ( anValor[ nI ] > nMaior )
nMaior := anValor[ nI ]
nIndice := nI
ENDIF
NEXT nI
? 'O valor maior: ' , nMaior
? 'O mes onde esta o numero maior: ' , acMeses[ nIndice ]
WAIT
RETURN NILRe: ordenar variaveis
Maravilha, Adalberto. Pois é esse espírito de solidariedade que fez deste fórum um dos melhores (se não o melhor) do Brasil.Adalberto escreveu:Postei só com a vontade de contribuir
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Legal Maligno, entendí a lógica, só não entendí que valor tem: i,n
Seria i ou n condicional ? Um ou outro.
Adalberto, é isso aí. Obrigado pela sua contribuição.
Seria i ou n condicional ? Um ou outro.
Adalberto, é isso aí. Obrigado pela sua contribuição.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.

