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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


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

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Problema de array
« en: 12 Junio 2024, 13:44 pm »

Hola
estoy haciendo una aplicacion de loteria que en el array solo me acepta 19 numeros
¿como puedo hacer que el array me acepte 20 numeros o mas?

en el text1.text hay el total de las apuestas
el tect5.text esta la fecha actual
en el list1 estan todas las apuestas del text1.text


Código:

Option Explicit


Private Sub MakeUniqueCombinationOfSix(AryOfWhat() As Variant)

On Error GoTo MakeUniqueCombinationOfSixError

Dim NCnt1 As Integer, NCnt2 As Integer, NCnt3 As Integer
Dim NCnt4 As Integer, NCnt5 As Integer, NCnt6 As Integer
Dim UpperBoundsOfArray As Integer, LowerBoundsOfArray As Integer
List1.Clear
UpperBoundsOfArray = UBound(AryOfWhat)
LowerBoundsOfArray = LBound(AryOfWhat)

For NCnt1 = LowerBoundsOfArray To UpperBoundsOfArray
  For NCnt2 = NCnt1 + 1 To UpperBoundsOfArray
    For NCnt3 = NCnt2 + 1 To UpperBoundsOfArray
      For NCnt4 = NCnt3 + 1 To UpperBoundsOfArray
        For NCnt5 = NCnt4 + 1 To UpperBoundsOfArray
          For NCnt6 = NCnt5 + 1 To UpperBoundsOfArray
            List1.AddItem AryOfWhat(NCnt1) & "," & AryOfWhat(NCnt2) & "," & _
                          AryOfWhat(NCnt3) & "," & AryOfWhat(NCnt4) & "," & _
                          AryOfWhat(NCnt5) & "," & AryOfWhat(NCnt6)
                         
               Text1.Text = List1.ListCount
                                   
                         
                         
          Next NCnt6
        Next NCnt5
      Next NCnt4
    Next NCnt3
  Next NCnt2
Next NCnt1






Exit Sub
MakeUniqueCombinationOfSixError:

MsgBox "MakeUniqueCombinationOfSix " & Err.Number & ":" & Err.Description

End Sub



Private Sub Form_Load()
Text5.Text = Date
        Randomize
        Dim A() As Variant
        A = Array(4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49)
        MakeUniqueCombinationOfSix A
End Sub





gracias



En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #1 en: 12 Junio 2024, 16:49 pm »

el array solo me acepta 19 numeros
¿como puedo hacer que el array me acepte 20 numeros o mas?
...
Citar

Private Sub Form_Load()
Text5.Text = Date
        Randomize
        Dim A() As Variant
        A = Array(4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49)
        MakeUniqueCombinationOfSix A
End Sub

Es broma, no?.
Tratas de decir que usas un lenguaje pero que no conoces siquiera como dimensionar arrays?.

En fin...
La forma en que está declarado es un array estático, tendrá tantos elementos como aquellos que se han contenido.
Esa no es la forma adecuada para inicializar arrays que se pretende tengan capacidades más dinámicas.

En un caso como el presente donde pudiera ser el caso de que tuviere diferentes cantidades y valores es preferible meter en una función la creación de cada caso, que además inicialice el array con los valores deseados.
Tampoco es muy util operar el array como de tipo variant, el variant es para otras cosas, como cuando deben contener cosas heterogéneas, si son todas del mismo tipo (numérico, string, fechas, etc...), entonces es preferible hacer que sea de ese tipo...

