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: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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