Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado 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)
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!
-
HOLA!!!
Esto te tenia loco? XD:
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!!!
-
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......
-
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
-
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
1º Fila >>> 1,0,1,0,1,0,0,0 hay 3 marcados y deberia haber 4
2º Fila >>> 0,1,0,1,1,1,1,1 hay 6 marcados y deberia haber 4
3º 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:
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!!!
-
Perdon no vi la parte de que tenian que sumar 4 por cada fila :D
-
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
-
HOLA!!!
Perdon no vi la parte de que tenian que sumar 4 por cada fila :D
+1
GRACIAS POR LEER!!!
-
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
-
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?
-
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
-
Perdon por lo de los bits ja ja soy medio inexperto enalgunas cuestiones tecnicas por que me hice de autodidacta nomas. Gracias por soportar