miércoles, 17 de junio de 2015

BUCLES Y BUCLES INFINITOS

Cuando aprendes a programar en cualquier lenguaje de programación lo más normal es cometer muchos errores, los más normales al principio son los errores de sintaxis, cómo escribir Pirnt en lugar de Print.

Conforme va uno controlando la sintaxis se empiezan a producir otro tipo de errores, errores que podríamos llamar errores lógicos, como por ejemplo querer usar dos variables de tipo carácter para hacer una suma decimal o querer comparar un numeral con un decimal.

Estos errores pueden llegar a volverte loco si el programa es largo, y si tiene muchas líneas. Pero desde el principio cuando uno aprende un poco de programación quiere probar cosas divertidas e interesantes aunque esto suponga quebrantar esa lógica.







El bucle:

Un bucle es una parte de un programa que se repite una serie de veces. Estas veces pueden estar determinadas (tipo FOR) o indeterminadas (tipo WHILE), es decir se hace 5 veces o n, donde n viene de alguna condición.

FOR I =1 TO 100
PRINT "HOLA"
NEXT I



Imprime cien veces la palabra HOLA en la pantalla

X=0
WHILE X<=100
PRINT "HOLA"
X=X+1;
RETURN

Imprime 101 un veces HOLA en pantalla, es decir hasta que la condición de WHILE se cumpla.

Estos ejemplos realizados en Basic de la vieja escuela nos muestran de una manera muy sencilla lo que es un bucle.

El bucle infinito:

Pero he aquí que podemos hacer en el WHILE que la condición nunca se cumpla, por ejemplo:


X=0
WHILE X<=100
PRINT "HOLA"
RETURN

X siempre vale 0, con lo cual el programa se queda siempre imprimiendo HOLA.

A ver, y esto es lo sorprendente de entender, en condiciones ideales con un ordenador siempre conectado y que nunca fallara, esto sucedería infinitas veces, es decir, sería un bucle infinito.

Pero en aquellos tiempos la preocupación era otra ya que parecía como si se hubiera roto el ordenador y más de uno cruzamos los dedos cuando apagamos y volvimos a encender el ordenador esperando que esto hubiera finalizado.

Y esto era así porque no era verdaderamente infinito, aunque si podía crear más de un dolor de cabeza cuando estábamos ejecutando una aplicación larga y de pronto obteníamos la nada por respuesta, ya que estos bucles aparecían de la manera más insospechada y en los lugares donde menos te lo esperabas.

El más conocido de los bucles infinitos:

Si preguntáis a la gente de mi generación cual era el bucle infinito por excelencia os mostrarán algo así:

10 GOTO 10

Es decir, la más sencilla de todas las sentencias, vete a la linea 10 siempre, y así era en el Spectrum y el Amstrad y en los programas compilados de PC. Menos mal que a alguien se le ocurrió introducir una combinación de teclas que rompían el bucle: Control + C.

De otra manera solo cabía volver cargar el ordenador al reiniciarlo....

Un bucle infinito en C#:

Tan sencillo como un par de lineas y llenamos mientras dure su ejecución de "hola" la pantalla del ordenador:

   while (true )
            {
                Console.Write("hola");
            }
Si lo arrancas verás que la ventana de la consola se llena de holaholaholahola... y no parará hasta que cierres la ventana.

En otro momento, cuando no había tanta memoria del ordenador, lo que se producía al cabo de un rato es un stack overflow, ya que el número de llamadas era demasiado grande para que el ordenador lo soportara.

Un recuerdo curioso:

Cuando el Basic se fue haciendo más popular y los compiladores eran mejores se empezaron a introducir nuevos comandos.

Uno de los que metieron era ONBREAKCONT, es decir, en caso de break continua ejecutando. Con lo que al realizar un bucle infinito solo te quedaba la posibilidad de apagar el ordenador para salir del mismo ( el break era Control + tecla C).

Esto dice mucho de lo que era estabilidad en aquella época y lo que es ahora...


Espero que os haya gustado....

No hay comentarios:

Publicar un comentario