Una característica común a casi todos nuestros sistemas retro es que
cuando arrancan disponen de una versión del BASIC con la que podemos trabajar.
En estos artículos partiremos de cero, aprendiendo como se programa usando el
más querido, uno de los más usados, y a la vez el más denostado lenguaje de la
historia.
Pequeña historia del BASIC
Los primeros lenguajes ampliamente difundidos fueron el
FORTAN (1957) y el COBOL (1960). El primer lenguaje diseñado académicamente fue
el ALGOL (1959) padre de todos los lenguajes estructurados, mientras que el
primer lenguaje funcional fue LISP (1958). Todos estos adolecían del problema
de que necesitaban bastantes recursos de máquina para el desarrollo,
compilación y ejecución del programa.
En 1964 John Kemeny y Thomas Kurtz en la prestigiosa
universidad de
Dartmouth de Estados Unidos idearon un lenguaje más
sencillo el Beginner's All-purpose Symbolic Instruction Code (Principiantes -
Propósito general – Código de Instrucciones Simbólicas), lo que le permitía
ejecutarse en una terminal de ordenador de forma interactiva con el usuario,
sin necesidad de grandes requerimientos de hardware. Inicialmente el BASIC
también era un lenguaje compilado, pero rápidamente se convirtió en uno
interpretado, aumentando su manejabilidad.El lenguaje se inspiró en la sintaxis del FORTAN, aunque con
alguna característica del ALGOL. No fue un lenguaje popular en sus inicios,
aunque por su sencillez fue portado a muchas máquinas, hasta que en 1975 se
incluyó en el primer ordenador popular de la historia, el Altair 8080. Esta
versión fue llamada Altair Basic, y fue el primer producto de Microsoft, cuyos
inicios fueron desarrollar versiones del Basic que estaban incluidas en las ROM
de máquinas como el Apple II, los primeros IBM PC, o posteriormente el MSX
Basic.
Características básicas
El BASIC de nuestros aparatos es muy similar en cuanto a
sintaxis, pero hay diferencias en cuanto a las funciones que incluye cada uno.
En este artículo usaré características del BASIC original, el más simple, que
son comunes a todas las versiones, aunque los ejemplos los he escrito en
GWBASIC por comodidad, la primera versión de Microsoft para MSDOS.
Variables
Una variable es un contenedor de información, que tiene dos
propiedades, un nombre y un tipo de contenido, y almacena cierta información. Solo
existen dos tipos de variables en BASIC, los números (ya sean enteros o reales)
y las cadenas de caracteres. Hay versiones en que se diferencia entre variables
enteras y reales, ya que las operaciones con enteros son mucho más rápidas que
las operaciones con reales, pero ordenadores como el Spectrum no lo hacen, y
por eso su BASIC es uno de los más lentos. Los nombres de las variables solo podían
tener una letra, o una letra seguida de un número, y las variables de tipo
cadena de caracteres deben añadir a su nombre el símbolo $ para distinguirlas.
Esta característica fue pronto ampliada, y normalmente los nombres de las
variables pueden tener hasta 8 caracteres de largo, pero en versiones
“profesionales” como las de NIXDORF se mantiene una sola letra, y en los Spectrum
las variables de cadena de caracteres solo pueden tener una letra en su nombre.
Sentencias
El BASIC tiene muy pocas sentencias, por lo que es muy
sencillo de aprender a manejar, esta es la lista de las clásicas, luego se han
ido añadiendo, pero no usaremos más que estas.
|
REM |
Comentarios |
|
DEF |
Definir funciones de una sola línea |
|
DIM |
Tamaño de los arreglos |
|
END / STOP |
Final del programa |
|
LET / = |
Asignación de datos a variables |
|
INPUT / PRINT |
Entrada y salida por pantalla y teclado |
|
IF / THEN / ELSE |
Condicionales |
|
FOR / NEXT |
Bucles |
|
GOTO |
Salto incondicional |
|
GOSUB / RETURN |
Salto a una subrutina |
|
DATA |
Manejo de datos estáticos |
En todos los sistemas existe también CLS (CLear Screen) este es un comando que no
estaba entre los originales, permite borrar la pantalla completamente. En
algunos sistemas se usa CLEAR en su lugar.
Operadores
Tampoco cuenta con una lista muy amplia de operadores, que podemos
agrupar entre cinco operadores aritméticos (realizan operaciones aritméticas
entre variables numéricas) que son:
|
+ |
para sumar |
|
- |
para restar o invertir el signo |
|
* |
para multiplicar |
|
/ |
para dividir (puede ser división entera en ciertas versiones) |
|
^ o ** |
para la exponenciación (el símbolo depende de la versión del Basic) |
También existen otros seis operadores lógicos (se usan
en los condicionales) que son
|
= |
para idicar igual |
|
<> |
para indicar no igual (diferente) |
|
< |
para indicar menor |
|
<= |
para indicar menor o igual |
|
> |
para indicar mayor |
|
>= |
para indicar mayor o igual |
Los operadores se evalúan normalmente de izquierda a derecha,
pero se puede alterar ese orden usando paréntesis. Aunque no estaba
inicialmente definido, se utiliza el + para concatenar cadenas de caracteres.
Funciones
Cada versión de BASIC aporta un conjunto propio de
funciones, y es lo que más diferencia unas versiones de otras. Esta es una
lista de las definidas en el BASIC original:
|
SQR |
Raíz cuadrada |
|
ABS |
Valor absoluto de un número (el número sin su signo) |
|
INT |
Parte entera de un número |
|
RND |
Devuelve un número real al azar entre 0 y 1 |
|
SIN / COS / TAN / ATN |
Seno, Coseno, Tangente y Arco tangente (en radianes) |
|
EXP, LOG |
Exponencial (ex) y Logaritmo natural |
A esto añadiremos la función LEN$ que nos da la longitud de una cadena de caracteres.
Comandos
El intérprete reconoce las líneas que comienzan por un
número, asumiendo que son líneas del programa. Si se escribe un número y una
sentencia que no exista, se añade al programa, si ya existe se reemplaza. Si
solo se indica el número se borra la línea. Además, hay una serie de comandos
que nos ayudan a la edición y ejecución del programa. Esta parte también cambia
de uno a otro equipo, pero en general encontramos estos comandos:
|
RUN |
Ejecuta el programa |
|
LIST |
Lista todas las líneas del programa, se puede añadir desde y hasta
línea |
|
LIST n |
Lista las líneas del programa desde la linea n en adelante |
|
LIST n,m |
Lista las líneas del programa desde la linea n hasta la m |
|
EDIT n |
Edita la línea n |
|
NEW |
Borra todo el programa de la memoria |
|
DELETE n |
Borra la línea n del programa |
|
DELETE n,m |
Borra las líneas de la n a la m incluidas |
|
RENUM |
Renumera las líneas del programa |
Primer programa
Nuestro primer programa será el típico
Hello World,
la primera vez que oí hablar de él fue relacionado con la primera vez que
pusieron en marcha el primer prototipo de MAC, tras un día de arreglos por fin consiguieron
ese texto en la pantalla.Como BASIC es un sistema interpretado, cualquier cosa que
escribamos la interpreta como un comando y la ejecuta. Es muy útil si queremos hacer cosas que
no son del BASIC, sino del intérprete de comandos, como limpiar la pantalla, para lo que usaremos
CLS o
CLEAR
según la versión del BASIC. Si escribimos
PRINT “Hola mundo”, en la siguiente
línea aparecerá Hola mundo. Si lo que queremos es escribir un programa, solo debemos
comenzar con un número entero, ese será el número de la línea, y nos servirá
para referirnos a ella durante la edición o ejecución del programa. Si
escribimos
10 PRINT “Hola mundo”, no sale nada en la pantalla, o en
algunos equipos, como el Spectrum, se ve esta línea al principio de la pantalla.
Pero si hacemos un
LIST, veremos la lista de sentencias que tenemos introducidas.
Si introducimos el comando
RUN se ejecuta el programa y aparece
el mensaje.
Mejorando el programa
Una buena práctica es poner comentarios a los programas,
para luego mejorar su lectura, y borrar la pantalla antes de empezar, para que
se vea mejor lo que presentamos. El programa termina cuando no hay más líneas,
pero es conveniente añadir un final. Vamos a ello, añadiremos las siguientes
sentencias, primero haremos un
CLS para borrar la pantalla y un
NEW
para borrar todo. Si hacemos un
LIST veremos que no hay nada.
Introducimos este programa:
10 REM Este es un ejemplo de Hola Mundo en BASIC
20 CLS
30 PRINT “Hola mundo”
40 END
Si hacemos un
LIST vemos las líneas. Si hacemos un
RUN
vemos el resultado.
Mejoremos el programa, en lugar de saludar a todo el mundo,
haremos que nos salude a nosotros. Para ello pediremos que nos introduzcan
nuestro nombre, y saludaremos con él. También informaremos de que se ha acabado
el programa. Para ello añadiremos estas líneas:
25 PRINT “Introduzca du nombre: “
26 INPUT N$
35 PRINT “Hola “;N$
36 PRINT “Hola “,N$
37 PRINT
38 PRINT “FIN DEL PROGRAMA”
39 PRINT
Hemos añadido unas líneas entre las existentes, por eso se
numeran las líneas de 10 en 10, para poder añadir nuevas líneas intermedias. Si
ejecutamos, obtenemos este resultado:

Vemos la diferencia entre las líneas 35 y 36, al separar los
elementos del
PRINT por un punto y coma, se imprimen juntos, si separamos por
una coma, se va a la próxima parada de tabulación. Vemos que cada
PRINT
va en una línea, y que el
INPUT muestra un interrogante.
Añadamos un punto y coma al final de la línea 25, en este caso el
INPUTse ejecuta en la misma línea.Estos ejemplos deben funcionar en cualquier BASIC, seguiré
en próximos artículos con esta introducción a la programación usando nuestro
querido BASIC, siempre usando pequeños programas de ejemplo.
Jose Antonio Vaqué Urbaneja, podéis contactar conmigo en