Código
  1. private SizeArray as interger
  2. private Valores()  as byte
  3.  
  4. private function GetArrayDeValores(byval Cantidad as byte) as byte()
  5.     dim V() as byte, v18() as string
  6.     const Val18 as string = "4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49"
  7.     const Val19 as string =  33
  8.     const Val20 as string = 11
  9.  
  10.     if ((Cantidad< 18) or (cantidad > 20)) then
  11.          case else: msgbox "No se ha contemplado el caso de un array con " & cstr(cantidad) & " de ítems... " & vbcrlf & "Valores aceptados actualmente: 18-20"
  12.          SizeArray = 0
  13.    else
  14.         v18 = split(Val18, ", ")   ' pasamos la constante a un array de strings
  15.         redim v(0 to cantidad-1)  ' dimsnesionamos el array en la cantidad deseada
  16.         for k= 0 to 18                ' pasamos los 18 valores del array de strings al array de bytes
  17.             v(k) = cbyte(v18(k))
  18.         next
  19.         if (cantidad >= 19) then v(18)= Val19   ' Si se solicitó 19 o 20 valores, pasamos el 19º
  20.         if (cantidad = 20) then v(19)= Val20   ' ídem para el 20º
  21.  
  22.         SizeArray = Cantidad
  23.         GetArrayDeValores = v   ' devolvemos el array al tamaño solicitado y con los valores asignados.
  24.    end if
  25. end function
  26.  

finalmente puedes hacer con el array devuelto lo que precises....
Código
  1. Private Sub CombinacionesDe6(byval Cantidad as byte)
  2.    dim Max as integer, combinacion as as string
  3.    dim i as integer, j as integer, k as integer, l as integer, m as integer, n as integer
  4.  
  5.    valores =  GetArrayDeValores(cantidad)
  6.    if (SizeArray >0) then
  7.         list1.clear
  8.         list1.visible = false   ' Esto hará que el añadido sea mucho más rápido
  9.         max = ubound(valores)
  10.  
  11.          for i = 0 to max-5
  12.              for j= i+1 to max-4
  13.                  for k= j+1 to max-3
  14.                      for l = k+1 to max-2
  15.                          for m= l+1 to max-1
  16.                              for n= m+1 to max
  17.                                  '.... lo que sea que vayas a hacer... por ejemplo añadirlos al listbox
  18.                                   combinacion =ConcatValues(cstr(valores(i)), cstr(valores(j)), cstr(valores(k)), cstr(valores(l)), cstr(valores(m)), cstr(valores(n)))
  19.                                   list1.additem combinacion
  20.                              next
  21.                          next
  22.                      next
  23.                  next
  24.              next
  25.          next
  26.  
  27.          list1.visible = true
  28.          Text1.Text = List1.ListCount  ' el añadido es bastante rápido, no hace falta ponerlo más que al final, o en todo caso en un bucle previo (si fueran a meterse muchos miles)
  29.    end if
  30. end function
  31.  

Unas funciones adicionales simplifican modificar el código en adelante... para que tenga otra apariencia en el listado, sin necesidad de tocar la función previa, solo las de formato.
Código
  1. private function ConcatValues(i as string,j as string,k as string, l as string, m as string, n as string) as string
  2.      ConcatValues= Format2Digitos(i) & Format2Digitos(j) & Format2Digitos(k) & Format2Digitos(l) & Format2Digitos(m) & Format2Digitos(n)
  3. end function
  4.  
  5. ' Formato: 2espacios + valor(2 dígitos) + espacio(s) + separador
  6. private function Format2Digitos(byref Valor as string, optional byval Size as byte = 8, optional byref Separador as string = "|") as string
  7.    dim Salida as string, k as integer
  8.  
  9.    if (len(valor) = 1) then
  10.        salida = ("  0" & valor)
  11.    else
  12.        salida = ("  " & valor)
  13.    end if
  14.  
  15.    k= (len(salida) + len(separador) - Size)
  16.    if (k > 0) then salida = salida & Space$(k)
  17.  
  18.    ConcatValues = (Salida & separador)
  19. end function
  20.  

Puedes modificarlo para más valores que solo 18, 19 y 20... siguiendo el patrón o más complejo si es más ambicioso.
Nota que no se deben repetir valores entre las constantes de la función 'GetArrayDeValores'... al mismo tiempo, podrías disponer diferentes valores constantes cuando sean diferentes cantidades (yo en el ejemplo he optado por aceptar los previos e incrementar en uno cada vez).

No creo que haya que explicar nada más, es bastante simple y cualquiera que sepa un mímino de programación debería entenderlo todo sin más problemas. No obstante si tienes alguna laguna siéntente libre de preguntar.


