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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Comprobar si un numero es Oblongo/Pronico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Comprobar si un numero es Oblongo/Pronico  (Leído 25,221 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #10 en: 17 Agosto 2010, 08:27 am »

no participe en el anterior reto pero dejo lña mia

Código
  1.  
  2. Private Function IsOblongo(ByVal lNumb As Long, ByRef n As Long) As Boolean
  3. Dim a   As Long
  4.    If lNumb < 0 Then n = -1: Exit Function
  5.    If (lNumb And 1) = 0 Then
  6.        If lNumb = 0 Then
  7.            IsOblongo = True
  8.        ElseIf lNumb = 2 Then
  9.            n = 1
  10.            IsOblongo = True
  11.        ElseIf lNumb = 6 Then
  12.            n = 2
  13.            IsOblongo = True
  14.        ElseIf lNumb = 12 Then
  15.            n = 3
  16.            IsOblongo = True
  17.        Else
  18.            For n = lNumb \ 4 To lNumb ^ (0.5) Step -1
  19.                If n * (n - 1) = lNumb Then
  20.                    IsOblongo = True
  21.                    Exit Function
  22.                End If
  23.            Next
  24.        End If
  25.    Else
  26.        IsOblongo = False
  27.        n = -1
  28.    End If
  29. End Function
  30.  
  31.  

P.D.: Aun no la he optimisado!¡.

Dulces Lunas!¡.


« Última modificación: 17 Agosto 2010, 09:27 am por BlackZeroX » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #11 en: 17 Agosto 2010, 09:08 am »

@LeandroA

La funcion sqr() no permite numeros negativos xP

@General

n deberia devolver -1 u otro, razonando que 0 pertenece a el numero 0, al igual que 1 pertenece a 2, 2 a 6, 3 a 12, 4 a 20, 5 a 30, etc (Siendo n a X)!¡..

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #12 en: 17 Agosto 2010, 09:48 am »

Hay funciones que se indican erroneas:

Karcrack y la Funcion de LeandroA

Karcrack corrige el HOrror (step 2, sqr(X-1), y (n=3) [sqr(6)=2.444.. ] el 6 no esta contemplado) --> Que paso ?

Indicare los numeros:

LeandroA

Solo son desde apartir de 11772
Código:

LeandroA       11772
LeandroA       11990
LeandroA       12210
LeandroA       12432
LeandroA       12656
LeandroA       12882
LeandroA       13110
LeandroA       13340
LeandroA       13572
LeandroA       13806
LeandroA       14042
LeandroA       14280
LeandroA       14520
LeandroA       14762
LeandroA       15006
LeandroA       15252
LeandroA       15500
LeandroA       15750
LeandroA       16002
LeandroA       16256
LeandroA       16512
LeandroA       16770
LeandroA       17030
LeandroA       17292
LeandroA       17556
LeandroA       17822
LeandroA       18090
LeandroA       18360
LeandroA       18632
LeandroA       18906
LeandroA       19182
LeandroA       19460
LeandroA       19740
LeandroA       20022
LeandroA       20306
LeandroA       20592
LeandroA       20880
LeandroA       21170
LeandroA       21462
LeandroA       21756
LeandroA       22052
LeandroA       22350
LeandroA       22650
LeandroA       22952
LeandroA       23256
LeandroA       23562
LeandroA       23870
LeandroA       24180
LeandroA       24492
LeandroA       24806
LeandroA       25122
LeandroA       25440
LeandroA       25760
LeandroA       26082
LeandroA       26406
LeandroA       26732
LeandroA       27060
LeandroA       27390
LeandroA       27722
LeandroA       28056
LeandroA       28392
LeandroA       28730
LeandroA       29070
LeandroA       29412
LeandroA       29756
LeandroA       30102
LeandroA       30450
LeandroA       30800
LeandroA       31152
LeandroA       31506
LeandroA       31862
LeandroA       32220
LeandroA       32580
LeandroA       32942
LeandroA       33306
LeandroA       33672
LeandroA       34040
LeandroA       34410
LeandroA       34782
LeandroA       35156
LeandroA       35532
LeandroA       35910
LeandroA       36290
LeandroA       36672
LeandroA       37056
LeandroA       37442
LeandroA       37830
LeandroA       38220
LeandroA       38612
LeandroA       39006
LeandroA       39402
LeandroA       39800
LeandroA       40200
LeandroA       40602
LeandroA       41006
LeandroA       41412
LeandroA       41820
LeandroA       42230
LeandroA       42642
LeandroA       43056
LeandroA       43472
LeandroA       43890
LeandroA       44310
LeandroA       44732
LeandroA       45156
LeandroA       45582
LeandroA       46010
LeandroA       46440
LeandroA       46872
LeandroA       47306
LeandroA       47742
LeandroA       48180
LeandroA       48620
LeandroA       49062
LeandroA       49506
LeandroA       49952
LeandroA       50400
LeandroA       50850
LeandroA       51302
LeandroA       51756
LeandroA       52212
LeandroA       52670
LeandroA       53130
LeandroA       53592
LeandroA       54056
LeandroA       54522
LeandroA       54990
LeandroA       55460
LeandroA       55932
LeandroA       56406
LeandroA       56882
LeandroA       57360
LeandroA       57840
LeandroA       58322
LeandroA       58806
LeandroA       59292
LeandroA       59780
LeandroA       60270
LeandroA       60762
LeandroA       61256
LeandroA       61752
LeandroA       62250
LeandroA       62750
LeandroA       63252
LeandroA       63756
LeandroA       64262
LeandroA       64770
LeandroA       65280
LeandroA       65792
LeandroA       66306
LeandroA       66822
LeandroA       67340
LeandroA       67860
LeandroA       68382
LeandroA       68906
LeandroA       69432
LeandroA       69960
LeandroA       70490
LeandroA       71022
LeandroA       71556
LeandroA       72092
LeandroA       72630
LeandroA       73170
LeandroA       73712
LeandroA       74256
LeandroA       74802
LeandroA       75350
LeandroA       75900
LeandroA       76452
LeandroA       77006
LeandroA       77562
LeandroA       78120
LeandroA       78680
LeandroA       79242
LeandroA       79806
LeandroA       80372
LeandroA       80940
LeandroA       81510
LeandroA       82082
LeandroA       82656
LeandroA       83232
LeandroA       83810
LeandroA       84390
LeandroA       84972
LeandroA       85556
LeandroA       86142
LeandroA       86730
LeandroA       87320
LeandroA       87912
LeandroA       88506
LeandroA       89102
LeandroA       89700
LeandroA       90300
LeandroA       90902
LeandroA       91506
LeandroA       92112


Código
  1.  
  2. Option Explicit
  3. Private Declare Function GetTickCount Lib "Kernel32" () As Long
  4.  
  5. Private Sub Form_Load()
  6. Dim i           As Long
  7. Dim t(1)        As Long
  8.  
  9.    t(0) = GetTickCount
  10.    For i = 0 To 92681
  11.        If IsOblongo01(i, 0) <> IsOblongo02(i) Then
  12.            Debug.Print "Karcrack", i
  13.        End If
  14.    Next i
  15.    t(1) = GetTickCount
  16.    text1.text = text1.text & vbNewLine & "Karcrack --> " & t(1) - t(0)
  17.  
  18.    t(0) = GetTickCount
  19.    For i = 0 To 92681
  20.        If EsOblongo(i, 0) <> IsOblongo02(i) Then
  21.            Debug.Print "Tokes", i
  22.        End If
  23.    Next i
  24.    t(1) = GetTickCount
  25.    text1.text = text1.text & vbNewLine & "Tokes --> " & t(1) - t(0)
  26.  
  27.    t(0) = GetTickCount
  28.    For i = 0 To 92681
  29.        If IsOblongo(i, 0) <> IsOblongo02(i) Then
  30.            Debug.Print "BlackZeroX", i
  31.        End If
  32.    Next i
  33.    t(1) = GetTickCount
  34.    text1.text = text1.text & vbNewLine & "BlackZeroX --> " & t(1) - t(0)
  35.  
  36.    t(0) = GetTickCount
  37.    For i = 0 To 92681
  38.        If IsOblongoLeo(i, 0) <> IsOblongo02(i) Then
  39.            Debug.Print "LeandroA", i
  40.        End If
  41.    Next i
  42.    t(1) = GetTickCount
  43.    text1.text = text1.text & vbNewLine & "LeandroA --> " & t(1) - t(0)
  44.  
  45.  
  46. End Sub
  47.  
  48. 'BlackZeroX
  49. Private Function IsOblongo(ByVal lNumb As Long, ByRef n As Long) As Boolean
  50. Dim a   As Long
  51.    If lNumb < 0 Then n = -1: Exit Function
  52.    If (lNumb And 1) = 0 Then
  53.        If lNumb = 0 Then
  54.            IsOblongo = True
  55.        ElseIf lNumb = 2 Then
  56.            n = 1
  57.            IsOblongo = True
  58.        ElseIf lNumb = 6 Then
  59.            n = 2
  60.            IsOblongo = True
  61.        ElseIf lNumb = 12 Then
  62.            n = 3
  63.            IsOblongo = True
  64.        Else
  65.            For n = lNumb \ 4 To lNumb ^ (0.5) Step -1
  66.                If n * (n - 1) = lNumb Then
  67.                    IsOblongo = True
  68.                    Exit Function
  69.                End If
  70.            Next
  71.        End If
  72.    Else
  73.        IsOblongo = False
  74.        n = -1
  75.    End If
  76. End Function
  77.  
  78. ' Karcrack
  79. Private Function IsOblongo01(ByVal lNumb As Long, ByRef n As Long) As Boolean
  80.    If (lNumb = 0) Or (lNumb = 2) Then n = lNumb \ 2: IsOblongo01 = True: Exit Function
  81.  
  82.    If (lNumb And 1) Then
  83.        For n = 3 To Sqr(lNumb + 1) Step 2
  84.            If lNumb = n * (n + 1) Then
  85.                IsOblongo01 = True
  86.                Exit For
  87.            End If
  88.        Next n
  89.    End If
  90. End Function
  91.  
  92. 'Tokes
  93. Private Function EsOblongo(ByVal num As Long, ByRef n As Long) As Boolean
  94. Dim max As Long, i As Long
  95.    If (num And 1) Then Exit Function
  96.  
  97.    max = Sqr(num)
  98.    For i = 0 To max
  99.        If num = i * i + i Then 'i * (i + 1) Then
  100.            EsOblongo = True
  101.            n = i
  102.            Exit Function
  103.        End If
  104.    Next
  105. End Function
  106.  
  107. 'raul338
  108. Private Function EsCasiCuadrado(ByVal lNumb As Long, ByRef n As Long) As Boolean
  109.    If lNumb < 0 Or (lNumb And 1) = 1 Then Exit Function
  110.    If lNumb = 2 Then
  111.        n = 1
  112.        EsCasiCuadrado = True
  113.    End If
  114.  
  115.    Dim i As Long
  116.    Dim fin As Long
  117.    fin = Sqr(lNumb)
  118.    For i = 2 To fin
  119.        If lNumb / i = i + 1 Then
  120.            n = i
  121.            EsCasiCuadrado = True
  122.            Exit Function
  123.        End If
  124.    Next
  125. End Function
  126.  
  127. 'LeandroA
  128. Private Function IsOblongoLeo(ByVal lNumb As Long, ByRef n As Long) As Boolean
  129.    Dim R As Long
  130.    Dim lSum As Long
  131.  
  132.    If (lNumb And 1) Then Exit Function
  133.  
  134.    lSum = lNumb + 1
  135.  
  136.    R = lSum ^ 0.48
  137.    If lNumb = R * (R + 1) Then
  138.        IsOblongoLeo = True
  139.        n = R
  140.    Else
  141.        R = lSum ^ 0.49
  142.        If lNumb = R * (R + 1) Then
  143.            IsOblongoLeo = True
  144.            n = R
  145.        Else
  146.            R = lSum ^ 0.495
  147.            If lNumb = R * (R + 1) Then
  148.                IsOblongoLeo = True
  149.                n = R
  150.            Else
  151.                R = lSum ^ 0.498
  152.                If lNumb = R * (R + 1) Then
  153.                    IsOblongoLeo = True
  154.                    n = R
  155.                Else
  156.                    R = lSum ^ 0.499
  157.                    If lNumb = R * (R + 1) Then
  158.                        IsOblongoLeo = True
  159.                        n = R
  160.                    Else
  161.                        If (lNumb = 0) Or (lNumb = 2) Then n = lNumb \ 2: IsOblongoLeo = True: Exit Function
  162.                        If (lNumb = 6) Then n = 2: IsOblongoLeo = True
  163.                    End If
  164.                End If
  165.            End If
  166.        End If
  167.    End If
  168. End Function
  169.  
  170. ' Karcrack, no cumple el requisito de devolver n
  171. Private Function IsOblongo02(ByVal lNumb As Long) As Boolean
  172.    IsOblongo02 = (Round(Sqr(lNumb + 1)) - Round(Sqr(lNumb)) = 1)
  173. End Function
  174.  
  175.  

P.D.: la mia es la mas lenta xP

Ducles Lunas!¡.
« Última modificación: 17 Agosto 2010, 10:26 am por BlackZeroX » En línea

The Dark Shadow is my passion.
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #13 en: 17 Agosto 2010, 12:54 pm »

1- Raul338 aplicas mal el algoritmo, como ha dicho Cobein (n * (n+1)) <> (n * n + 1)
2- La velocidad ha de comprobarse compilada siempre.
3- Algunos de vosotros no incluis el 2 como numero Oblongo, y lo es: 2 = 1*(1+1)
4- Aqui pongo los resultados del test que he corrido en mi PC (Con la llamada que puse yo, que es con la que hay que probar :)):
Código:
Karcrack -> 5,729 msec
Tokes -> 6,236 msec
LeandroA -> 24,102
B0X -> 76,071 msec
raul338 -> Funcion no valida




