Tema 7 - Subrutinas
7.1 ¿Para qué las subrutinas? GOSUB y RETURN
Lo habitual es que un programa de ordenador no sea "totalmente lineal", sino que haya partes repetitivas. En casi cualquier lenguaje de programación, esas partes se podrán definir como "subrutinas", y desde el cuerpo de nuestro programa nos limitamos a "llamar a esa subrutina" cuando la necesitamos.
En el Basic de los CPC, se salta a una subrutina con GOSUB y se vuelve de ella con RETURN:
Un ejemplo de subrutina que escriba texto en 2 colores podría ser:
10 ' Ejemplo de GOSUB
20 mode 1
30 locate 2,2
40 texto$ = "Hola"
50 gosub 1000
60 locate 5,6
70 texto$ = "Como estas?"
80 gosub 1000
90 end
1000 ' Subrutina de escribir en dos colores
1010 ' Lee el texto de la variable TEXTO$
1020 ' Y alterna colores en la pos. del cursor
1030 for i = 1 to len(texto$)
1040 if i mod 2 = 0 then pen 1 else pen 2
1050 print mid$(texto$,i,1);
1060 next i
1070 return
Como se ve en el ejemplo, debemos usar END antes de la subrutina, para indicar dónde termina el cuerpo del programa. Si no lo hacemos, tras la línea 80 se volvería a pasar a la línea 1000, que es la siguiente.
Otro comentario sobre ese programa: IF i MOD 2 = 0 THEN... es una forma de saber si un número es par o impar: mirando si el resto de la división entre 2 (operación "módulo", MOD) es 0 ó 1. Es una forma frecuente de conseguir que algo alterne entre dos valores posibles.
7.2 ON...GOSUB y ON..GOTO
Otra orden relacionada (pero que pocas versiones de Basic permiten) es "ON GOSUB", que permite saltar a distintos puntos del programa según el valor que tenga una variable:
10 print "Elija una opcion"
20 print "1- Anadir un dato"
30 print "2- Ver datos actuales"
40 print "3- Borrar un dato"
50 input opcion
60 on opcion gosub 100, 200, 300
70 print "Terminamos..."
80 end
100 ' Anadir un dato
110 print "Ahora anadiriamos..."
120 return
200 ' Ver datos
210 print "Ahora mostrariamos..."
220 return
300 ' Borrar datos
310 print "Ahora borrariamos..."
320 return
Además de "ON GOSUB", existe "ON GOTO", que salta... pero no regresa.
7.3 GOSUB: Ejercicio propuesto
Crear subrutinas para dibujar triángulos (a partir de las coordenadas x1,y1, x2,y2, x3,z3 de los tres vértices), rectángulos (a partir de las coordenadas x1,y1, x2,y2 de dos vértices opuestos) y circunferencias (a partir de las coordenadas x1,y1 del centro y del radio r). Crear también un cuerpo de programa que las use.