AnteriorPosterior

10. Funciones predefinidas en BASIC

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

10. Funciones predefinidas en BASIC

[Por Nacho Cabanes, Web Oficial www.nachocabanes.com]

En el lenguaje BASIC contamos con una serie de funciones predefinidas que nos pueden resultar muy útiles. Unas son funciones matemáticas, como el valor absoluto o el coseno de un ángulo; otras nos permitirán escoger parte de una cadena de texto (por ejemplo las letras de más a la izquierda), etc. Veremos las más habituales.

Las funciones matemáticas que encontraremos casi en cualquier intérprete de BASIC son:

ABS - Devuelve el valor absoluto de un número.
ATN - Devuelve el arco tangente.
COS - Devuelve el coseno de un ángulo (medido en radianes).
SIN - Devuelve el seno de un ángulo (medido en radianes).
LOG - Devuelve el logaritmo natural o neperiano (base e).
EXP - Devuelve la exponencial (e elevado al número).
RND - Devuelve un número aleatorio entre 0 y 1 (se deberá
usar junto con RANDOMIZE).
SQR - Devuelve la raíz cuadrada de un número.
INT - Devuelve el mayor número entero que es menor o igual
que el número dado.

En cuanto a los números aleatorios (generados al azar), la orden RANDOMIZE es la que hace que se comiencen a generar a partir de una cierta "semilla". Se usa "RANDOMIZE numero". El problema es que si escribimos, por ejemplo, RANDOMIZE 2, siempre obtendremos la misma secuencia de números "aleatorios". Si queremos números realmente "al azar", la mejor solución suele ser basarse en el reloj interno del sistema (si el ordenador lo tiene), dado que será casi imposible que el ordenador se ponga siempre en marcha a la misma hora (con una precisión de centésimas de segundo). Eso, en QBasic, se consigue escribiendo RANDOMIZE TIMER.

Un ejemplo que pruebe estas funciones sería:

10 REM Funciones matematicas 
20 PRINT "Valor absoluto de -5: "; ABS(-5) 
30 PRINT "Coseno de 0,5 radianes: "; COS(0.5) 
40 PRINT "Seno de 0,5 radianes: "; SIN(0.5) 
50 PRINT "Arco cuya tangente vale 1: "; ATN(1) 
60 PRINT "Logaritmo natural de 10: "; LOG(10) 
70 PRINT "El número e vale: "; EXP(1) 
80 PRINT "La raiz de 125 es: "; SQR(125) 
90 PRINT "La parte entera de 4,7 es: "; INT(4.7) 
100 RANDOMIZE TIMER 
110 PRINT "Un número al azar: "; RND

(Fuente "1001.bas". Probado en GwBasic 2.02, QBasic 1.1; la gran mayoría de versiones de BASIC aceptarán las líneas hasta la 90 inclusive, pero pueden variar en la forma de generar números al azar: Msx Basic 2.1 y Commodore 64 Basic V2 reconocen las líneas 10 a 90)

Y su resultado (con QBasic) es:

Valor absoluto de -5: 5
Coseno de 0,5 radianes: .8775826
Seno de 0,5 radianes: .4794255
Arco cuya tangente vale 1: .7853982
Logaritmo natural de 10: 2.302585
El número e vale: 2.718282
La raiz de 125 es: 11.18034
La parte entera de 4,7 es: 4
Un número al azar: .5464441

Su equivalente en Basic256 sería muy parecido, con las diferencias de que no se puede escribir varias expresiones en un mismo PRINT, que no existe ATN y que para obtener un número al azar ser usa RAND en vez de RND, y no es necesario hacer un RANDOMIZE TIMER para inicializar la semilla:

REM Funciones matematicas 
PRINT "Valor absoluto de -5: ";
PRINT ABS(-5) 
PRINT "Coseno de 0,5 radianes: ";
PRINT COS(0.5) 
PRINT "Seno de 0,5 radianes: ";
PRINT SIN(0.5) 
PRINT "Logaritmo natural de 10: ";
PRINT LOG(10) 
PRINT "El número e vale: ";
PRINT EXP(1) 
PRINT "La raiz de 125 es: ";
PRINT SQR(125) 
PRINT "La parte entera de 4,7 es: ";
PRINT INT(4.7) 
PRINT "Un número al azar: ";
PRINT RAND

(Fuente "1002.bas". Probado en Basic256)


Ejercicios propuestos:

Ejercicio propuesto 10.1: Crea un programa que calcule la raíz cuadrada del número que introduzca el usuario.
Ejercicio propuesto 10.2: Crea un programa que te muestre el coseno de PI radianes (recuerda que el valor de PI es 3.141593).
Ejercicio propuesto 10.3: Haz un programa que calcule el seno de 45 grados (recuerda la equivalencia: 180 grados = PI radianes)
Ejercicio propuesto 10.4: Escribe un programa que calcule las soluciones de una ecuación de segundo grado de la forma Ax2+Bx+C=0
Ejercicio propuesto 10.5: Crea un programa que genere un número al azar entre 50 y 100 (ambos incluidos)
Ejercicio propuesto 10.6: Crea un programa que dé al usuario 3 oportunidades que para adivinar un número (generado al azar) del 1 al 10


