Valores em ordem cresente.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Valores em ordem cresente.

Mensagem por rbonotto »

Boa tarde pessoal.

Tenho um código em que o usuário digita tres produtos, cada um tem o seu preço, e o valor total
tem que ser pela média do preço dos dois maiores:

Exemplo:

Código: Selecionar todos

n_pRc1 := 32,00
n_pRc2 := 12,00
n_pRc3 := 66,00

PrtOtal := (n_pRc1 + n_pRc3) / 2 
Tem alguma forma pratica de colocar em ordem crescente o conteudo das variáveis em uma matrix ?

abraços !
mixsistemas@gmail.com
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Valores em ordem cresente.

Mensagem por Eolo »

Função ASORT()

Precisa, óbvio, criar a matriz antes.

Código: Selecionar todos

n_pRc1 := 32,00
n_pRc2 := 12,00
n_pRc3 := 66,00
MATRIZ:={} // matriz vazia
aadd(MATRIZ,n_prc1) // adiciona os valores
aadd(MATRIZ,n_prc2)
aadd(MATRIZ,n_prc3)
* aqui, os elementos da matriz são 32, 12 e 66
asort(MATRIZ) // ordena a matriz
* agora, os elementos da matriz são 12, 32 e 66
* pega os 2 últimos elementos (os maiores) e calcula
?prtotal:=(MATRIZ[2]+MATRIZ[3])/2 -> 49
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Valores em ordem cresente.

Mensagem por Eolo »

Se não quiser criar a matriz, pega o menor valor das variáveis e subtrai do total:

Código: Selecionar todos

n_pRc1 := 32,00
n_pRc2 := 12,00
n_pRc3 := 66,00
PrtOtal := ((n_pRc1+n_pRc2+n_pRc3)-min(n_pRc3(min(n_pRc1,n_pRc2)))/2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Valores em ordem cresente.

Mensagem por JoséQuintas »

Se só usar isso na tela:

Código: Selecionar todos

LOCAL nValor:= { 0, 0, 0 }
@ 2, 0 SAY "valor 1" GET nValor[ 1 ]
@ 3, 0 SAY "valor 2" GET nValor[ 2 ]
@ 4, 0 SAY "valor 3" GET nValor[ 3 ]
READ
aSort( nValor )
RETURN ( nValor[ 2 ] + nValor[ 3 ] ) / 2
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Valores em ordem cresente.

Mensagem por rbonotto »

Obrigado mais uma vez pessoal !

Usei o asort e funcionou maravilhas !

Abraços !
mixsistemas@gmail.com
Responder