Manual de Basic Spectrum 48k.

Capítulo 2

Conceptos de la programación en BASIC

Resumen

  • Programas
  • Números de línea
  • Edición correctora de programas con el empleo de , y EDIT, RUN, LIST, GO TO, CONTINUE, INPUT, NEW, REM, PRINT
  • STOP en entrada de datos
  • BREAK

Teclee estas dos líneas de un programa de ordenador para obtener el resultado de la suma de dos números:

20 PRINT a
10 LET a=10

de modo que en la pantalla aparezca:

10>LET a=10
20 PRINT a






K

Como ya sabe, debido a que estas líneas comenzaban con números, no se "obedecieron" inmediatamente sino que se almacenaron como líneas de programa. También habrá observado que los números de línea rigen el orden de las instrucciones del programa, lo cual es muy importante a la hora de ejecutarlo, pero que también se refleja en el orden de las líneas en el listado que puede ver ahora en la pantalla.

Hasta ahora sólo ha introducido un número, por lo que teclee:

15 LET b=15

y veamos lo que ocurre. Hubiera sido imposible insertar esta línea entre las dos antes indicadas si estas se hubieran 1 y 2 en lugar de 10 y 20 (los números de línea deben ser números enteros entre 1 y 9999), por ello es por lo que, cuando se introduce por el teclado un programa, es muy conveniente dejar espacios entre los números de línea.

Ahora necesita cambiar la línea 20 a:

20 PRINT a+b

Podría introducir la nueva instrucción por completo, pero resulta más fácil emplear el modo EDIT descrito en el fascículo de introducción. el  >  en la línea 15 se denomina el cursor del programa y la línea a la que apunta es la línea en curso. Esta suele ser la última línea que introdujo, pero puede utilizar las teclas o para desplazar el cursor del programa hacia abajo o hacia arriba (inténtelo, dejando el cursor del programa eventualmente en la línea 20).

Cuando pulse la tecla EDIT, una copia de la línea en curso se visualizará en la parte inferior de la pantalla (en su caso, una copia de la línea 20). Mantenga oprimida la tecla hasta que el cursor  L  se desplace al final de la línea y entonces teclee

+b (sin ENTER)

La línea en la parte inferior de la pantalla debe leerse ahora:

20 PRINT a+b

Pulse ENTER y sustituirá la anterior línea 20, de modo que en la pantalla aparecerá:

10 LET a=10
15 LET b=15
20>PRINT a+b






K

Ejecute este programa con el empleo de RUN y ENTER y se visualizará la suma. Vuelva a ejecutar el programa y luego teclee:

PRINT a,b

Las variables siguen estando allí, aun cuando el programa haya acabado.

Hay un método útil empleando EDIT para prescindir de la parte inferior de la pantalla. Teclee cualquier cosa que carezca de significado (sin ENTER), e imagínese que después desea hacerlo desaparecer por carecer de valor. Una forma de borrarlo es pulsar la tecla DELETE, pero de otro modo de hacerlo es como sigue. Si pulsa EDIT, lo que se quiere borrar en la parte inferior de la pantalla se sustituirá por una copia de la línea en curso. Si pulsa ahora ENTER, dicha línea en curso volverá intacta al programa, dejando limpia la parte inferior de la pantalla.

Si introduce una línea por error, por ejemplo:

12 LET b=8

se incluirá en el programa y se apercibirá de su error. Para borrar esta línea innecesaria, teclee:

12 (con ENTER, por supuesto)

Observará con sorpresa que ha desaparecido el cursor del programa. Debe imaginar que está oculto entre las líneas 10 y 15, por lo que si pulsa se desplazará hasta la línea 10, mientras que si pulsa se desplazará hasta la línea 15.

Teclee:

12 (y ENTER)

De nuevo, el cursor del programa se ocultará entre las líneas 10 y 15. Ahora pulse EDIT y descenderá la línea 15; cuando el cursor del programa esté oculto entre dos líneas, EDIT bajará la siguiente línea después del nuevo número de línea. Teclee ENTER para borrar la parte inferior de la pantalla.

Ahora teclee:

30 (y ENTER)

