Desafiando las leyes de la computación (I)

¿Decíais que no? ¿Que un programa se bloquea por entrar en un bucle infinito? Bueno, hablemos de ello. Para los más profanos, un bucle es un fragmento de código que se repite, atendiendo a una condición. Mientras ésta se cumpla, el bucle sigue en funcionamiento.

Claro que la limitación que impongamos es harina de otro costal. No vamos a entrar en detalles de programación. El bucle de Manolo, así bautizado esta mañana en una clase de Informática, juega con esta cláusula e introduce el concepto de falso infinito, que nos acabamos de inventar.

for (i = 1; i > 0; i++) { }

¿Qué ocurre con esta sentencia? ¿Es un bucle infinito? Pues sí, pero no: es un bucle de Manolo. Lo que expresa es lo siguiente:

Sea i un valor numérico que, inicialmente, vale 1. Mientras i sea estrictamente mayor que 0, ejecutar el código entre llaves e incrementar i en una unidad.

Visto desde un punto de vista matemático, dado que los números son infinitos, el programa que implemente esa instrucción no terminará jamás -aunque siempre es posible apagar el ordenador del tirón-. ¡Pero, en informática, el infinito no existe! Si declaramos i como un entero sin signo (no admite números negativos), cuando llegue a su valor más alto posible, empezará a contar desde 0, similar a un contador de ruedas, que pasaría del 9999 al 0000.

El truco de esto está en que, en algún momento, i llegará a valer 0, y como 0 no es mayor que 0, la condición se hará falsa y el bucle terminará. Aquí tenéis el programa y el código:




Lo que la aplicación mostrará en pantalla es lo siguiente:


  Entro en el bucle. No me esperes despierto :)
  i = 1000000000
  i = 2000000000
  i = 3000000000
  i = 4000000000
  He salido de un bucle infinito!
  Tiempo: 9.6 segundos.


Comentarios

Entradas populares de este blog

Algoritmo de relleno

Cifrado de Vernam

Problema de las N reinas