Professional Documents
Culture Documents
Fecha:
Programa de formación: Técnico en Sistemas Versión 1 Febrero 2 de 2011
Nivel: Técnico Versión 1.0
Sistema de Gestión
de la Calidad GUIA DE ACTIVIDADES DE PROGRAMACIÓN OREINTADA A EVENTOS Página 1 de 8
CONCEPTUALIZACIÓN
Sentencias condicionales.
Si no se cumple
Así de fácil es programar en Basic. Lo que ocurre es que esta herramienta habla inglés, y lo
descrito anteriormente toma la forma:
If condición Then
Instrucciones
Else
Otras instrucciones
End If
If condición 1 Then
Instrucciones
ElseIf Condición 2
Otras instrucciones
ElseIf Condición 3
Otro juego de instrucciones
Else
Instrucciones que debe realizar caso de no cumplir las condiciones 1, 2 y 3.
End If
Su nombre casi nos define lo que es: Selecciona, dependiendo del caso, un determinado juego
de instrucciones:
Select Case variable ' variable es una variable que puede tomar los valores (p.e.)
de 1 a 4
Case 1
Instrucciones a ejecutar en caso de que variable = 1
Case 2
Instrucciones a ejecutar en caso de que variable = 2
Case 3
Instrucciones a ejecutar en caso de que variable = 3
Case 4
Instrucciones a ejecutar en caso de que variable = 4
Case Else
Instrucciones a ejecutar en caso de que variable sea distinta a los valores
anteriores
End Select
Este procedimiento resulta mucho mas sencillo y rápido que las sentencias If Then Else
vistas anteriormente, cuando el margen de elección es mayor que 2.
Puede agrupar varios valores en una misma línea. Por ejemplo, si tiene 100 valores posibles, y
el tratamiento es igual para varios de ellos, puede agruparlos así:
Switch toma una serie de parámetros, todos por parejas. El primer término de cada pareja es
la expresión a evaluar. El segundo es el valor que tiene que devolver. En realidad Switch es
una función (las funciones las veremos muy pronto)
Esta instrucción obtiene un valor para A que dependerá del valor que tome B entre los valores
posibles (1, 2 ó 3)
La sentencia Choose es casi igual, cambia solamente la forma. La misma intrucción anterior
puede realizarse con Choose de la siguiente forma:
A = Choose ( B, 5, 7, 11 )
Las sentencias Switch y Choose no se usan mucho en programación. Parece que los
programadores o no las conocen o se lían (y es comprensible) al utilizarlas. Le garantizo que
puede llegar a ser un gran programador sin necesidad de utilizarlas. Use preferentemente If
End If y Select Case.
Observaciones
IIf siempre evalúa SiEsCierto y SiEsFalso, aunque sólo vaya a devolver una de ellas. Por esta
razón, deberá vigilar que no se produzcan efectos no deseados. Por ejemplo, si al evaluar
SiEsFalso se produce un error de división entre cero, se generará un error aunque Expresión
Al ejecutar el programa, debe introducir un valor numérico en Text1. Si ese valor numérico es
menor que 100, MiVariable tomará el valor “Es menor” (No se cumple la condición expresada
en el primer parámetro Text1.Text > 1000). Si introduce una cantidad mayor, se cumple esa
condición, por lo que MiVariable tomará el valor “Es mayor”. El valor que toma la variable
puede verlo en Label1.
Fíjese que hemos declarado MiVariable como String, ya que va a contener un dato tipo cadena
de caracteres.
Con estas sentencias condicionales es posible realizar bifurcaciones del programa, cambiar las
propiedades de un objeto, obtener resultados de operaciones, ....
Sentencias de bucle.
Es muy común utilizar bucles a lo largo de un programa. Un bucle es una sucesión repetitiva
de instrucciones, que se estarán realizando mientras se cumpla una condición o mientras no se
cumpla otra condición. Es tan sencillo como esto:
Mientras condición
Instrucciones
Existen dos formas de bucle: Una, que realiza un número determinado de recorridos por el
bucle. Es el denominado bucle por contador. Otra, realiza el bucle hasta que se cumpla (o deje
de cumplirse) una condición. Es el llamado bucle por condición.
Realiza el bucle tantas veces como le indiquemos. Por ejemplo, en este bucle nos va a
presentar las 26 letras mayúsculas del alfabeto inglés
For N=65 To 90
Label1.caption = Chr ( N )
Next N
Este "programa" nos presentará en una caja (Label) los caracteres cuyo número ASCII vaya
desde el 65 (A) al 90 (Z) Comenzará presentando el correspondiente al número 65, e irá
presentando sucesivamente el 66, el 67, etc., hasta llegar al 90, donde se parará.
X=0
Do While X < 1000
X=X+1
Loop
El programa toma una variable ( X ) que previamente tuvimos la curiosidad de ponerla a cero,
e incrementa su valor una unidad. Analiza si el valor de X es menor que 1000, y si es cierto,
vuelve a realizar el bucle. Así hasta que X ya no sea menor que 1000. Al dejar de cumplirse
que X sea menor que 1000, sale del bucle. Acabamos de realizar un temporizador, y también
de exponer las sentencias condicionales y los bucles, inicio de cualquier curso de Basic. Como
final de lección, se propone un problema. Con el primer bucle, donde visualizábamos los
caracteres A a la Z, posiblemente no nos diese tiempo de ver cada una de las letras que iban
apareciendo en la pantalla, en la etiqueta Label1, dado que cambiaría con mucha velocidad, y
solamente veríamos la Z, que es donde se detuvo el programa. Podemos poner un
temporizador cada vez que presente una letra, y así nos dará tiempo a verla. Con los dos
bucles vistos anteriormente ya podemos hacerlo.
X=0
Do Until X > 1000
X=X+1
Loop
Observe que la diferencia entre una y otra es la condición, While para indicar Mientras se
cumpla que ... y Until para indicar Mientras no se cumpla que ....
For N=65 To 90
Label1.caption = Chr ( N )
Label1.RefreshN ' Refresca la etiqueta
X=0
Do While X < 1000
X=X+1
Loop
Next N
Este es nuestro primer programa en BASIC. En VISUAL BASIC es idéntico, pero nos falta la
interface gráfica. Para realizarla basta con abrir el VB y sobre el formulario que aparece al
abrirlo, introducir una etiqueta, (Label) que llevará el nombre por defecto de Label1. Solo nos
queda pensar donde introducimos el código anterior. Podemos introducir un botón de comando
(Command Button) que saldrá con el nombre por defecto de Command1. Haga doble click
sobre el botón. Aparecerá el procedimiento Click. Este procedimiento es el que se realiza
cuando hacemos click sobre ese botón. Escriba en ese procedimiento este código.
Hemos puesto nuestra primera piedra en Visual Basic. Este ejemplo es muy sencillo. Visual
Basic es tan sencillo como este ejemplo.
(*) Las temporizaciones no se hacen realmente así. El ejemplo anterior no deja de ser
una forma sencilla de detener el programa, para que en los comienzos de su carrera como
programador pueda ver el contenido de una etiqueta. Si lo hiciera de esta forma, su ordenador
estaría detenido realizando una función bastante triste, contar hasta 1000 para luego continuar
el programa. Y lo que es peor, en un ordenador a 300 MHz. Tardaría menos tiempo que en
uno a 66. Esta misma función puede hacerla con Sleep que la verá mas adelante, que es la
forma limpia y elegante de hacer una temporización
Para salir de un bucle, podemos esperar a que se complete, bien porque se ha cumplido la
condición (Bucles por condición) o a que se haya llegado al final de la cuenta (Bucles por
contador). Pero puede ocurrir que interese salir del bucle sin haber terminado la ejecución
total del mismo, por ejemplo, porque ya hemos encontrado lo que estabamos buscando, y
sería una pérdida de tiempo seguir ejecutando el bucle cuando ya hemos obtenido lo que
buscamos. Para ello, basta con ejecutar la sentencia Exit Do (Cuando hemos comenzado el
bucle con Do Until o Do While, o con Exit For cuando lo hemos comenzado con For ... To
Ejemplos
En el siguiente ejemplo pretendemos parar el programa cierto tiempo, a la espera que otro
equipo se conecte a través del puerto serie. (Cuando se conecte, el control MSComm1
detectará la señal DSR que le envía el otro equipo y deberemos salir inmediatamente del bucle
para, por ejemplo, atender a ese puerto serie)
Contador = 0
Do While Contador < 1000
Contador = Contador + 1
DoEvents
If MSComm1.DSRHolding = True Then Exit Do
Sleep (1000)
Loop
En el siguiente ejemplo, deseamos transmitir por el puerto serie una serie de números, del 1 al
1000, pero siempre y cuando que el equipo que está al otro lado de la línea serie esté a la
escucha (Condición MSComm1.DSRHolding = True) Si se desconecta ese equipo, y la
condición pasa de True a False, deseamos salir del bucle:
For I = 1 To 1000
If MSComm1.DSRHolding = False Then Exit Do
MSComm1.Output = Str(I)
Next I
Función DoEvents
Observará que la variable Valor nunca podrá llegar a tener el valor 100, puesto que cada vez
que llega a 90 le ponemos de nuevo el valor 0. El programa no va a salir nunca del bucle, pero
además no podrá atender a otros eventos que se produzcan en el ordenador (por ejemplo la
pulsación de una tecla) ya que el microprocesador está atendiendo solamente a ese bucle. Si
lo está ejecutando desde el propio entorno de Visual Basic, deberá parar la ejecución mediante
las teclas Ctrl – Pausa. No podrá pararlo mediante el botón Terminar de la barra de
herramientas de VB. En un programa compilado posiblemente tenga que reiniciar el equipo
mediante Alt – Ctrl – Sup, llevándose por delante el resto de los programas que se estén
ejecutando en ese momento en su PC.
No es difícil cometer este error involuntariamente. Esto es lo que se llama un bucle infinito.
Para que no suceda, o al menos, que si nuestro programa entra en un bucle infinito se pueda
salir de una forma no tan agresiva, hay que introducir dentro del bucle la instrucción
DoEvents. Cuando VB encuentra esta función el control del microprocesador al sistema
operativo, y si hay alguna operación en espera (la pulsación de una tecla, por ejemplo) la
ejecuta y posteriormente vuelve a ejecutar el bucle. De esta forma, podemos salvar al menos
los datos de las otras aplicaciones que se están ejecutando al mismo tiempo.
Y ya que explicamos como se sale de un bucle por la vía rápida, veamos como salir de un
procedimiento usando también esa “vía rápida”.
Para salir de un procedimiento basta con ejecutar la sentencia Exit Sub. En el ejemplo
siguiente, usamos el botón BotonLeerNombre para introducir el dato Nombre en una base de
datos. Pero ese campo puede tener como máximo, 20 caracteres. Si el usuario ha introducido
mas de 20 caracteres, debemos salir del procedimiento donde se introduce ese dato sin
ejecutarlo de forma íntegra:
NOTA. Los ejemplos anteriores sirven solamente de ilustración para explicar el código que
estamos estudiando. No pretenda ver una forma mejor de realizar la misma función, que
seguro que existe.