AnteriorPosterior

20. Definición de funciones y procedimientos

  Curso: Introducción a la programación en Basic, por Nacho Cabanes

20. Definición de funciones y procedimientos

La programación estructurada procura que los programas sean más fáciles de diseñar y mantener. Esto se consigue mediante ciertos tipos de instrucciones, que permiten que un programa no sea simplemente una serie de instrucciones que se procesan una tras otra.

Algunas de estas instrucciones ya las hemos visto: WHILE, LOOP y UNTIL. Pero hay más posibilidades, como la de definir "bloques" dentro de un programa, empleando lo que llamaremos funciones y procedimientos.

Ya hemos empleado alguna de las "funciones" predefinidas que incorpora el lenguaje Basic, y que nos permiten calcular el valor absoluto de un número, el seno o el coseno de un ángulo, etc. Ahora comenzaremos por ver la forma en que en muchos Basic antiguos podíamos definir nuestra propias funciones. Vamos a crear una función que nos devuelve el cuadrado de un cierto número

10 DEF FNcuadrado (x) = x * x 
20 PRINT "El cuadrado de 2 es "; FNcuadrado(2)

(Fuente "2001.bas". Probado en Locomotive Basic de Amstrad CPC)

Es decir, se usa la orden DEF FN, y justo a continuación de la palabra FN se indica el nombre que tendrá la función, los parámetros que aceptará esa función (en nuestro caso, un único número, que hemos llamado X, y que es el número cuyo cuadrado queremos elevar), y finamente un signo = y la expresión matemática que indica cómo calcular esa función (en nuestro caso, al ser el cuadrado, multiplicamos el número por sí mismo). En la siguiente línea hemos utilizado esa función para calcular el cuadrado del número 2 (hay que indicar el nombre de la función, también precedido por las letra FN).

Pero los Basic más modernos, como QBasic, las funciones pueden dar más pasos, en vez de limitarse a una única operación matemática, y se definen de una forma distinta:

FUNCTION RaizCubica (x) 
ValorTemporal = ABS(x) ^ .33333333333# 
IF x < 0 THEN ValorTemporal = ValorTemporal * (-1) 
RaizCubica = ValorTemporal 
END FUNCTION
 
PRINT "La raiz cúbica de -27 es "; RaizCubica(-27) 

(Fuente "2002.bas". Probado en QBasic 1.1)

En este ejemplo, si X es negativo, QBasic da un error al elevar X a .3333, de modo que lo que he hecho es utilizar un valor temporal, elevando el valor absoluto del número y cambiando luego el signo si corresponde. Finalmente, doy a "RaizCubica" el valor definitivo.

Finalmente, en QBasic también existe la posibilidad de crear "subrutinas" (lo que en otros lenguajes de programación se llama "procedimientos"). Es algo parecido a lo que conseguíamos con GOSUB, pero de forma más elegante y más legible, además de que se pueden indicar parámetros, igual que hacíamos en las funciones. Por ejemplo, podemos crear una subrutina que escriba un cierto texto centrado en una fila de la pantalla que indiquemos:

SUB EscribeCentrado (texto$, y) 
LOCATE y, 40 - (LEN(texto$) / 2) 
PRINT texto$ 
END SUB
 
CLS 
PRINT "Hola" 
EscribeCentrado "Ejemplo", 10 
EscribeCentrado "Segundo ejemplo", 15

(Fuente "2003.bas". Probado en QBasic 1.1)

Aquí se ve como la forma de usar una subrutina en QBasic también es ligeramente distinta a la de las funciones, porque en las subrutinas los parámetros no se indican entre paréntesis (además del hecho de que una función devuelve un valor, que deberemos mostrar con PRINT o utilizar como valor intermedio para otras operaciones, mientras que una subrutina no devuelve ningún valor).

También existe la posibilidad de acceder a la subrutina con la orden CALL (entonces sí que habrá que indicar los parámetros entre paréntesis), así:

SUB EscribeCentrado (texto$, y) 
LOCATE y, 40 - (LEN(texto$) / 2) 
PRINT texto$ 
END SUB
 
CLS 
PRINT "Hola" 
CALL EscribeCentrado ("Ejemplo", 10) 
CALL EscribeCentrado ("Segundo ejemplo", 15) 

(Fuente "2004.bas". Probado en QBasic 1.1)

Ejercicio propuesto 20.1: Crea una función SUMA, que devuelva la suma de los 2 valores que se le indiquen.
Ejercicio propuesto 20.2: Crea una función HIPOTENUSA, que devuelva la el valor de la hipotenusa de un triángulo rectángulo a partir de los valores de los 2 catetos, que se le indicarán como parámetros.

Actualizado el: 08-01-2015 00:43

AnteriorPosterior