Autor Tema: SOLUCIONADO- Ayuda para mejorar una funcion  (Leído 2997 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
SOLUCIONADO- Ayuda para mejorar una funcion
« en: Junio 13, 2014, 11:42:18 pm »
Hola amigos tengo esta función que me funciona correctamente y lo que hace es recibir un valor entero y verificar si el mismo es multiplo de 12,10,8,6,5 y 4 y si lo es devuelve el mismo valor y sino devuleve cero. Pero creo que no está demasiada optimizada.
El aporte que necesito concretamente es primero si se puede simplificar y que en el caso que el valor pasado no sea multiplo me sugiera y devuelva el valor proximos mas cercano al parametro pasado.


Código: [Seleccionar]
Private Function Multiplo(num As Integer) As Integer
Dim resto As Byte

resto = num Mod 12

If resto = 0 Then
    resto = num Mod 12
        If resto = 0 Then
                resto = num Mod 8
                    If resto = 0 Then
                        resto = num Mod 6
                            If resto = 0 Then
                                resto = num Mod 5
                                    If resto = 0 Then
                                        resto = num Mod 4
                                            If resto = 0 Then
                                                Multiplo = num
                                            End If
                                    End If
                            End If
                    End If
        End If
End If

End Function


La llamo asi!
Text2 = Multiplo(120)  'es correcto me devuelve 120
Text2 = Multiplo(80)' devuelve 0 por que no es multiplo de todos


Gracias por sus aportes
« última modificación: Junio 15, 2014, 01:08:51 pm por Bazooka »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Ayuda para mejorar una funcion
« Respuesta #1 en: Junio 14, 2014, 01:12:25 am »
La primera evaluacion esta repetida, me refiero a que hay un resto = num Mod 12 demas.

Luego, como esta  planteado tienen que cumplirse todas las condicones para que la variable Multiplo tenga un valor. Por tanto creo que la cadena de if se puede reempazar por cadenas de And, asi:

Código: (VB) [Seleccionar]
If (num Mod 12) = 0 And (num Mod 8) = 0 And (num Mod 6) = 0 And (num Mod 5) = 0 And (num Mod 4) = 0 Then
   Multiplo = num
End If

Saludos

Sin embargo, si esos son los numeros con los que vas a evaluar diria casi con seguridad que la condición solo es verdadera para 120, 240, 360, 480, etc. Por tanto queda recudida a esto:

Código: (VB) [Seleccionar]
If Right(num / 12, 1) = 0 And (num Mod 12) = 0 Then
   Multiplo = num
End If

Ah, lo olvidaba, para el valor mas cercano se me ocurre que habría que hacerlo recursivo,
« última modificación: Junio 14, 2014, 01:29:33 am por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Ayuda para mejorar una funcion
« Respuesta #2 en: Junio 15, 2014, 12:51:53 pm »
Si un numero es múltiplo de 12, es también múltiplo de 4, porque 12=4*3
156 = 12 * 13 = 4 * 3 * 13

Lo mismo con 8... y de 5 con 10

Por lo que solo deberías comparar si es múltiplo de 4, 5 y 6 :)

También podrías simplificarlo en funciones más simples

Código: (vb) [Seleccionar]
Private Function EsMultiplo(Numero As Integer, Base As Integer) As Boolean
   EsMultiplo = (Numero Mod Base = 0)
End Function

Private Function Multiplo(num As Integer) As Integer
   If EsMultiplo(num, 4) And EsMultiplo(num, 5) And EsMultiplo(num, 6) Then
       Multiplo = num
   Else
       Multiplo = 0
   End if
End Function

Espero que funcione porque lo codifique al aire :P
« última modificación: Junio 15, 2014, 01:18:15 pm por raul338 »

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda para mejorar una funcion
« Respuesta #3 en: Junio 15, 2014, 01:08:38 pm »
MUCHAS GRACIAS AMIGOS!!!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.