Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Bazooka en Enero 18, 2012, 10:40:14 am

Título: Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 18, 2012, 10:40:14 am
Hola amigos estoy necesitando hacer un Procedimiento que me ESTA VOLVIENDO LOCO ya que no logro hacerla y luego de varios intentos pido SOS.

El mismo recibe un parámetro un string como este "2,1,2,1,3,1,2,0" que es una combinación siempre distinta de 8 números (del 0 al 3) y que SIEMPRE la suma es = 12.
El Procedimiento lo que hace o debería es asignar valores a una matriz de variables de 2 dimensiones que forman una grilla de 8 Columnas por 3 filas.

Aca hay una imagen que se corresponde con la secuencia recibida ("2,1,2,1,3,1,2,0") por el procedimiento para ilustrar la grilla
(http://www.misimagenesgratis.com.ar/images/18-01-2012 10-32-04 a.m..jpg)


Código: [Seleccionar]
Private Sub Asignar_DECENAS(Combinatoria As String)
   
    'Siguiendo esta combinatoria '2,1,2,1,3,1,2,0 (la suma de todos siempre es 12)
    'este seria el resultado de las variables completadas
   
    'colum1=2  : colum2=1   : colum3=2   : colum4=1   : colum5=3   : colum6=1   : colum7=2   : colum8=0
    x(1, 1) = 1: x(1, 2) = 0: x(1, 3) = 1: x(1, 4) = 0: x(1, 5) = 1: x(1, 6) = 0: x(1, 7) = 1: x(1, 8) = 0 'la ctd de 1 asignados siempre es =4 por fila
    x(2, 1) = 0: x(2, 2) = 1: x(2, 3) = 0: x(2, 4) = 1: x(2, 5) = 1: x(2, 6) = 1: x(2, 7) = 0: x(2, 8) = 0 'la ctd de 1 asignados siempre es =4 por fila
    x(3, 1) = 1: x(3, 2) = 0: x(3, 3) = 1: x(3, 4) = 0: x(3, 5) = 1: x(3, 6) = 0: x(3, 7) = 1: x(3, 8) = 0 'la ctd de 1 asignados siempre es =4 por fila

End Sub

Si miramos atentamente la imagen vemos que en la grilla de  8 columnas por 3 Filas siempre hay 12 bits marcados y siempre la fila completa debe contener 4 bitas marcados.  Lo que nos da los 12 numeros (3 filas por 4 c/u).

OJALA ME ENTIENDAD Y PUEDAN AYUDAR ESTA ES MUY IMPORTANTE PARA MI!
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: 79137913 en Enero 18, 2012, 11:09:37 am
HOLA!!!

Esto te tenia loco?  XD:

Código: (VB) [Seleccionar]
Private Function Asignar_DECENAS(Combinatoria As String) As Long()
Dim a() As String
Dim b(2, 7) As Long
    a = Split(Combinatoria, ",")
    For x = 0 To 7
       If Val(a(x)) > 1 Then b(0, x) = 1
    Next
    For x = 0 To 7
       If a(x) = "1" Or a(x) = "3" Then b(1, x) = 1
    Next
    For x = 0 To 7
       If Val(a(x)) > 1 Then b(2, x) = 1
    Next
    Asignar_DECENAS = b
End Function

GRACIAS POR LEER!!!
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 18, 2012, 05:06:05 pm
Hola amigo la verdad es que te felicito por que yo habia armado unas rutinas impresionantes de largas e ineficaces y tu lo lo hiciste en unas pocas lineas..
Ahora HOUSTON tenenmos un problema por ejemplo este codigo que me pasaste funciona con este parametro  "2,1,2,1,3,1,2,0"  o  con cualquie combinacion siempre y cuando tenga 4 numeros mayores que 1 pero el asunto es que se puede dar una combinacion como esta "2,1,2,1,3,1,1,1" y de esa manera con tu function me devuleve solo 3 en la primera fila  5 en la segunda y 3 en la tercera......
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: cobein en Enero 18, 2012, 05:55:30 pm
Código: [Seleccionar]
Private Sub Form_Load()
   Call NiIdea("2,1,2,1,3,1,2,0")

End Sub

Private Sub NiIdea(ByVal sData As String)
    Dim i           As Long
    Dim svRet(2, 7) As Boolean

    For i = 0 To 7
        Select Case Val(Split(sData, ",")(i))
            Case 1
                svRet(1, i) = 1
            Case 2
                svRet(0, i) = 1: svRet(2, i) = 1
            Case 3
                svRet(0, i) = 1: svRet(1, i) = 1: svRet(2, i) = 1
        End Select
    Next
   
    '// Imprimir el resultado

    Dim j As Long

    For j = 0 To 2
        For i = 0 To 7
            Debug.Print CLng(svRet(j, i) * -1);
        Next
        Debug.Print
    Next

   
End Sub
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 18, 2012, 06:23:58 pm
Hola amigo Cobein! está buena tu opcion tbn pero si llamamos  a  Call NiIdea("2,1,2,1,3,1,1,1") otengo un resultado inesperado y es

Fila >>> 1,0,1,0,1,0,0,0   hay 3 marcados y deberia haber 4
Fila >>> 0,1,0,1,1,1,1,1   hay 6 marcados y deberia haber 4
Fila >>> 1,0,1,0,1,0,0,0   hay 3 marcados y deberia haber 4

Juntando Mensajes:

Estuve haciendo unas pruebas con la funcion de 79137913  y suponiendo que :
combinatoria= "2,1,2,1,3,1,1,1"
agregar un Variable que sirva de Contador cada vez que se asigna un valor en una fila y a lo ultimo verificar que la variable tenga 4 elementos en cada fila

HOLA!!!

Esto te tenia loco?  XD:

Código: (VB) [Seleccionar]
Private Function Asignar_DECENAS(Combinatoria As String) As Long()
Dim a() As String
Dim b(2, 7) As Long
Dim Contador(2) As Byte 'esta la agrego yo

    a = Split(Combinatoria, ",")
    For x = 0 To 7
       If Val(a(x)) > 1 Then b(0, x) = 1 : Contador(0) = Contador(0) + 1
    Next
    For x = 0 To 7
       If a(x) = "1" Or a(x) = "3" Then b(1, x) = 1: Contador(1) = Contador(1) + 1
    Next
    For x = 0 To 7
       If Val(a(x)) > 1 Then b(2, x) = 1: Contador(2) = Contador(2) + 1
    Next
    Asignar_DECENAS = b
End Function

'Y ACA REALIZAR LA COMPROBACION DE  Contador(0) , Contador(1) y  Contador(2)

GRACIAS POR LEER!!!
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: cobein en Enero 18, 2012, 06:49:53 pm
Perdon no vi la parte de que tenian que sumar 4 por cada fila :D
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 18, 2012, 08:55:23 pm
nO es nada pero ha visto que es tan simple?
me ayudas a desarrollarlo a prueba de fallos!!?

SIEMPRE SI O SI TENGO QUE OBTENER 4 POR FILAS !!1
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: 79137913 en Enero 18, 2012, 10:34:49 pm
HOLA!!!
Perdon no vi la parte de que tenian que sumar 4 por cada fila :D
+1

GRACIAS POR LEER!!!
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: coco en Enero 19, 2012, 12:09:50 am
che, pero si necesitas tener que la sumatoria de los items por fila de 4, en que momento lo vas a cortar si se pasa uno?
osea, lo de cobein esta perfecto, vos no explicaste ningun filtro para eso.
realmente no entiendo para que vas a usar esto.. por ahi si lo explicas, tendria mas idea de lo que precisas
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 19, 2012, 07:06:01 pm
Si coco trate de explicar lo mejor posible mi problema y considere que explicar mas para que es y todo no haria mas que complicar las cosas!
El tema es asi esa imagen que ves de la grilla que subi en un carton de bingo que donde hay un bits activo o un 1 ahí va un numero entonces. Los otros son lugares vacios!.

Y respecto a esto que decis (en que momento lo vas a cortar si se pasa uno) ya lo solucione dejando terminar el proceso y luego verificar si la fila de arriba tiene 3 y la del medio 5 subo uno a la de arriba y quito uno a la del medio.
Entenedes?
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: coco en Enero 19, 2012, 08:32:34 pm
Perfecto.. sabes que pasa, como vos mencionaste BITS, es mucho mas facil trabajar con bits, que con items de un array.
a los bits los manejas con AND, OR, XOR de a 8 a la vez... pero si necesitas menos, usas menos :P.

Bueno, mejor que lo hayas solucionado
Título: Re:Ayuda por favor con Procedimiento complejo (para mi)
Publicado por: Bazooka en Enero 19, 2012, 11:49:40 pm
Perdon por lo de los bits ja ja soy medio inexperto enalgunas cuestiones tecnicas por que me hice de autodidacta nomas. Gracias por soportar