martes, 20 de marzo de 2012

Introducción a la programación usando BASIC (I): Hola mundo

Artículo publicado en el número 1 de RetroWiki Magazine

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

2 comentarios:

  1. Dios que tiempos. Yo empece a programar en un Amstrad CPC 6128 que tenia Basic 1.1 de Locomotive y en él hice uno de los programas con el que siento más satisfacción ya que fué para ayudar a mi padre con sus investigaciones.

    Se trataba de una calculadora pero no una calculadora normal y corriente sino capaz de hacer operaciones con números de 300 digitos. Eran operaciones básicas (suma, resta, multiplicación, división e incluso raiz cuadrada y cúbica)

    Tiempo después reescribí este programa en GW Basic ya que nos compramos un PC con MS/DOS y mi padre se negaba a pasar a Windows.

    Gracias a todo esto, ahora soy lo que soy. Programador.

    ResponderEliminar
    Respuestas
    1. Yo empecé cuando todavía no había salido en Spectrum con una calculadora programable, y en alguna de las pocas casa de conocidos que tuvieran uno. Hoy día programo poco, pero siempre haré cosas.

      Eliminar