cursos:basic:sintaxis_basic_mzx

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cursos:basic:sintaxis_basic_mzx [20-03-2009 20:07] sromerocursos:basic:sintaxis_basic_mzx [20-03-2009 20:53] (actual) sromero
Línea 1: Línea 1:
 ====== Sintaxis de BASIC: Variables, Control de Flujo y Rutinas ====== ====== Sintaxis de BASIC: Variables, Control de Flujo y Rutinas ======
- 
-http://www.speccy.org/magazinezx/index.php?revista=2&seccion=8 
  
 //Segunda entrega de nuestro curso de juegos en BASIC, en la cual vamos a profundizar en qué son y cómo se usan las variables, las instrucciones que nos permiten tomar decisiones en nuestro programa, creación de subrutinas y el control del flujo de nuestro programa. Todo esto lo ilustraremos con algún pequeño ejemplo en forma de un sencillo juego con el que llevaremos a la práctica todos estos conceptos teóricos.// //Segunda entrega de nuestro curso de juegos en BASIC, en la cual vamos a profundizar en qué son y cómo se usan las variables, las instrucciones que nos permiten tomar decisiones en nuestro programa, creación de subrutinas y el control del flujo de nuestro programa. Todo esto lo ilustraremos con algún pequeño ejemplo en forma de un sencillo juego con el que llevaremos a la práctica todos estos conceptos teóricos.//
Línea 8: Línea 6:
  
 \\  \\ 
 +
 ===== Variables en el BASIC del Spectrum ===== ===== Variables en el BASIC del Spectrum =====
  
 Las variables son posiciones de memoria que se reservan para almacenar un determinado valor al que necesitamos acceder con facilidad desde nuestro programa y modificarlo a nuestro gusto. A estas posiciones de memoria se accede con el nombre que les damos al declarar las variables. Realmente poco nos importa en que posición de memoria las almacena nuestro ordenador, ya que siempre nos referiremos a ellas por su nombre. Las variables son posiciones de memoria que se reservan para almacenar un determinado valor al que necesitamos acceder con facilidad desde nuestro programa y modificarlo a nuestro gusto. A estas posiciones de memoria se accede con el nombre que les damos al declarar las variables. Realmente poco nos importa en que posición de memoria las almacena nuestro ordenador, ya que siempre nos referiremos a ellas por su nombre.
  
-==== DECLARACIÓN DE LAS VARIABLES ====+==== Declaración de las variables ====
  
  
Línea 18: Línea 17:
  
 <code basic> <code basic>
-      - PROGRAMA 1 - +REM - PROGRAMA 1 - 
-      10 IF A=10 THEN LET A=A+1+10 IF A=10 THEN LET A=A+1
 </code> </code>
  
Línea 29: Línea 28:
  
 <code basic> <code basic>
-      - PROGRAMA 2 - +REM - PROGRAMA 2 - 
-       5 LET A=10 + 5 LET A=10 
-      10 IF A=10 THEN LET A=A+1+10 IF A=10 THEN LET A=A+1
 </code> </code>
  
Línea 38: Línea 37:
  Si cambiásemos el número de la línea 5 por 15, nos volvería a generar un error de variable no definida, ya que declaramos la variable, pero después de hacer uso de ella.  Si cambiásemos el número de la línea 5 por 15, nos volvería a generar un error de variable no definida, ya que declaramos la variable, pero después de hacer uso de ella.
  
-==== TIPOS DE VARIABLES ====+==== Tipos de variables ====
  
  
  Las variables en el BASIC del Spectrum pueden ser de dos tipos: numéricas y alfanuméricas.  Las variables en el BASIC del Spectrum pueden ser de dos tipos: numéricas y alfanuméricas.
  
-=== VARIABLES NUMÉRICAS ===+== Variables numéricas ==
  
 Al contrario de lo que pasa en otros lenguajes de programación, en los que tenemos diferentes tipos de variables para cada número que queremos almacenar, INT, FLOAT, DOUBLE, etc., en el BASIC del Spectrum no se distingue el tamaño de las variables numéricas. Al contrario, en ellas podemos almacenar cualquier tipo de número, ya sea entero o fraccionario, positivo o negativo. Al contrario de lo que pasa en otros lenguajes de programación, en los que tenemos diferentes tipos de variables para cada número que queremos almacenar, INT, FLOAT, DOUBLE, etc., en el BASIC del Spectrum no se distingue el tamaño de las variables numéricas. Al contrario, en ellas podemos almacenar cualquier tipo de número, ya sea entero o fraccionario, positivo o negativo.
