Bucle
Un bucle o ciclo, en programación, es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse.
Generalmente,un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.
El bucle y los condicionales representan la base de la programación estructurada. Es una evolución del código ensamblador, donde la única posibilidad de iterar un código era establecer una sentencia jump (que en los lenguajes de programación fue sustituida por el "ir a" o GOTO).
Los tres bucles más utilizados en programación son el bucle while, el bucle for y el bucle repetir.
Ejemplo en código C de sentencias repetidas
int var=0;
//código que puede ser sustituido por un bucle
var = var + 2; //var igual a 2 (puede ser sustituido por var+=2)
var = var + 2; //var igual a 4
var = var + 2; //var igual a 6
var = var + 2; //var igual a 8
var = var + 2; //var igual a 10
// fin de código que puede ser sustituido por un bucle
printf("el resultado es %i", var );
Ejemplo con un bucle:
int var=0;
//Código para el bucle
int i;
// este es el Bucle for
for(i=0;i<10;i+=2)
{
var += 2;
}
printf("el resultado es %i", var);
Algunos lenguajes de programación tienen sentencias que permiten "escapar" de los bucles sin llegar a la condición de fin, como el romper o el devolver.
Bucles Infinitos
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.
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.
Ejemplo de ciclo infinito en C (while)
#include <stdio.h>
#include <iostream>
int main(void) {
int x = 0;
while(x < 10) {
printf("\x¡No acabaré nunca >:D !\n");
}
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.
Algoritmo:
1. Inicio
2. Suma-0
N-Bucle infinito, ya que no existe ninguna condición.
Suma=suma+N
3. Suma ++
Diagrama de Flujo.
Bucles finitos Algoritmo:
1. Inicio
2. Suma-0
N-Bucle infinito, ya que no existe ninguna condición.
Suma=suma+N
3. Suma ++
Diagrama de Flujo.
Los bucles finitos se ejecutan un determinado número de veces y pueden tener varios tipos de estructuras, las más utilizadas son:
- Bucle con condición de testeo.
- Bucle que se repite un número conocido de veces.
- Bucle con condición de testeo.
Se utiliza una instrucción de testeo para controlar la ejecución del bucle. Para
este caso la repetición del lazo es finita, pero no se puede precisar el número
de veces que se repite.
Ejemplo1:
EsperaUno
btfss PORTA,4
goto EsperaUno
En el ejemplo1 se lee el pin 4 de PORTA y hasta que no se pone a 1 no sale de este bucle.
Ejemplo2:
No Es Igual
movf PORTA, W
sublw 0x56
btfss STATUS,Z
goto NoEsIgual
Es Igual
En el ejemplo 2 se lee el registro PORTA y hasta que no su valor no es igual al de la constante 0x56 no se sale del bucle.
- Bucle que se repite un número conocido de veces
Las instrucciones decfsz e incfsz se utilizan generalmente en combinación con
una instrucción de salto goto, para el diseño de bucles de instrucciones que
deben repetirse una cantidad determinada de veces. Se hace de manera tal
que un registro se decrementa o incrementa hasta que tome un determinado
valor. En este caso, sí se conoce el número de veces que se repite el bucle.
Ejemplo:
movlw NumeroVeces; este es el numero de veces que se repite el bucle
movwf Contador; carga el contador con el numero de veces
Lazo ………
………
………
decfsz Contador,F; se decrementa el contador hasta que llega a 0
goto Lazo; si no llega a cero repite el bucle
Algoritmo:
1.Inicio
2.Suma=0
N=0 ____ Bucle finito, porque finaliza cuando se cumpla la condición de que N sea igual a cero.
No hay comentarios:
Publicar un comentario