« Última modificación: 12 Junio 2024, 16:59 pm por Serapis » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #2 en: 12 Junio 2024, 17:25 pm »

La verdad es que usar  valores fijos, puede ser útil cuando uno considera que esos valores 'tienen algo especial', pero como esa idea suele resultar falsa, puede ser más interesante considerar utilizar valores aleatorios (no repetidos)...

...de paso variamos el rango de cantidad entre 15 y 25... solo por ilustrar el ejemplo.
Código
  1. private function GetArrayDeValores(byval Cantidad as byte) as byte()
  2.     dim V() as byte, v49(0 to 49) as byte
  3.     dim k as integer, j as integer, n as byte
  4.  
  5.     if ((Cantidad< 15) or (cantidad > 25)) then
  6.          case else: msgbox "No se ha contemplado el caso de un array con " & cstr(cantidad) & " de ítems... " & vbcrlf & "Valores aceptados actualmente: 15-25"
  7.          SizeArray = 0
  8.    else
  9.         for k= 0 to 49
  10.             v49(k)= k
  11.         next
  12.  
  13.         redim V(0 to cantidad-1)  ' dimensionamos el array en la cantidad deseada
  14.         for k= 0 to cantidad -1  
  15.             j = (49-k)    
  16.             n = Int(j  * Rnd + 1)  ' el +1 impide elegir el índice y valor 0 de v49 pues no se contempla en las loterías (creo).
  17.             V(k) = v49(n)
  18.  
  19.             v49(n) = v49(j): v49(j)= V(k)  ' el tomado se aparta al final, y ya no será elegible (su puesto es ocupado por el último elegible actualmente).
  20.         next
  21.  
  22.  
  23.         SizeArray = Cantidad
  24.         GetArrayDeValores = V   ' devolvemos el array al tamaño solicitado y con los valores asignados.
  25.    end if
  26. end function
  27.  
« Última modificación: 12 Junio 2024, 17:28 pm por Serapis » En línea

corlo

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: Problema de array
« Respuesta #3 en: 12 Junio 2024, 20:23 pm »

Hola Serapis
He hecho tu codigo y pongo 20 en el form load me sale valor negativo y no sale el valor que tiene que salir 38760 y si pongo 19 entonces sale 27132 y sale bien en el text1.terxt y en el list1 no salen las combinaciones de 6 numeros

Código:

Option Explicit
Private SizeArray As Integer
Private Valores()  As Byte
 
Private Function GetArrayDeValores(ByVal Cantidad As Byte) As Byte()
     Dim V() As Byte, v18() As String
     Const Val18 As String = "4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49"
     Const Val19 As String = 33
     Const Val20 As String = 11
     Dim i As Integer
     Dim k As Integer
     If ((Cantidad < 18) Or (Cantidad > 20)) Then
           MsgBox "No se ha contemplado el caso de un array con " & CStr(Cantidad) & " de ítems... " & vbCrLf & "Valores aceptados actualmente: 18-20"
          SizeArray = 0
    Else
         v18 = Split(Val18, ", ")   ' pasamos la constante a un array de strings
         ReDim V(0 To Cantidad - 1) ' dimsnesionamos el array en la cantidad deseada
         For k = 0 To 18               ' pasamos los 18 valores del array de strings al array de bytes
             V(k) = CByte(v18(k))
         Next
         If (Cantidad >= 19) Then V(18) = Val19  ' Si se solicitó 19 o 20 valores, pasamos el 19º
         If (Cantidad = 20) Then V(19) = Val20  ' ídem para el 20º
 
         SizeArray = Cantidad
         GetArrayDeValores = V   ' devolvemos el array al tamaño solicitado y con los valores asignados.
    End If
