TEMA 1.6
FUNCIONES INCLUIDAS EN EL LENGUAJE

El lenguaje BASIC incluye un montón de funciones que nos harán algunos cálculos sin necesidad de tener que programar nosotros todo lo necesario.

Una función es una palabra que, insertada dentro de una expresión, llama a un pequeño "programita" que hace los cálculos y nos devuelve un resultado. Veamos este ejemplo:

CLS
INPUT "Escribe un número: ", num
raiz = SQR(num)
PRINT "Su raíz cuadrada es ";raiz

Este programa nos pide que escribamos un número y lo guarda en la variable num. A continuación calcula la raíz cuadrada del número usando la función SQR y gualda el resultado en la variable raiz para al final escribirlo en pantalla. No hemos tenido que programar ni conocer las operaciones mátemáticas necesarias para calcular la raíz cuadrada de un número, lo ha hecho automáticamente la función.

Observa la forma de decirle a la función cual es el número que queremos que utilice para calcular la raíz cuadrada: Lo metemos entre paréntesis después del nombre de la función. Este número se dice que es un Parámetro que pasamos a la función. Si alguna función no necesita parámetros no ponemos nada, en otros lenguajes hay que poner los paréntesis vacíos detrás del nombre de la función, pero en QBasic no.

El parámetro no tiene por que ser un número constante, puede ser a su vez otra expresión.

En la instrucción PRINT podemos incluir cualquier expresión, por lo tanto en el ejemplo anterior nos podíamos haber ahorrado la variable raiz escribiendo directamente:

CLS
INPUT "Escribe un número: ", num
PRINT "Su raíz cuadrada es "; SQR(num)

Las funciones tienen tipo de datos como las variables, es decir, nos devuelven un resultado que puede ser cadena, entero, etc. y por lo tanto pueden llevar un sufijo de identificación de tipo a continuación del nombre, por ejemplo la función TIMER nos devuelve el número de segundos que han pasado desde las doce de la noche en formato numérico:

segundos = TIMER

mientras que la función TIME$ nos devuelve la hora actual en formato de cadena de texto con la hora, los minutos y los segundos separados por dos puntos:

horaActual$ = TIME$
PRINT "Son las "; horaActual$

En este caso para guardar el valor devuelto por TIME$ hemos tenido que usar una variable de cadena. Ambas funciones no llevan parámetros porque si lo que hacemos es preguntar la hora no tenemos que decir nada más, ya la propia función verá como saca la hora del reloj interno del ordenador.

Si una función lleva varios parámetros se pondrán separados por comas dentro de los paréntesis, por ejemplo:

PRINT STRING$ (20,"Z")

La función STRING$ devolverá una cadena con veinte zetas, es decir "ZZZZZZZZZZZZZZZZZZZZ". Para hacerlo necesita saber dos cosas: cuantas y cual letra tiene que repetir, por eso le damos dos parámetros separados por una coma.

Observa también en el ejemplo que el primer parámetro debe de ser un número (o una expresión numérica) y el segundo tiene que ser una cadena (o una expresión de cadenas). Para saber de que tipo es cada parámetro y el tipo del resultado que devuelve la función es muy importante consultar la ayuda de QBasic todas las veces que haga falta. Si intentamos pasar parámetros de otro tipo se producirá un error de tipos y el programa se parará.

También se producirá un error de "Llamada a función no válida" si la función no es capaz de hacer los cálculos con los parámetros que le hemos pasado, aunque sean del tipo correcto. Por ejemplo, sabemos que no existe raíz cuadrada para los números menores que cero, por lo que se producirá un error de este tipo si hacemos

PRINT SQR (-14)

En caso de que pasemos como parámetro una expresión, por ejemplo

PRINT SQR(miVariable)

hay que tener mucho cuidado de que esta expresión no pueda llegar a valer menos que cero.

Estas son algunas de las funciones más usadas. En temas posteriores irán apareciendo más. Para verlas todas y todos los tipos de datos que necesitan y devuelven mira la ayuda del QBasic.

FUNCIÓNDESCRIPCIÓNEJEMPLO
SQR(num)Raíz cuadradaSQR(16) devuelve 4
INT(decimal)Pasa a entero qitando decimalesINT(1.6) devuelve 1
CINT(decimal)Redondea a entero (Max = 32767)CINT(1,6) devuelve 2
CLNG(decimal)Redondea a entero largoCLNG(100000.2) devuelve 100000
SIN(num)Calcula el senoSIN(40) devuelve 0.64278
COS(num)Calcula el cosenoCOS(40) devuelve 0.76604
TAN(num)Calcula la tangenteTAN(40) devuelve 0.839009
LEN(Cadena)Devuelve la longitud de la cadenaLEN("RONDA") devuelve 5
RTRIM(Cadena)Devuelve una cadena sin espacios al finalRTRIM("Fin.     ") devuelve "Fin."
UCASE$(Cadena)Devuelve la cadena pasada a mayúsculas (No funciona col la ñ ni con los acentos)UCASE$("Toma Castaña") devuelve "TOMA CASTAñA"
MID$(Cadena, inicio, largo)Devuelve una subcadena del tamaño indicado a parir de la posición indicada.MID$("Programación",5,4) devuelve "rama"
STRING$(largo, carácter)Devuelve una cadena formada por un número de caracteres repetidosSTRING$(10,"#") devuelve "##########"
TIME$Devuelve la hora actual como cadenaDevuelve por ejemplo "16:45:08"
DATE$Devuelve la fecha actual como cadena en formato mes-dia-añoDevuelve por ejemplo "01-20-"
INKEY$Devuelve la letra de la última tecla pulsada antes de llegar a ejecutar la función.Devolvería "A" si la última tecla pulsada fue la "A mayúscula"

En una de las ampliaciones de este curso se habla de un conjunto de funciones muy útiles para el manejo de cadenas y en otro se explica en detalle la función INKEY$ que es especialmente útil para detectar teclas pulsadas en menús, juegos, preguntas que se responden con sí o no, etc.













CuRSo De iNTRoDuCCióN a La PRoGRaMaCióN CoN QBaSiC
© 2004 Juan M. González