TEMA 1.4
ENTRADA Y SALIDA BÁSICA





1.4.1 - INTRODUCCIÓN A E/S

En el tema anterior hemos visto una forma de que nuestro programa se comunique con la memoria del ordenador: usando las variables.

Aquí vamos a ver la forma de que nuestro programa se comunique con el usuario. La forma más sencilla de hacerlo es a través de la "Consola en Modo Texto", es decir leyendo lo que el usuario escriba con el teclado y dando los resultados a través de la pantalla en forma de texto (Como en MS-DOS).

En otros temas más adelante veremos cómo dibujar en la pantalla, cómo usar la impresora y cómo leer y escribir información en el sistema de archivos.

Antes de seguir hay que aclarar que "Leer" significa que el programa lea los datos de entrada que el usuario ha escrito, y "Escribir" significa poner en la pantalla los resultados de el programa para que el usuario los vea. No al revés, las instrucciones son para el ordenador.





1.4.2 - ENTRADA DE DATOS. LEER DESDE EL TECLADO

La orden que usaremos en QBasic para leer lo que el usuario escribe en el teclado es INPUT. Ya la hemos usado, pero vamos a verla con más tranquilidad.

Su sintaxis más común sería:

INPUT "Pregunta al usuario", variable

Al ejecutar esta instrucción se escribe en la pantalla el texto que hay entre comillas y a la derecha aparece el cursor intermitente para que el usuario escriba. El programa estará parado hasta que el usuario escriba lo que quiera y pulse la tecla "Enter". Entonces se almacena en la variable lo que ha escrito el usuario (El valor anterior que pudiera tener la variable se pierde) y el programa sigue con la siguiente instrucción que haya.

El usuario podrá desplazarse con las flechas del teclado por el texto que está escribiendo para corregir algún error antes de pulsar "Enter"

Para que lo que escriba el usuario no salga justo pegado al texto de la pregunta lo que se suele hacer es escribir un espacio en blanco al final dentro de las comillas.

Si escribimos...

INPUT "¿Cómo te llamas?",variable$

El resultado después de que el usuario termine de escribir sería

¿Cómo te llamas?Juanma

Pero si lo ponemos con el espacio al final...

INPUT "¿Cómo te llamas? ",variable$

El resultado es parecido pero se ve mejor

¿Cómo te llamas? Juanma

La variable tiene que ser del tipo correcto, si le pedimos al usuario que escriba una palabra, la variable debe de ser de tipo cadena y si no tendrá que ser de tipo numérico con o sin decimales.

Si solo ponemos la variable, sin pregunta al usuario, aparecerá un interrogante. Es decir, si ponemos...

INPUT nombre_variable
Aparecerá en la pantalla
?_
Para que no aparezca indicación alguna, solo el cursor, hay que poner las comillas vacías, por ejemplo...
INPUT "", nombre_variable
Esto puede ser útil cuando la pregunta que hacemos al usuario incluye algún cálculo o expresión de cadena. Como IMPUT no permite evaluar expresiones en la pregunta al usuario, esta pregunta habrá que mostrarla antes en una instrucción PRINT normal de las que veremos más adelante con su punto y coma al final, y a continuación poner el imput de esta forma para leer la información del usuario.



1.4.3 - CONTROL DE SABOTAJES

Con estas instrucciones puede pasar que el usuario escriba cosas no válidas, ya sea por descuido o para intentar provocar un fallo en el programa. Más adelante veremos como asegurarnos, por ejemplo de que si le pedimos el día del mes no pueda escribir 450, en este apartado solo vamos a ver lo que hace QBasic en situaciones que en otros lenguajes podrían dar un error.

¿Qué ocurre si el usuario pulsa la tecla Enter sin haber escrito nada?

Si la variable es de texto se almacenará en ella una cadena de longitud cero, es decir "".

Si la variable era de cualquier tipo numérico se almacenará en ella el número cero.

¿Qué ocurre si el usuario escribe letras cuando le pedimos un número?
INPUT "Escribe un número: ",variable
PRINT variable

En otros lenguajes se produciría un error. QBasic saca un rótulo que pone "Empezar nuevamente" y nos vuelve a repetir la pregunta, hasta que no escribamos un número no seguimos.

Escribe un número: No quiero

Empezar nuevamente
Escribe un número: Que no!

Empezar nuevamente
Escribe un número: 2
2

Si el usuario escribe un número cuando le pedimos letras se guarda el número como texto en la variable de tipo cadena, no podrá ser usado directamente para hacer operaciones matemáticas.

¿Que ocurre si el usuario escribe un número muy grande?
INPUT "Escribe un número: ",variable%
PRINT variable%

Si el valor escrito no cabe en la variable aparece un rótulo de "Desbordamiento" y se repite la pregunta hasta que el número quepa. Recordemos como ejemplo que en las variables de tipo entero el valor máximo es 32767:

Escribe un número: 99999999999999999999999999999

Desbordamiento
Empezar nuevamente
Escribe un número: 32769

Desbordamiento
Empezar nuevamente
Escribe un número: 32000
32000
¿Y si el usuario escribe algo que llega al extremo derecho de la pantalla?

Se sigue escribiendo en la siguiente línea por la izquierda. QBasic no le dejará de escribir más de 256 caracteres.

¿Que ocurre si el usuario escribe decimales cuando se le pide un número entero?
INPUT "Escribe un número entero: ",variable%
PRINT variable%

QBasic redondeará el valor al guardarlo en la variable entera, si la parte decimal es menor que 0,5 se quitan los decimales, si es igual o mayor que 0,5 se aumenta una unidad, igual que hacíamos para convertir de Pesetas a Euros.

Escribe un número entero: 4.4
4

