8 -Funciones preseteadas

En BASIC contamos con funciones predefinidas:

      -Unas son funciones matemáticas, como el valor absoluto o el coseno de un ángulo; 

      -Y otras permiten 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:

ABS - Devuelve el valor absoluto de un número.

ATN - Devuelve el arco tangente.

COS - Devuelve el coseno de un ángulo (en radianes).

SIN - Devuelve el seno de un ángulo (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.

RANDOMIZE - 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 + un_numero". 


El problema es que si escribimos, RANDOMIZE 2, siempre obtendremos la misma secuencia de números "aleatorios".  (es decir, pseudo-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). 


  En QBasic, se consigue escribiendo RANDOMIZE TIMER.


Un ejemplo 


REM Funciones matematicas 

PRINT "Valor absoluto de -5: "; ABS(-5) 

PRINT "Coseno de 0,5 radianes: "; COS(0.5) 

PRINT "Seno de 0,5 radianes: "; SIN(0.5) 

PRINT "Arco cuya tangente vale 1: "; ATN(1) 

PRINT "Logaritmo natural de 10: "; LOG(10) 

PRINT "El número e vale: "; EXP(1) 

PRINT "La raiz de 125 es: "; SQR(125) 

PRINT "La parte entera de 4,7 es: "; INT(4.7) 

RANDOMIZE TIMER 

PRINT "Un número al azar: "; RND



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



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

        PRINT LEN("Ana") escribiría 3.








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".


   (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")



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:



Por tanto, en Basic256, éste 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")