Línea 50: Línea 49:
  
 <code basic> <code basic>
-            REM Variables numéricas correctas +REM Variables numéricas correctas 
-            LET A=56 +LET A=56 
-            LET A1=-456 +LET A1=-456 
-            LET VIDAS=3 +LET VIDAS=3 
-            LET X1X=5.60 +LET X1X=5.60 
-            LET HOLA1N=-124.675+LET HOLA1N=-124.675
 </code> </code>
  
Línea 61: Línea 60:
  
 <code basic> <code basic>
-            REM Variables numéricas incorrectas +REM Variables numéricas incorrectas 
-            LET 1=45 +LET 1=45 
-            LET 1A=-85 +LET 1A=-85 
-            LET 4PLAYER=3 +LET 4PLAYER=3 
-            LET 1PUNTOS=5.5+LET 1PUNTOS=5.5
 </code> </code>
  
Línea 73: Línea 72:
  
 <code basic> <code basic>
-            FOR F=1 TO 10: PRINT F: NEXT F sería correcto y +FOR F=1 TO 10: PRINT F: NEXT F sería correcto y 
-            FOR F1= 1 TO 10: PRINT F1: NEXT F1 sería incorrecto.+FOR F1= 1 TO 10: PRINT F1: NEXT F1 sería incorrecto.
 </code> </code>
  
Línea 80: Línea 79:
  
 <code basic> <code basic>
-            DIM A(10,10) válido y +DIM A(10,10) válido y 
-            DIM A1(10,10) inválido.+DIM A1(10,10) inválido.
 </code> </code>
  
Línea 92: Línea 91:
 Imaginaos las aplicaciones que a una matriz se le puede dar en un juego. Valga como ejemplo el famoso juego de los barquitos, que los colocamos en una cuadrícula de NxN elementos, lo extrapolamos a una matriz y tendríamos el problema de cómo resolver su almacenamiento solucionado de una forma muy sencilla. Laberintos en un juego tipo Maziacs, las cartas en el Póker, etc. Imaginaos las aplicaciones que a una matriz se le puede dar en un juego. Valga como ejemplo el famoso juego de los barquitos, que los colocamos en una cuadrícula de NxN elementos, lo extrapolamos a una matriz y tendríamos el problema de cómo resolver su almacenamiento solucionado de una forma muy sencilla. Laberintos en un juego tipo Maziacs, las cartas en el Póker, etc.
  
-=== VARIABLES ALFANUMÉRICAS ===+== Variables alfanuméricas ==
  
  El otro tipo de variables que tenemos disponibles son las alfanúmericas. En ellas podemos almacenar todo tipo de caracteres ASCII, es decir, números, letras y cualquier otro carácter o token del Spectrum.  El otro tipo de variables que tenemos disponibles son las alfanúmericas. En ellas podemos almacenar todo tipo de caracteres ASCII, es decir, números, letras y cualquier otro carácter o token del Spectrum.
Línea 99: Línea 98:
  
 <code basic> <code basic>
-            REM Variables alfanuméricas correctas +REM Variables alfanuméricas correctas 
-            LET A$="BUENOS DIAS" +LET A$="BUENOS DIAS" 
-            LET A$="BUENOS"+"DIAS" +LET A$="BUENOS"+"DIAS" 
-            LET A$=CHR$ 65 +LET A$=CHR$ 65 
 </code> </code>
  
Línea 110: Línea 109:
  
 <code basic> <code basic>
-            REM Variables alfanuméricas incorrectas +REM Variables alfanuméricas incorrectas 
-            LET A1$="BUENOS DIAS" +LET A1$="BUENOS DIAS" 
-            LET A$=BUENOS DIAS+LET A$=BUENOS DIAS
 </code> </code>
  
Línea 118: Línea 117:
  
 <code basic> <code basic>
-            DIM A$(10,10)+DIM A$(10,10)
 </code> </code>
  
Línea 124: Línea 123:
  
 <code basic> <code basic>
-            LET A$(2)="HOLA"+LET A$(2)="HOLA"
 </code> </code>
  
 Introduciría la palabra 'HOLA' (mejor dicho, sus códigos ASCII) en la posición 2 de la matriz, y rellenaría con seis espacios (carácter ASCII 32) los seis bytes restantes. Hay que tener en cuenta que cada carácter en ASCII tiene un byte de longitud. Introduciría la palabra 'HOLA' (mejor dicho, sus códigos ASCII) en la posición 2 de la matriz, y rellenaría con seis espacios (carácter ASCII 32) los seis bytes restantes. Hay que tener en cuenta que cada carácter en ASCII tiene un byte de longitud.
  
-==== CONSIDERACIONES FINALES SOBRE LAS VARIABLES ==== +==== Consideraciones finales sobre las variables ====
  
  Con las variables se pueden efectuar una amplia variedad de operaciones aritméticas, trigonométricas y lógicas: suma, resta, multiplicación, división, seno, coseno, etc., como pueden ser la siguientes:  Con las variables se pueden efectuar una amplia variedad de operaciones aritméticas, trigonométricas y lógicas: suma, resta, multiplicación, división, seno, coseno, etc., como pueden ser la siguientes:
  
 <code basic> <code basic>
- LET A=A+B  +LET A=A+B  
- que suma el contenido de las variables A y B  +(que suma el contenido de las variables A y B  
- dejando el resultado en A. + dejando el resultado en A.) 
-  + 
- LET A=A+1  +LET A=A+1  
- que suma a la variable A uno a su valor inicial. +(que suma a la variable A uno a su valor inicial.) 
-  + 
- LET A=C*10  +LET A=C*10  
- que pone en A el resultado de multiplicar por 10 +(que pone en A el resultado de multiplicar por 10 
- el contenido de la variable C.+ el contenido de la variable C.)
 </code> </code>
  
Línea 151: Línea 149:
  Debemos tomar por costumbre nombrar a las variables con nombres que nos indiquen su utilidad, pero teniendo en cuenta que a mayor longitud del nombre, más espacio ocupan en memoria, y en el Spectrum la RAM es un bien escaso. Como ejemplo nos puede valer lo siguiente:  Debemos tomar por costumbre nombrar a las variables con nombres que nos indiquen su utilidad, pero teniendo en cuenta que a mayor longitud del nombre, más espacio ocupan en memoria, y en el Spectrum la RAM es un bien escaso. Como ejemplo nos puede valer lo siguiente:
  
- VIDASJ1=3 con lo cual queremos indicar que el jugador 1 tiene tres vidas; esto ocupa, sólo por la definición del nombre, 7 bytes, sin contar el coste de almacenar el valor en memoria. En cambio si ponemos 'VJ1=3' lo reducimos en 4 bytes, esto puede parecer poco, pero si nos imaginamos un programa que utilice 30 variables, y sumamos los bytes gastados en la declaración más los que usemos cada vez que tengamos que realizar una operación con ella, podemos darnos cuenta de que se nos dispara el consumo de memoria.+<code basic> 
 +VIDASJ1=3  
 +</code>
  
-TOMANDO DECISIONES+ Con lo cual queremos indicar que el jugador 1 tiene tres vidas; esto ocupa, sólo por la definición del nombre, 7 bytes, sin contar el coste de almacenar el valor en memoria. En cambio si ponemos 'VJ1=3' lo reducimos en 4 bytes, esto puede parecer poco, pero si nos imaginamos un programa que utilice 30 variables, y sumamos los bytes gastados en la declaración más los que usemos cada vez que tengamos que realizar una operación con ella, podemos darnos cuenta de que se nos dispara el consumo de memoria. 
 + 
 +\\  
 +===== Tomando decisiones =====
  
 Cuando programemos nuestro juego, llegará un momento en que tengamos que hacer una cosa u otra dependiendo de determinadas condiciones que se den en el programa: si se nos terminan las vidas tiene que finalizar la partida, si matamos a un enemigo, que nos incrementen los puntos, etc. Esto se puede hacer en BASIC con los comandos que nos provee. Cuando programemos nuestro juego, llegará un momento en que tengamos que hacer una cosa u otra dependiendo de determinadas condiciones que se den en el programa: si se nos terminan las vidas tiene que finalizar la partida, si matamos a un enemigo, que nos incrementen los puntos, etc. Esto se puede hacer en BASIC con los comandos que nos provee.