End Function


    Private Sub CombinacionesDe6(ByVal Cantidad As Byte)
        Dim Max As Integer, combinacion  As String
        Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
     
        Valores = GetArrayDeValores(Cantidad)
        If (SizeArray > 0) Then
             List1.Clear
             List1.Visible = False   ' Esto hará que el añadido sea mucho más rápido
             Max = UBound(Valores)
     
              For i = 0 To Max - 5
                  For j = i + 1 To Max - 4
                      For k = j + 1 To Max - 3
                          For l = k + 1 To Max - 2
                              For m = l + 1 To Max - 1
                                  For n = m + 1 To Max
                                      '.... lo que sea que vayas a hacer... por ejemplo añadirlos al listbox
                                       combinacion = ConcatValues(CStr(Valores(i)), CStr(Valores(j)), CStr(Valores(k)), CStr(Valores(l)), CStr(Valores(m)), CStr(Valores(n)))
                                       List1.AddItem combinacion
                                  Next
                              Next
                          Next
                      Next
                  Next
              Next
     
              List1.Visible = True
              Text1.Text = List1.ListCount  ' el añadido es bastante rápido, no hace falta ponerlo más que al final, o en todo caso en un bucle previo (si fueran a meterse muchos miles)
        End If
    End Sub
     
Private Function ConcatValues(i As String, j As String, k As String, l As String, m As String, n As String) As String
      ConcatValues = Format2Digitos(i) & Format2Digitos(j) & Format2Digitos(k) & Format2Digitos(l) & Format2Digitos(m) & Format2Digitos(n)
End Function
 
' Formato: 2espacios + valor(2 dígitos) + espacio(s) + separador
Private Function Format2Digitos(ByRef Valor As String, Optional ByVal Size As Byte = 8, Optional ByRef Separador As String = "|") As String
    Dim Salida As String, k As Integer
    Dim ConcatValues As String
    If (Len(Valor) = 1) Then
        Salida = ("  0" & Valor)
    Else
        Salida = ("  " & Valor)
    End If
 
    k = (Len(Salida) + Len(Separador) - Size)
    If (k > 0) Then Salida = Salida & Space$(k)
 
    ConcatValues = (Salida & Separador)
End Function

Private Sub Form_Load()
CombinacionesDe6 20
End Sub



En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #4 en: 14 Junio 2024, 00:38 am »

Rl código lo escribí al vuelo, hay que repasarlo a medida que se transcribe.

No obstante,  mañana lo reviso y lo pruebo y haré las correcciones que precisare.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #5 en: 14 Junio 2024, 16:16 pm »

...eran 4 tonterías que deberías ser capaz de corregir...

En cualquier caso aquí el código corregido...

El control de la interfaz...
Código
  1. Private Sub Form_Load()
  2.    With HScroll1
  3.        .Min = 18   ' 15
  4.        .Max = 20   ' 25
  5.        .Value = 19
  6.    End With
  7. End Sub
  8.  
  9. Private Sub HScroll1_Change()
  10.    Label2.Caption = CStr(HScroll1.Value) & " Elementos en juego"
  11. End Sub
  12.  
  13. Private Sub Command1_Click()
  14.    Me.MousePointer = vbHourglass
  15.    Call CombinacionesDe6(HScroll1.Value)
  16.    Me.MousePointer = vbDefault
  17. End Sub
  18.  

