MAIOR DE CINCO

AMELORP 01/04/2013 22:25:29
#421382
Tenho cinco numeros e quero saber qual o maior e menor dos cinco numeros armazenados em variaveis.

N1, N2, N3, N4, N5

sabendo que há possibilidade de um numero ser igual ao outro. Por exemplo o n1 ser igual ao n2 e assim sucessivamente.

Alguem poderia me ajudar?
WEBMASTER 01/04/2013 22:44:49
#421385
Tem vários jeitos de resolver, fiz um exemplo proximo do que voce citou (com variaveis):
  
Sub teste()

Dim N1, N2, N3, N4, N5
Dim NMAIOR
Dim NMENOR

Randomize 1000
N1 = Int(Rnd(1000) * 100)
N2 = Int(Rnd(1000) * 100)
N3 = Int(Rnd(1000) * 100)
N4 = Int(Rnd(1000) * 100)
N5 = Int(Rnd(1000) * 100)
NMENOR = 1000
NMAIOR = 0

If N1 < N2 And N1 < N3 And N1 < N4 And N1 < N5 Then NMENOR = N1
If N2 < N1 And N2 < N3 And N2 < N4 And N2 < N5 Then NMENOR = N2
If N3 < N1 And N3 < N2 And N3 < N4 And N3 < N5 Then NMENOR = N3
If N4 < N1 And N4 < N2 And N4 < N3 And N4 < N5 Then NMENOR = N4
If N5 < N1 And N5 < N2 And N5 < N3 And N5 < N4 Then NMENOR = N5

If N1 > N2 And N1 > N3 And N1 > N4 And N1 > N5 Then NMAIOR = N1
If N2 > N1 And N2 > N3 And N2 > N4 And N2 > N5 Then NMAIOR = N2
If N3 > N1 And N3 > N2 And N3 > N4 And N3 > N5 Then NMAIOR = N3
If N4 > N1 And N4 > N2 And N4 > N3 And N4 > N5 Then NMAIOR = N4
If N5 > N1 And N5 > N2 And N5 > N3 And N5 > N4 Then NMAIOR = N5

Debug.Print [Ô]N1 = [Ô] & N1
Debug.Print [Ô]N2 = [Ô] & N2
Debug.Print [Ô]N3 = [Ô] & N3
Debug.Print [Ô]N4 = [Ô] & N4
Debug.Print [Ô]N5 = [Ô] & N5
Debug.Print [Ô]NMAIOR = [Ô] & NMAIOR
Debug.Print [Ô]NMENOR = [Ô] & NMENOR
End Sub


Alguns debugs:
N1 = 12
N2 = 48
N3 = 15
N4 = 7
N5 = 97
NMAIOR = 97
NMENOR = 7

N1 = 6
N2 = 44
N3 = 1
N4 = 87
N5 = 53
NMAIOR = 87
NMENOR = 1
AMELORP 01/04/2013 23:04:47
#421389
O problema é quando alguns dos numeros se repete, por exemplo:

N1 = 2, N2 = 2, N3 = 2, N4 = 5, N5 = 6

Nesse caso o maior é 6 mas e o menor? seriam muitos ifs na historia..entende?


Citação:

:
Tem vários jeitos de resolver, fiz um exemplo proximo do que voce citou (com variaveis):

  
Sub teste()

Dim N1, N2, N3, N4, N5
Dim NMAIOR
Dim NMENOR

Randomize 1000
N1 = Int(Rnd(1000) * 100)
N2 = Int(Rnd(1000) * 100)
N3 = Int(Rnd(1000) * 100)
N4 = Int(Rnd(1000) * 100)
N5 = Int(Rnd(1000) * 100)
NMENOR = 1000
NMAIOR = 0

If N1 < N2 And N1 < N3 And N1 < N4 And N1 < N5 Then NMENOR = N1
If N2 < N1 And N2 < N3 And N2 < N4 And N2 < N5 Then NMENOR = N2
If N3 < N1 And N3 < N2 And N3 < N4 And N3 < N5 Then NMENOR = N3
If N4 < N1 And N4 < N2 And N4 < N3 And N4 < N5 Then NMENOR = N4
If N5 < N1 And N5 < N2 And N5 < N3 And N5 < N4 Then NMENOR = N5

If N1 > N2 And N1 > N3 And N1 > N4 And N1 > N5 Then NMAIOR = N1
If N2 > N1 And N2 > N3 And N2 > N4 And N2 > N5 Then NMAIOR = N2
If N3 > N1 And N3 > N2 And N3 > N4 And N3 > N5 Then NMAIOR = N3
If N4 > N1 And N4 > N2 And N4 > N3 And N4 > N5 Then NMAIOR = N4
If N5 > N1 And N5 > N2 And N5 > N3 And N5 > N4 Then NMAIOR = N5

Debug.Print [Ô]N1 = [Ô] & N1
Debug.Print [Ô]N2 = [Ô] & N2
Debug.Print [Ô]N3 = [Ô] & N3
Debug.Print [Ô]N4 = [Ô] & N4
Debug.Print [Ô]N5 = [Ô] & N5
Debug.Print [Ô]NMAIOR = [Ô] & NMAIOR
Debug.Print [Ô]NMENOR = [Ô] & NMENOR
End Sub