Línea 161: Línea 164:
 La principal instrucción que nos da el BASIC para efectuar comparaciones es IF condición THEN. Con esto conseguimos que, si el resultado de la comparación es cierto, se ejecuten los comandos que vienen a continuación del THEN. Lo veremos más claramente con un ejemplo: La principal instrucción que nos da el BASIC para efectuar comparaciones es IF condición THEN. Con esto conseguimos que, si el resultado de la comparación es cierto, se ejecuten los comandos que vienen a continuación del THEN. Lo veremos más claramente con un ejemplo:
  
 +<code basic>
 10 IF VIDAS=0 THEN PRINT "ESTAS MUERTO": STOP 10 IF VIDAS=0 THEN PRINT "ESTAS MUERTO": STOP
 +</code>
  
 Con esta instrucción comparamos si el contenido de la variable VIDAS es igual a 0, en caso afirmativo, se ejecutan los comandos situados después del THEN. En caso de que no sea cierta, simplemente se ignoran y se pasa la ejecución del programa a la siguiente línea del mismo. Con esta instrucción comparamos si el contenido de la variable VIDAS es igual a 0, en caso afirmativo, se ejecutan los comandos situados después del THEN. En caso de que no sea cierta, simplemente se ignoran y se pasa la ejecución del programa a la siguiente línea del mismo.
Línea 167: Línea 172:
 Pero no sólo podemos realizar una comparación única por cada IF THEN que tengamos, podemos concatenar varias comparaciones: Pero no sólo podemos realizar una comparación única por cada IF THEN que tengamos, podemos concatenar varias comparaciones:
  
 +<code basic>
 10 IF VIDAS=0 OR TIEMPO=0 THEN PRINT "ESTAS MUERTO": STOP 10 IF VIDAS=0 OR TIEMPO=0 THEN PRINT "ESTAS MUERTO": STOP
 +</code>
  
 Aquí hacemos dos comparaciones y gracias al operador lógico OR, las instrucciones a continuación del comando THEN se ejecutan si cualquiera de los dos casos se cumple, que vidas o tiempo sea igual a 0. Aquí hacemos dos comparaciones y gracias al operador lógico OR, las instrucciones a continuación del comando THEN se ejecutan si cualquiera de los dos casos se cumple, que vidas o tiempo sea igual a 0.
Línea 173: Línea 180:
 Podemos tener la necesidad de que tengan que ser ciertas las dos, y no sólo una. Para que nuestra condición se cumpla: Podemos tener la necesidad de que tengan que ser ciertas las dos, y no sólo una. Para que nuestra condición se cumpla:
  
 +<code basic>
 10 IF VIDAS>0 AND TIEMPO >0 THEN LET TIEMPO=TIEMPO-1 10 IF VIDAS>0 AND TIEMPO >0 THEN LET TIEMPO=TIEMPO-1
 +</code>
  
 Fácil de comprender, si tenemos más vidas y tiempo que lo indicado, '0', ejecutamos las instrucciones colocadas después del THEN. Fácil de comprender, si tenemos más vidas y tiempo que lo indicado, '0', ejecutamos las instrucciones colocadas después del THEN.
  
-    * OPERADORES+\\ 
  
-      Con estos elementos podremos comparar diferentes circunstacias entre variables. Y siempre devolverá la comparación si es cierto o falso. +===== Operadores =====
-          o Mayor que ">" Cierto si el resultado de comparar el primer dato es mayor que el segundo. +
-          o Menor que "<" Cierto si el resultado de comparar el primer dato es menor que el segundo. +
-          o Igual que "=" Cierto si los dos datos son exactamente iguales. +
-          o Diferente que "<>" Será cierto si los datos comparados son diferentes. +
-          o Mayor o igual que ">=" Cierto si el primer dato es mayor o igual que el segundo. +
-          o Menor o igual que "<=" Cierto en caso de que el primer dato sea menor o igual que el segundo.+
  
-      Con este conjunto de operados lógicos podremos realizar las comparaciones necesarias en nuestro programa.+Con estos elementos podremos comparar diferentes circunstacias entre variables. Y siempre devolverá la comparación si es cierto o falso.
  