He actualizado mi funcion, tenia un gran fallo :laugh:
Código:
' Karcrack
Private Function IsOblongo01(ByVal lNumb As Long, ByRef n As Long) As Boolean
    If (lNumb = 0) Then n = 0: IsOblongo01 = True: Exit Function
 
    If (lNumb And 1) = 0 Then
        For n = 1 To Sqr(lNumb + 1)
            If lNumb = n * (n + 1) Then
                IsOblongo01 = True
                Exit For
            End If
        Next n
    End If
End Function
« Última modificación: 17 Agosto 2010, 13:05 pm por Karcrack » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #14 en: 17 Agosto 2010, 14:55 pm »

HOLA!!!

QUISIERA SABER QUE ES MAS RAPIDO:


Código
  1. If Not (lNumb And 1) = 0 Then Exit Function
  2.  
  3. ' O
  4.  
  5. If Not (lNumb Mod 2) = 0 Then Exit Function
  6.  


Gracias!!!
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*
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #15 en: 17 Agosto 2010, 16:22 pm »

Algo que vi en algunos algoritmos

6 = 2*(2+1) no es lo mismo que 2 * 2+1
1- Raul338 aplicas mal el algoritmo, como ha dicho Cobein (n * (n+1)) <> (n * n + 1)

Citar
6 = 2 * (2 + 1)
// pasamos el 2 dividiendo a 6
6 / 2 = 2 + 1
// en otros lados dicen "dividimos ambos mienbros por 2
6 / 2 = 2 * (2 + 1)
               2
