Los subprogramas son rutinas, procedimientos o conjuntos de instrucciones que realizan una labor específica. Los subprogramas o subrutinas nacieron de la necesidad de no repetir innecesariamente un trabajo ya hecho. Pueden invocarse desde el cuerpo del programa principal cuantas veces se desee. Constituyen el núcleo de lo que se denomina programación estructurada, y permiten la descomposición de un problema complejo en subproblemas más sencillos abordables de forma independiente. Así, como recordaremos del tema 1.2, la estructura general de un programa de Flowol se puede representar como:
Supongamos, por fijar ideas, que necesitamos encender una lámpara (conectada a la 1ª salida de la interfaz de control) 3 veces durante medio segundo cada vez y con intervalos de 1 segundo. Un programa que realiza este proceso puede ser:
Como observamos, se repite 3 veces un mismo conjunto de instrucciones, de modo que podemos definir un subprograma (llamado lamp, pro ejemplo) cuya acción sea simplemente encender y apagar la lámpara con los períodos adecuados e invocar este subprograma 3 veces desde el programa principal:
Como observamos, este nuevo programa es más económico a la hora de programar y resulta mucho más legible. Cuando un programa contiene muchas instrucciones esta forma de programar se convierte en indispensable para obtener un código eficiente y fácil de interpretar por el programador.
1. Edición de un subprograma Para definir un subprograma no hay más que insertar un bloque terminador y pulsar el botón Sub en el cuadro de diálogo que aparece:
En el cuadro de texto que aparece en blanco se puede introducir el nombre deseado para el subprograma:
de modo que se obtiene el bloque:
(si no se hubiese introducido ningún nombre, el subprograma sería reconocido simplemente por Sub 1). El cuerpo del subprograma se completa arrastrando y soltando los bloques necesarios, y se finaliza insertando un terminador Alto.
En Flowol se pueden definir hasta 16 diferentes subprogramas, con un grado de anidamiento máximo de 8 niveles (es decir, un subprograma puede invocar en su interior a otro subprograma y éste a su vez a otro, y éste último a otro más, etc., un máximo de 8 veces). Flowol no comprueba el exceso de subprogramas o de niveles de anidamiento, de modo que si los mencionados límites se exceden, el programa parece estar correcto pero en su ejecución aparecerán resultados erróneos. En particular, un subprograma se puede llamar a sí mismo. Esto se conoce como recursividad. No se suele utilizar dado que consume una gran cantidad de recursos de la computadora.
2. Llamada desde el programa principalUna vez se tienen definidos uno o más subprogramas, cualquiera de ellos puede ser invocado desde el programa principal.
El botón Sub da acceso a una lista de los subprogramas previamente definidos, de forma que se puede seleccionar a cuál de ellos se desea invocar.
Si, por ejemplo, se selecciona el denominado 1(Nom_sub), se obtiene el bloque:
de modo que pulsando Aceptar se tiene el bloque:
que interrumpe el flujo del programa principal para comenzar a ejecutar el contenido del subprograma. Cuando se alcanza el bloque terminador Alto del mismo, el programa principal continúa su ejecución en el punto donde lo dejó. Si en el anterior cuadro Editar Proceso se hubiese pulsado alguno de los botones numéricos (1-9), por ejemplo, el 5, se hubiese obtenido el bloque:
Este, ejecuta el nº de veces elegido (en este caso 5), las instrucciones contenidas en el subprograma antes de devolver el control al programa principal. Utilizando este recurso, el programa presentado anteriormente se puede reescribir de manera muy compacta:
La llamada repetida a un subprograma podría servirnos también, por ejemplo, para emitir un sonido de larga duración a partir de un sonido de menor duración. En el siguiente ejemplo se emite un sonido de 5 s de duración a base de repetir un sonido que dura en realidad 1 s.
|