elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] IsFibonacciNumber(N as long) as Boolean
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] IsFibonacciNumber(N as long) as Boolean  (Leído 13,840 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long)
« Respuesta #10 en: 15 Febrero 2011, 06:55 am »

.
@Mr. Frogs

Tu funcion tiene Horrores de logica básica ( Conversion de un Double a un Integer ).

Aquí la mía (Aplicando algo que dijo seba123neo pero en la forma mas practica posible para el ahorro de memoria) :

Código
  1.  
  2. Option Explicit
  3.  
  4. Function isFibbonacci(ByVal vVal&) As Boolean
  5. Dim dbl_v#(0 To 1)
  6. Dim byt_i                   As Byte
  7.    If Not vVal& And &H80000000 Then
  8.        dbl_v#(1) = 1
  9.        dbl_v#(0) = 0
  10.        Do Until dbl_v#(byt_i) >= vVal&
  11.            dbl_v#(byt_i) = dbl_v#(byt_i) + dbl_v#(byt_i Xor 1)
  12.            byt_i = byt_i Xor 1
  13.        Loop
  14.        If dbl_v#(0) = vVal& Or dbl_v#(1) = vVal& Then
  15.            isFibbonacci = True
  16.        End If
  17.    End If
  18. End Function
  19.  
  20. Private Sub Form_Load()
  21. Dim lng_i&
  22.    For lng_i& = -214748 To 2147483647
  23.        If isFibbonacci(lng_i&) = True Then
  24.            Debug.Print lng_i&
  25.        End If
  26.    Next lng_i&
  27. End Sub
  28.  
  29.  

Código:

 0
 1
 2
 3
 5
 8
 13
 21
 34
 55
 89
 144
 233
 377
 610
 987
 1597
 2584
 4181
 6765
 10946
 17711
 28657
 46368
 75025
 121393
 196418
 317811
 514229
 832040
 1346269
 2178309
 3524578
 5702887
 9227465
 14930352
 24157817
 39088169
 63245986
 102334155
 165580141
 267914296
 433494437
 701408733
 1134903170
 1836311903


P.D.: DarkMatrix tu juego aun esta Online, cual es la pagina?

Temibles Lunas!¡.


« Última modificación: 15 Febrero 2011, 19:02 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long)
« Respuesta #11 en: 15 Febrero 2011, 11:51 am »

HOLA!!!

Aca va mi codigo, Casi identico al de Mr Frog :S igual Lo tenia armado desde antes.

Me falta agregar la comprobacion para los negativos.

Código
  1. Private Function IsFibonacci7913(ByVal N As Long) As Boolean
  2.    If N < &H0 Then
  3.    If N = -1 Then IsFibonacci7913 = True: Exit Function
  4.        Dim Neg0 As Double
  5.        Dim Neg1 As Double
  6.        Dim Neg2 As Double
  7.        Neg0 = &H0
  8.        Neg1 = &H1
  9.        Do While Not (Neg1 < N)
  10.            Neg2 = Neg0
  11.            Neg0 = Neg1
  12.            Neg1 = (Neg2 - Neg0)
  13.        Loop
  14.        If N = Neg2 Then IsFibonacci7913 = True
  15.        Exit Function
  16.    End If
  17.    If N = &H0 Then IsFibonacci7913 = True: Exit Function
  18.    Dim Aux0 As Double
  19.    Dim Aux1 As Double
  20.    Dim Aux2 As Double
  21.    Aux2 = N * N
  22.    Aux2 = Aux2 + Aux2 + Aux2 + Aux2 + Aux2
  23.    Aux1 = Aux2 + &H4
  24.    Aux1 = Sqr(Aux1)
  25.    If Aux1 - (CLng(Aux1)) = &H0 Then IsFibonacci7913 = True: Exit Function
  26.    Aux0 = Aux2 - &H4
  27.    Aux0 = Sqr(Aux0)
  28.    If Aux0 - (CLng(Aux0)) = &H0 Then IsFibonacci7913 = True
  29. End Function
  30.  

Nota:
1)Negafibonacci (ver fuente).
2)Comprobacion de Numeros enteros positivos sean de Fibbonacci (ver fuente).

Fuente1: http://www.worldlingo.com/ma/enwiki/es/Negafibonacci
Fuente2: http://gaussianos.com/algunas-curiosidades-sobre-los-numeros-de-fibonacci/

GRACIAS POR LEER!!!


« Última modificación: 15 Febrero 2011, 14:20 pm por 79137913 » En línea

"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*
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long)
« Respuesta #12 en: 15 Febrero 2011, 13:48 pm »

Mi función y la de 79137913 solo es valida hasta 46340... (estoy trabajando en ello) :rolleyes:

@79137913
Las varibles donde estan declaradas? :huh:

@BlackZer0x
Citar
Tu funcion tiene Horrores de logica básica ( Conversion de un Double a un Integer ).
Creo que te equivocas, lo que hago es comprobar si el resultado es un número exacto o no, de esta manera :