6 / 2 = 2 + 1

Cosa que eso es lo que hago yo :P

Cambien "lNumb / i = i + 1" por "lNumb = i * (i + 1)" y les dara exactamente los mismos resultados :¬¬ :xD
En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #16 en: 17 Agosto 2010, 17:51 pm »

raul338 tiene toda la razón del universo.

                   Saludos...
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #17 en: 17 Agosto 2010, 18:08 pm »

Ufff.... para mi LeandroA ha ganado el reto!, es rapidisima su funcion!!!!
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #18 en: 17 Agosto 2010, 19:01 pm »

@79137913: Es mucho mas rapido el primero, siempre trabajar con Bits es mas rapido.
« Última modificación: 17 Agosto 2010, 19:14 pm por Karcrack » En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: [RETO] Comprobar si un numero es Oblongo/Pronico
« Respuesta #19 en: 17 Agosto 2010, 19:07 pm »

Hola a todos. No proclamen un ganador sin primero ver esto.

Código:
Option Explicit

Dim n As Long
Private Declare Function GetTickCount Lib "Kernel32" () As Long

Private Sub Form_Load()
    Label1.Caption = ""
    Label1.AutoSize = True
    Text1 = ""
    Command1.Caption = "Calcular"
End Sub

Private Sub Command1_Click()
Dim i As Long, t1 As Long, t2 As Long, c As Long

    On Error Resume Next
    Label1.Caption = ""
   
    'BlackZeroX
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If IsOblongo(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "'BlackZeroX --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'Karcrack
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If IsOblongo01(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "Karcrack --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'Tokes
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If EsOblongo(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "Tokes --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'Tokes 2
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If EsOblongo2(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "Tokes 2 --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'raul338
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If EsCasiCuadrado(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "raul338 --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'LeandroA
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If IsOblongoLeo(i, n) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "LeandroA --> " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
   
    'Karcrack sin retorno de n
    c = 0
    t1 = GetTickCount
    For i = 1 To Val(Text1)
        If IsOblongo02(i) Then
            c = c + 1
        End If
    Next
    t2 = GetTickCount
    Label1.Caption = Label1.Caption & "Karcrack (IsOblongo02) = " & t2 - t1 & Chr(13) _
    & c & " números oblongos encontrados" & Chr(13) & Chr(13)
End Sub


'----------------------
'BlackZeroX
Private Function IsOblongo(ByVal lNumb As Long, ByRef n As Long) As Boolean
Dim a   As Long
    If lNumb < 0 Then n = -1: Exit Function
    If (lNumb And 1) = 0 Then
        If lNumb = 0 Then
            IsOblongo = True
        ElseIf lNumb = 2 Then
            n = 1
            IsOblongo = True
        ElseIf lNumb = 6 Then
            n = 2
            IsOblongo = True
        ElseIf lNumb = 12 Then
            n = 3
            IsOblongo = True
        Else
            For n = lNumb \ 4 To lNumb ^ (0.5) Step -1
                If n * (n - 1) = lNumb Then
                    IsOblongo = True
                    Exit Function
                End If
            Next
        End If
    Else
        IsOblongo = False
        n = -1
    End If
End Function
 
'------------------
' Karcrack
Private Function IsOblongo01(ByVal lNumb As Long, ByRef n As Long) As Boolean
    If (lNumb = 0) Then n = 0: IsOblongo01 = True: Exit Function
 
    If (lNumb And 1) = 0 Then
        For n = 1 To Sqr(lNumb + 1)
            If lNumb = n * (n + 1) Then
                IsOblongo01 = True
                Exit For
            End If
        Next n
    End If
End Function

'--------------------
'Tokes
Private Function EsOblongo(ByVal num As Long, ByRef n As Long) As Boolean
Dim max As Long, i As Long
    If (num And 1) Then Exit Function
 
    max = Sqr(num)
    For i = 0 To max
        If num = i * i + i Then 'i * (i + 1) Then
            EsOblongo = True
            n = i
            Exit Function
        End If
    Next
End Function
 
'-----------------
'Tokes 2
Private Function EsOblongo2(ByVal num As Long, ByRef n As Long) As Boolean
Dim max As Long
    If (num And 1) Or (num And &H80000000) Then Exit Function
   
    max = Sqr(num)
    If num = max * max + max Then
        EsOblongo2 = True
        n = max
        Exit Function
    End If
End Function
 
'raul338
Private Function EsCasiCuadrado(ByVal lNumb As Long, ByRef n As Long) As Boolean
    If lNumb < 0 Or (lNumb And 1) = 1 Then Exit Function
    If lNumb = 2 Then
        n = 1
        EsCasiCuadrado = True
    End If
 
    Dim i As Long
    Dim fin As Long
    fin = Sqr(lNumb)
    For i = 2 To fin
        If lNumb / i = i + 1 Then
            n = i
            EsCasiCuadrado = True
            Exit Function
        End If
    Next
End Function
 
'LeandroA
Private Function IsOblongoLeo(ByVal lNumb As Long, ByRef n As Long) As Boolean
    Dim R As Long
    Dim lSum As Long
 
    If (lNumb And 1) Then Exit Function
 
    lSum = lNumb + 1
 
    R = lSum ^ 0.48
    If lNumb = R * (R + 1) Then
        IsOblongoLeo = True
        n = R
    Else
        R = lSum ^ 0.49
        If lNumb = R * (R + 1) Then
            IsOblongoLeo = True
            n = R
        Else
            R = lSum ^ 0.495
            If lNumb = R * (R + 1) Then
                IsOblongoLeo = True
                n = R
            Else
                R = lSum ^ 0.498
                If lNumb = R * (R + 1) Then
                    IsOblongoLeo = True
                    n = R
                Else
                    R = lSum ^ 0.499
                    If lNumb = R * (R + 1) Then
                        IsOblongoLeo = True
                        n = R
                    Else
                        If (lNumb = 0) Or (lNumb = 2) Then n = lNumb \ 2: IsOblongoLeo = True: Exit Function
                        If (lNumb = 6) Then n = 2: IsOblongoLeo = True
                    End If
                End If
            End If
        End If
    End If
End Function
 
' Karcrack, no cumple el requisito de devolver n
Private Function IsOblongo02(ByVal lNumb As Long) As Boolean
    IsOblongo02 = (Round(Sqr(lNumb + 1)) - Round(Sqr(lNumb)) = 1)
End Function

   Saludos.
En línea

Páginas: 1 [2] 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA] Comprobar si un número es ondulado
Programación C/C++
Kropt32 2 7,331 Último mensaje 15 Diciembre 2010, 09:04 am
por Kropt32
[JSTL] Como comprobar si una variable es un numero en JSTL
Desarrollo Web
nhaalclkiemr 0 4,477 Último mensaje 10 Abril 2011, 20:42 pm
por nhaalclkiemr
[RETO] Determinar Número Perfecto « 1 2 3 »
Programación Visual Basic
Miseryk 20 8,405 Último mensaje 8 Noviembre 2013, 02:24 am
por rob1104
comprobar numero repetido en un vector
Programación C/C++
MessageBoxA 4 3,095 Último mensaje 26 Junio 2014, 02:05 am
por MeCraniDOS
¿Es posible escapar del reto “vecinos de número”?
Noticias
wolfbcn 6 1,493 Último mensaje 13 Agosto 2019, 18:42 pm
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines