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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Src] IsInArray
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [Src] IsInArray  (Leído 4,384 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [Src] IsInArray
« Respuesta #10 en: 2 Junio 2011, 15:30 pm »

.
Actualice el código de mi función.

Temibles Lunas!¡.
Muy bueno, buen trabajo. :)
Resulta muy divertido empezar a sacar versiones de una misma cosa a ver quien lo hace mejor. :)
Veo que te basaste en la mía... :silbar:

DoEvents! :P


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Src] IsInArray
« Respuesta #11 en: 2 Junio 2011, 19:54 pm »

.
De hecho solo saque la lógica de comparar lpos, si se genera dos veces entonces se haría un bucle infinito que no tendría caso alguno, lo demás es lo mismo de mi código.

Solo reemplace las lineas sombreadas... aun que si quitaba la 2da linea entonces tendria que meter un rango de comparacion...

Código
  1.  
  2. option explicit
  3.  
  4. Public Function ExitsInArrayNR(ByRef vValue As Long, ByRef vBuff() As Long, ByRef p As Long) As Boolean
  5. Dim lng_lb                      As Long
  6. Dim lng_Ub                      As Long
  7.    lng_lb = LBound(vBuff&())
  8.    lng_Ub = UBound(vBuff&())
  9.    If Not vBuff&(lng_Ub) > vBuff&(lng_lb) Then
  10.        Dim t                           As Long
  11.        t = lng_Ub
  12.        lng_Ub = lng_lb
  13.        lng_lb = t
  14.    End If
  15.    Do Until ExitsInArrayNR
  16.        Select Case vValue
  17.            Case vBuff&(lng_lb&)
  18.                p& = lng_lb&
  19.                ExitsInArrayNR = True
  20.            Case vBuff&(lng_Ub&)
  21.                p& = lng_Ub&
  22.                ExitsInArrayNR = True
  23.            Case Else
  24.                p = (lng_lb& + lng_Ub&) / 2
  25.                If p <> lng_lb& And p& <> lng_Ub& Then
  26.                    If vBuff&(p&) < vValue& Then
  27.                        lng_lb = p
  28.                    ElseIf vBuff&(p&) > vValue& Then
  29.                        lng_Ub = p
  30.                    ElseIf vBuff&(p&) = vValue& Then
  31.                        ExitsInArrayNR = True
  32.                    End If
  33.                Else
  34.                    Exit Do
  35.                End If
  36.        End Select
  37.    Loop
  38. End Function
  39.  
  40.  

Para que veas también quedaría con una simple modificación sin aplicar nada ni sacar nada de tu código (aun que a mi me gusto la lógica de comparar lpos con su anterior valor); aun sigue siendo mas rápida que tu función con esta simple modificación...

Código
  1.  
  2. option explicit
  3.  
  4. Private Sub SwapVals(ByRef lVal1 As Long, ByRef lval2 As Long)
  5.    lval2 = lval2 Xor lVal1
  6.    lVal1 = lVal1 Xor lval2
  7.    lval2 = lval2 Xor lVal1
  8. End Sub
  9.  
  10. Public Function ExitsInArray(ByRef vValue As Long, ByRef vBuff() As Long, ByRef p As Long) As Boolean
  11. Dim lng_lb                      As Long
  12. Dim lng_Ub                      As Long
  13.    lng_lb = LBound(vBuff&())
  14.    lng_Ub = UBound(vBuff&())
  15.    If Not vBuff&(lng_Ub) > vBuff&(lng_lb) Then
  16.        SwapVals lng_lb, lng_Ub
  17.    End If
  18.  
  19.    Select Case vValue
  20.        Case vBuff&(lng_lb&)
  21.            p& = lng_lb&
  22.            ExitsInArray = True
  23.        Case vBuff&(lng_Ub&)
  24.            p& = lng_Ub&
  25.            ExitsInArray = True
  26.        Case Else
  27.            Do Until ExitsInArray
  28.                p = (lng_lb& + lng_Ub&) / 2
  29.                If p <> lng_lb& And p& <> lng_Ub& Then
  30.                    If vBuff&(p&) < vValue& Then
  31.                        lng_lb = p
  32.                    ElseIf vBuff&(p&) > vValue& Then
  33.                        lng_Ub = p
  34.                    ElseIf vBuff&(p&) = vValue& Then
  35.                        ExitsInArray = True
  36.                    End If
  37.                Else
  38.                    Exit Do
  39.                End If
  40.            Loop
  41.    End Select
  42. End Function
  43.  
  44.  

por otro lado en tu código:

La variable c debería espesar desde lngLB ya que esta toma el valor desde lngStart, aun que aun asi estaría bien pero bueno no afecta en lo absoluto en nada.

No entiendo para que es el parámetro bolFindStart deberías documentar un poco tu código (parámetros de entrada, trabajo de la función y resultados de la misma, mas no linea a linea)

Dulces Lunas!¡.


« Última modificación: 2 Junio 2011, 20:12 pm por BlackZeroX▓▓▒▒░░ » En línea

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

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines