Hacer bucle while
En muchos lenguajes de programación de computadoras, un bucle do while es una declaración de flujo de control que ejecuta un bloque de código y luego repite el bloque o sale del bucle dependiendo de una condición booleana determinada.
La construcción do while consta de un símbolo de proceso y una condición. Primero se ejecuta el código dentro del bloque. Luego se evalúa la condición. Si la condición es verdadera, el código dentro del bloque se ejecuta nuevamente. Esto se repite hasta que la condición se vuelve falsa.
Los bucles while verifican la condición después de ejecutar el bloque de código. Esta estructura de control puede conocerse como bucle post-prueba. Esto significa que el ciclo do- while es un ciclo de condición de salida. Sin embargo, un bucle while probará la condición antes de que se ejecute el código dentro del bloque.
Esto significa que el código siempre se ejecuta primero y luego se evalúa la expresión o condición de prueba. Este proceso se repite siempre que la expresión se evalúe como verdadera. Si la expresión es falsa el ciclo termina. Un bucle while establece la verdad de una declaración como condición necesaria para la ejecución del código. Un bucle do- while proporciona la ejecución continua de la acción hasta que la condición ya no sea verdadera.
Es posible y, a veces, deseable que la condición siempre se evalúe como verdadera. Esto crea un bucle infinito. Cuando se crea intencionalmente un bucle infinito, normalmente existe otra estructura de control que permite la terminación del bucle. Por ejemplo, una declaración de interrupción permitiría la terminación de un bucle infinito.
Algunos idiomas pueden utilizar una convención de nomenclatura diferente para este tipo de bucle. Por ejemplo, los lenguajes Pascal y Lua tienen un "repetir hasta" bucle, que continúa ejecutándose hasta la expresión de control es verdadera y luego termina. En contraste, un "tiempo" El bucle se ejecuta mientras la expresión de control es verdadera y termina una vez que la expresión se vuelve falsa.
Construcciones equivalentes
do {} do_work();} mientras ()condición);
es equivalente a
do_work();mientras ()condición) {} do_work();}
De esta manera, el bucle do... while guarda el "cebado del bucle" con do_work();
en la línea antes del bucle while
.
Siempre que no se utilice la instrucción continue, lo anterior es técnicamente equivalente a lo siguiente (aunque estos ejemplos no son el estilo típico o moderno utilizado en las computadoras cotidianas):
mientras ()verdadero) {} do_work(); si ()!condición) descanso;}
o
LOOPSTART: do_work(); si ()condición) Goto LOOPSTART;
Demostración de bucles do while
Estos programas de ejemplo calculan el factorial de 5 usando sus respectivos idiomas' sintaxis para un bucle do- while.
Ada
con Ada.Integer_Text_IO;procedimiento Factorial es Contrato : Integer := 5; Factorial : Integer := 1;Comienzo bucle Factorial := Factorial * Contrato; Contrato := Contrato - 1; Salida cuando Contrato = 0; final bucle; Ada.Integer_Text_IO.Put ()Factorial);final Factorial;
BÁSICO
Los primeros BASIC (como GW-BASIC) usaban la sintaxis WHILE/WEND. Los BASIC modernos como PowerBASIC proporcionan estructuras WHILE/WEND y DO/LOOP, con sintaxis como DO WHILE/LOOP, DO UNTIL/LOOP, DO/LOOP WHILE, DO/LOOP UNTIL y DO/LOOP (sin pruebas externas, pero con un EXIT LOOP condicional en algún lugar dentro del bucle). Código fuente BÁSICO típico:
Dim factorial As IntegerDim contra As Integerfactorial = 1contra = 5Do factorial = factorial * contra contra = contra - 1Loop Mientras tanto contra ■ 0Imprimir factorial
C, C++, D
int contra = 5;int factorial = 1;do {} factorial *= contra--; /* Multiply, luego decremento. */} mientras ()contra ■ 0);printf()"factorial de 5 es %dn", factorial);
Las sentencias Do- while(0) también se utilizan comúnmente en macros de C como una forma de envolver varias sentencias en una sentencia normal (en lugar de una compuesta). Crea un punto y coma necesario después de la macro, proporcionando una apariencia más similar a una función para programadores y analizadores simples, además de evitar el problema de alcance con si
. Se recomienda en la regla PRE10-C del estándar de codificación CERT C.
Fortran
Con el Fortran 77 heredado no existe la construcción DO-WHILE, pero se puede lograr el mismo efecto con GOTO:
INTEGER CNT,FACT CNT=5 FACT=1 1 CONTINUACIÓN FACT=FACT*CNT CNT=CNT-1 IF ()CNT.GT.0) GOTO 1 PRINT*,FACT FIN
Fortran 90 y versiones posteriores tampoco tienen una construcción do- while, pero sí una construcción de bucle while que utiliza las palabras clave "do while" y, por tanto, en realidad es lo mismo que el bucle for.
programa Factorial Prog entero :: contra = 5 entero :: factorial = 1 factorial = factorial * contra contra = contra - 1 hacer mientras ()contra ■ 0) ! Valor de la verdad se prueba antes del bucle factorial = factorial * contra contra = contra - 1 fin do impresión *, factorialprograma final Factorial Prog
Java
int contra = 5;int factorial = 1;do {} factorial *= contra--; /* Multiply, luego decremento. */} mientras ()contra ■ 0);Sistema.Fuera..println()"El factorial de 5 es " + factorial);
Pascal
Pascal usa la sintaxis repetir/hasta en lugar de hacer mientras.
factorial := 1;contra := 5;repetición factorial := factorial * contra; contra := contra - 1; // En Objeto Pascal uno puede utilizar el dec (contratador);hasta contra = 0;
PL/I
La declaración PL/I DO incluye las funciones del bucle posterior a la prueba (do Until), el bucle previo a la prueba (do while) y el for bucle. Todas las funciones se pueden incluir en una sola declaración. El ejemplo muestra sólo la opción "hacer hasta" sintaxis.
Declara contra fijo inicial()5);Declara factorial fijo inicial()1);do hasta()contra . 0); factorial = factorial * contra; contra = contra - 1;final;#()factorial);
Raqueta
En Racket, como en otras implementaciones de Scheme, un "named-let" es una forma popular de implementar bucles:
#lang raqueta()definir contra 5)()definir factorial 1)()Deja bucle () ()¡Listo! factorial ()* factorial contra) ()¡Listo! contra ()sub1 contra) ()cuando ()■ contra 0) ()bucle))()displayl factorial)
Compare esto con el primer ejemplo del bucle while para Racket. Tenga en cuenta que un let con nombre también puede aceptar argumentos.
Racket y Scheme también proporcionan un bucle de ejercicio adecuado.
()definir ()factorial n) ()do (()contra n ()- contra 1) ()resultado 1 ()* resultado contra)) (()= contra 0) resultado) ; Detener la condición y el valor de retorno. ; El cuerpo del bucle está vacío. )
Charla trivial
Silencio contra factorial Silenciocontra := 5.factorial := 1.[contra ■ 0] whileTrue:[factorial := factorial * contra. contra := contra - 1].Transcripción Mostrar: factorial estampado
Contenido relacionado
ALGOL Y
Filosofía de la inteligencia artificial
Red troncal
Historial de versiones de macOS
Historia de la supercomputación