Autor Tema: Ayuda por favor con Procedimiento complejo (para mi)  (Leído 6205 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Ayuda por favor con Procedimiento complejo (para mi)
« 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



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!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #1 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!!!
"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*                                                          Resumenes Cs.Economicas

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #2 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......
« última modificación: Enero 19, 2012, 01:50:56 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #3 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

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #4 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!!!
« última modificación: Enero 19, 2012, 01:58:21 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

cobein

  • Moderador Global
  • Gigabyte
  • *****
  • Mensajes: 348
  • Reputación: +63/-0
  • Más Argentino que el morcipan
    • Ver Perfil
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #5 en: Enero 18, 2012, 06:49:53 pm »
Perdon no vi la parte de que tenian que sumar 4 por cada fila :D

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #6 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
« última modificación: Enero 19, 2012, 01:59:16 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

79137913

  • Megabyte
  • ***
  • Mensajes: 185
  • Reputación: +21/-4
  • 4 Esquinas
    • Ver Perfil
    • Eco.Resumen Resumenes Cs. Economicas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #7 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!!!
"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*                                                          Resumenes Cs.Economicas

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #8 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
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #9 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?
« última modificación: Enero 19, 2012, 07:36:45 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #10 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
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Ayuda por favor con Procedimiento complejo (para mi)
« Respuesta #11 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
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.