Como acabamos de comprobar en el apartado anterior, cuando procedemos a ejecutar nuestro
programa desde el IDE, se produce una carga de módulos en memoria. Esta ventana nos muestra
información sobre dicho proceso de carga y su estado. Ver Figura 102.
Figura 102. Ventana Resultados del IDE.
La opción de menú para esta ventana es Ver + Otras ventanas + Resultados.
Buscador
Mostrando entradas con la etiqueta Programacin en Visual Basic. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programacin en Visual Basic. Mostrar todas las entradas
Inspecciones - I
Una inspeccin consiste en un elemento de cdigo (identificador, expresin, etc.) que podemos
seleccionar cuando nos encontramos en modo de depuracin, y sobre el que realizaremos una labor de
supervisin durante la ejecucin del cdigo desde el depurador, para controlar los diferentes valores o
estados que puede ir tomando durante el funcionamiento del programa.
Tomemos como base para un ejemplo el Cdigo fuente 215.
Dim Valores() As Integer = {10, 20, 30, 40}
Dim Indice, Dato, Importe As Integer
Console.WriteLine("Introducir un valor")
Dato = Console.ReadLine()
For Indice = 0 To UBound(Valores)
Importe = Dato * Valores(Indice)
If Dato >= Valores(Indice) Then
Exit For
End If
Next
Dim Valores() As Integer = {10, 20, 30, 40}
Dim Indice, Dato, Importe As Integer
Console.WriteLine("Introducir un valor")
Dato = Console.ReadLine()
For Indice = 0 To UBound(Valores)
Importe = Dato * Valores(Indice)
If Dato >= Valores(Indice) Then
Exit For
End If
Next
Cdigo fuente 215
La ventana Puntos de interrupcin
Esta ventana del IDE nos permite de un modo sencillo, la manipulacin de los puntos de interrupcin
definidos en el proyecto. Ver Figura 95.
Como podemos observar, mediante esta ventana podemos realizar todas las operaciones posibles con
los puntos de interrupcin, como definir nuevos, acceder a sus propiedades, eliminar, etc.
![]() |
| Figura 95. Ventana Puntos de interrupcin. |
Eliminar
Podemos quitar un punto de interrupcin de varias formas: haciendo clic derecho sobre el punto,
seleccionando la opcin Quitar punto de interrupcin del men contextual; pulsando [F9]; o haciendo
clic en la marca del punto situada en el margen derecho del editor de cdigo.
Podemos quitar todos los puntos establecidos seleccionando el men del IDE Depurar + Borrar todos
los puntos de interrupcin.
Habilitar y deshabilitar
Durante el desarrollo del programa, puede que en ocasiones no estemos interesados en que un punto
de interrupcin nos introduzca en el depurador, pero no queramos tampoco eliminarlo.Ante este tipo de situaciones, haremos clic derecho en el punto de interrupcin, y seleccionaremos del
men contextual la opcin Deshabilitar punto de interrupcin, que lo dejar desactivado hasta que de
igual modo seleccionemos la opcin de men Habilitar punto de interrupcin.
La Figura 94 muestra el aspecto de un punto de interrupcin deshabilitado
Para deshabilitar todos los puntos en un nico paso, emplearemos la opcin de men Depurar +
Deshabilitar todos los puntos de interrupcin.
![]() |
| Figura 94. Punto de interrupcin deshabilitado. |
Punto de interrupcin a nivel de procedimiento - II
El punto de interrupcin en el editor de cdigo quedara en este caso como muestra la Figura 93. La
entrada en el depurador por lo tanto, se producira en cuanto se comenzara a ejecutar el cdigo del
procedimiento, siempre que lo permita la condicin y el recuento de visitas, en el caso de que estn
establecidos.
Al definir puntos de interrupcin de esta manera hemos de ser cuidadosos, ya que si en el campo Funcin de su ventana de propiedades escribimos un valor que no corresponda a una rutina de cdigo, el IDE nos mostrar un error indicando que no puede crear el punto de interrupcin.
Al definir puntos de interrupcin de esta manera hemos de ser cuidadosos, ya que si en el campo Funcin de su ventana de propiedades escribimos un valor que no corresponda a una rutina de cdigo, el IDE nos mostrar un error indicando que no puede crear el punto de interrupcin.
Punto de interrupcin a nivel de procedimiento - I
Existe otro modo de insertar un punto de interrupcin, no tan intuitivo como el que acabamos de
describir, que consiste en utilizar la opcin de men Depurar + Nuevo punto de interrupcin. De esta
forma, entramos directamente en la ventana de propiedades del punto de interrupcin, y en la pestaa
Funcin, tenemos que escribir el nombre del procedimiento en el que estamos definiendo dicho punto.
Suponiendo por ejemplo, que hemos escrito un procedimiento con el nombre VerFecha( ), y situados
en cualquier lugar de su cdigo invocamos esta opcin, se mostrar la mencionada ventana de
propiedades en la que escribiremos el nombre de esta rutina de cdigo. Ver Figura 92.
Figura 92. Definicin de un punto de interrupcin a nivel de procedimiento
Punto de interrupcin a nivel de procedimiento
Existe otro modo de insertar un punto de interrupcin, no tan intuitivo como el que acabamos de
describir, que consiste en utilizar la opcin de men Depurar + Nuevo punto de interrupcin. De esta
forma, entramos directamente en la ventana de propiedades del punto de interrupcin, y en la pestaa
Funcin, tenemos que escribir el nombre del procedimiento en el que estamos definiendo dicho punto.
Suponiendo por ejemplo, que hemos escrito un procedimiento con el nombre VerFecha( ), y situados
en cualquier lugar de su cdigo invocamos esta opcin, se mostrar la mencionada ventana de
propiedades en la que escribiremos el nombre de esta rutina de cdigo. Ver Figura 92.
Propiedades - II
Como puede observar el lector, es posible establecer la condicin de entrada cuando la expresin sea
cierta, o bien haya cambiado el contenido de una variable.Adicionalmente al establecimiento de una condicin, o bien, de forma alternativa a esta, en la ventana
de propiedades del punto de interrupcin podemos pulsar el botn Recuento de visitas, mediante el
que podemos establecer que dicho punto entre en funcionamiento cuando haya sido visitado en un
determinado momento. Tomemos como ejemplo el cdigo de la Figura 90, en el que hemos insertado
un punto de interrupcin dentro de un bucle.
Ahora procedemos a abrir la ventana de propiedades de dicho punto y en su recuento de visitas
establecemos que el depurador se active cuando el punto de interrupcin haya sido visitado cinco
veces. Ver Figura 91.De este modo, cuando el bucle sea ejecutado por quinta vez, ser cuando el punto de interrupcin har que entremos en modo de depuracin.
Propiedades - I
El comportamiento por defecto de un punto de interrupcin es activar siempre el depurador cuando
llegamos a dicho punto.
No obstante esta caracterstica puede ser alterada para que la entrada en el modo de interrupcin slo
sea realizada cuando se cumpla una condicin.
Por ejemplo, supongamos que en el cdigo fuente de la figura anterior, slo queremos que se active el
depurador cuando el contenido de la variable Importe sea 50. Para ello haremos clic derecho sobre el
punto de interrupcin y seleccionaremos la opcin Propiedades del punto de interrupcin, del men
contextual.
Se abrir la ventana de propiedades de este punto, en la que pulsando su botn Condicin, podremos
introducir una expresin que ser evaluada al llegar la ejecucin a este punto de interrupcin. Si la
expresin devuelve verdadero, entraremos en modo de interrupcin; si devuelve falso, la ejecucin
continuar normalmente. Ver la Figura 89.
![]() |
| Figura 89. Definicin de una condicin para un punto de interrupcin. |
Insercin
El modo ms fcil de insertar un nuevo punto de interrupcin en el programa, consiste en hacer clic
derecho sobre una lnea de cdigo, y seleccionar la opcin del men contextual Insertar punto de
interrupcin. Tambin podemos conseguir el mismo resultado pulsando [F9], o haciendo clic en el
margen del editor de cdigo. El resultado, como vemos en la Figura 88, ser la lnea resaltada con un
color especial, indicativo de que tiene definido un punto de interrupcin.
Al ejecutar ahora el programa, cuando el flujo de la ejecucin pase por una lnea en la que se ha
definido un punto de interrupcin, se activar el depurador, entrando en modo de interrupcin.
![]() |
| Figura 88. Punto de interrupcin definido en el cdigo del programa. |
Puntos de interrupcin
A efectos de depuracin, un punto de interrupcin es una lnea de cdigo con una marca especial, que
har que el flujo de la ejecucin al llegar a ella active el depurador, entrando en modo de interrupcin.
Los puntos de interrupcin deben ser establecidos en lneas ejecutables de la aplicacin, por lo que no
estn permitidos en declaraciones de variables sin asignacin, o comentarios
Modo de depuracin
Aunque es un hecho que puede no ser percibido inicialmente, cada vez que ejecutamos la aplicacin
desde el IDE de VS.NET lo hacemos a travs del depurador.
Cuando seleccionamos la opcin de men Depurar + Iniciar, el IDE ejecuta el programa dentro del
contexto del depurador. Sin embargo, si no establecemos ningn elemento de depuracin que
provoque una pausa en la ejecucin, esta se producir normalmente, y no nos percataremos de que el
depurador est activo.
A este tipo de ejecucin se le denomina modo de depuracin o ejecucin virtual, ya que el ejecutable
fsico no es directamente ejecutado por el programador, sino que la ejecucin se realiza a travs de un
intermediario, el depurador, que es el elemento que nos permite alterar el flujo normal de la ejecucin.
El depurador
Un depurador es una herramienta que se suministra con el entorno de programacin, y que permite al
programador realizar un seguimiento exhaustivo de todos los aspectos del cdigo existentes en su
programa, de forma que pueda detectar y corregir los posibles errores producidos durante la fase de
desarrollo de la aplicacin.
El depurador es una pieza fundamental en el trabajo del programador, tanto como el propio
compilador, y de su versatilidad a la hora de tratar el cdigo mediante puntos de interrupcin,
evaluacin de expresiones, y otros aspectos propios de este tipo de elemento, depende que podamos
desarrollar ms eficiente y rpidamente nuestro trabajo.
Visual Studio .NET incorpora un excelente depurador, que nos permitir abordar la ejecucin del
cdigo durante la fase de desarrollo de muy distintas formas, ayudndonos en la eliminacin de todos
los errores de programacin existentes.
Fusin
Esta tcnica, tambin denominada intercalacin, consiste en mezclar el contenido de dos arrays ya
ordenados en un tercer array, obteniendo como resultado un nico array ordenado.
El Cdigo fuente 214 muestra un ejemplo del desarrollo de este algoritmo.
Public Sub Main()
' arrays ordenados
Dim ValoresA() As String = {"C", "F", "J"}
Dim ValoresB() As String = {"A", "G", "K", "M", "T"}
' array vaco en el que se fusionarn los dos arrays,
' este array ser ampliado durante la ejecucin del algoritmo
' para dar cabida a nuevos elementos
Dim ValoresNuevo() As String
Dim IndiceA As Integer
Dim IndiceB As Integer
Dim IndiceC As Integer
Dim Contador As Integer
' establecer los ndices de recorrido para cada array
IndiceA = 0
IndiceB = 0
IndiceC = 0
' recorrer los dos arrays que tienen valores hasta llegar
' al final de alguno de ellos
While (IndiceA <= UBound(ValoresA)) And (IndiceB <= UBound(ValoresB))
' aadir un nuevo elemento vaco al array de fusin
ReDim Preserve ValoresNuevo(IndiceC)
' comprobar de los dos arrays, cul tiene el valor menor,
' y aadirlo en la nueva posicin libre que acabamos de crear
' en el array de fusin
If ValoresA(IndiceA) < ValoresB(IndiceB) Then
ValoresNuevo(IndiceC) = ValoresA(IndiceA)
IndiceA = IndiceA + 1
Else
ValoresNuevo(IndiceC) = ValoresB(IndiceB)
IndiceB = IndiceB + 1
End If
' actualizar el ndice del array de fusin
IndiceC = IndiceC + 1
End While
' cuando hayamos terminado de recorrer el array ms pequeo,
' seguir recorriendo el array que tiene ms elementos hasta
' el final, y aadir los valores restantes en el array de fusin
If IndiceA <= UBound(ValoresA) Then
For Contador = IndiceA To UBound(ValoresA)
ReDim Preserve ValoresNuevo(IndiceC)
ValoresNuevo(IndiceC) = ValoresA(Contador)
IndiceC = IndiceC + 1
Next
Else
For Contador = IndiceB To UBound(ValoresB)
ReDim Preserve ValoresNuevo(IndiceC)
ValoresNuevo(IndiceC) = ValoresB(Contador)
IndiceC = IndiceC + 1
Next
End If
End Sub
Cdigo fuente 214
Ordenacin rpida con valor de referencia al comienzo
La tcnica a seguir en este caso es muy similar al anterior algoritmo, pero cambiando la posicin de la
cual obtenemos el valor de referencia. El Cdigo fuente 213 muestra un ejemplo.
' algoritmo de ordenacin rpida estableciendo como valor
' de referencia el primer elemento del array
Public Sub Main()
Dim Valores() As Integer = {51, 5, 67, 44, 72, 20, 19}
Dim PosIzquierda As Integer
Dim PosDerecha As Integer
Dim ValorRef As Integer
Dim Intercambio As Integer
' establecer ndices para los recorridos del array
' desde los elementos segundo y final respectivamente
PosIzquierda = 1 ' el segundo elemento est en la posicin 1 del array
PosDerecha = UBound(Valores)
' establecer el primer elemento como valor de referencia a comparar
ValorRef = Valores(0) ' el primer elemento est en la posicin 0 del array
While PosIzquierda <= PosDerecha
' recorrer hasta encontrar un valor mayor que el de referencia
While (Valores(PosIzquierda) < ValorRef) And _
(PosIzquierda < UBound(Valores))
PosIzquierda = PosIzquierda + 1
End While
' recorrer hasta encontrar un valor menor que el de referencia
While Valores(PosDerecha) > ValorRef
PosDerecha = PosDerecha - 1
End While
' intercambiar valores:
' el menor pasa a la izquierda --> zona de valores menores
' el mayor pasa a la derecha --> zona de valores mayores
If PosIzquierda <= PosDerecha Then
Intercambio = Valores(PosIzquierda)
Valores(PosIzquierda) = Valores(PosDerecha)
Valores(PosDerecha) = Intercambio
' actualizar ndices
PosIzquierda = PosIzquierda + 1
PosDerecha = PosDerecha - 1
End If
End While
' una vez situados todos los valores menores y mayores
' en su lado correspondiente, tomar el valor de referencia
' y mediante un intercambio, situarlo en su posicin correcta
If PosIzquierda < UBound(Valores) + 1 Then
Intercambio = Valores(PosDerecha)
Valores(PosDerecha) = Valores(0)
Valores(0) = Intercambio
Else
Intercambio = Valores(UBound(Valores))
Valores(UBound(Valores)) = Valores(0)
Valores(0) = Intercambio
End If
End Sub
' algoritmo de ordenacin rpida estableciendo como valor
' de referencia el primer elemento del array
Public Sub Main()
Dim Valores() As Integer = {51, 5, 67, 44, 72, 20, 19}
Dim PosIzquierda As Integer
Dim PosDerecha As Integer
Dim ValorRef As Integer
Dim Intercambio As Integer
' establecer ndices para los recorridos del array
' desde los elementos segundo y final respectivamente
PosIzquierda = 1 ' el segundo elemento est en la posicin 1 del array
PosDerecha = UBound(Valores)
' establecer el primer elemento como valor de referencia a comparar
ValorRef = Valores(0) ' el primer elemento est en la posicin 0 del array
While PosIzquierda <= PosDerecha
' recorrer hasta encontrar un valor mayor que el de referencia
While (Valores(PosIzquierda) < ValorRef) And _
(PosIzquierda < UBound(Valores))
PosIzquierda = PosIzquierda + 1
End While
' recorrer hasta encontrar un valor menor que el de referencia
While Valores(PosDerecha) > ValorRef
PosDerecha = PosDerecha - 1
End While
' intercambiar valores:
' el menor pasa a la izquierda --> zona de valores menores
' el mayor pasa a la derecha --> zona de valores mayores
If PosIzquierda <= PosDerecha Then
Intercambio = Valores(PosIzquierda)
Valores(PosIzquierda) = Valores(PosDerecha)
Valores(PosDerecha) = Intercambio
' actualizar ndices
PosIzquierda = PosIzquierda + 1
PosDerecha = PosDerecha - 1
End If
End While
' una vez situados todos los valores menores y mayores
' en su lado correspondiente, tomar el valor de referencia
' y mediante un intercambio, situarlo en su posicin correcta
If PosIzquierda < UBound(Valores) + 1 Then
Intercambio = Valores(PosDerecha)
Valores(PosDerecha) = Valores(0)
Valores(0) = Intercambio
Else
Intercambio = Valores(UBound(Valores))
Valores(UBound(Valores)) = Valores(0)
Valores(0) = Intercambio
End If
End Sub
Cdigo fuente 213
Ordenacin rpida con valor de referencia central
Como se indica, en primer lugar calculamos cul es la posicin central del array, y a partir de ah
realizamos el proceso de ordenacin. Recordemos que este algoritmo realiza una reubicacin de
valores, pero estos no tienen la obligacin de quedar ordenados, como se muestra en el ejemplo del
Cdigo fuente 212.
' algoritmo de ordenacin rpida estableciendo como valor
' de referencia un elemento que se encuentre en la mitad del array
Public Sub Main()
Dim Valores() As Integer = {51, 5, 72, 44, 67, 20, 19}
Dim PosIzquierda As Integer
Dim PosDerecha As Integer
Dim ValorRef As Integer
Dim Intercambio As Integer
' establecer ndices para los recorridos del array
' desde el principio y final
PosIzquierda = 0
PosDerecha = UBound(Valores)
' calcular el valor de referencia a comparar
ValorRef = Valores(PosDerecha / 2)
While PosIzquierda <= PosDerecha
' recorrer hasta encontrar un valor mayor que el de referencia
While Valores(PosIzquierda) < ValorRef
PosIzquierda = PosIzquierda + 1
End While
' recorrer hasta encontrar un valor menor que el de referencia
While Valores(PosDerecha) > ValorRef
PosDerecha = PosDerecha - 1
End While
' intercambiar valores: el menor pasa a la izquierda del valor
' de referencia, y el mayor pasa a la derecha
If PosIzquierda <= PosDerecha Then
Intercambio = Valores(PosIzquierda)
Valores(PosIzquierda) = Valores(PosDerecha)
Valores(PosDerecha) = Intercambio
' actualizar ndices
PosIzquierda = PosIzquierda + 1
PosDerecha = PosDerecha - 1
End If
End While
End Sub
' algoritmo de ordenacin rpida estableciendo como valor
' de referencia un elemento que se encuentre en la mitad del array
Public Sub Main()
Dim Valores() As Integer = {51, 5, 72, 44, 67, 20, 19}
Dim PosIzquierda As Integer
Dim PosDerecha As Integer
Dim ValorRef As Integer
Dim Intercambio As Integer
' establecer ndices para los recorridos del array
' desde el principio y final
PosIzquierda = 0
PosDerecha = UBound(Valores)
' calcular el valor de referencia a comparar
ValorRef = Valores(PosDerecha / 2)
While PosIzquierda <= PosDerecha
' recorrer hasta encontrar un valor mayor que el de referencia
While Valores(PosIzquierda) < ValorRef
PosIzquierda = PosIzquierda + 1
End While
' recorrer hasta encontrar un valor menor que el de referencia
While Valores(PosDerecha) > ValorRef
PosDerecha = PosDerecha - 1
End While
' intercambiar valores: el menor pasa a la izquierda del valor
' de referencia, y el mayor pasa a la derecha
If PosIzquierda <= PosDerecha Then
Intercambio = Valores(PosIzquierda)
Valores(PosIzquierda) = Valores(PosDerecha)
Valores(PosDerecha) = Intercambio
' actualizar ndices
PosIzquierda = PosIzquierda + 1
PosDerecha = PosDerecha - 1
End If
End While
End Sub
Cdigo fuente 212
Ordenacin rpida
Esta tcnica de ordenacin consiste en tomar como referencia el valor de una posicin del array, y
situar en las posiciones de su izquierda todos los valores inferiores a dicho valor de referencia, y en las
posiciones de su derecha los valores mayores.
Se debe tener en cuenta que este algoritmo slo se encarga de situar a los lados del valor de referencia
los valores adecuados, sin preocuparse de si quedan o no ordenados; para ello deberemos aplicar un
algoritmo de ordenacin especfico sobre cada parte del array.
Dependiendo de dnde situemos el valor de referencia, podemos desarrollar el algoritmo de las dos
maneras descritas a continuacin.
Ordenacin por seleccin
Consiste en recorrer un array buscando el valor menor; cada vez que se encuentre dicho valor,
intercambiarlo con la posicin actual de recorrido del array, de forma que los valores menores van
quedando ordenados, mientras que los mayores se van desplazando hacia las posiciones superiores,
siendo progresivamente ordenados. Veamos un ejemplo de esta tcnica en el Cdigo fuente 211.
Public Sub Main()
Dim Valores() As Integer = {85, 475, 100, 7, 98, 250}
Dim ContadorA As Integer
Dim ContadorB As Integer
Dim ValorActual As Integer
Dim Posicion As Integer
' recorrer el array
For ContadorA = 0 To UBound(Valores) - 1
' obtener valor de la posicin en curso y nmero de posicin
ValorActual = Valores(ContadorA)
Posicion = ContadorA
' recorrer el array desde la posicin actual ms uno
For ContadorB = ContadorA + 1 To UBound(Valores)
' si el valor del elemento del recorrido interior es
' menor que el valor actual obtenido del recorrido
' externo o principal
If Valores(ContadorB) < ValorActual Then
' tomar el valor hallado como menor
ValorActual = Valores(ContadorB)
Posicion = ContadorB
End If
Next
' intercambiar valores, situando el valor menor en la
' posicin inferior y el mayor en la posicin superior
Valores(Posicion) = Valores(ContadorA)
Valores(ContadorA) = ValorActual
Next
End Sub
Cdigo fuente 211
Ordenacin por insercin
Si partimos de la idea de que un array es una lista de valores situados de izquierda a derecha, mediante
este algoritmo de ordenacin tomamos cada elemento de un array comenzando por la izquierda, y
cuando encontremos un valor que no est en el orden correcto, lo situamos en su posicin adecuada,
desplazando a todos los valores superiores a las posiciones situadas a su derecha.
En el Cdigo fuente 210 se muestra un ejemplo de este tipo de ordenacin.
Public Sub Main()
Dim Valores() As Integer = {10, 20, 30, 50, 60, 40, 70}
Dim Contador As Integer
Dim ValorActual As Integer
Dim Posicion As Integer
' recorrer el array comenzando por la segunda posicin
For Contador = 1 To UBound(Valores)
' obtener el valor correspondiente para comprobar si est en orden
ValorActual = Valores(Contador)
' calcular la posicin con la que vamos a trabajar
Posicion = Contador - 1
While (Posicion >= 1)
' si el valor obtenido no est en el orden correcto,
' dentro de este bucle ir desplazando a las posiciones
' superiores del array los elementos de mayor valor
If ValorActual < Valores(Posicion) Then
Valores(Posicion + 1) = Valores(Posicion)
Posicion = Posicion - 1
Else
Exit While
End If
End While
' situar el valor obtenido en su posicin ordenada
Valores(Posicion + 1) = ValorActual
Next
End Sub
Cdigo fuente 210
Suscribirse a:
Entradas (Atom)








