miércoles, 21 de marzo de 2012

Introducción a la programación usando BASIC (II): Variables, INPUT y PRINT

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

Entrada/Salida. Variables. Primer programa: Calculadora


NOTA DE SINTAXIS: Lo que sea propio de la programación estará en negrita, y las palabras propias del BASIC estarán siempre en mayúsculas y negrita. Todo lo que esté en azul dentro del texto hay que escribirlo literalmente (en el Spectrum gomas ya sabéis que no se escribe así, en otro artículo hablaré del por qué). Los listados de los programas estarán en recuadros. La respuesta del ordenador dentro del texto estará en verde, a no ser que sean imágenes de la pantalla que aparecerán en cuadros. Las pulsaciones de teclas aparecerán en rojo.

En el primer artículo puse una referencia del lenguaje, y un pequeño ejemplo para abrir boca, en los cursos ahora se empieza con teoría, seudocódigo, y cosas más académicas como el lenguaje de definición de la sintaxis, pero como la única forma de aprender a programar es programando, vamos a aprender a programar programando, y para nuestro primer programa elegiré hacer una calculadora, lo que nos ayudará con los conceptos básicos sobre variables y el control del programa, e iré poco a poco ampliando la funcionalidad.

El BASIC es interpretado, eso significa que cuando escribimos algo, el sistema responde a todo lo que se escribe. Si es una sentencia la ejecuta inmediatamente, si comienza por un número añade esa línea al programa, si es un comando lo ejecuta. Usaremos esto para nuestras primeras operaciones, por ejemplo si escribimos PRINT 25*3 y pulsamos el INTRO o ENTER, se ejecuta, y vemos en la pantalla el resultado 75 mientras que si escribimos PRINT 25/3 aparece 8,3333333 (el número de ceros puede variar dependiendo de la máquina).

Así podemos jugar un poco con nuestra primera instrucción PRINT, que lo único que hace es mostrar en la pantalla los resultados de lo que le digamos. Vemos que el sistema puede trabajar con los 4 operadores matemáticos básicos (+ suma, - resta, * multiplica, / divide), luego añadiremos alguno.
Si vamos a empezar un programa, primero pensemos lo que queremos, vamos a hacer que el sistema nos solicite dos números, una operación, y nos muestre el resultado en la pantalla. Los números que introducimos los debemos guardar en un sitio, pues si no los tenemos almacenados no podemos usarlos. Los almacenes de valores se denominan variables. Una variable tiene un nombre propio, y este nombre estará compuesto por hasta 8 caracteres, números o letras, pero siempre debe empezar por una letra. A ese nombre se le puede añadir el carácter $ para indicar que su contenido será alfabético, si no será un valor numérico. RESTRICCION: En el BASIC del Spectrum las variables de tipo cadenas solo pueden tener en su nombre una letra, o una letra seguida de un número, mientras que si alguno es el afortunado poseedor de una máquina mucho más antigua, todas las variables serán solo de una letra, o una letra seguida de un número.

Para introducir valores en el sistema por el teclado usaremos la instrucción INPUT, que es un poco lo contrario del PRINT, cuya sintaxis es INPUT nombre_variable. El sistema se para, pone un indicador en la pantalla (generalmente un interrogante aunque en el Spectrum no saca nada), y se queda esperando que introduzcamos un valor. Así si escribimos INPUT prueba y pulsamos ENTER, aparece un interrogante, si escribimos 3.5 le estamos introduciendo el valor tres coma cinco (recordar que el sistema inglés usa el punto como nosotros la coma decimal, y usa la coma como separador de millares como usamos nosotros el punto). No veremos nada en pantalla, o recibimos un mensaje de OK, pero ya ha guardado ese valor en una variable, que se llama nro. Si ahora escribimos PRINT prueba aparece en pantalla el valor de la variable, por tanto aparece en pantalla 3.5  

Punto importante, los valores de las variables no se pierden hasta que les demos otro valor, o reseteemos el aparato, lo apaguemos, o si escribimos el comando NEW y damos ENTER (hacerlo), que limpia la memoria y elimina el programa que tengamos en ese momento. Si tras esta limpieza escribimos PRINT prueba aparece un mensaje de error, indicando que no hay ninguna variable que se denomine prueba en el sistema, o cero en algunos sistemas como el Amstrad.