Alguns debugs:
N1 = 12
N2 = 48
N3 = 15
N4 = 7
N5 = 97
NMAIOR = 97
NMENOR = 7

N1 = 6
N2 = 44
N3 = 1
N4 = 87
N5 = 53
NMAIOR = 87
NMENOR = 1

GANDA.NICK 02/04/2013 05:44:11
#421394
Olá,

Use Array[ô]s em vez de variaveis.
Se vc só quiser saber os valores Maior e Menor sem querer saber qual a variável ou elemento do Array que armazena esse valor , faça assim:

 Option Explicit

Private Sub Command1_Click()

Dim arrNumeros(1 To 5) As Long
Dim i As Long, lMaior As Long, lMenor As Long

Randomize

Debug.Print [Ô]****** Novo Teste ******[Ô]

[ô]Atribuir valores ao Array
For i = LBound(arrNumeros) To UBound(arrNumeros)
arrNumeros(i) = Int(Rnd * 10) [ô]Numeros de 0 a 9
Debug.Print arrNumeros(i)
Next [ô]i

[ô]Achar o Maior valor
For i = LBound(arrNumeros) To UBound(arrNumeros)
If arrNumeros(i) > lMaior Then lMaior = arrNumeros(i)
Next [ô]i

[ô]Atribuir o Maior valor ao Menor
lMenor = lMaior

[ô]Achar o Menor valor
For i = LBound(arrNumeros) To UBound(arrNumeros)
If arrNumeros(i) < lMenor Then lMenor = arrNumeros(i)
Next [ô]i

Debug.Print [Ô]Maior: [Ô] & lMaior
Debug.Print [Ô]Menor: [Ô] & lMenor

End Sub


Espero ter ajudado!!
OCELOT 02/04/2013 08:33:23
#421397
Tem que ver se você precisa saber apenas qual o menor valor ou em qual (ou quais) variável está o menor valor. Como o GANDA falou com array é mais fácil para encontrar o menor/maior valor, porém o código dele só funciona para achar o maior número se ele for maior ou igual a zero, se o maior número for negativo ele não vai funcionar.

Agora se precisam ser variáveis diferentes e são sempre 5 é bem simples também, considerando as variaveis N1 a N5
Dim NMaior as Integer
Dim NMenor as Integer

[ô]Inicia considerando que o N1 seja o menor/maior
NMaior = N1
NMenor = N2

[ô]Agora comaça a procurar o menor/maior
if NMaior < N2 then NMaior = N2
if NMaior < N3 then NMaior = N3
if NMaior < N4 then NMaior = N4
i NMaior < N5 then NMaior = N5

if NMenor > N2 then NMenor = N2
if NMenor > N3 then NMenor = N3
if NMenor > N4 then NMenor = N4
if NMenor > N5 then NMenor = N5
JABA 02/04/2013 13:24:03
#421411
Para pegar o maior numero, faça assim:

Public Function GetMaiorNumero(numeros() As Integer) As Integer
Dim x, y, resultado As Integer
resultado = numeros(0)
For x = 0 To numeros.Length - 1
For y = x + 1 To numeros.Length - 1
If numeros(y) > resultado Then
resultado = numeros(y)
End If
Next
Next
Return resultado
End Function

Para usar:

[ô]Preenche o array
Dim v(5) As Integer
v(0) = 7
v(1) = 11
v(2) = 8
v(3) = 13
v(4) = 6
v(5) = -15

[ô]Mostra qual o maior numero
MsgBox(GetMaiorNumero(v))
JABA 02/04/2013 13:42:06
#421416
E para pegar o MenorNumero é assim:

Public Function GetMenorNumero(numeros() As Integer) As Integer
Dim x, y, resultado As Integer
resultado = numeros(0)
For x = 0 To numeros.Length - 1
For y = x + 1 To numeros.Length - 1
If numeros(y) < resultado Then
resultado = numeros(y)
End If
Next
Next
Return resultado
End Function
AMELORP 02/04/2013 22:27:04
#421433
Esta dando erro na execução. O qualificador não existe pra a variavel.

Citação:

:
E para pegar o MenorNumero é assim:

Public Function GetMenorNumero(numeros() As Integer) As Integer
Dim x, y, resultado As Integer
resultado = numeros(0)
For x = 0 To numeros.Length - 1
For y = x + 1 To numeros.Length - 1
If numeros(y) < resultado Then
resultado = numeros(y)
End If
Next
Next
Return resultado
End Function

GANDA.NICK 03/04/2013 05:19:42
#421435
Esse codigo acima é para VB.NET
JABA 03/04/2013 10:47:10
#421448
Amelorp, me diga qual é a linha que está dando erro para eu poder corrigir pra você.
AMELORP 03/04/2013 11:11:47
#421450
For x = 0 To numeros.Length - 1 (nessa linha)

ele diz que a propriedade Length nao existe pra variavel numeros

Citação:

:
Amelorp, me diga qual é a linha que está dando erro para eu poder corrigir pra você.

Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas