[RETO] IsFibonacciNumber(N as long) as Boolean

Iniciado por 79137913, 14 Febrero 2011, 19:42 PM

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

79137913

HOLA!!!

Bueno, un reto facil, dada la funcion:

IsFibonacciNumber(N as long) as Boolean

Se le da un numero entero sea Positivo o Negativo la funcion devolvera True si efectivamente es un numero perteneciente a la serie y false si no pertenece.

N maximo =46340

Para informacion acerca de la Secuencia de Fibonacci:
http://tinyurl.com/4ar5pd4

Obviamente vamos a usar para testear:
http://foro.elhacker.net/programacion_visual_basic/src_cfrogcontestcls_by_mr_frog_copy-t318871.0.html

XD


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*

Elemental Code

#1
wiiiiii
siempre me gusto fibbonacci :D

che pero los numeros que nos vas a dar van de 1 a infinito? o hay algun tope?

Ya le entro :D



EDITO:

Esto puede ser muy lento, despues lo optimizo
por ahora anda bien :P

Código (vb) [Seleccionar]
Public Function IsFibonacci(ByRef lNumber As Long) As Boolean
Dim i As Long 'anterior
Dim y As Long 'actual
Dim x As Long 'Restultado a checkear
i = 1
y = 1
    Do While x < lNumber
        x = i + y
        i = y
        y = x
        If x = lNumber Then IsFibonacci = True: Exit Function
    Loop
    IsFibonacci = False
End Function



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

Mis programas

Psyke1

Que malos sois justo mañana tengo examen y me poneis retos! :(
No me podré resistir, asi que si no es hoy por mi noche o mañana posteo algo. ;)
Está interesante! :)

DoEvents! :P

raul338

Che para mi deberia ser solo positivo, porque para ser negativo SIEMPRE hay que poner un limite para empezar. Sino no tenes cierta seguridad de si el numero pertenece a la serie o no. O sea, de 1 hacia adelante :P

DarkMatrix

#4
Bueno aqui dejo mi Funcion xD

Código (vb) [Seleccionar]
Function isFibbonacciNum(ByVal lNumber As Long) As Boolean

   Dim Fn0 As Double
   Dim Fn1 As Double
   Dim i   As Double
   Dim Num As Double

   Fn0 = 0
   Fn1 = 1
   
   isFibbonacciNum = False

   If lNumber = 0 Or lNumber = 1 Then isFibbonacciNum = True: Exit Function

   For i = 1 To lNumber

       Num = Fn0 + Fn1
       
       Fn0 = Fn1
       Fn1 = Num

       If Num = lNumber Then isFibbonacciNum = True: Exit Function

       If Num > lNumber Then Exit Function

   Next

End Function


@Elemental Code
La funcion da error con numeros grandes ( valor long maximo  = 2.147.483.647 ) y devuelve falso para los numeros 0 y 1 cuando deberian ser true o.O

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

Psyke1

#5
Aquí dejo la mía:

Código (vb) [Seleccionar]
Public Static Function IsFibonacciMrFrog(ByVal lngNumber As Long) As Boolean
Dim dblRaised                                       As Double
Dim dblSum                                          As Double
Dim dblSqr                                          As Double

   dblRaised = lngNumber * lngNumber
   dblSum = dblRaised + dblRaised + dblRaised + dblRaised + dblRaised + &H4
   dblSqr = Sqr(dblSum)
   IsFibonacciMrFrog = (dblSqr - CLong(dblSqr) = &H0)
   If IsFibonacciMrFrog Then Exit Function
   dblSum = dblSum - &H8
   dblSqr = Sqr(dblSum)
   IsFibonacciMrFrog = (dblSqr - CLong(dblSqr) = &H0)
End Function


Código (vb) [Seleccionar]
Private Sub Form_Load()
Dim x           As Long
Dim s           As String

   For x = 0 To 100
       If IsFibonacciMrFrog(x) Then
           s = s & x & " "
       End If
   Next
   Debug.Print s
End Sub


Resultado:
0 1 2 3 5 8 13 21 34 55 89

DoEvents! :P

Elemental Code

para 1 la arreglo al toq.

0 no es de fibonacci :S

fibonacci se arma asi

El numero siguiente es la suma de los dos anteriores.

juraria que el 0 no iba :S

que era
1 1 2 3 5 8 13 21...

lo se porque un amigo la usaba de password y era muy facil :D

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

Mis programas

DarkMatrix

#7
Cito directo de wikipedia:

CitarEn matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:

   0,1,1,2,3,5,8,13,21,34,55,89,144

La sucesión inicia con 0 y 1, y a partir de ahí cada elemento es la suma de los dos anteriores.

Link: http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

79137913

HOLA!!!

Igual si siguen buscando van a ver que la secuencia empieza en el -infinito si se quieren fijar.

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*

seba123neo

Hola, creo que la forma mas rapida de todas por lo que he visto de los muhcos algoritmos que hay, es meter todos los numeros ya calculados en un array y solo buscar en el.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson