Autor Tema: Generar Matriz Bingo  (Leído 3372 veces)

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

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1064
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Generar Matriz Bingo
« en: Junio 29, 2011, 07:07:47 pm »
Hola de nuevo amigos, estoy queriendo generar: "números aleatorio", "ordenar por columna" y "verificar si ya existe".
La matriz del bingo se compone así: del numero 1 al 75, hay varios tipos de bingo. pero el que ahora quiero es este.

linea de B: compone del 01 al 15
linea de I : compone del 16 al 30
linea de N: compone del 31 al 45
linea de G: compone del 46 al 60
linea de O: compone del 61 al 75

Acá un ejemplo de una matriz.

01*02*10*11*13*16*17*18*25*29*32*34*35*41*45*46*47*56*58*59*61*62*72*73*74
06*07*11*14*15*16*19*24*25*29*32*34*35*38*43*53*54*57*59*60*63*67*69*73*75

LINEA B: 06*07*11*14*15*
LINEA I : 16*19*24*25*29*
LINEA N: 32*34*35*38*43*
LINEA G: 53*54*57*59*60*
LINEA O: 63*67*69*73*75*
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

seba123neo

  • Terabyte
  • *****
  • Mensajes: 762
  • Reputación: +88/-5
    • Ver Perfil
Re:Generar Matriz Bingo
« Respuesta #1 en: Junio 29, 2011, 11:28:38 pm »
Hola, fijate si te sirve este ejemplo que arme, esta hecho rapidamente, pero parece que funciona, genera los aleatorios y respeta los valores limites de cada linea.

Código: [Seleccionar]
Private Sub Command1_Click()
    Dim vNumero As Integer
    Dim vMinimo As Integer, vMaximo As Integer
    Dim vCadena As String
    Dim vFila As Integer, vColumna As Integer
   
    For vFila = 1 To 5 'Filas
   
        vMinimo = IIf(vFila = 1, 1, ((vFila - 1) * 15) + 1)
        vMaximo = (vFila * 15)
       
        Dim ret() As Variant
        ret = Generar(vMaximo, vMinimo, 5)
       
        For vColumna = 0 To 4 'Columnas
            vCadena = vCadena & ret(vColumna) & vbTab
        Next vColumna
       
        vCadena = vCadena & vbNewLine
       
    Next vFila
   
    Debug.Print vCadena
End Sub

Public Function Generar(ByVal pMaximo As Integer, Optional ByVal pMinimo As Integer = 1, Optional ByVal pCantidad As Integer = 1) As Variant
    Dim x As Integer, n As Integer
    Dim arrNumeros() As Variant
    Dim vCollecion As New Collection
   
    ReDim arrNumeros(pCantidad - 1)
   
    With vCollecion
        For x = pMinimo To pMaximo
            .Add x
        Next x
        For x = 0 To pCantidad - 1
            n = NumeroAleatorio(0, vCollecion.Count + 1)
            arrNumeros(x) = vCollecion(n)
            vCollecion.Remove n
        Next x
    End With
    Set vCollecion = Nothing
    Generar = arrNumeros
End Function

Public Function NumeroAleatorio(ByVal pMaximo As Integer, ByVal pMinimo As Integer) As Integer
    Randomize
    NumeroAleatorio = Int((pMaximo - pMinimo + 1) * Rnd + pMinimo)
End Function

usa esa funcion para poder alamcenar los numeros ya generados en la linea y que no se repita el numero aleatorio generado por linea.

saludos.
Quien nunca ha cometido un error nunca ha probado algo nuevo - Albert Einstein

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1064
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Generar Matriz Bingo
« Respuesta #2 en: Junio 30, 2011, 01:07:35 am »
seba123neo Funciona muy bien ahora veo como ordenar cada columna en forma ascendente por que me genera así:

12*14*02*10*13*
16*28*24*30*29*
37*41*33*42*38*
49*55*50*54*52*
67*71*72*74*66*

12*14*02*10*13*16*28*24*30*29*37*41*33*42*38*49*55*50*54*52*67*71*72*74*66*

al ordenar tiene que quedar así:

02*10*12*13*14*16*24*28*29*30*33*37*38*41*42*49*50*52*54*55*66*67*71*72*74*

02*10*12*13*14
16*24*28*29*30
33*37*38*41*42
49*50*52*54*55
66*67*71*72*74

Te agradezco, Saludos...
« última modificación: Junio 30, 2011, 01:10:04 am por enterariel »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2811
  • Reputación: +159/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Generar Matriz Bingo
« Respuesta #3 en: Junio 30, 2011, 04:36:25 am »
Hola Ariel.
Bueno, para ordenar puedes usar el método burbuja (el que te comente en msn), que consiste en intercambiar al mayor por el menor en cada recorrido. Siguiendo y adaptándolo al ejemplo que te dio sebas, este código va dentro de su función Generar, después del With vCollecion y antes de Set vCollecion = Nothing

Código: [Seleccionar]
        Next x
    End With '<--- Viene de Codigo de Sebas
'/----------------------- ORDENAMIENTO -----------------------
Dim i, j, z As Integer
   
For i = 0 To (UBound(arrNumeros) - 1)
    For j = 0 To (UBound(arrNumeros) - 1)
        If arrNumeros(j) > arrNumeros(j + 1) Then
            z = arrNumeros(j)
            arrNumeros(j) = arrNumeros(j + 1)
            arrNumeros(j + 1) = z
        End If
    Next j
Next i
'---------------------------------------------------------------/

Set vCollecion = Nothing  <---- sigue codigo de Sebas
    Generar = arrNumeros

Y te ordenara cada linea de tu BINGO. Espero que con esto tengas resuelto tu tema.
« última modificación: Junio 30, 2011, 04:53:37 am por YAcosta »
Me encuentras en YAcosta.com

Bazooka

  • Terabyte
  • *****
  • Mensajes: 950
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof Systems
Re:Generar Matriz Bingo
« Respuesta #4 en: Junio 30, 2011, 09:41:32 am »
Va quedando Ariel ahora solo habria que hacer una verificacion de que no este ya creada una sequencia igual antes y listo no?
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1064
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Generar Matriz Bingo
« Respuesta #5 en: Enero 06, 2012, 01:23:44 pm »
Hola disculpen por revivir el post. Quiero modificar el código que me paso el amigo Seba. Lo que quiero hacer es que que solo me cree una matriz de 25 numero con 3 columnas

ASI:

linea de B: compone del 01 al 05
linea de I : compone del 06 al 10
linea de N: compone del 11 al 15
linea de G: compone del 16 al 20
linea de O: compone del 21 al 25

Acá un ejemplo de una matriz.

01*03*05*06*08*09*12*14*15*16*17*20*21*23*25

LINEA B: 01*03*05*
LINEA I : 06*08*09*
LINEA N: 12*14*15*
LINEA G: 16*17*20*
LINEA O: 21*23*25*
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 965
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Generar Matriz Bingo
« Respuesta #6 en: Enero 06, 2012, 03:57:21 pm »
Código: [Seleccionar]
Private Sub Command1_Click()
    Dim vNumero As Integer
    Dim vMinimo As Integer, vMaximo As Integer
    Dim vCadena As String
    Dim vFila As Integer, vColumna As Integer
   
    For vFila = 1 To 3 'Filas
   
        vMinimo = IIf(vFila = 1, 1, ((vFila - 1) * 5) + 1)
        vMaximo = (vFila * 5)
       
        Dim ret() As Variant
        ret = Generar(vMaximo, vMinimo, 3)
       
        For vColumna = 0 To 2 'Columnas
            vCadena = vCadena & ret(vColumna) & vbTab
        Next vColumna
       
        vCadena = vCadena & vbNewLine
       
    Next vFila
   
    Debug.Print vCadena
End Sub

Public Function Generar(ByVal pMaximo As Integer, Optional ByVal pMinimo As Integer = 1, Optional ByVal pCantidad As Integer = 1) As Variant
    Dim x As Integer, n As Integer
    Dim arrNumeros() As Variant
    Dim vCollecion As New Collection
   
    ReDim arrNumeros(pCantidad - 1)
   
    With vCollecion
        For x = pMinimo To pMaximo
            .Add x
        Next x
        For x = 0 To pCantidad - 1
            n = NumeroAleatorio(0, vCollecion.Count + 1)
            arrNumeros(x) = vCollecion(n)
            vCollecion.Remove n
        Next x
    End With
'Incluyo el metodo burbuja que aplico Yvan...!
Dim i, j, z As Integer
   
