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
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:
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
MsgBox Max_n(0, 1, 2, 3, 12, 15, 69, 0, 966)
Saludos ;)
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
HOLA!!!
Te dejo una alternativa y una funcionque saca el mayor de un array de x items:
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!!!
Alternativa 3, aprovechando la función de @79137913 ;-):
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.
HOLA!!!
Cita de: Bulld0z3r en 24 Febrero 2012, 14:57 PM
Alternativa 3, aprovechando la función de @79137913 ;-):
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!!!
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
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.