Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cursos:basic:sintaxis_basic_mzx [20-03-2009 20:01] – sromero | cursos: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:// | ||
//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 ==== |
- | Las variables tenemos que declararlas para poder usarlas, el ordenador no sabe ni el nombre ni el valor ni el tipo de la misma si no se lo decimos antes. Esto lo podemos hacer en cualquier lugar de nuestro programa siempre que lo hagamos antes de utilizarla. Para tener esto un poco más claro veamos el siguiente ejemplo: | ||
- | - PROGRAMA 1 - | ||
- | 10 IF A=10 THEN LET A=A+1 | ||
- | No os preocupéis, de momento, por lo que hace la línea anterior. | + | Las variables tenemos que declararlas para poder usarlas, el ordenador no sabe ni el nombre ni el valor ni el tipo de la misma si no se lo decimos antes. Esto lo podemos hacer en cualquier lugar de nuestro programa siempre |
- | Si ejecutamos la anterior línea con RUN, nos dará el siguiente error: 2 Variable not found, 10:1. Esto quiere decir que no ha encontrado la variable que intentamos utilizar en la parte uno de la línea | + | <code basic> |
+ | REM - PROGRAMA | ||
+ | 10 IF A=10 THEN LET A=A+1 | ||
+ | </ | ||
- | Añadamos al programa anterior la línea 5 LET A=10, de manera | + | No os preocupéis, de momento, por lo que hace la línea anterior. |
- | - PROGRAMA 2 - | + | |
- | 5 LET A=10 | + | |
- | 10 IF A=10 THEN LET A=A+1 | + | |
- | Lo volvemos a ejecutar | + | Si ejecutamos la anterior línea |
- | 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 | + | |
- | * TIPOS DE VARIABLES | + | |
- | Las variables en el BASIC del Spectrum pueden ser de dos tipos: numéricas y alfanuméricas. | + | <code basic> |
- | o VARIABLES NUMÉRICAS | + | REM - PROGRAMA 2 - |
+ | 5 LET A=10 | ||
+ | 10 IF A=10 THEN LET A=A+1 | ||
+ | </ | ||
- | 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, | + | Lo volvemos a ejecutar con RUN y, en esta ocasión, nos devolverá el mensaje 0 OK, 10:2, con lo cual nos dice que la ejecución |
- | El nombre | + | Si cambiásemos el número de la línea 5 por 15, nos volvería |
- | Variables numéricas correctas | + | |
- | LET A=56 | + | |
- | LET A1=-456 | + | |
- | LET VIDAS=3 | + | |
- | LET X1X=5.60 | + | |
- | LET HOLA1N=-124.675 | + | |
- | Todas estas declaraciones | + | ==== Tipos de variables ==== |
- | Variables numéricas incorrectas | + | |
- | LET 1=45 | + | |
- | LET 1A=-85 | + | |
- | LET 4PLAYER=3 | + | |
- | LET 1PUNTOS=5.5 | + | |
- | Al intentar teclear estas instrucciones, | ||
- | A la hora de asignar los nombres a las variables | + | |
- | FOR F=1 TO 10: PRINT F: NEXT F sería correcto y | + | == Variables numéricas == |
- | FOR F1= 1 TO 10: PRINT F1: NEXT F1 sería incorrecto. | + | |
- | Las variables | + | Al contrario de lo que pasa en otros lenguajes |
- | DIM A(10,10) válido | + | El nombre por el que las vamos a designar debe comenzar obligatoriamente por una letra y puede estar seguida de más letras o números. Veamos los siguientes ejemplos de lo que son variables numéricas correctas e incorrectas: |
- | DIM A1(10,10) inválido. | + | |
- | Las matrices se componen de una serie de valores almacenados en una cuadrícula a la que se accede por el nombre de la variable más su índice, cuya numeración comienza por uno. Es decir, si tenemos declarada una variable tal que DIM A(10), podemos asignar a cada una de sus diez posiciones un valor diferente y utilizarlo de la misma forma que cualquier otra variable. | + | <code basic> |
+ | REM Variables numéricas correctas | ||
+ | LET A=56 | ||
+ | LET A1=-456 | ||
+ | LET VIDAS=3 | ||
+ | LET X1X=5.60 | ||
+ | LET HOLA1N=-124.675 | ||
+ | </ | ||
- | Por ejemplo, si queremos asignar a la quinta posición | + | Todas estas declaraciones |
- | Las matrices pueden tener más de una dimensión, podemos tener una cuadrícula de NxN elementos, sin más límite que la memoria del Spectrum. Imaginaos que definimos A(10,10), con lo cual tendremos una matriz de 10x10=100 elementos, cada uno almacenando un valor independiente, | + | <code basic> |
+ | REM Variables numéricas incorrectas | ||
+ | LET 1=45 | ||
+ | LET 1A=-85 | ||
+ | LET 4PLAYER=3 | ||
+ | LET 1PUNTOS=5.5 | ||
+ | </ | ||
- | Imaginaos las aplicaciones que a una matriz se le puede dar en un juego. Valga como ejemplo | + | Al intentar teclear estas instrucciones, |
- | o VARIABLES ALFANUMÉRICAS | + | |
- | El otro tipo de variables | + | A la hora de asignar los nombres a las variables |
- | Los nombres de las variables alfanuméricas solo pueden estar formados por una letra seguidos del símbolo ' | + | <code basic> |
- | Variables alfanuméricas correctas | + | FOR F=1 TO 10: PRINT F: NEXT F sería correcto y |
- | LET A$=" | + | FOR F1= 1 TO 10: PRINT F1: NEXT F1 sería incorrecto. |
- | LET A$=" | + | </ |
- | LET A$=CHR$ 65 (CHR$ meterá el caracter ASCII correspondiente al código 65, en este caso la letra ' | + | |
- | Todos los ejemplos anteriores son válidos y, al igual que anteriormente con los numéricos, los siguientes generarán un error: | + | Las variables que controlan |
- | Variables alfanuméricas incorrectas | + | |
- | LET A1$=" | + | |
- | LET A$=BUENOS DIAS | + | |
- | También podemos crear matrices con contenido alfanumérico. Éstas tienen un peculiaridad muy importante. Siempre reservamos una longitud fija para almacenar la cadena. Mejor lo vemos con un ejemplo: | + | <code basic> |
+ | DIM A(10,10) válido y | ||
+ | DIM A1(10,10) inválido. | ||
+ | </ | ||
- | | + | Las matrices se componen de una serie de valores almacenados en una cuadrícula a la que se accede por el nombre de la variable más su índice, cuya numeración comienza por uno. Es decir, si tenemos declarada una variable tal que DIM A(10), podemos asignar a cada una de sus diez posiciones un valor diferente y utilizarlo de la misma forma que cualquier otra variable. |
- | Con esta instrucción le decimos | + | Por ejemplo, si queremos asignar |
- | | + | Las matrices pueden tener más de una dimensión, podemos tener una cuadrícula de NxN elementos, sin más límite que la memoria del Spectrum. Imaginaos que definimos A(10,10), con lo cual tendremos una matriz de 10x10=100 elementos, cada uno almacenando un valor independiente, |
- | introduciría la palabra ' | + | 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 |
- | o CONSIDERACIONES FINALES SOBRE LAS VARIABLES | + | |
- | Con las variables se pueden efectuar una amplia variedad de operaciones aritméticas, | + | == Variables alfanuméricas == |
- | LET A=A+B que suma el contenido | + | 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. |
- | LET A=A+1 que suma a la variable A uno a su valor inicial. | + | |
- | LET A=C*10 que pone en A el resultado | + | |
- | Y así con todas las operaciones | + | Los nombres de las variables alfanuméricas solo pueden estar formados por una letra seguidos del símbolo ' |
- | 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: | + | <code basic> |
+ | REM Variables alfanuméricas correctas | ||
+ | LET A$=" | ||
+ | LET A$=" | ||
+ | LET A$=CHR$ 65 | ||
+ | </ | ||
- | 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 | + | (CHR$ meterá |
- | TOMANDO DECISIONES | + | Todos los ejemplos anteriores son válidos y, al igual que anteriormente con los numéricos, los siguientes generarán un error: |
+ | |||
+ | <code basic> | ||
+ | REM Variables alfanuméricas incorrectas | ||
+ | LET A1$=" | ||
+ | LET A$=BUENOS DIAS | ||
+ | </ | ||
+ | |||
+ | | ||
+ | |||
+ | <code basic> | ||
+ | DIM A$(10,10) | ||
+ | </ | ||
+ | |||
+ | Con esta instrucción le decimos a nuestro Spectrum que nos reserve memoria para una matriz de 10 elementos y con una longitud de 10 caracteres por elemento, es decir, podríamos almacenar diez ' | ||
+ | |||
+ | <code basic> | ||
+ | LET A$(2)=" | ||
+ | </ | ||
+ | |||
+ | Introduciría la palabra ' | ||
+ | |||
+ | ==== Consideraciones finales sobre las variables ==== | ||
+ | |||
+ | Con las variables se pueden efectuar una amplia variedad de operaciones aritméticas, | ||
+ | |||
+ | <code basic> | ||
+ | LET A=A+B | ||
+ | (que suma el contenido de las variables A y B | ||
+ | | ||
+ | |||
+ | LET A=A+1 | ||
+ | (que suma a la variable A uno a su valor inicial.) | ||
+ | |||
+ | LET A=C*10 | ||
+ | (que pone en A el resultado de multiplicar por 10 | ||
+ | el contenido de la variable C.) | ||
+ | </ | ||
+ | |||
+ | Y así con todas las operaciones disponibles. | ||
+ | |||
+ | | ||
+ | |||
+ | <code basic> | ||
+ | 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 ' | ||
+ | |||
+ | \\ | ||
+ | ===== 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 117: | 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": | 10 IF VIDAS=0 THEN PRINT "ESTAS MUERTO": | ||
+ | </ | ||
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 123: | 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": | 10 IF VIDAS=0 OR TIEMPO=0 THEN PRINT "ESTAS MUERTO": | ||
+ | </ | ||
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 129: | 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 | ||
+ | </ | ||
Fácil de comprender, si tenemos más vidas y tiempo que lo indicado, ' | Fácil de comprender, si tenemos más vidas y tiempo que lo indicado, ' | ||
- | * 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 ">" | + | |
- | o Menor que "<" | + | |
- | o Igual que "=" Cierto si los dos datos son exactamente iguales. | + | |
- | o Diferente que "<>" | + | |
- | 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 estos elementos |
- | FLUJO DEL PROGRAMA | + | * Mayor que ">" |
+ | * Menor que "<" | ||
+ | * Igual que " | ||
+ | * Diferente que "<>" | ||
+ | * Mayor o igual que "> | ||
+ | * Menor o igual que "< | ||
+ | |||
+ | 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 153: | 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, |
- | - 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 | + | <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" | ||
+ | </ | ||
- | La instrucción GO SUB es una evolución de GO TO ya que nos permite desviar en un momento dado la ejecución | + | Al ejecutar este programa, como A=5, ya que así lo hemos asignado al principio |
- | Lo vamos a ver con un ejemplo: | + | ==== GO SUB y RETURN |
- | - PROGRAMA 4 - | + | |
- | 10 LET A =5 | + | |
- | 20 IF A=5 THEN GO SUB 100 | + | |
- | 30 PRINT " | + | |
- | 40 STOP | + | |
- | 100 PRINT "EL GOSUB HA FUNCIONADO" | + | |
- | 110 RETURN | + | |
- | Es un programa similar al que usamos para ilustrar al comando | + | La instrucción GO SUB es una evolución de GO TO ya que nos permite desviar |
- | 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 | + | Lo vamos a 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, | + | <code basic> |
- | - PROGRAMA | + | REM - PROGRAMA |
- | | + | 10 LET A =5 |
- | | + | 20 IF A=5 THEN GO SUB 100 |
- | | + | 30 PRINT " |
- | | + | 40 STOP |
- | 100 PRINT "POR AQUI CONTINUA | + | 100 PRINT " |
+ | 110 RETURN | ||
+ | </ | ||
- | Vemos una instrucción nueva, REM, que sirve para insertar comentarios en nuestros programas, y que no se ejecuta | + | Es un programa similar al que usamos |
- | 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, | ||
+ | |||
+ | <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" | ||
+ | </ | ||
+ | |||
+ | 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 199: | 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 | ||
+ | </ | ||
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 207: | 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 | ||
+ | </ | ||
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 213: | 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 | ||
+ | </ | ||
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 - | + | |
+ | < | ||
+ | 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 223: | Línea 299: | ||
50 NEXT D | 50 NEXT D | ||
60 NEXT F | 60 NEXT F | ||
+ | </ | ||
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í. | ||
- {{: | - {{: | ||
- | 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 " | 20 INPUT " | ||
30 IF A<1 OR A >10 THEN GO TO 20 | 30 IF A<1 OR A >10 THEN GO TO 20 | ||
Línea 242: | 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 "; | 120 PRINT "EL NUMERO ERA "; | ||
+ | </ | ||
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 252: | 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 266: | Línea 351: | ||
**Miguel A. García Prada\\ Agosto 2003\\ MagazineZX #2** | **Miguel A. García Prada\\ Agosto 2003\\ MagazineZX #2** | ||
;;# | ;;# | ||
+ | |||