Por otra parte, las órdenes para manipular cadenas de texto que permitirán casi todas las versiones de BASIC son:

  • LEN - Longitud de la cadena de texto: PRINT LEN("Nacho") escribiría 5.
  • VAL - Valor numérico de la cadena, para poder hacer operaciones con ella.
  • RIGHT$ - Toma varias letras de la derecha de la cadena: PRINT RIGHT$("Nacho", 3) escribiría "cho".
  • LEFT$ - Toma varias letras de la izquierda de la cadena: PRINT LEFT$("Nacho", 2) escribiría "Na".
  • MID$ - Toma varias letras intermedias de la cadena: PRINT MID$("Nacho", 2,3) escribiría "ach"
  • CHR$ - Letra o símbolo con un cierto código ASCII: PRINT CHR$(65) escribiría "A"
  • ASC - Dice el código ASCII de una letra o símbolo: PRINT ASC("A") escribiría 65.
  • INSTR - Indica en qué posición de una cadena se encuentra cierto texto: PRINT INSTR("Nacho", "ach") diría "2". Si no existe, el resultado será 0. Se puede indicar un dato adicional, que es a partir de qué posición queremos buscar (este dado, si se incluye, debe ser el primero): PRINT INSTR(4, "Nacho", "ach") diría "0".

(Nota: el código ASCII es un estándar que permite guardar la información dentro del ordenador, representando internamente cada letra con un cierto número).

Un ejemplo sería:

10 REM Funciones de cadena 
20 texto1$ = "Texto de prueba" 
30 texto2$ = "23" 
40 PRINT "La longitud del texto 1 es: "; LEN(texto1$) 
50 PRINT "Las primeras 5 letras son: "; LEFT$(texto1$, 5) 
60 PRINT "Las 6 ultimas son: "; RIGHT$(texto1$, 6) 
70 PRINT "De la 3 a la 7 son: "; MID$(texto1$, 3, 5) 
80 PRINT "El doble del valor numérico del texto 2 es: "; VAL(texto2$)*2 
90 PRINT "El codigo ASCII de la A es: "; ASC("A") 
100 PRINT "La letra 99 es: "; CHR$(99)
110 PRINT "La posición de A dentro de HOLA es: "; INSTR("HOLA","A")

(Fuente "1003.bas". Probado en GwBasic 2.02, QBasic 1.1; en Commodore 64 Basic V2 son válidas las líneas 10 a 100 si se renombran texto1$ y texto2$ a t1$ y t2$, en Msx Basic 2.1 son válidas todas ellas si se renombran así)

Cuyo resultado será:

La longitud del texto 1 es: 15
Las primeras 5 letras son: Texto
Las 6 ultimas son: prueba
De la 3 a la 7 son: xto d
El doble del valor numérico del texto 2 es: 46
El codigo ASCII de la A es: 65
La letra 99 es: c

En Basic256 hay algunas diferencias:

  • Las dos peculiaridades que ya conocíamos: no se puede usar números de línea y no se puede encadenar varias expresiones separadas por "punto y coma" en una misma orden PRINT
  • LEN se llama LENGTH
  • LEFT$, RIGHT$, MID$ y CHR$ no usan símbolo de "dólar", y se convierten en LEFT, RIGHT, MID y CHR
  • No existe VAL, pero en su lugar se puede usar INT

Por tanto, el equivalente de este programa sería:

REM Funciones de cadena 
texto1$ = "Texto de prueba" 
texto2$ = "23" 
PRINT "La longitud del texto 1 es: ";
PRINT LENGTH(texto1$) 
PRINT "Las primeras 5 letras son: "; 
PRINT LEFT(texto1$, 5) 
PRINT "Las 6 ultimas son: "; 
PRINT RIGHT(texto1$, 6) 
PRINT "De la 3 a la 7 son: "; 
PRINT MID(texto1$, 3, 5) 
PRINT "El doble del valor numérico del texto 2 es: "; 
PRINT INT(texto2$)*2 
PRINT "El codigo ASCII de la A es: "; 
PRINT ASC("A") 
PRINT "La letra 99 es: "; 
PRINT CHR(99)
PRINT "La posición de A dentro de HOLA es: "; 
PRINT INSTR("HOLA","A")

(Fuente "1004.bas". Probado en Basic256)

Ejercicio propuesto 10.7: Crea un programa que pida una frase al usuario y la escriba sin la primera letra ni la última, usando MID$
Ejercicio propuesto 10.8: Crea un programa que pida al usuario su nombre y lo escriba con espacios entre las letras (por ejemplo, a partir de "NACHO" escribiría "N A C H O")
Ejercicio propuesto 10.9: Haz un programa que pida al usuario su nombre y lo escriba al revés (por ejemplo, a partir de "NACHO" escribiría "OHCAN")
Ejercicio propuesto 10.10: Crea un programa que pida una frase al usuario y la escriba sin espacios (por ejemplo. "COMO ESTAS?" se convertiría en "COMOESTAS?")
Ejercicio propuesto 10.11: Crea un programa escriba un triángulo a partir del nombre del usuario. Por ejemplo, a partir de "NACHO" escribiría:
N
NA
NAC
NACH
NACHO
Ejercicio propuesto 10.12: Crea un programa escriba las letras que equivalen a los códigos ASCII desde el 32 hasta el 127. Para cada una de estas letras se escribirá el número, un símbolo de igual, el carácter equivalente y finalmente un espacio en blanco, que actuará de separador.

Actualizado el: 07-01-2015 16:20

AnteriorPosterior