El código previo y corregido...
Código
  1. Private Sub CombinacionesDe6(ByVal Cantidad As Byte)
  2.    Dim Max As Integer, Total As Long, combinacion   As String
  3.    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
  4.    Dim ci As String, cj As String, ck As String, cl As String, cm As String, cn As String
  5.  
  6.    Valores = GetArrayDeValores(Cantidad)
  7.    If (SizeArray > 0) Then
  8.        List1.Clear
  9.        List1.Visible = False   ' Esto hará que el añadido sea mucho más rápido
  10.        Max = UBound(Valores)
  11.  
  12.        For i = 0 To Max - 5
  13.            ci = Format2Digitos(CStr(Valores(i)))
  14.            For j = i + 1 To Max - 4
  15.                cj = ci & Format2Digitos(CStr(Valores(j)))
  16.                For k = j + 1 To Max - 3
  17.                    ck = cj & Format2Digitos(CStr(Valores(k)))
  18.                    For l = k + 1 To Max - 2
  19.                        cl = ck & Format2Digitos(CStr(Valores(l)))
  20.                        For m = l + 1 To Max - 1
  21.                            cm = cl & Format2Digitos(CStr(Valores(m)))
  22.                            For n = m + 1 To Max
  23.                                '.... lo que sea que vayas a hacer... por ejemplo añadirlos al listbox
  24.                                combinacion = cm & Format2Digitos(CStr(Valores(n)))
  25.                                'combinacion = ConcatValues(CStr(Valores(i)), CStr(Valores(j)), CStr(Valores(k)), CStr(Valores(l)), CStr(Valores(m)), CStr(Valores(n)))
  26.                                List1.AddItem combinacion
  27.                                Total = (Total + 1)
  28.                            Next
  29.                        Next
  30.                    Next
  31.                Next
  32.            Next
  33.        Next
  34.  
  35.        List1.Visible = True
  36.        Label1.Caption = "Total Combinaciones: " & CStr(Total)   ' el añadido es bastante rápido, no hace falta ponerlo más que al final, o en todo caso en un bucle previo (si fueran a meterse muchos miles)
  37.    End If
  38. End Sub
  39.  
  40. Private Function GetArrayDeValores(ByVal Cantidad As Byte) As Byte()
  41.    Dim V() As Byte, v18() As String
  42.    Const Val18 As String = "4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49"
  43.    Const Val19 As String = "33", Val20 As String = "11"
  44.  
  45.    If ((Cantidad < 18) Or (Cantidad > 20)) Then
  46.        MsgBox "No se ha contemplado el caso de un array con " & CStr(Cantidad) & " de ítems... " & vbCrLf & "Valores aceptados actualmente: 18-20"
  47.        SizeArray = 0
  48.    Else
  49.        v18 = Split(Val18, ", ")        ' pasamos la constante a un array de strings
  50.        ReDim V(0 To Cantidad)       ' dimensionamos el array en la cantidad deseada
  51.        For k = 0 To 18                 ' pasamos los 18 valores del array de strings al array de bytes
  52.            V(k) = CByte(v18(k))
  53.        Next
  54.  
  55.        If (Cantidad >= 19) Then
  56.            V(19) = CByte(Val19)  ' Si se solicitó 19 o 20 valores, pasamos el 19º
  57.            If (Cantidad = 20) Then V(20) = CByte(Val20)  ' ídem para el 20º
  58.        End If
  59.  
  60.        SizeArray = Cantidad
  61.        GetArrayDeValores = V   ' devolvemos el array al tamaño solicitado y con los valores asignados.
  62.    End If
  63. End Function
  64.  
  65.  
  66. 'Private Function ConcatValues(i As String, j As String, k As String, l As String, m As String, n As String) As String
  67. '    ConcatValues = Format2Digitos(i) & Format2Digitos(j) & Format2Digitos(k) & Format2Digitos(l) & Format2Digitos(m) & Format2Digitos(n)
  68. 'End Function
  69.  
  70. ' Formato: 2espacios + valor(2 dígitos) + espacio(s) + separador
  71. Private Function Format2Digitos(ByRef Valor As String, Optional ByVal Size As Byte = 8, Optional ByRef Separador As String = "|") As String
  72.    Dim Salida As String, k As Integer
  73.  
  74.    If (Len(Valor) = 1) Then
  75.        Salida = ("  0" & Valor)
  76.    Else
  77.        Salida = ("  " & Valor)
  78.    End If
  79.  
  80.    k = (Size - (Len(Salida) + Len(Separador)))
  81.    If (k > 0) Then Salida = (Salida & Space$(k))
  82.  
  83.    Format2Digitos = (Salida & Separador)
  84. End Function
  85.  