Esta vez, el cursor del programa está oculto tras el final del programa y si pulsa EDIT, la línea 20 bajará.

Finalmente teclee:

LIST 15

Observará ahora en la pantalla:

15 LET b=5
20 PRINT a+b

La línea 10 ha desaparecido de la pantalla, pero sigue estando en su programa (lo puede comprobar pulsando ENTER). Los únicos efectos de LIST 15 son producir un listado que comienza en la línea 15 y poner el cursor del programa en la línea 15. Si tiene un programa muy largo, entonces, LIST, será probablemente una forma más útil de desplazar el cursor del programa que con las teclas y .

Esto ilustra otro uso de números de línea y es que actuan como nombres para las líneas del programa de modo que pueda hacer referencia a los mismos, de forma bastante parecida a cuando las variables tienen nombre.

LIST, sin ningún número, lista el programa a partir de la primera línea.

Otro comando visto en el fascículo de introducción es:

NEW

Su efecto es borrar tanto los programas como las variables que hubiese almacenados en el ordenador. Ahora, introduzca cuidadosamente este programa que cambia las temperaturas en grados Fahrenheir a grados Centígrados.

10 REM conversion de temperaturas
20 PRINT "grados F","grados C"
30 PRINT
40 INPUT "Introducir grados F ",F
50 PRINT F,(F-32)*5/9
60 GO TO 40

Necesitará teclear las palabras contenidas en la línea 10. Asimismo, aunque GO TO tiene un espacio entre ambos vocablos, todo es realmente una sola palabra clave (en G).

Ahora, haga la ejecución correspondiente. Verá los encabezamientos impresos en la pantalla por la línea 20, ¿pero que sucedió con la línea 10?. Aparentemente, el ordenador la ha ignorado completamente. En efecto, así es. REM en la línea 10 significa que se trata de una observación, o de un recordatorio, y su única misión es recordarle lo que hace el programa. Un comando REM está constituido por REM seguido por algo que desee indicar y el ordenador lo ignorará precisamente hasta el final de la línea.

Hasta ahora, el ordenador ha llegado al comando INPUT en la línea 40 y está a la espera de que introduzca por el teclado un valor para la variable F (puede decirlo porque en donde podría haber esperado un cursor  K  hay, en su lugar, un cursor  L ). Introduzca un número; no se olvide de ENTER. Ahora, el ordenador ha presentado el resultado y está esperando otro número. Ello es así porque la línea 60, GO TO 40 significa exactamente que el ordenador en vez de ejecutar el programa y detenerse, ha de saltar a la línea 40 y comenzar de nuevo. Por consiguiente, introduzca otra temperatura.

Después de introducir unos cuantos valores más podría llegar a preguntarse si la máquina no llegará a "aburrirse" realizando siempre la misma operación. Realmente no será así, pero la siguiente vez que le pida otro número puede teclear STOP. Entonces, el ordenador presentará un informe D STOP In INPUT In line 30:1, que le indica por qué se ha detenido y en dónde lo ha hecho (en el primer comando de la línea 30).

Si quiere continuar el programa, teclee:

CONTINUE

y el ordenador le pedirá otro número.

Cuando se utiliza CONTINUE, el ordenador recuerda el número de línea en el último informe que le transmitió, mientras no fuera 0 OK, y salta a dicha línea; en nuestro caso, ello lleva consigo el salto a la línea 40, al comando INPUT.

Sustituya la línea 60 por GO TO 31, lo que no dará lugar a ninguna diferencia perceptible en la ejecución del programa. Si el número de línea en un comando GO TO se refiera a una línea no existente, entonces, el salto será a la siguiente línea después del número dado. Lo mismo es válido para RUN; de hecho, RUN en si mismo significa realmente RUN 0.

Ahora introduzca por teclado números hasta que la pantalla comience a llenarse. Cuando esté llena, el ordenador desplazará el conjunto de la mitad superior de la pantalla hacia arriba una línea para hacer espacio, perdiendo el encabezamiento al salir por la parte superior. Este desplazamiento se denomina "scrolling".

Cuando se canse de realizar esta operación, detenga el programa con el empleo de STOP y consiga el listado pulsando ENTER.

