tema iv.-subrutinas. bugs (errores). basic

Anuncio
TEMA IV.- SUBRUTINAS. BUGS (ERRORES). BASIC
I.
Introducción
En muchos de los programas que creamos podemos simplificar su funcionamiento mediante las
subrutinas. Por otra parte hablaremos de los errores “no visibles” hasta que corremos el programa.
Por último comentaremos las diferencias entre el programa en diagrama de flujo y en BASIC.
II. Subrutinas
Una subrutina es una parte separada de un programa que puede correr tantas veces como sea
necesario. Las subrutinas son a menudo usadas para reemplazar partes de un programa que son
repetidas una gran cantidad de veces o para hacer que el programa sea mas organizado.
Si observamos en el diagrama de flujo de
la izquierda observaremos que existen
pasos que se repiten varias veces durante
la ejecución del programa. Por ejemplo, se
repiten los pasos en los que se da las
órdenes de visualizar el valor de la variable
“x” [Display “x=”], [Display x], y [Display
new line], si estas líneas las ponemos en
otro programa y cada vez que nos haga
falta ejecutamos este la apariencia del
programa principal se simplificaría.
Además
podríamos
este
nuevo
utilizar
en
programa
cualquier
lo
otro
programa que necesite visualizar una
variable.
Veamos como quedaría nuestro diagrama
de flujo con la introducción de una
subrutina que denominaremos “Visualizar”
Teleformación proyecto Medusa.
1
Observamos que en el programa Principal
han desaparecido las líneas de visualización
antes mencionadas y en cambio aparece un
nuevo comando
subrutina”.
En
de “Llamada a
cambio
las
líneas
de
visualización aparecen en otro programa al
lado cuyo nombre es “Visualizar” que en vez
de finalizar con la orden STOP finaliza con el
comando
.
El funcionamiento de una subrutina es el
siguiente:
Cuando el programa principal llega al comando
ejecutarse y cuando alcanza el comando
“llama” a la subrutina, esta comienza a
el programa Principal continua ejecutándose en la
línea siguiente al comando de llamada.
Podemos concluir diciendo que el uso de una subrutina hace uso de 3 comandos inseparables:
Llamada a subrutina. Este comando debe formar parte del programa que desea ejecutar la
subrutina.
El nombre que introducimos en el
recuadro de texto debe coincidir con
el nombre que demos a la subrutina
pues en caso contrario el programa
no se ejecutará correctamente.
Teleformación proyecto Medusa.
2
Subrutina. Este comando es el encabezado de la subrutina de ahí su similitud con el
comando Start.
Return. Este comando finaliza la ejecución de la subrutina y devuelve el control al programa
desde el que se hizo la llamada de la subrutina.
En un programa se pueden hacer tantas llamadas a subrutina como se deseen (El número máximo
de subrutinas es de 100)
Las subrutinas se pueden anidar, es decir, una subrutina puede hacer una llamada a otra subrutina y
así sucesivamente, de forma que siempre se ejecuta primero la que tiene el orden mas interno.
En el diagrama de flujo anterior podemos observar como hemos simplificado el programa Principal
haciendo dos llamadas a subrutinas. La primera subrutina (Incremento) es la que realiza el
incremento de la variable x en una unidad, cuando finaliza esta subrutina el programa Principal hace
una llamada a la siguiente subrutina (Visualizar) y así hasta que finaliza el programa.
Teleformación proyecto Medusa.
3
En este ejemplo hemos puesto en el programa Principal la llamada a la subrutina “Incremento” y esta
a su vez una vez ha incrementado el valor de “x” realiza una llamada a la subrutina “Visualizar” ,
cuando esta finaliza, la subrutina Incremento finaliza y devuelve el control al programa Principal.
Podemos decir que las subrutinas:
♦ Son mas eficientes porque reutilizan el mismo segmento de programa.
♦ Rompen el programa principal en pequeñas piezas haciéndolo mas fácil de entender.
♦ Pueden ser re-usados por diferentes programas requiriendo la misma función.
Teleformación proyecto Medusa.
4
Analicemos el programa anterior. Observamos que el Programa1 crea una variable “x” con el valor 0
y a continuación hace una llamada a la subrutina2 que realiza un incremento de la variable.
Asimismo el Programa2 también crea una variable “x” con un valor de 5 y hace una llamada a la
misma subrutina2.
En las ventanas de monitorización podemos ver que ambos programas han hecho uso de la
subrutina y sin embargo la variable “x” no fue confundida por la subrutina devolviendo a cada
programa el valor que le correspondía. La subrutina devuelve a cada programa el valor
correspondiente de las variables que este le pasó
Cuando dos programas usan la misma subrutina el programa que hizo la llamada en segundo lugar
espera hasta que el otro programa deje de utilizar la subrutina.
III. Bugs (Errores)
Un bug es una forma de definir un error que sólo se encuentra cuando ejecutamos el programa.
Veamos algunos casos de bugs
En el diagrama de la izquierda a primera vista no hemos cometido error alguno, sin embargo cuando
lo ejecutamos el programa se nos detiene en el bloque
¿Porqué? Pues porque en el programa y tal como hemos comentado anteriormente siempre se debe
declarar las variables antes de hacer uso de ellas. La solución de este error la podemos ver en el
diagrama de la derecha.
Teleformación proyecto Medusa.
5
En este nuevo diagrama deseamos
realizar un contador que se detenga
al
llegar
ejecutamos
programa
a
5,
pero
cuando
observamos
se
detiene
que
una
lo
el
vez
realizado el primer paso por todos los
bloques. ¿Dónde está el bug (error)?
Pues el error lo hemos cometido al
colocar el bloque de decisión con las
salidas intercambiadas el Yes por el
No y viceversa.
Generalmente los bugs son errores de escritura que al principio son difícilmente detectables pero que
a través de pequeños depuradores (debugs) pueden ser detectados.
IV. BASIC
Comentamos anteriormente que el BASIC es un lenguaje de alto nivel cuya escritura se realiza en
inglés y que es fácilmente entendible si conocemos algo de este idioma. El Crocodile Technology
permite pasar del lenguaje de diagrama de flujo al lenguaje BASIC aunque no permite modificar este.
Para ello dispone de la herramienta
iconos
El icono
y
cuando picamos sobre este icono nos aparecen dos
.
es una ventana que monitoriza las variables que se utilizan en el programa. Si
picamos sobre el y arrastramos a la zona de
trabajo nos aparecerá una ventana que debemos
relacionar con el programa a monitorizar. Las
dimensiones de la ventana puede ser modificable
sin mas que picar sobre los recuadros negros y
estirar hasta conseguir las medidas deseadas.
Teleformación proyecto Medusa.
6
El icono
es también una ventana pero que nos encierra la traducción en BASIC del diagrama
de flujo.
Analicemos las relaciones existentes entre el lenguaje de diagrama de flujo y el BASIC para lo que
estudiaremos
el
siguiente
diagrama de flujo que realiza la
suma de dos variables.
En primer lugar vemos que el
BASIC
utiliza
la
instrucción
“symbol” para definir los nombres
de las variables que vamos a
utilizar.
En nuestro caso el Crocodile
utiliza una serie de registros (cajas
donde guardan los datos) que los
denomina b0. Esta instrucción no
tiene relación con el diagrama de
flujo.
En el diagrama de flujo la primera acción es Start que en BASIC se transforma en la etiqueta main:,
La asignación de un valor a una variable el lenguaje BASIC lo hace con la instrucción let
se convierte en let x = 3
Teleformación proyecto Medusa.
7
se convierte en let z = x + y,
El comando
se convierte en la instrucción end.
Las etiquetas son aquellos puntos donde el programa realiza un salto
Las etiquetas siempre se escriben a la izquierda y finaliza con dos puntos “:”.
Veamos otro ejemplo mas complicado.
El diagrama utiliza una sola variable “x” por ello en el BASIC sólo aparece una instrucción “symbol”.
se convierte en main:
se convierte en let x = 0
se convierte en let x = x + 1
este bloque siempre genera dos etiquetas en BASIC una etiqueta que indica
el punto donde le programa debe continuar si la pregunta tiene respuesta positiva ( en nuestro
ejemplo label2 ) y otra que indica el punto donde debe continuar si la respuesta es negativa (en
nuestro caso label1).
Teleformación proyecto Medusa.
8
La pregunta se convierte en la sentencia if … then a continuación del then se escribe la etiqueta
donde el programa continua si la respuesta es afirmativa y en la siguiente línea escribimos con la
instrucción goto (saltar a ) la etiqueta donde el programa continua si la respuesta es negativa.
En nuestro ejemplo
se convierte en
if x=5 then label2
Goto label1
se convierte en la instrucción end.
Veamos un ejemplo con subrutinas:
Observemos que el BASIC crea la subrutina como una etiqueta a continuación del programa
principal.
se convierte en gosub Subrutina2, la instrucción gosub significa ir a la subrutina
y volver cuando encuentres el comando return.
se convierte en return
se convierte en pause 5000, la instrucción pause trabaja con milisegundos en
vez de segundos como hace el comando wait.
El resto de las acciones ya no merecen comentarios al ser similares a las anteriores.
Teleformación proyecto Medusa.
9
Intente entender el siguiente diagrama
Teleformación proyecto Medusa.
10
Descargar