Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/05/2010, 07:05
alej_PT
 
Fecha de Ingreso: noviembre-2005
Mensajes: 24
Antigüedad: 19 años, 5 meses
Puntos: 0
Respuesta: Chequeo de parentesis

Atencion colegas ayer me mate pensando en mi casa con sacar de los parentesis y me salio les paso el codigo para que lo tenga manden opiniones!!!!

Private Function la_igualacion_de_parentesis_es_correcta() As Boolean
'debe chequear el orden de los parentesis
'se guardan en dos vectores las posiciones los parentesis abiertos y cerrado
'luego verifico la posiciones de los parentesis en los vectores
'siempre la posicion de los parentesis cerrados debe ser mayor que la de los abiertos
'si en algun momento la comparacion da falso indicar que estan mal los parentesis
'devolver true si el 'matching' de los parentesis que usa la formula es correcta

Dim abr() As Integer 'def vector para abierto
Dim cier() As Integer 'def vector para cerrados
Dim a As Integer 'def entero para recorrer formula
Dim b As Integer 'def entero para recorrer parentesis
Dim i_abr As Integer 'def indice pare contar abiertos
Dim i_cier As Integer 'def indice para contar cerrados
Dim tope As Integer 'def var para largo de la formula
Dim pos_abr As Integer 'def entero para recordar los parentesis
Dim pformula As String 'def para obtener la formula
Dim caracter As String 'def recorrer cada caracter

pformula = Me.TxtFormula.Text 'obtiene la formula de la ventana
tope = Len(pformula) 'def largo de la formula
ReDim abr(tope) 'redimenciona vector con largo de formula
ReDim cier(tope) 'redimenciona vector con largo de formula

i_abr = 0: i_cier = 0 'inicializa indice
la_igualacion_de_parentesis_es_correcta = True

For a = 0 To tope 'para recorrer los vectores
abr(a) = 0: cier(a) = 0 'inicializa posicion del vector
Next
For a = 0 To tope 'recorre la formula
caracter = MiD$(pformula, a + 1, 1) 'toma el caracter actual
If caracter = "(" Then 'chequea parentesis abierto
abr(i_abr) = a 'guarda la posicion actual
i_abr = i_abr + 1 'agrega uno al contador
End If
If caracter = ")" Then 'chequea parentesis cerrado
cier(i_cier) = a 'guarda la posicion actual
i_cier = i_cier + 1 'agrega uno al contador
End If
Next
tope = i_cier - 1
ReDim Preserve abr(tope)
ReDim Preserve cier(tope)
a = 0
Do While a <= tope 'recore los parentesis cerrados
If cier(a) = 0 Then Exit Do 'si no encuetra parentesis sale
For b = tope To 0 Step -1 'recorre los parentesis abiertos
If abr(b) < cier(a) And abr(b) <> 0 Then 'verifica con los cerrados
abr(b) = 0: cier(a) = 0 'inicializa si los encuentra
Exit For 'sale del for
End If
Next
a = a + 1 'incrementa el contador principal
Loop
For a = 1 To tope 'recorre lo parentesis abiertos
If abr(a) <> 0 Then 'si encuentra alguno entonces los parentesis esta mal
MsgBox "Parentesis mal utilizados!" 'muestra mensaje correspondiente
la_igualacion_de_parentesis_es_correcta = False 'retorna mal
Exit Function 'sale de la funcion
End If
Next
End Function


Saludos!!