Bucle infinito
![]() | Este artículo o sección tiene referencias, pero necesita más para complementar su verificabilidad. Busca fuentes: «Bucle infinito» – noticias · libros · académico · imágenes Puedes avisar al redactor principal pegando lo siguiente en su página de discusión: {{sust:Aviso referencias|Bucle infinito}} ~~~~ Este aviso fue puesto el 26 de agosto de 2024. |
Un bucle infinito en programación es un error que consiste en realizar un ciclo que se repite de forma indefinida ya que su condición para finalizar nunca se cumple.[1]
Por definición un bucle debe contener condiciones que establezcan cuándo empieza y cuándo acaba, de manera que, mientras las condiciones se cumplan, ejecute una secuencia de código de manera repetitiva. En el caso de ciclo infinito, como la condición de finalización no se alcanza, el bucle sigue ejecutando el segmento de código indefinidamente.
Excepción de error
La programación en automatización y robótica puede basarse en un bucle infinito, como por ejemplo la función void loop() en Arduino, en este caso el bucle infinito deja de ser un error para pasar a ser una virtud, ya que puede reconocerse el estado de un sensor generando una respuesta miles de veces por segundo.
Ejemplos
Lenguaje C
Bucle while
#include <stdio.h> #include <conio.h> int main(){ int x = 0; while(x < 10) { printf("\n¡No acabaré nunca!\n"); } getch(); return 0; }
Se observa que la sentencia printf("\x¡No acabaré nunca!\n"); siempre se ejecuta porque la condición del bucle while() siempre es cierta, no existe una condición de salida que obligue al bucle a finalizar. Exactamente, no se alcanza la condición de salida. Si en el ejemplo anterior, dentro del bloque de código del bucle while, se encontrase la instrucción
x++;
El bucle hubiera ejecutado 10 veces y hubiera terminado.
También existe esta posibilidad con el while (true). En C:
#include <stdio.h> #include <conio.h> int main(void) { while(1) { printf("\xadNo acabar\x82 en algún momento!\n"); } getch(); return 0; /* De todas maneras, el programa no llegará nunca hasta aquí */ }
Bucle for
#include <stdio.h> int main(void) { int cont; for (cont = 0; cont < 5; cont++) { cont = cont%4; printf("%d\n",cont); } return 0; }
En la sentencia "printf" se muestra en pantalla 0,1,2,3,0,1,2,3,0,.... Y también podemos crear un ciclo infinito con el for de esta forma:
#include <stdio.h> int main(void) { for (;;) printf("Bucle infinito\n"); return 0; }
Lenguaje C++
Bucle while
#include <iostream> using namespace std; int main(void) { while(true){ cout << "Se repite" << endl; } return 0; }
Bucle for
#include <iostream> using namespace std; int main(int argc, char *argv[]) { for(int i=0;i==i;i++) { cout << "Se repite" << endl; } return 0; }
Como siempre la variable i va a ser igual a ella misma, se incrementa e itera infinitas veces.
En el siguiente caso, por cada vez que se incrementa la variable, como es menor a 5 se decrementa dentro del cuerpo del bucle. Luego se vuelve a incrementar y de esa manera infinitas veces.
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int h=0; for(int i=0;i<5;i++){ i--; h++; cout << "Se repitio: " << h << " Veces." << endl; } return 0; }
Lenguaje Visual Basic
Bucle while
Public Function suma2(a, b) As Double suma2 = a + b While (suma2 >= 10) suma2 = suma2 + 1 Wend End Function
Siempre que la suma de a y b sea superior o igual a 10.
Bucle do loop
Dim Suma Suma = 0 Do Suma = Suma + 1 Loop
La variable "Suma" se sumará infinitamente 1 unidad.
Lenguaje Pascal
Bucle repeat
Una forma de hacer un bucle infinito en Pascal es con un ciclo repeat como se muestra a continuación:
program HASTAELINFINITO; begin repeat writeln('¡Nunca termina!'); until 2=3; end.
Ya que 2 nunca es igual a 3, el código se repite hasta el infinito.
Bucle while
program HASTAELINFINITO; begin while 2<>3 do writeln('¡Nunca termina!'); end; end.
Lenguaje Pascal
Bucle repetir
En Pascal se puede realizar un bucle infinito sin necesidad de establecer una condición equivoca.
Var i:Entero Repetir i = i + 1 ' Se incrementa por siempre. PorSiempre
También se puede crear un bucle infinito genuino.
Var i:Entero Repetir i = i + 1 ' Se ejecuta por siempre porque: HastaQue i < 1 ' esta condición nunca es real.
Bucle mientras
En este ejemplo olvidé incrementar el valor de i.
Importar "Utiles.prp" Var i:Entero Mientras i = 0 Mensaje("i sigue siendo cero...") ' Se muestra por siempre. FinMientras
Bucle contar
En este ejemplo se muestra cómo utilizamos el bucle "contar" para hacer que la variable i alcance el valor 1, pero por X motivo olvidamos establecer la instrucción "dec" para que el bucle decremente valores.
Importar "Utiles.prp" Var i:Entero Contar i = 2 a 1 Mensaje("i sigue siendo mayor a 1...") Seguir
Lenguaje Java
Bucle while
public void loop() { int x = 0; while(x<10) { System.out.println("¡Esto no acaba!"); } }
Lenguaje Kotlin
Bucle do-while
fun bucleDoWhile(){ var i = 10 do { println("¡Oops! Esto nunca acabará") } while (i != 0) }
Bucle while
fun bucleWhile(){ var i = 10 while (i != 0){ println("¡Oops! Esto nunca acabará") } }
Lenguaje Matlab/Freemat
Bucle for
function print2() for i = 1:-1:10 disp(['Hello I am the number ',int2str(i)]); end end
Bucle while
function suma2(a, b) suma2 = a + b while (suma2 >= 10) suma2 = suma2 + 1 end end
Lenguaje PHP
Bucle infinito con WHILE
En este código, la variable $variable nunca cambia, siempre vale cero. Por lo tanto, se entra en bucle infinito al ser $variable siempre <500.
<?php $variable=0; while ($variable<500) { echo $variable; } ?>
Bucle infinito con FOR
<?php for ($var = 0; $var < 10; $var=$var-1) { echo $var."<br>"; } ?>
Lenguaje Python
Bucle while
Num = 2 while Num != 3: print("Más allá del universo")
Aquí la variable "Num" tiene el valor de 2, entonces dentro del while la condición es: Si "Num" no es igual a 3 imprime (print) "Más allá del universo"; como el valor de "Num" es constante (igual a 2), entonces dentro de while la condición será verdadera, y el bucle nunca terminará.
Referencias
- ↑ Llanos Ferraris, Diego Rafael (2010). Fundamentos de informática y programación en C. Paraninfo. p. 64. ISBN 9788497327923.
Datos: Q862372