Manual de Basic Spectrum 48k. |
Capítulo 4
Iteración con buclesResumen
Suponga que desea introducir 5 números y sumarlos juntos. Una forma (que no le recomendamos que haga la introducción por el teclado a no ser que sea "masoquista") es escribir:
Este método no es una buena práctica de programación. Puede ser tolerable para cinco números, pero puede imaginar cuán tedioso sería el procedimiento para sumar diez números y en el caso de un centenar sería prácticamente imposible. Mucho mejor es establecer una variable para contar hasta 5 y luego, interrumpir el programa como en el desarrollo siguiente (que sí le instamos a introducir por el teclado):
Observe cuán fácil sería cambiar la línea 70 de modo que este programa sume diez números o incluso un centenar. Esta clase de contaje es tan útil que hay dos comandos especiales para hacerlo más fácil: los comandos u órdenes FOR y NEXT. Siempre se utilizan conjuntamente. Con el empleo de estos nuevos medios, el programa que acaba de introducir por el teclado realiza exactamente lo mismo que:
(Para conseguir este programa a partir del anterior, ha de corregir las líneas 20, 40, 60 y 70, TO es SYMBOL SHIFT con F). Observe que hemos cambiado cuenta por c. La variable de contaje (o variable de control) de un bucle FOR-NEXT debe contener una sola letra para su nombre. El efecto de este programa es que c opera a través de los valores 1 (el valor inicial), 2,3,4 y 5 (el límite) y para cada uno, se ejecutan las líneas 30, 40 y 50. A continuación, cuando c ha terminado con sus cinco valores, se ejecuta la línea 80. Una sutileza adicional es que la variable de control no tiene que incrementarse en 1 en cada ocasión, sino que puede cambiar este 1 a cualquier otro valor que desee mediante el empleo de una parte STEP en el comando FOR. La forma más general para un comando FOR es: FOR variable de control = valor inicial TO límite STEP paso en donde la variable de control es una sola letra y el valor incial, límite y paso son, en su totalidad, elementos que puede calcular el ordenador como números (como los números reales, o sumas o los nombres de variables numéricas). Por consiguiente, si sustituye la línea 20 en el programa por: 20 FOR c=1 TO 5 STEP 3/2
entonces c operará con los valores 1, 2,5 y 4. Observe que no tiene que limitarse a números enteros y también, que la variable de control no tiene que alcanzar el límite exactamente (mantiene la iteración por bucle en tanto que sea inferior o igual al límite). Pruebe el siguiente programa para imprimir los números desde 1 a 10 en orden inverso.
Anteriormente dijimos que el programa mantiene la iteración por bucle mientras que la variable de control sea inferior o igual al límite. Si profundiza en lo que ello significaría en este caso, constatará que no se trata de algo banal. La regla normal ha de modificarse cuando el paso es negativo pues, entonces, el programa realiza la iteración por bucle en tanto que la variable de control sea superior o igual al límite Debe tener cuidado si está realizando dos bucles FOR-NEXT conjuntamente, uno en el interior del otro. Pruebe el siguiente programa, que imprime los números correspondientes a un juego completo de dominó (de seis puntos).
Puede observar que el bucle n está completamente en el interior del bucle m (se dice que están adecuadamente "anidados" o encajados). Lo que debe evitarse es tener dos bucles FOR-NEXT que se solapen sin estar completamente uno en el interior del otro, somo es el casos que se indica a continuación:
Dos bucles FOR-NEXT deben estar uno en el interior del otro o completamente separados. Otra cosa a evitar es saltar a la parte media de un bucle FOR-NEXT desde el exterior. La variable de control sólo está adecuadamente establecida cuando ejecuta su sentencia FOR y si la omitiera, la sentencia NEXT produciría confusión en el ordenador. Probablemente obtendrá un informe de error con el mensaje NEXT without FOR (NEXT sin FOR) o variable not found (variable no encontrada). No hay nada que le detenga con el empleo de FOR y de NEXT en un comando directo. Por ejemplo, pruebe: FOR m=0 to 10: PRINT m: NEXT m
A veces, puede utilizarle como una forma (algo artificial) de eludir la restricción de que no puede realizar la función GO TO en cualquier lugar en el interior de un comando (porque un comando no tiene ningún número de línea). Por ejemplo: FOR m=0 to 1: STEP 0: INPUT a: PRINT a: NEXT m
El paso (STEP) de cero, en este caso, hace que el comando (u orden) se repita a si mismo "eternamente". Este procedimiento no es recomendable, porque si se produce un error, entonces habrá perdido el comando y tendrá que volverle a introducir por el teclado (y CONTINUE ya no actuará). Ejercicios
|
Manual de Basic Spectrum 48k. |