Examine la sentencia PRINT en la línea 50. La puntuación en esta sentencia (la coma en este caso) es muy importante y debe tener presente que sigue reglas mucho más definidas que la puntuación en el idioma inglés.

Las comas se utilizan para hacer que la impresión comience en el margen izquierdo, o en la parte central de la pantalla, dependiendo de lo que venga a continuación. Así, en la línea 50, la coma hace que la temperatura centígrada se imprima en medio de la línea. Por el contrario, con punto y coma, el siguiente número o cadena se imprime inmediatamente después de lo que le precede. Puede constatarlo en la línea 50, si sustituye la coma por punto y coma.

Otro signo de puntuación que puede utilizar como tal en los comandos PRINT es el apóstrofe ('). Este signo hace que lo que se imprima a continuación aparezca al principio de la siguiente línea en la pantalla, pero ello sucede, de todos modos, al final de cada comando PRINT, por lo que no tendrá mucha necesidad de apóstrofe. Esta es la razón por la que el comando PRINT en la línea 50 comienza siempre su impresión en una línea nueva y también por qué el comando PRINT en la línea 30 produce una línea en blanco.

Si quiere inhibir lo anterior, de modo que después de un comando PRINT el siguiente quede en la misma línea, puede poner una coma, o un punto y coma, al final del primer comando. Para constatarlo, sustituya la línea 50 sucesivamente por cada una de las sentencias:

50 PRINT F,
50 PRINT F;

y

50 PRINT F

y ejecute cada variante. Para completarlo, podría probar también

50 PRINT F'

El comando con la coma extiende todo en dos columnas, con el punto y coma presenta todo junto, sin ninguno de los dos signos anteriores asigna una línea para cada número y lo mismo sucede con el apóstrofe (el apóstrofe da una nueva línea por sí mismo, pero inhibe la automática).

Tenga presente la diferencia entre las comas y el punto y coma en los comandos PRINT; además, no debe confundirlos con los dos puntos (:) que se utilizan para separar comandos en una sola línea.

Ahora, teclee estas líneas suplementarias:

100 REM este programa cortes recuerda su nombre
110 INPUT n$
120 PRINT "Hola";n$;"!"
130 GO TO 110

Este es un programa independiente del anterior, pero puede mantener a ambos en el ordenador al mismo tiempo. Para ejecutar el nuevo programa, teclee:

RUN 100

Puesto que este programa espera que se introduzca una cadena en lugar de un número, imprime dos comillas. Esto le ayuda a saber que debe introducir. Pruébelo escribiendo cualquier cosa.

Otra vez volverá a encontrarse con dos comillas, pero no tiene que utilizarlas si no lo necesita. Pruebe esto, por ejemplo: suprima las comillas (con y DELETE) y teclee:

n$

Puesto que no hay comillas de cadena, el ordenador sabe que ha de realizar algún cálculo; en este caso, el cálculo consiste en determinar el valor de la variable de cadena denominada n$, que es cualquier nombre que casualmente haya introducido por el teclado en la última ocasión. Por supuesto, la sentencia INPUT actúa como LET n$=n$, por lo que se mantiene invariable el valor de n$.

A continuación, con fines comparativos, teclee:

n$

de nuevo, pero esta vez sin suprimir las variables de caden. Ahora, precisamente para confundirle, la variable n$ tiene el valor "n$".

Si desea utilizar STOP para la introducción de datos, debe desplazar primero el cursor haciéndolo retroceder al principio de la línea, con el empleo de la tecla .

Volvamos, ahora, a ese RUN 100 que teníamos anteriormente y que saltaba a la línea 100. ¿Podríamos haber puesto GO TO 100 en su lugar?. En este caso, hemos de dar una respuesta afirmativa en primera instancia, pero hay una diferencia. RUN 100, ante todo, suprime todas las variables y borra la pantalla y después de ello opera lo mismo que GO TO 100. Esta última no borra nada. Pueden darse casos en los que quiera ejecutar un programa sin borrar ninguna variable; entonces, sería necesaria GO TO y sin embargo, RUN podría tener efectos desastrosos. Por ello es preferible dejar la costumbre de teclear automáticamente RUN para ejecutar un programa.

Otra diferencia es que puede teclear RUN sin un número de línea y el ordenador comienza en la primera línea del programa. GO TO debe tener siempre un número de línea.

Ambos programas se interrumpieron porque tecleó STOP en la línea de entrada; a veces, por error, escribe un programa que no puede detener y que no se parará por si mismo. Teclee:

200 GO TO 200
RUN 200

Este programa tiene el "aspecto" de proseguir indefinidamente a no ser que se decida a desenchufar el aparato, pero hay un remedio menos drástico. Pulse CAPS SHIFT junto con la tecla SPACE, que tiene escrito BREAK por encima. El programa se interrumpirá, con el mensaje L BREAK Into program (interrupción del programa por ruptura).

Al final de cada sentencia, el programa constata si están pulsadas estas teclas y si lo están, el ordenador se para. La tecla BREAK puede emplearse también cuando esté utilizando el magnetofón, la impresora o cualquier otro dispositivo que pueda conectaral ordenador (precisamente en caso de que el ordenador esté esperando que ellos hagan algo, pero no lo hacen).

En estos casos, hay un informe diferente D BREAK-CONT repeats. En tales circunstancias, CONTINUE repite (y, de hecho, en la mayoría de los casos también) la sentencia en donde se detuvo el programa; pero después del informe L BREAK Into program, CONTINUE pasa directamente a la siguiente sentencia después de permitir que se hagan algunos saltos.

Vuelva a ejecutar el programa del nombre y cuando el ordenador le pida que haga la introducción, teclee:
n$ (después de quitar las comillas)

n$ es una variable no definida y obtiene un informe de error 2 Variable not Found (variable no encontrada). Si, ahora, teclea:

LET n$="algo determinado"

(que tiene su propio informe 0 OK, 0:1) y

CONTINUE

encontrará que puede utilizar n$ como introducción de datos sin ninguna dificultad.

En este caso, CONTINUE realiza un salto al comando INPUT en la línea 110. No hace caso de la sentencia LET, porque dijo "OK", y salta al comando al que se hizo referencia en el anterior informe, el primero en la línea 110. Se pretende que esto sea de utilidad. Si un programa se interrumpe por algún error, entonces puede hacer todo lo preciso para subsanar la anomalía y CONTINUE podrá operar todavía en lo sucesivo.

Como dijimos anteriormente, el informe L BREAK Into program es especial, porque después del mismo CONTINUE no repite el comando en donde se detuvo el programa.

Los listado automáticos (los que no son el resultado de un comando LIST, sino que se producen después de introducir una nueva línea) quizás le hayan desconcertado. Si introduce por el teclado en un programa con 50 líneas todas las sentencias REM

1 REM
2 REM
3 REM
: :
: :
49 REM
50 REM

entonces será capaz de experimentar.

Lo primero a recordar es que la línea en curso (con  > ) siempre aparecerá en la pantalla y normalmente cerca de la parte central.

Pulse:

LIST (y ENTER, por supuesto)

y cuando el ordenador le pregunte scroll? (porque ha llenado la pantalla), pulse n para indicar "No". El ordenador emitirá el informe D BREAK-CONTINUE repeats como si hubiera tecleado BREAK. En alguna ocasión, podría averiguar lo que sucede si pulsa y en lugar de n; n, SPACE y STOP cuentan como "no", mientras que todo lo demás cuenta como "si".

Ahora, vuelva a pulsar ENTER para obtener un listado automático, deberá ver las líneas 1 a 22 en la pantalla. Ahora, teclee:

23 REM

obtendrá las líneas 2 a 23 en la pantalla; teclee:

28 REM

y obtendrá las líneas 27 a 48. (En ambos casos, al teclear una nueva línea, ha desplazado el cursor del programa y por ello se ha realizado un nuevo listado).

Quizás esto le parezca algo arbitrario. Realmente, trata de proporcionarle exactamente lo que necesita, aunque al ser los "humanos" criaturas imprevisibles, no siempre el ordenador adivina correctamente.

El ordenador mantiene un registro no solamente de la línea en curso (la que ha de aparecer en la pantalla), sino también de la línea superior en la pantalla. Cuando intenta hacer un listado, lo primero que hace es comparar la línea superior con la línea en curso.

Si la línea superior viene detrás, entonces no resulta oportuno comenzar en este punto y por ello el ordenador utiliza la línea en curso para una nueva línea superior y realiza su listado.

De cualquier otro modo, su método es comenzar la ejecución del listado a partir de la línea superior y proseguir hasta que la línea en curso sea objeto de listado, con un desplazamiento hacia arriba ("scrolling"-arrollamiento) en caso de necesidad. Sin embargo, primero efectúa un cálculo aproximado para ver cuando ocupa y si la respuesta es que tiene una magnitud excesiva, entonces el ordenador desplaza la línea superior hacia abajo para estar mucho más próxima a la línea en curso. Ahora, al haber determinado su línea superior, el ordenador comienza el listado a partir de la misma. Si, cuando llega al final del programa o al fondo de la pantalla, se ha listado la línea en curso, entonces, se detiene el ordenador. De no ser así, se produce un desplazamiento hacia arriba hasta que la línea en curso esté en la pantalla y por cada línea adicional que sea objeto de listado, el ordenador desplaza la línea superior hacia abajo en una línea, de modo que la línea superior se desplace a las proximidades de la línea en curso.

Experimente con el desplazamiento de la línea en curso, tecleando

número de línea REM

LIST desplaza la línea en curso pero no la línea superior, por lo que los subsiguientes listados podrían ser distintos. Por ejemplo, teclee

LIST

para conseguir el listado y luego pulse, de nuevo, ENTER para hacer que la línea 0 sea la línea superior. Debe tener las líneas 1 a 22 en la pantalla, teclee

LIST 22

que le proporcionará las líneas 22 a 43; cuando pulse ENTER de nuevo, vuelva a las líneas 1 a 22. Ello tiende a ser más útil para programas cortos que para largos.

Utilizando el programa lleno de sentencias REM anterior, teclee:

LIST

y luego n cuando el ordenador le pregunte scroll?. Ahora, teclee:

CONTINUE

En este caso, CONTINUE tiene un carácter un poco "caprichoso" porque se pone en blanco la parte inferior de la pantalla; pero puede restaurar la normalidad con BREAK. La razón es que LIST era el primer comando en la línea, por lo que CONTINUE repite este comando. Lamentablemente, el primer comando en la línea es ahora CONTINUE, propiamente dicho, por lo que el ordenador se estabiliza realizando la función CONTINUE una y otra vez hasta que lo detenga.

Puede variar esta circunstancia sustituyendo LIST por

:LIST

para lo que CONTINUE da 0 OK (porque CONTINUE salta al segundo comando en la línea, que se toma para su final) o

::LIST

para lo que CONTINUE da N Statement lost - sentencia perdida (porque CONTINUE salta al tercer comando en la línea, ya que no existe).

Ya ha visto las sentencias PRINT, LET, INPUT, RUN, LIST, GO TO, CONTINUE, NEW y REM y todas ellas pueden utilizarse como comandos directos o en líneas de programa (ello es cierto para casi todos los comandos en el ZX Spectrum en su versión particular del BASIC. RUN, LIST, CONTINUE y NEW no suelen ser de mucho uso en un programa, pero se pueden utilizar.

Ejercicios

  1. Ponga una sentencia LIST en un programa de modo que cuando lo ejecute haga automáticamente un listado.
  2. Escriba un programa para introducir precios e imprimir el impuesto adeudado (al 15 por ciento). Ponga las sentencias PRINT de modo que el ordenador indique lo que va a hacer y le pregunte el precio de entrada con extravagante cortesía. Modifique el programa para que también pueda introducir la tasa fiscal (para permitir las tasas de crecimiento cero o los cambios futuros).
  3. Escriba un programa para imprimir el total de los números que introduzca. (Sugerencia: Tome dos variables denominadas total (inicialice esta con valor 0) e item. Introduzca item, súmela a total, imprima ambas y vuelva a hacerlo otra vez).
  4. ¿Que harían CONTINUE y NEW en un programa? ¿Puede imaginar alguna aplicación?.

Manual de Basic Spectrum 48k.