-FLUJO DEL PROGRAMA+   * Mayor que ">" Cierto si el resultado de comparar el primer dato es mayor que el segundo. 
 +   * Menor que "<" Cierto si el resultado de comparar el primer dato es menor que el segundo. 
 +   * Igual que "=" Cierto si los dos datos son exactamente iguales. 
 +   * Diferente que "<>" Será cierto si los datos comparados son diferentes. 
 +   * Mayor o igual que ">=" Cierto si el primer dato es mayor o igual que el segundo. 
 +   * Menor o igual que "<=" Cierto en caso de que el primer dato sea menor o igual que el segundo. 
 + 
 +Con este conjunto de operados lógicos podremos realizar las comparaciones necesarias en nuestro programa. 
 + 
 +\\  
 +===== Flujo del programa =====
  
 En el BASIC del Spectrum, las diferentes instrucciones de los programas las vamos introduciendo con un número delante, que nos sirve para poder controlar el flujo del programa como necesitemos durante la ejecución del mismo, entre otras cosas. La numeración de estas líneas la podemos indicar desde el número 1 al 9999, con los saltos intermedios que queramos, podemos numerarlas de 2 en 2, de 10 en 10, etc. Es aconsejable irlas numerando de manera que quede hueco entre una y otra para poder introducir una línea con instrucciones adicionales sobre la marcha, en caso de que sea necesario. Por ejemplo de 10 en 10. En el BASIC del Spectrum, las diferentes instrucciones de los programas las vamos introduciendo con un número delante, que nos sirve para poder controlar el flujo del programa como necesitemos durante la ejecución del mismo, entre otras cosas. La numeración de estas líneas la podemos indicar desde el número 1 al 9999, con los saltos intermedios que queramos, podemos numerarlas de 2 en 2, de 10 en 10, etc. Es aconsejable irlas numerando de manera que quede hueco entre una y otra para poder introducir una línea con instrucciones adicionales sobre la marcha, en caso de que sea necesario. Por ejemplo de 10 en 10.
Línea 197: Línea 210:
 Tenemos dos instrucciones que nos van a permitir variar este flujo: GO TO y GO SUB. Tenemos dos instrucciones que nos van a permitir variar este flujo: GO TO y GO SUB.
  
-    * GO TO+==== GO TO ====
  
-      Con GO TO saltaremos a la línea indicada después de la misma instrucción, saltando las que pudiese haber tanto delante como detrás de la misma: +Con GO TO saltaremos a la línea indicada después de la misma instrucción, saltando las que pudiese haber tanto delante como detrás de la misma:
-      - PROGRAMA 3 - +
-       10 LET A=5 +
-       20 IF A=5 THEN GO TO 100 +
-       30 PRINT "NO ES CIERTO" +
-       40 STOP +
-      100 PRINT "SI ES CIERTO"+
  
-      Al ejecutar este programa, como A=5, ya que así lo hemos asignado al principio del mismo, la condición analizada en la línea 20 se cumple y se ejecuta la instrucción GO TO, saltando directamente a la línea 100 sin pasar por la 30 ni la 40. Podemos variar ahora la línea 10 cambíando 5 por cualquier otro número. Veremos cómo la condición no se cumple y la ejecución del programa sigue por la línea 30 finalizando en la 40 por obra del STOP situado en ella, instrucción que sirve para detener la ejecución del programa drásticamente. +<code basic> 
-    * GO SUB y RETURN+REM - PROGRAMA 3 - 
 +10 LET A=5 
 +20 IF A=5 THEN GO TO 100 
 +30 PRINT "NO ES CIERTO" 
 +40 STOP 
 +100 PRINT "SI ES CIERTO" 
 +</code>
  
-      La instrucción GO SUB es una evolución de GO TO ya que nos permite desviar en un momento dado la ejecución del programaejecutar un bloque de instrucciones y devolver el flujo a la línea siguiente donde se ejecutó el GO SUB con la instrucción RETURNEste tipo de construcciones se denominan subrutinas.+Al ejecutar este programa, como A=5, ya que así lo hemos asignado al principio del mismola condición analizada en la línea 20 se cumple y se ejecuta la instrucción GO TO, saltando directamente a la línea 100 sin pasar por la 30 ni la 40Podemos variar ahora la línea 10 cambíando 5 por cualquier otro número. Veremos cómo la condición no se cumple y la ejecución del programa sigue por la línea 30 finalizando en la 40 por obra del STOP situado en ella, instrucción que sirve para detener la ejecución del programa drásticamente.
  
-      Lo vamos a ver con un ejemplo: +==== GO SUB RETURN ====
-      - PROGRAMA 4 - +
-       10 LET A =+
-       20 IF A=5 THEN GO SUB 100 +
-       30 PRINT "DESPUES DEL GOSUB" +
-       40 STOP +
-      100 PRINT "EL GOSUB HA FUNCIONADO" +
-      110 RETURN+
  
-      Es un programa similar al que usamos para ilustrar al comando GO TO. Si la condición de la línea 20 se cumple, que lo hará porque A vale 5 en un comienzo, salta a la línea 100ejecuta lo que hay en ella al llegar a la instrucción RETURN de la línea 110 , devuelve el flujo a la línea 30, justo después de la ejecución del GO SUB.+La instrucción GO SUB es una evolución de GO TO ya que nos permite desviar en un momento dado la ejecución del programaejecutar un bloque de instrucciones devolver el flujo a la línea siguiente donde se ejecutó el GO SUB con la instrucción RETURN. Este tipo de construcciones se denominan subrutinas.
  
-      GO SUB nos va ser muy útil a la hora de tener porciones de programa que se tienen que ejecutar varias veces, para no reescribirlos en varias ocasiones, simplemente lo tenemos una vez y cada vez que nos haga falta lo llamamos con el correspondiente GO SUB.+Lo vamos ver con un ejemplo:
  
-      Una precaución que tenemos que tener con el uso de RETURN, si lo ponemos en una línea, y el programa llega a ella sin haber ejecutado previamente una sentencia GO SUB, se detendrá la ejecución del mismo con el informe de error 7 RETURN without GO SUB, 0:1. Es decir, la ejecución de RETURN tiene que estar ligada forzosamente a una llamada anterior por medio de GO SUB. 
  
-      Damos por supuesto que el lector ha comprendido que la utilización de GO TO y GO SUB no se limita al ámbito de una instrucción comparativa, sino que puede ser puesta en cualquier línea como un comando más para alterar el flujo del programa: +<code basic> 
-      - PROGRAMA +REM - PROGRAMA 
-       10 PRINT "HOLA MUNDO" +10 LET A =5 
-       20 GO TO 100 +20 IF A=5 THEN GO SUB 100 
-       30 REM A ESTA LINEA NO LLEGARA NUNCA LA EJECUCION DEL PROGRAMA +30 PRINT "DESPUES DEL GOSUB" 
-       40 REM YA QUE EL GO TO HACE QUE LA EJECUCION SALTE ESTA LINEA +40 STOP 
-      100 PRINT "POR AQUI CONTINUA EL PROGRAMA"+100 PRINT "EL GOSUB HA FUNCIONADO" 
 +110 RETURN 
 +</code>
  
-      Vemos una instrucción nueva, REM, que sirve para insertar comentarios en nuestros programasque no se ejecuta en ningún caso. Nuestro programa se ejecuta escribiendo un saludo y luego salta directamente a la línea 100.+Es un programa similar al que usamos para ilustrar al comando GO TO. Si la condición de la línea 20 se cumple, que lo hará porque A vale 5 en un comienzo, salta a la línea 100, ejecuta lo que hay en ella y al llegar a la instrucción RETURN de la línea 110 , devuelve el flujo a la línea 30, justo después de la ejecución del GO SUB.
  