For i = 0 To (UBound(arrNumeros) - 1)
    For j = 0 To (UBound(arrNumeros) - 1)
        If arrNumeros(j) > arrNumeros(j + 1) Then
            z = arrNumeros(j)
            arrNumeros(j) = arrNumeros(j + 1)
            arrNumeros(j + 1) = z
        End If
    Next j
Next i

    Set vCollecion = Nothing
    Generar = arrNumeros
End Function

Public Function NumeroAleatorio(ByVal pMaximo As Integer, ByVal pMinimo As Integer) As Integer
    Randomize
    NumeroAleatorio = Int((pMaximo - pMinimo + 1) * Rnd + pMinimo)
End Function

Verifica Ariel...!
« última modificación: Enero 06, 2012, 04:00:48 pm por ssccaann43 »
Miguel Núñez.

seba123neo

  • Terabyte
  • *****
  • Mensajes: 762
  • Reputación: +88/-5
    • Ver Perfil
Re:Generar Matriz Bingo
« Respuesta #7 en: Enero 06, 2012, 04:30:47 pm »
Hola disculpen por revivir el post. Quiero modificar el código que me paso el amigo Seba. Lo que quiero hacer es que que solo me cree una matriz de 25 numero con 3 columnas

tenes que modiificar los bucles y listo, ahi te lo hizo ssccaann43.

saludos.
Quien nunca ha cometido un error nunca ha probado algo nuevo - Albert Einstein

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1064
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Generar Matriz Bingo
« Respuesta #8 en: Enero 06, 2012, 06:52:02 pm »
ssccaann43, va de 10 punto. increíble lo hice así mismo y nunca me funciono pero compare con lo que tengo y igual es pero me genera otra forma no se por que, Gracias a los 2 por responder.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 965
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Generar Matriz Bingo
« Respuesta #9 en: Enero 06, 2012, 07:05:27 pm »
Solo realice pocos cambios, aparte inclui el metodo burbuja de Yvan...!
Miguel Núñez.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 950
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof Systems
Re:Generar Matriz Bingo
« Respuesta #10 en: Febrero 01, 2016, 04:57:05 pm »
SI a este Ejemplo le agrego una colección que contenga todas las creadas segun el bucle agregado For n=0 to 10000 ..
1-Mi pregunta es para manejar gran cantidad de combinaciones más de 100.000 es conveniente Colecciones o matriz ?
2-Y cual sería la mejor forma para ir chequeando que no exista una combinación idéntica generada anteriormente ?


Código: [Seleccionar]
Dim vBingo As New Collection

Private Sub Command1_Click()
    Dim vNumero As Integer
    Dim vMinimo As Integer, vMaximo As Integer
    Dim vCadena As String
    Dim vFila As Integer, vColumna As Integer
   
    For n = 0 To 10000 'cantidad de combinaciones
        For vFila = 1 To 5 'Filas
       
            vMinimo = IIf(vFila = 1, 1, ((vFila - 1) * 15) + 1)
            vMaximo = (vFila * 15)
           
            Dim ret() As Variant
            ret = Generar(vMaximo, vMinimo, 5)
           
            For vColumna = 0 To 4 'Columnas
                    vCadena = vCadena & ret(vColumna) & ","
            Next vColumna
           
            vCadena = vCadena & vbNewLine
           
        Next vFila
             vBingo.Add vCadena
             vCadena = ""
    Next n
   
 End Sub
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1052
  • Reputación: +145/-8
    • Ver Perfil
Re:Generar Matriz Bingo
« Respuesta #11 en: Febrero 04, 2016, 03:19:13 pm »
Hola Bazooka si las matrices son un poco mas rápidas que las colecciones sobretodo si las podes redimencionar de una, aveces se utilizan colecciones por comodidad, lo que no te recomiendo es cocatenar cadenas (string) eso es lento por asi decirlo, lo mejor seria almacenar los valores en matriz.

de curioso que tiempo aproximado tarda tu rutina en generar los cartones?. segundos?

si tenes tiempo, explícame como se generan los cartones de Bingo, por lo que lei son 90 numeros y en un carton hay 3 filas con 5 numeros cada fila, pero... donde esta el limite, o cantidad de combinaciones posibles, que pasa cuando son bingos grandes donde hay que generar muchos cartones, explícame un poco.