Si tengo el numero 234.365 seria :
Código
  1. 234.365 - 234 = 0 ' Falso (el número 234.365 NO es entero)
Pero si es el numero 456 :
Código
  1. 456 - 456 = 0 ' Verdadero (el número 456 es entero)

DoEvents! :P
« Última modificación: 15 Febrero 2011, 14:10 pm por Mr. Frog © » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long)
« Respuesta #13 en: 15 Febrero 2011, 13:59 pm »

HOLA!!!

Hasta ahora:
0) SOLO TESTEADO CON NUMEROS POSITIVOS
1) A MI FUNCION EN EL TEST SE LE QUITO LA PARTE DE LOS NEGATIVOS
2) ACTUALIZADO CON MI ULTIMA FUNCION
3) RESULTADOS COMPILANDO

Código:
"******TEST HECHO POR 79137913******"
**PRUEBA CON NUMEROS POSITIVOS HASTA EL MAX**
7913: 6,891 msec
BZro: 35,604 msec
E__C: 1,786 msec
Frog: 6,319 msec
Dark: 18,452 msec

Para ver el test: http://pastebin.com/LJm02bAw

GRACIAS POR LEER!!!
« Última modificación: 15 Febrero 2011, 14:36 pm por 79137913 » En línea

"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*
tonomac3

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [RETO] IsFibonacciNumber(N as long)
« Respuesta #14 en: 15 Febrero 2011, 15:52 pm »

Y yo que me iba a rendir. Ahora largo el celu y me pongo a programar
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long) as Boolean
« Respuesta #15 en: 15 Febrero 2011, 18:41 pm »


@BlackZer0xCreo que te equivocas, lo que hago es comprobar si el resultado es un número exacto o no, de esta manera :


Código
  1.  
  2. Option Explicit
  3.  
  4. Function isFibbonacci(ByVal vVal&) As Boolean
  5. Dim dbl_v#(0 To 1)
  6. Dim byt_i                   As Byte
  7.    If Not vVal& And &H80000000 Then
  8.        dbl_v#(1) = 1
  9.        dbl_v#(0) = 0
  10.        Do Until dbl_v#(byt_i) >= vVal&
  11.            dbl_v#(byt_i) = dbl_v#(byt_i) + dbl_v#(byt_i Xor 1)
  12.            byt_i = byt_i Xor 1
  13.        Loop
  14.        If dbl_v#(0) = vVal& Or dbl_v#(1) = vVal& Then
  15.            isFibbonacci = True
  16.        End If
  17.    End If
  18. End Function
  19.  
  20. Private Sub Form_Load()
  21. Dim lng_i&
  22.    For lng_i& = -214748 To 2
  23.        If IsFibonacciMrFrog(lng_i&) = True Then
  24.            Debug.Print lng_i&,
  25.        End If
  26.        If isFibbonacci(lng_i&) = True Then
  27.            Debug.Print lng_i&
  28.        End If
  29.    Next lng_i&
  30. End Sub
  31.  
  32. Public Static Function IsFibonacciMrFrog(ByVal lngNumber As Long) As Boolean
  33. Dim dblRaised                                       As Double
  34. Dim dblSum                                          As Double
  35. Dim dblSqr                                          As Double
  36.  
  37.    dblRaised = lngNumber * lngNumber
  38.    dblSum = dblRaised + dblRaised + dblRaised + dblRaised + dblRaised + &H4
  39.    dblSqr = Sqr(dblSum)
  40.    IsFibonacciMrFrog = (dblSqr - Int(dblSqr) = &H0)
  41.    If IsFibonacciMrFrog Then Exit Function
  42.    dblSum = dblSum - &H8
  43.    dblSqr = Sqr(dblSum)
  44.    IsFibonacciMrFrog = (dblSqr - Int(dblSqr) = &H0)
  45. End Function
  46.  
  47.  

Creer no es bueno:
Usa clng() en lugar de int(), ( en vb6: int = 2 bytes, Double = 8 bytes, long = 4 bytes. ¿cual crees que abarca una cantidad mayor? )

los numeros superan a int().

Estos valores los calcule del 0 al 2147483647 (MAXIMO Numero en Long))

Código:

 0
 1
 2
 3
 5
 8
 13
 21
 34
 55
 89
 144
 233
 377
 610
 987
 1597
 2584
 4181
 6765
 10946
 17711
 28657
 46368
 75025
 121393
 196418
 317811
 514229
 832040
 1346269
 2178309
 3524578
 5702887
 9227465
 14930352
 24157817
 39088169
 63245986
 102334155
 165580141
 267914296
 433494437
 701408733
 1134903170
 1836311903


Dulces lunas!¡.
« Última modificación: 15 Febrero 2011, 19:01 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long) as Boolean
« Respuesta #16 en: 15 Febrero 2011, 18:48 pm »