Escribe un número entero: 4.499
4

Escribe un número entero: 4.5
5

Escribe un número entero: 4.59
5

Recordemos que en MS-DOS Normalmente se utiliza el punto como separador decimal. Si escribimos una coma QBasic se creerá que estamos escribiendo letras y nos repetirá la pregunta.

Escribe un número: 6,2

Empezar nuevamente
Escribe un número: 6.2
6




1.4.4 - SALIDA. ESCRIBIR EN PANTALLA

Como ya hemos dicho, la forma más básica de dar al usuario los resultados de nuestro programa es a través de la pantalla.

En temas posteriores se explica como conseguir crear las pantallas de los programas para que cada cosa aparezca en un sitio determinado y con distintos colores, recuadros, etc, pero por ahora para aprender a programar nos limitaremos a escribir cosas una debajo de otra como en MS-DOS.

Usaremos la pantalla de texto de forma que cuando lleguemos a escribir en la línea más baja de la pantalla todo subirá hacia arriba y desaparecerá lo que hubiera en la primera línea.

Para aclarar la pantalla y no liarnos con lo anterior hemos puesto en todos los ejemplos CLS como primera instrucción para que se borre de la pantalla lo que hubiera de ejecuciones anteriores del programa actual o de otro, y se empiece a escribir en la parte superior.

Ahora vamos a ver con más detalle la instrucción PRINT que es la que usamos parara escribir en la pantalla.

Una aclaración. Si a alguien le parece que PRINT significa imprimir tiene razón, en informática a escribir en la pantalla del ordenador también se le puede llamar imprimir en pantalla. Además esta orden PRINT también se utiliza para imprimir como se verá más adelante.

La sintaxis de la instrucción es:

PRINT texto

Donde texto puede ser una cadena de caracteres entre comillas, que se escribirá tal cual.

PRINT "Esto es un texto"

O el nombre de una variable.

mensaje$ = "Prueba superada"
PRINT mensaje$

En este caso se escribirá el valor de que tenga la variable, en nuestro ejemplo se escribiría Prueba Superada.

La variable también puede ser de tipo numérico...

PRINT total%

También podemos escribir el resultado de operaciones matemáticas...

PRINT 2+2

En este caso se escribirá 4. Las operaciones matemáticas (Expresiones) las veremos con detalle en el tema siguiente.

Después de escribir algo el cursor (invisible) pasa a la línea de abajo, por ejemplo

PRINT "Uno"
PRINT "Dos"
PRINT "Tres"

Escribiría...

Uno
Dos
Tres

Pero en algún caso nos puede interesar que no sea así y que se escriba lo siguiente a continuación en la misma línea. Para hacerlo no tenemos más que escribir un punto y coma al final de la instrucción sobre la que queremos seguir, por ejemplo:

PRINT "Uno";
PRINT "Dos";
PRINT "Tres"
PRINT "Cuatro"

Escribiría...

UnoDosTres
Cuatro

Normalmente en una instrucción PRINT se suelen escribir varias cosas, como vimos en el programa saludador que primero escribía la palabra Hola y después nuestro nombre que estaba almacenado en la variable nombre$. Para hacer esto no hay más que separar con punto y coma (;) las distintas "cosas" que queremos escribir, por ejemplo:

nombrePrograma = "Super Juego"
nombreUsuario = "JM"
PRINT "Hola "; nombreUsuario; ", bienvenido a "; nombrePrograma

Escribiría...

Hola JM, bienvenido a Super Juego

Observa que los espacios entre palabras hay que ponerlos en algún sitio dentro de las comillas, de lo contrario saldría todo junto, incluso alguna vez es necesario hacer...

PRINT unaVariable$ ; " "; otraVariable$

...para que no salga todo junto.

Ahora vamos a probar con esto:

PRINT 2; 3; 4

Visto la anterior, el resultado tendría que ser...

234

pero no, es

 2  3  4

QBasic escribe siempre los números con un espacio delante y otro detrás. Lo que ha escrito exactamente es: Espacio 2 Espacio Espacio 3 Espacio Espacio 4 Espacio, el último espacio no lo vemos pero también lo ha escrito.

Una consecuencia de esto será que los números por ahora nunca van a salir justo en la parte izquierda de la pantalla, sino una posición más adelante, por ejemplo...

PRINT "Prueba"
PRINT 25
PRINT 74
PRINT "Fin prueba"

Escribiría...

Prueba
 25
 74
Fin Prueba

Pero de esto no nos tenemos que preocupar. Si intentamos arreglarlo vamos a complicar nuestros programas innecesariamente. Ya habrá tiempo de dibujar pantallas en los temas de ampliación.

Una cosa que sí podemos hacer ya es usar lo que se llama "Posiciones de tabulación". Esto es que QBasic divide cada línea de la pantalla en posiciones que comienzan cada 14 caracteres, la primera en la posición 1, la segunda en la 14, la tercera en la 28, etc. Y si nosotros separamos las expresiones de la orden PRINT con comas en vez de puntos y comas los textos se escribirán en estas posiciones en vez de justo pegado a la anterior. Vamos con un ejemplo:

PRINT "Uno", "Dos", "Tres"
PRINT "Cuatro", "Cinco", "Seis"
PRINT "Siete", "Ocho", "Nueve"

Que escribiría en pantalla...

Uno        Dos        Tres
Cuatro     Cinco      Seis
siete      Ocho       Nueve

Esto será muy útil en los listados que veremos más adelante. Por supuesto en una misma instrucción podemos separar unas cosas con comas y otras con puntos y comas, según haga falta.













CuRSo De iNTRoDuCCióN a La PRoGRaMaCióN CoN QBaSiC
© 2004 Juan M. González