Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

[SOLUCIONADO] Simplificar código

Estas en el tema de Simplificar código en el foro de Visual Basic clásico en Foros del Web. Hola, Me gustaría simplificar un código, pero no lo consigo. Si podéis ayudarme, sería de gran ayuda porque el código se hace muy largo y ...
  #1 (permalink)  
Antiguo 10/12/2014, 21:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 3
Simplificar código

Hola,

Me gustaría simplificar un código, pero no lo consigo. Si podéis ayudarme, sería de gran ayuda porque el código se hace muy largo y no va ágil.

Son tres filas por tres columnas y opero con el Tag.

La columna Label3(0) Label4(0) Label5(0) son un grupo.
La columna Label3(1) Label4(1) Label5(1) son otro grupo.
La columna Label3(2) Label4(2) Label5(2) son otro grupo.

Como no tienen porque ir en ese orden tengo que hacer todas las combinaciones que se dan, que en este caso son 6.

Ejemplo de lo que quiero decir:

La columna Label4(0) Label3(0) Label5(0) son un grupo.
La columna Label4(1) Label3(1) Label5(1) son otro grupo.
La columna Label4(2) Label3(2) Label5(2) son otro grupo.

La columna Label5(0) Label4(0) Label3(0) son un grupo.
La columna Label5(1) Label4(1) Label3(1) son otro grupo.
La columna Label5(2) Label4(2) Label3(2) son otro grupo.

En otro apartado del trabajo son cuatro filas por cuatro columnas,
con lo que las combinaciones son 20.

No me vale sumar el valor de los Tag, porque un Tag 2 significa una respuesta distinta a otro Tag 2.
Parte del código a modo de ejemplo:

Código:
Private Sub Command1_Click()
If Label3(0).Tag = 1 And Label3(1).Tag = 2 And Label3(2).Tag = 3 Then
If Label4(0).Tag = 1 And Label4(1).Tag = 2 And Label4(2).Tag = 3 Then
If Label5(0).Tag = 1 And Label5(1).Tag = 2 And Label5(2).Tag = 3 Then
Bien.Visible = True
End If
End If
End If
'-------------------------
If Label3(0).Tag = 1 And Label3(1).Tag = 3 And Label3(2).Tag = 2 Then
If Label4(0).Tag = 1 And Label4(1).Tag = 3 And Label4(2).Tag = 2 Then
If Label5(0).Tag = 1 And Label5(1).Tag = 3 And Label5(2).Tag = 2 Then
Bien.visible = True
End If
End If
End If
'-------------------------
If Label3(0).Tag = 2 And Label3(1).Tag = 1 And Label3(2).Tag = 3 Then
If Label4(0).Tag = 2 And Label4(1).Tag = 1 And Label4(2).Tag = 3 Then
If Label5(0).Tag = 2 And Label5(1).Tag = 1 And Label5(2).Tag = 3 Then
Bien.Visible = True
End If
End If
End If
'-------------------------
End Sub
Espero haberme sabido explicar.

Gracias de antemano.

Un saludo,

Última edición por truskyvb; 10/12/2014 a las 21:52
  #2 (permalink)  
Antiguo 11/12/2014, 16:58
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Simplificar código

No me queda muy claro pero creo que seria algo asi:

Código vb:
Ver original
  1. dim f as integer
  2. bien.visible=True
  3. for f=0 to 2
  4.   If Label3(f).Tag <> Label4(f).Tag or Label4(f).Tag <> Label5(f).Tag
  5.     then bien.visible=false ' si una falla se apaga el "bien"
  6.    exit for ' y salimos para no perder tiempo
  7.  end if
  8. next f


Si no se admiten valores repetidos habria que añadir otra comparacion:

Código vb:
Ver original
  1. dim f as integer
  2.  
  3.   If Label3(0).Tag <> Label3(1).Tag and Label3(1).Tag <> Label3(2).Tag and Label3(0).Tag <> Label3(2).Tag then
  4.  
  5. bien.visible=True
  6. for f=0 to 2
  7.   If Label3(f).Tag <> Label4(f).Tag or Label4(f).Tag <> Label5(f).Tag then
  8.     bien.visible=false ' si una falla se apaga el "bien"
  9.    exit for ' y salimos para no perder tiempo
  10.  end if
  11. next f
  12.  
  13. end if

Saliendo de la funcion cuando se sabe que hay error aceleras mucho la cosa.
De todas formas si usas matrices para guardar los valores seguro que se ejecuta mas rapido que con los Tag de labels.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #3 (permalink)  
Antiguo 12/12/2014, 02:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Simplificar código

Hola pkj, gracias por la ayuda.

Tomando tu código, al final quedó así y funciona correctamente;

Código:
For i as integer
For i = 0 To 2
If Label3(i).Tag <> Label4(i).Tag Or Label4(i).Tag <> Label5(i).Tag Then
' si una falla se puede poner una condición"
Exit For ' y salimos para no perder tiempo
Else


If Label3(0).Tag <> Label3(1).Tag And Label3(1).Tag <> Label3(2).Tag And Label3(0).Tag <> Label3(2).Tag Then

If Label4(0).Tag <> Label4(1).Tag And Label4(1).Tag <> Label4(2).Tag And Label4(0).Tag <> Label4(2).Tag Then

If Label5(0).Tag <> Label5(1).Tag And Label5(1).Tag <> Label5(2).Tag And Label5(0).Tag <> Label5(2).Tag Then

' Una vez que los Tag en la misma Label son distintos compruebo que sean iguales por grupos

'Ejemplo de grupo:

' Label3(0)    PAPÁ        /    Label3(1)   MAMÁ    /    Label(2)    HIJO
' LabelL4(0)  HOMBRE  /     Label4(1)   MUJER   /    Label4(2)  NIÑO
' Label5(0)    CARLOS   /     Label(1)     MARÍA   /    Label4(2)  JUAN

If Label3(0).Tag = Label4(0).Tag And Label3(0).Tag = Label5(0).Tag Then
If Label3(1).Tag = Label4(1).Tag And Label3(1).Tag = Label5(1).Tag Then
If Label3(2).Tag = Label4(2).Tag And Label3(2).Tag = Label5(2).Tag Then

' Cómo se cumplen todas las condiciones:

Bien.visible=true
End If
End If
End If
End If
End If
End If

Next i
End if
Gracias.

Un saludo,

Última edición por truskyvb; 12/12/2014 a las 04:48

Etiquetas: simplificar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:57.