HOLA!!!

Black tiene razon, no me habia dado cuenta :P

GRACIAS POR LEER!!!
« Última modificación: 15 Febrero 2011, 19:23 pm por 79137913 » En línea

"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*
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long) as Boolean
« Respuesta #17 en: 15 Febrero 2011, 19:14 pm »

@Black
Oops... Lo peor de todo es que sé los bytes correspondientes a cada variable. :¬¬
No se porque pensaba que Int() era direfente de CInt() ... En fin, cosas mías, gracias por la corrección. ;)

DoEvents! :P
En línea

Elemental Code


Desconectado Desconectado

Mensajes: 622


Im beyond the system


Ver Perfil
Re: [RETO] IsFibonacciNumber(N as long) as Boolean
« Respuesta #18 en: 15 Febrero 2011, 19:31 pm »

colgandome de lo que dijeron de cual era el limite se me ocurrio hacer trampa  :silbar:
Código
  1. Public Function FibonacciChecker_eCode(ByRef lNumero As Long) As Boolean
  2. Dim FiSplit() As String
  3. Dim i As Long
  4. Const Fi As String = "0,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368"
  5. FiSplit() = Split(Fi, ",", -1, vbBinaryCompare)
  6.  
  7. For i = 0 To 23
  8.    If lNumero = CLng(FiSplit(i)) Then FibonacciChecker_eCode = True: Exit Function
  9.    If lNumero < CLng(FiSplit(i)) Then FibonacciChecker_eCode = False: Exit Function
  10. Next i
  11. End Function

ahora reviso el codigo que no le tenia fe y resulto ser el mas rapido :P

Edito :D

Aca dejo optimizado el codigo que use antes, ahora reconoce el 0 y el 1
Código
  1. Public Function IsFibonacci_eCode(ByRef lNumber As Long) As Boolean
  2. Dim i As Long 'anterior
  3. Dim y As Long 'actual
  4. Dim x As Long 'Restultado a checkear
  5. y = 1
  6.    Do While x < lNumber
  7.        If x = lNumber Then IsFibonacci_eCode = True: Exit Function
  8.        x = i + y
  9.        i = y
  10.        y = x
  11.    Loop
  12.    IsFibonacci_eCode = False
  13. End Function

Estoy maserando otro codigo, paciencia que ya voy ;)


Wiiiii :D

Gracias a MrFrog que me dijo que use el do-loop para armar esto :D
Código
  1. Public Function IsFibonacci_eCodeMatrix(ByRef lNumero As Long) As Boolean
  2.    Dim f() As Long
  3.    Dim i As Long
  4.    ReDim f(1)
  5.    f(0) = 0
  6.    f(1) = 1
  7.    i = 2
  8.    Do
  9.        Debug.Print i; ","; f(i - 1)
  10.        If lNumero = f(i - 1) Then IsFibonacci_eCode = True:  Exit Function
  11.        If lNumero < f(i - 1) Then IsFibonacci_eCode = False:  Exit Function
  12.        ReDim Preserve f(i)
  13.        f(i) = f(i - 1) + f(i - 2)
  14.        i = i + 1
  15.    Loop
  16. End Function

Tres codes para un reto. toy demasiado al pedo  :)


« Última modificación: 15 Febrero 2011, 19:47 pm por Elemental Code » En línea

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] IsFibonacciNumber(N as long) as Boolean
« Respuesta #19 en: 15 Febrero 2011, 19:40 pm »

.
Se vale hacer trampa? mmm, pues bueno aqui estan TODOS los numeros Fibonacci hasta el numero Máximo de Long.

Código
  1.  
  2. Public Function IsFibonacci_WithCache(ByRef vVal As Long) As Boolean
  3. Dim lng_i          As Long
  4. Dim var_cache()
  5.    var_cache() = Array(0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903)
  6.    For lng_i = 0 To UBound(var_cache)
  7.        If var_cache(lng_i) = vVal Then IsFibonacci_WithCache = True: Exit For
  8.    Next lng_i
  9. End Function
  10.  
  11.  

Temibles Lunas!¡.
« Última modificación: 15 Febrero 2011, 19:42 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con la estructura de boolean
Programación Visual Basic
CRAB 3 3,247 Último mensaje 12 Julio 2005, 20:32 pm
por Crack_X
Clase Boolean
Java
Franer 1 3,174 Último mensaje 13 Febrero 2010, 18:06 pm
por panaka
Variable boolean en java, cuanto mide?
Java
nico56 5 8,231 Último mensaje 20 Julio 2010, 08:07 am
por Aeros
[Reto Batch] IsFibonacciNumber (79137913) « 1 2 »
Scripting
Eleкtro 14 7,492 Último mensaje 22 Julio 2012, 03:00 am
por Binary_Death
PL/SQL función boolean
Bases de Datos
Psyke1 0 2,047 Último mensaje 28 Junio 2012, 15:36 pm
por Psyke1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines