calcular numero mayor de 4 valores

Iniciado por dmgdani, 20 Febrero 2012, 21:05 PM

0 Miembros y 2 Visitantes están viendo este tema.

dmgdani

hola todos

Hola estoy simulando el lanzamiento de un dado
son 5 veces mediante un ramdim que me facilitaron en un tema anterior.

ahora queria calcular cual es el numero mayor de esos 5 numeros.
yo e intentado con muchos codigos pero no consigo nada.

private sub command1_Click()
dim Mayor

if val(text1)>val(text2) then
mayor=val(tex1)
elseif val(text2)>val(text1) then
mayor=val(text2)
end if

if mayor<val(text3) then
mayor=val(text3)

elseif mayor>val(text3) then
'Nada
end if

text4=mayor
end sub


no funciona cuando alguno de los resultados son iguales o se repiten numeros.
es muy similar lo que quiero hacer al juego parchis cuatro persona y tirar un dado cada una el que mayor numero saque empiezz si empatan vuelven a tirar ellos dos y el que saque mayor numero gana.


un saludo
gracias


Karcrack

#1
Código (vb) [Seleccionar]
Public Function Max_2(ByVal a As Long, ByVal b As Long) As Long
   If (a > b) Then
       Max_2 = a
   Else
       Max_2 = b
   End If
End Function

Public Function Max_3(ByVal a As Long, ByVal b As Long, ByVal c As Long) As Long
   Max_3 = Max_2(Max_2(a, b), c)
End Function

Public Function Max_4(ByVal a As Long, ByVal b As Long, ByVal c As Long, ByVal d As Long) As Long
   Max_4 = Max_2(Max_3(a, b, c), d)
End Function

Lo dejo así para que veas clara la lógica del algoritmo.



Añado una función que devuelve el máximo sea cual sea la cantidad de números que recibe:
Código (vb) [Seleccionar]
Public Function Max_n(ParamArray n() As Variant) As Long
    Dim i   As Long
    Dim r   As Long
    Dim m   As Long
   
    r = (UBound(n) + 1) Mod 3
   
    For i = 0 To (UBound(n) - r) Step 3
        m = Max_4(m, n(i), n(i + 1), n(i + 2))
    Next i
   
    Select Case r
        Case 1
            m = Max_2(m, n(i))
        Case 2
            m = Max_3(m, n(i), n(i + 1))
    End Select
   
    Max_n = m
End Function

Código (vb) [Seleccionar]
MsgBox Max_n(0, 1, 2, 3, 12, 15, 69, 0, 966)

Saludos ;)

dmgdani

muchas gracias Karcrack
me sirvio de mucho tu codigo es muy bueno.
estoy haciendo pruebas y me sirvio.
yo lo intentaba pero los que daban iguales y algunos numeros no lo cojia
pero con tu funcion me sirvio de mucho

un saludo

79137913

HOLA!!!

Te dejo una alternativa y una funcionque saca el mayor de un array de x items:

Código (vb) [Seleccionar]
Private Function max4(a As Long, b As Long, c As Long, d As Long) As Long
Dim m1 As Long: Dim m2 As Long
    If a > b Then m1 = a Else m1 = b
    If c > d Then m2 = c Else m2 = d
    If m1 > m2 Then max4 = m1 Else max4 = m2
End Function

Private Function MaxInArr(a() As Long) As Long
    For x = LBound(a) To UBound(a)
        If a(x) > MaxInArr Then MaxInArr = a(x)
    Next
End Function


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

HdM

#4
Alternativa 3, aprovechando la función de @79137913  ;-):

Código (vb) [Seleccionar]

Private Function MaxInArr(a() As Long) As Long

Dim max As Long

    max=a(0)

    For x = 1 To UBound(a)
        If a(x) >max Then Max = a(x)
   Next

  MaxInarr=max

End Function




Saludos.

- Nice to see you again -

79137913

HOLA!!!

Cita de: Bulld0z3r en 24 Febrero 2012, 14:57 PM
Alternativa 3, aprovechando la función de @79137913  ;-):

Código (vb) [Seleccionar]

Private Function MaxInArr(a() As Long) As Long

Dim max As Long

    max=a(0)

    For x = 1 To UBound(a)
        If a(x) >max Then Max = a(x)
   Next

  MaxInarr=max

End Function




Saludos.

Que le hiciste?
· Le quitaste el soporte para arrays irregulares (Lbound)
· Usas memoria sin sentido (variable max)

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

dmgdani

hola todos
muchas gracias yo al final use MsgBox Max_n(0, 1, 2, 3, 12, 15, 69, 0, 966)
me sirvio de mucho muchas gracias.
ahora tengo una dudilla y esque me estoy liando mucho con algunos codigos
haber si me podeis ayudar mi problema es el siguiente.

primero hago 4 personas tiran el dado salen claro 4 valores hasta hay bien.
entonces yo tengo que cojer el valor mayor de los 4 valores con la funcion de antes me resuleve ese problema pero si el numero mayor esta repetido tengo que volver a tirar los dados pero solo solo las personas que an tenido el numero mayor.
y que esas personas vuelvan a tirar el dado y el que salga mayor de ellos empieza la partida.


un saludo
muchas gracias

HdM

Buenas.

Cita de: 79137913 en 24 Febrero 2012, 18:04 PM
Que le hiciste?
· Le quitaste el soporte para arrays irregulares (Lbound)
· Usas memoria sin sentido (variable max)

Pfff, pues tienes más razón que un santo, no sé en qué estaría pensando, la verdad. Sin duda esto me ayudará a prestar más atención y fijarme más en "mis aportes".

@dmgdani, creo que deberías ser un poco más específico a la hora de indicar con qué te estás liando. Aporta código, para ver hasta dónde has avanzado, please.

Saludosssss.

- Nice to see you again -