Y así se ve el resultado... (primera y yltima combinaciones para 20, usando los valores consiganos para 19 y 20.


p.d.: Nota que he cambiado el textbox por un label... (el valor de un resultado no debe poderse editar).
Los valores negativos de cuenta, sucede cuando superan el valor del tipo integer. Ya que es un tipo con signo, solo alcanza hasta los 32768 (0-32767). entonces cuando la lista añade más elementos, sigue sumando para ahora aparecen como negativos.
Puedes hacer los cálculos, pero si superas luego los 65536, seguirá cometiendo errores (culpa de utilizar como contador un tipo entero de 15 bits, pero permitir más añadidos que esa cantidad). El mejor modo de obviar ese problema es llevar tu propio contador.
« Última modificación: 14 Junio 2024, 16:22 pm por Serapis » En línea

corlo

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: Problema de array
« Respuesta #6 en: 14 Junio 2024, 22:37 pm »

Hola Serapis
No se que hago mal que  no hace la lista de las combinaciones en el list1

Código:

Private Sub Command1_Click()
Me.MousePointer = vbHourglass
    Call CombinacionesDe6(HScroll1.Value)
    Me.MousePointer = vbDefault
End Sub

Private Sub Form_Load()
  With HScroll1
        .Min = 18   ' 15
        .Max = 20   ' 25
        .Value = 19
    End With
End Sub

Private Sub HScroll1_Change()

Label1.Caption = CStr(HScroll1.Value) & " Elementos en juego"
End Sub

Private Sub CombinacionesDe6(ByVal Cantidad As Byte)
    Dim Max As Integer, Total As Long, combinacion   As String
    Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
    Dim ci As String, cj As String, ck As String, cl As String, cm As String, cn As String

    Valores = GetArrayDeValores(Cantidad)
    If (SizeArray > 0) Then
        List1.Clear
        List1.Visible = False   ' Esto hará que el añadido sea mucho más rápido
        Max = UBound(Valores)
 
        For i = 0 To Max - 5
            ci = Format2Digitos(CStr(Valores(i)))
            For j = i + 1 To Max - 4
                cj = ci & Format2Digitos(CStr(Valores(j)))
                For k = j + 1 To Max - 3
                    ck = cj & Format2Digitos(CStr(Valores(k)))
                    For l = k + 1 To Max - 2
                        cl = ck & Format2Digitos(CStr(Valores(l)))
                        For m = l + 1 To Max - 1
                            cm = cl & Format2Digitos(CStr(Valores(m)))
                            For n = m + 1 To Max
                                '.... lo que sea que vayas a hacer... por ejemplo añadirlos al listbox
                                combinacion = cm & Format2Digitos(CStr(Valores(n)))
                                'combinacion = ConcatValues(CStr(Valores(i)), CStr(Valores(j)), CStr(Valores(k)), CStr(Valores(l)), CStr(Valores(m)), CStr(Valores(n)))
                                List1.AddItem combinacion
                                Total = (Total + 1)
                            Next
                        Next
                    Next
                Next
            Next
        Next
 
        List1.Visible = True
        Label2.Caption = "Total Combinaciones: " & CStr(Total)   ' el añadido es bastante rápido, no hace falta ponerlo más que al final, o en todo caso en un bucle previo (si fueran a meterse muchos miles)
    End If
End Sub
 
Private Function GetArrayDeValores(ByVal Cantidad As Byte) As Byte()
    Dim V() As Byte, v18() As String
    Const Val18 As String = "4, 6, 14, 18, 19, 20, 21, 24, 26, 27, 31, 32, 35, 36, 40, 41, 42, 47, 49"
    Const Val19 As String = "33", Val20 As String = "11"
 
    If ((Cantidad < 18) Or (Cantidad > 20)) Then
        MsgBox "No se ha contemplado el caso de un array con " & CStr(Cantidad) & " de ítems... " & vbCrLf & "Valores aceptados actualmente: 18-20"
        SizeArray = 0
    Else
        v18 = Split(Val18, ", ")        ' pasamos la constante a un array de strings
        ReDim V(0 To Cantidad)       ' dimensionamos el array en la cantidad deseada
        For k = 0 To 18                 ' pasamos los 18 valores del array de strings al array de bytes
            V(k) = CByte(v18(k))
        Next
 
        If (Cantidad >= 19) Then
            V(19) = CByte(Val19)  ' Si se solicitó 19 o 20 valores, pasamos el 19º
            If (Cantidad = 20) Then V(20) = CByte(Val20)  ' ídem para el 20º
        End If
 
        SizeArray = Cantidad
        GetArrayDeValores = V   ' devolvemos el array al tamaño solicitado y con los valores asignados.
    End If
End Function
 
 
'Private Function ConcatValues(i As String, j As String, k As String, l As String, m As String, n As String) As String
'    ConcatValues = Format2Digitos(i) & Format2Digitos(j) & Format2Digitos(k) & Format2Digitos(l) & Format2Digitos(m) & Format2Digitos(n)
'End Function
 
' Formato: 2espacios + valor(2 dígitos) + espacio(s) + separador
Private Function Format2Digitos(ByRef Valor As String, Optional ByVal Size As Byte = 8, Optional ByRef Separador As String = "|") As String
    Dim Salida As String, k As Integer
 
    If (Len(Valor) = 1) Then
        Salida = ("  0" & Valor)
    Else
        Salida = ("  " & Valor)
    End If
 
    k = (Size - (Len(Salida) + Len(Separador)))
    If (k > 0) Then Salida = (Salida & Space$(k))
 
    Format2Digitos = (Salida & Separador)
End Function





gracias
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #7 en: 14 Junio 2024, 23:26 pm »

Hola Serapis
No se que hago mal que  no hace la lista de las combinaciones en el list1
No entiendo por qué no va a rellenar el listado.

Las instrucciones están ahí: 'Listi1.addItem combinacion'.
Si a mi me funciona perfectamente y no has cambiado código, también debe funcionarte, no hay opción para que no funcione.

Lo único que se me ocurre es que tengas más de un listbox, y el que es el 'list1', esté oculto, fuera de la vista, entonces se llena, pero no ves el resultado en el list2-3-4, que tuvieres en la vista.

1 Comenta la línea 'List1.Visible = False
2 Antes de añadir el item al listbox, añade la siguiente línea: msgbox combinacion
3 Si añadiste o cambiaste código, ejecuta paso a paso el código (tecla F8), de la función 'CombinacionesDe6'.
En línea

corlo

Desconectado Desconectado

Mensajes: 120


Ver Perfil
Re: Problema de array
« Respuesta #8 en: 14 Junio 2024, 23:54 pm »

Hola Serapis
He añadido el mensaje msgbox combinacion y no sale nada en el mensaje de msgbox combinacion
solo tengo un list1
si puedes enviar tu archivo, seguro que es un error tonto de mi archivo
gracias
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema de array
« Respuesta #9 en: 15 Junio 2024, 15:37 pm »

8 kb. contraseña (para evitar que sea manipulado y cuelen virus):
 'foroelhacker' (sin las comillas simples).

https://workupload.com/file/8qxjAGgFQ7Y

p.d.: Debajo de las líneas:
Código:
Valores = GetArrayDeValores(Cantidad)
If (SizeArray > 0) Then
puedes colocar lo siguiente:
Código:
    Label1.Caption = "Generando combinaciones..."
    Label1.Refresh
« Última modificación: 15 Junio 2024, 15:49 pm por Serapis » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con array
Programación Visual Basic
Free-Knowledgend 4 2,129 Último mensaje 3 Julio 2006, 23:33 pm
por <--v1c1ous-->
Problema con Array
PHP
Riki_89D 5 2,919 Último mensaje 12 Marzo 2009, 15:39 pm
por Riki_89D
Problema con for y array de cadenas.
Programación C/C++
jomag 3 2,201 Último mensaje 7 Febrero 2014, 02:18 am
por jomag
Problema con Array
Programación C/C++
Ja_90 5 8,530 Último mensaje 20 Octubre 2015, 19:29 pm
por Ja_90
Problema con Array
Java
Fryuio 0 1,668 Último mensaje 5 Enero 2017, 17:53 pm
por Fryuio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines