Manual de Basic Spectrum 48k.

Capítulo 5

Subrutinas

Resumen

  • GO SUB, RETURN

A veces, partes diferentes del programa tendrán tareas bastante similares que realizar y se encontrará tecleando las mismas líneas en dos o más ocasiones; sin embargo, ello no es necesario. Puede teclear las líneas una sola vez, en una forma conocida como una subrutina, y luego utilizarlas, o llamarlas, en cualquier lugar del programa sin necesidad de volverlas a introducir por el teclado.

Para realizar esta operación, utilice las sentencias GO SUB (GO a SUBrutina) y RETURN.

Ello adopta la forma:

GO SUB n

en donde n es el número de línea de la primera línea en la subrutina. Es lo mismo que GO TO n con la salvedad de que el ordenador recuerda en donde estaba la sentencia GO SUB, de modo que pueda retornar después de realizar la subrutina. Lo hace poniendo el número de línea y el número de la sentencia dentro de la línea (juntos constituyen la dirección de retorno) en la parte superior de una pila (la pila GO SUB).

RETURN

toma la dirección de retorno superior de la pila GO SUB y la lleva a la sentencia que la sigue.

A título de ejemplo, vuelva a examinar el programa para adivinar números. Vuelva a teclear lo siguiente:

10 REM "Un juego de adivinacion con nueva disposicion"
20 INPUT a: CLS
30 INPUT "Adivine el numero ",b
40 IF a=b THEN PRINT "Correcto": STOP
50 IF a<b THEN GO SUB 100
60 IF a>b THEN GO SUB 100
70 GO TO 30
100 PRINT "Pruebe de nuevo"
110 RETURN

La sentencia GO TO en la línea 70 es muy importante porque, de no ser por ella, el programa pasará en su ejecución a la subrutina y se producirá un error (7 RETURN without GO SUB - Return sin GO SUB) cuando se llegue a la sentencia RETURN.

Veamos otro programa bastante sencillito que ilustra el empleo de GO SUB,

100 LET x=10
110 GO SUB 500
120 PRINT s
130 LET x=x+4
140 GO SUB 500
150 PRINT s
160 LET x=x+2
170 GO SUB 500
180 PRINT s
190 STOP
500 LET s=0
510 FOR y=1 TO x
520 LET s=s+y
530 NEXT y
540 RETURN

Cuando se ejecute este programa, vea si puede determinar lo que está sucediendo. La subrutina comienza en la línea 500.

Una subrutina puede llamar a otro o incluso a sí misma (en este último caso, se llama recursivo).

Manual de Basic Spectrum 48k.