Ahora ya podemos poner la sintaxis completa de la instrucción de impresión que es PRINT valores en donde valores puede ser:
  • Una variable (se presenta tu contenido)
  • Una contante, que a su vez puede ser o bien un número que escribimos tal cual, o una cadena de caracteres alfabética, cuyas letras deben ponerse entre las comillas dobles, para que el sistema sepa lo que es, por ejemplo “hola”
  • El resultado de una expresión, como hemos usado antes al poner 25/3, se presenta su evaluación.
  • O una combinación de varios valores, que debemos separar o bien por un punto y coma, o bien por una coma simple. Si usamos el punto y coma se imprimen uno tras otro, si usamos la coma, el resultado se presenta en la próxima parada de tabulación (una tabulación cada 8 caracteres de la pantalla generalmente, pero depende del sistema en que programemos).
Veremos esto, si escribimos PRINT 1,2;3 aparece en la pantalla 1                 23 vemos que presenta el valor 1, una serie de espacios, el valor 2, y unido el valor 3. Si escribimos PRINT “hola”,”hola”;”hola” aparece en la pantalla hola                holahola

Vamos con el primer programa, pediremos dos números, y presentamos el resultado de su suma, resta, producto y división. Si lo tecleamos, veremos que con esto tan sencillo hemos empezado a recibir datos, y cada vez que pulsamos RUN nos pide los dos números y presenta el resultado. Solo que es un poco lio lo que se presenta en la pantalla, por tanto lo mejoraremos un poco.

10 INPUT valor1
20 INPUT valor2
30 PRINT valor1+valor2
40 PRINT valor1-valor2
50 PRINT valor1*valor2
60 PRINT valor1/valor2



Lo primero es comentar que vamos a hacer, para lo que usaremos la sentencia REM, que lo que hace es introducir un comentario en el listado del programa. Luego lo que haremos es presentar cosas en pantalla, solicitar dos números, dando mensajes que le permitan saber al usuario qué hacer, y luego pondremos el resultado de las cuatro operaciones con ambos números. No es mucho mejor, pero creo que si es mucho más claro para el usuario, y los programas los ejecutan usuarios, no siempre los propios programadores.

Este es nuestro nuevo programa, primero hay que teclear NEW, y a continuacion introducimos este programa:

100 REM --------------------------------
110 REM - Calculadora. J.A. Vaque 2011 -
120 REM --------------------------------
130 PRINT "Calculadora simple. Versión 1.0"
140 PRINT "*******************************"
150 PRINT
160 PRINT "Introduzca el primer valor: ";
170 INPUT valor1
180 PRINT
190 PRINT "Introduzca el segundo valor: ";
200 INPUT valor2
210 PRINT
220 PRINT
230 PRINT "Suma....: "; valor1+valor2
240 PRINT "Resta...: "; valor1-valor2
250 PRINT "Producto: "; valor1*valor2
260 PRINT "cociente: "; valor1/valor2

Las líneas 100 a 120 son comentarios, las 130 a 150 ponen lo que hace el programa. De la 160 a la 200 introducimos valores, ojo que la 160 y la 190 deben acabar en punto y coma, para que el input salga en la misma línea (salvo en el Spectrum que los input van en la última línea siempre). La 210 separa el input de los resultados, y la 220 separa un poco más, dejando una línea en blanco. Y por último las 230 a 260 presentan el resultado. Cada vez que la ejecutamos vemos cómo se va ejecutando, pero no queda una pantalla muy elegante, añadiremos la línea 125 CLS y vemos que se limpia la pantalla antes de cada ejecución, por lo que queda un poco mejor. 


Animaros a ir probando cosas, meter más INPUTS y PRINT, poner y quitar comas y puntos y coma, jugar un poco con los valores. Por ejemplo, os propongo algo sencillo, podéis poner también los resultados inversos, en lugar de primero mas segundo, segundo más primero, y ver que operaciones son conmutativas y cuáles no.
Saliendo del BASIC estándar, hay una forma de alterar la posición donde imprime o lee en la pantalla, con la sintaxis PRINT TAB (columna, línea); valores esto posiciona el cursor en el punto indicado mediante columna y línea, y luego imprime en la pantalla a partir de ese punto. Hay una variante que es usar la sentencia AT columna, línea lo que posiciona el cursor, y luego podemos ya usar el PRINT normalmente.
En la entrada muchas versiones del BASIC permiten añadir en el INPUT una cadena de caracteres, que se imprime como si hubiésemos usado un PRINT previo, y nos permiten ahorrar instrucciones, por ejemplo podemos poner INPUT “Introduce un número”; n

En el próximo capítulo veremos las sentencias de control, y seguiremos ampliando esta sencilla calculadora en el próximo número, pero es importante ir poco a poco y asentar conceptos. Si tenéis cualquier duda, en los foros de RetroWiki o en mi mail os las solucionaré.

Jose Antonio Vaqué Urbaneja, podéis contactar conmigo en
javu61@gmail.com o ver más cosas en old8bits.blogspot.com

No hay comentarios:

Publicar un comentario