-BUCLES+GO SUB nos va a ser muy útil a la hora de tener porciones de programa que se tienen que ejecutar varias veces, para no reescribirlos en varias ocasiones, simplemente lo tenemos una vez y cada vez que nos haga falta lo llamamos con el correspondiente GO SUB. 
 + 
 +Una precaución que tenemos que tener con el uso de RETURN, si lo ponemos en una línea, y el programa llega a ella sin haber ejecutado previamente una sentencia GO SUB, se detendrá la ejecución del mismo con el informe de error 7 RETURN without GO SUB, 0:1. Es decir, la ejecución de RETURN tiene que estar ligada forzosamente a una llamada anterior por medio de GO SUB. 
 + 
 +Damos por supuesto que el lector ha comprendido que la utilización de GO TO y GO SUB no se limita al ámbito de una instrucción comparativa, sino que puede ser puesta en cualquier línea como un comando más para alterar el flujo del programa: 
 + 
 +<code basic> 
 +REM - PROGRAMA 5 - 
 +10 PRINT "HOLA MUNDO" 
 +20 GO TO 100 
 +30 REM A ESTA LINEA NO LLEGARA NUNCA LA EJECUCION DEL PROGRAMA 
 +40 REM YA QUE EL GO TO HACE QUE LA EJECUCION SALTE ESTA LINEA 
 +100 PRINT "POR AQUI CONTINUA EL PROGRAMA" 
 +</code> 
 + 
 +Vemos una instrucción nueva, REM, que sirve para insertar comentarios en nuestros programas, y que no se ejecuta en ningún caso. Nuestro programa se ejecuta escribiendo un saludo y luego salta directamente a la línea 100. 
 + 
 +===== Bucles =====
  
 Podemos tener la necesidad de ejecutar una serie de instrucciones un número determinado de veces. Para eso tenemos los bucles, formados por los comandos FOR TO, NEXT y STEP. Podemos tener la necesidad de ejecutar una serie de instrucciones un número determinado de veces. Para eso tenemos los bucles, formados por los comandos FOR TO, NEXT y STEP.
Línea 243: Línea 267:
 El comando FOR necesita de una variable que irá incrementando o decrementando hasta que la condición de salida sea cierta y salga del mismo. Esta variable no es necesario que se declare previamente y su nombre constará de una única letra. El comando FOR necesita de una variable que irá incrementando o decrementando hasta que la condición de salida sea cierta y salga del mismo. Esta variable no es necesario que se declare previamente y su nombre constará de una única letra.
  
 +<code basic>
 10 FOR F=1 TO 10 10 FOR F=1 TO 10
 20 PRINT F 20 PRINT F
 30 NEXT F 30 NEXT F
 +</code>
  
 Este programa ejecutará 10 veces las instrucciones contenidas entre las instrucciones FOR y NEXT. En la línea 10 le decimos que vamos a crear un bucle llamado F que va a comprender un rango de 1 a (TO) 10, en la línea 20 ejecutamos lo que queremos, en este caso un PRINT y en la 30 cerramos el bucle. Este programa ejecutará 10 veces las instrucciones contenidas entre las instrucciones FOR y NEXT. En la línea 10 le decimos que vamos a crear un bucle llamado F que va a comprender un rango de 1 a (TO) 10, en la línea 20 ejecutamos lo que queremos, en este caso un PRINT y en la 30 cerramos el bucle.
Línea 251: Línea 277:
 La iteración del bucle no tiene por que ir de uno en uno, podemos hacer que la suma sea mayor con la inclusión del comando STEP. Cambiamos la línea 10 únicamente: La iteración del bucle no tiene por que ir de uno en uno, podemos hacer que la suma sea mayor con la inclusión del comando STEP. Cambiamos la línea 10 únicamente:
  
 +<code basic>
 10 FOR F=1 TO 10 STEP 2 10 FOR F=1 TO 10 STEP 2
 +</code>
  
 El bucle ahora se ejecutaría la mitad de veces, ya que le estamos indicando que incremente el valor de F de dos en dos, en lugar de uno como es lo habitual. El bucle ahora se ejecutaría la mitad de veces, ya que le estamos indicando que incremente el valor de F de dos en dos, en lugar de uno como es lo habitual.
Línea 257: Línea 285:
 Para hacer que el bucle se ejecute hacia atrás, necesitaremos ponerle obligatoriamente un STEP -1, ya que de otra manera, la iteración siempre suma. Cambiando la línea 10 del anterior programa por la siguiente podremos ver los resultados: Para hacer que el bucle se ejecute hacia atrás, necesitaremos ponerle obligatoriamente un STEP -1, ya que de otra manera, la iteración siempre suma. Cambiando la línea 10 del anterior programa por la siguiente podremos ver los resultados:
  
 +<code basic>
 10 FOR F=10 TO 1 STEP -1 10 FOR F=10 TO 1 STEP -1
 +</code>
  
 Podemos anidar un bucle dentro de otro sin ningún problema, siempre que nos preocupemos de cerrar el más interno antes de que se ejecute otra iteración del externo, Con un ejemplo lo veremos perfectamente: Podemos anidar un bucle dentro de otro sin ningún problema, siempre que nos preocupemos de cerrar el más interno antes de que se ejecute otra iteración del externo, Con un ejemplo lo veremos perfectamente:
-- PROGRAMA 6 -+ 
 +<code> 
 +REM - PROGRAMA 6 -
 10 FOR F=1 TO 10 10 FOR F=1 TO 10
 20 PRINT "TABLA DEL: ";F 20 PRINT "TABLA DEL: ";F
Línea 267: Línea 299:
 50 NEXT D 50 NEXT D
 60 NEXT F 60 NEXT F
 +</code>
  
 Con este programa sacaremos por pantalla las tablas de multiplicar del 1 al 10, y podemos apreciar como antes de cerrar el bucle externo, hay que hacer lo propio con el interno, en caso contrario el resultado obtenido no será el deseado. Se puede probar intercambiando las líneas 50 y 60. Con este programa sacaremos por pantalla las tablas de multiplicar del 1 al 10, y podemos apreciar como antes de cerrar el bucle externo, hay que hacer lo propio con el interno, en caso contrario el resultado obtenido no será el deseado. Se puede probar intercambiando las líneas 50 y 60.
-NUESTRO PRIMER JUEGO+ 
 +\\  
 +===== Nuestro primer juego =====
  
 Para ilustrar todo lo que acabamos de leer, vamos a crear un jueguecillo simple de adivinación de números en el que vamos a utilizar las instrucciones vistas hasta aquí. Para ilustrar todo lo que acabamos de leer, vamos a crear un jueguecillo simple de adivinación de números en el que vamos a utilizar las instrucciones vistas hasta aquí.
  
 - {{:cursos:basic:basic_adivinacion.tap|ADIVINACIÓN}} - - {{:cursos:basic:basic_adivinacion.tap|ADIVINACIÓN}} -
- 10 PRINT "DEBE ADIVINAR UN NUMERO ELEGIDO ALEATORIAMENTE ENTRE 1 Y 100 EN LA CANTIDAD DE INTENTOS QUE USTED INTRODUZCA"+ 
 +<code basic> 
 + 10 PRINT "DEBE ADIVINAR UN NUMERO ELEGIDO ALEATORIAMENTE 
 + 15 PRINT "ENTRE 1 Y 100 EN LA CANTIDAD DE INTENTOS QUE USTED INTRODUZCA"
  20 INPUT "Introduzca el número de intentos (Max.10) ";A  20 INPUT "Introduzca el número de intentos (Max.10) ";A
  30 IF A<1 OR A >10 THEN GO TO 20  30 IF A<1 OR A >10 THEN GO TO 20
Línea 286: Línea 324:
 110 CLS: PRINT "NO HA SIDO CAPAZ DE ADIVINAR EL NUMERO EN ";A; " INTENTOS" 110 CLS: PRINT "NO HA SIDO CAPAZ DE ADIVINAR EL NUMERO EN ";A; " INTENTOS"
 120 PRINT "EL NUMERO ERA ";VALOR 120 PRINT "EL NUMERO ERA ";VALOR
 +</code>
  
 El programa es muy sencillo de entender, y solo haremos hincapié en unas cuantas instrucciones nuevas. El programa es muy sencillo de entender, y solo haremos hincapié en unas cuantas instrucciones nuevas.
Línea 296: Línea 335:
  
 Algunas de estas instrucciones las comentaremos en profundidad en próximos capítulos del curso, de momento con saber qué hacen será suficiente. Algunas de estas instrucciones las comentaremos en profundidad en próximos capítulos del curso, de momento con saber qué hacen será suficiente.
-CONCLUSIONES+ 
 +\\  
 +===== Conclusiones =====
  
 Este mes hemos visto una serie de instrucciones que van a ser imprescindibles para realizar nuestros programas, así como dejamos sentados unos cuantos conceptos de programación sin los cuales no conseguiremos realizar un proyecto medianamente serio. Este mes hemos visto una serie de instrucciones que van a ser imprescindibles para realizar nuestros programas, así como dejamos sentados unos cuantos conceptos de programación sin los cuales no conseguiremos realizar un proyecto medianamente serio.
Línea 310: Línea 351:
 **Miguel A. García Prada\\ Agosto 2003\\ MagazineZX #2** **Miguel A. García Prada\\ Agosto 2003\\ MagazineZX #2**
 ;;# ;;#
 +
  
  • cursos/basic/sintaxis_basic_mzx.1237579659.txt.gz
  • Última modificación: 20-03-2009 20:07
  • por sromero