Estructuras de Control Repetitivas

3.
E
s
t
r
u
c
t
u
r
a
s
d
e
C
o
n
t
r
o
l
R
e
p
e
t
i
t
i
v
a
s

## Introduccion

Muchas veces dentro de algún programa, es necesario repetir varias veces un procedimiento representado por un conjunto de instrucciones bien definidas. Para este tipo de situaciones los lenguajes de programación brindan un conjunto de instrucciones que se conocen como estructuras repetitivas, llamadas también ciclos o bucles.
El presente trabajo de investigación conoceremos lo que son las Estructuras Repetitivas. Para comenzar sabemos que las Estructuras Repetitivas se definen como un conjunto de instrucciones donde se ejecuten un cierto número finito de veces y es necesario saber todo este proceso para indicar una estructura y que tipo usar en un pseudocódigo o un programa.
Entonces un bucle o ciclo es una estructura que nos permite representar un conjunto de instrucciones que debe repetirse una cantidad limitada de veces, normalmente dependiente de una condición o de una cantidad determinada de repeticiones o iteraciones. Los ciclos permiten iterar todo un proceso tantas veces como el programador (ó el usuario) lo determine.
Estos bucles nos sirven en la solución de muchos problemas algorítmicos como por ejemplo escribir algo en pantalla cierta cantidad de veces, mover un objeto de un punto a otra cierta cantidad de pasos, o hacer una operación matemática cierta cantidad de veces y las estructuras repetitivas nos permiten hacerlo de forma sencilla.

## ESTRUCTURAS DE CONTROL

Las estructuras de control o sentencias repetitivas controlan el número de veces que una sentencia o listas de sentencias se ejecutan.
• Estructura de control while
• Estructura de control for
• Estructura de control do while
ESTRUCTURA DE CONTROL “WHILE”
Es aquella en la que el número de interacciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condición.
OPERADORES DE INCREMENTO Y DECREMENTO (++, - -)
Sirven para el incremento o decremento en una unidad
Ejemplo :
Declaradas las variables:
int r = 8, s = 3;
Dichas instrucciones son equivalentes a:
r = r + 1;
s = s - 1;
Y también se pueden escribir como:
++r;
--s;
Tras su ejecución el resultado será:

### BUCLES WHILE CON CERO ITERACIONES

El cuerpo de un bucle no se ejecuta nunca si la prueba o condición de repetición del bucle no se cumple, es falsa, cuando se alcanza while la primera vez.
Bucles controlados por centinelas
Un medio para manejar esta situación es instruir al usuario a introducir un único dato definido y especificado denominado valor centinela como último dato. La condición del bucle comprueba cada dato y termina cuando se lee el valor centinela. El valor centinela debe ser un valor que no pueda producirse como dato. En realidad el centinela es un valor que sirve para terminar el proceso del bucle.

### BUCLES CONTROLADOS POR INDICADORES (BANDERAS)

Se utiliza una variable booleana con frecuencia como indicadores o banderas de estado para controlar la ejecución de un bucle. En C no existe el tipo boolean, por lo que se utiliza como bandera una variable entera que puede tomar dos valores, 1 o 0. Un bucle controlado por bandera-indicador se ejecuta hasta que se produce el suceso anticipado y se cambia el valor del indicador.

### BUCLES WHILE (TRUE)

La condición que se comprueba en un bucle while puede ser cualquier expresión válida C. Mientras que la condición permanezca verdadera (distinto de 0), el bucle while continuará ejecutándose. Se puede crear un bucle que nunca termine utilizando el valor 1 (verdadero) para la condición que se comprueba.

### ESTRUCTURA DE CONTROL “for”

• Es un método para ejecutar un bloque de sentencias un número fijo de veces.
• El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitúan en un solo sitio: la cabecera de la sentencia.
El bucle for está conformado de cuatro partes:

### DIFERENTES USOS DE BUCLES FOR

1-. El valor de la variable de control se puede modificar en valores diferentes de uno.
2.-Se pueden utilizar más de una variable de control. Las variables de control se pueden incrementar o decremento en valores de tipo int, pero también es posible en valores de tipo float o double y en consecuencia se incrementaría o decrementaría en una cantidad decimal.

### PRECAUCIONES EN EL USO DE for

• Se debe asegurar que la expresión de inicialización, la condición del bucle y la expresión de incremento harán que la condición del bucle se convierta en false en algún momento.
• En particular: si el cuerpo de un bucle de conteo modifica los valores de cualquier variable implicada en la condición del bucle, entonces el número de repeticiones se puede modificar.
NOTA: Esta regla anterior es importante, ya que su aplicación se considera una mala práctica de programación.
Es decir, no es recomendable modificar el valor de cualquier variable de la condición del bucle dentro del cuerpo de un bucle for, ya que se pueden producir resultados imprevistos.

### BUCLES INFINITOS

La sentencia se ejecuta indefinidamente a menos que se utilice una sentencia return o break.
La razón de que el bucle se ejecute indefinidamente es que se ha eliminado la expresión de inicialización, la condición del bucle y la expresión de incremento; al no existir una condición de bucle que especifique cual es la condición para terminar la repetición de sentencias, asume que la condición es verdadera y éstas se ejecutarán indefinidamente.

### DISEÑO DEL BUCLE FOR PARA EVITAR UN BUCLE INFINITO

1. El cuerpo del bucle ha de contener todas las sentencias que se desean ejecutar repetidamente.
2. Una sentencia terminará la ejecución del bucle cuando se cumpla una determinada condición.

### Los bucles for vacíos

Una sentencia vacía consiste en un (;)
¿Sabías qué?
El bucle for con cuerpos vacíos puede tener algunas aplicaciones, especialmente cuando se requieren ralentizaciones o temporizaciones de tiempo.

### ESTRUCTURA DE CONTROL “DO WHILE”

Se utiliza para especificar un bucle condicional que se ejecuta al menos una vez. Esta situación se suele dar en algunas circunstancias en las que se ha de tener la seguridad de que una determinada acción se ejecutará una o varias veces, pero al menos una vez.

### Sintaxis

do
estatuto;
while (condición);
•Si se requiere realizar más de un estatuto se deben utilizar llaves.
do
{
bloque de estatutos;
}
while (condición);
•Se realizan los estatutos y se verifica la condición, mientras sea verdadera se sigue ejecutando; al momento de ser falsa termina el ciclo.
•Dado que la condición se revisa al final del ciclo el (los) estatuto(s) se realizan al menos una vez a diferencia del while.

## DIFERENCIAS ENTRE WHILE Y DO-WHILE

## EJEMPLO OCUPANDO WHILE Y DO-WHILE.

## COMPARACIÓN DE TRES BUCLES

### DISEÑO DE BUCLES

El diseño de un bucle necesita tres puntos a considerar:
1. El cuerpo del bucle.
2. Las sentencias de inicialización.
3. Las condiciones para la terminación del bucle.

### BUCLES PARA DISEÑO DE SUMAS Y PRODUCTOS.

### SUMA

Si se conoce cuántos números habrá, tal tarea se puede ejecutar fácilmente por el siguiente pseudocódigo. Esto es, la primera vez que se ejecute el bucle el valor de suma + siguiente será igual a siguiente. Para hacer esta operación, el valor de suma debe ser inicializado a 0.

### PRODUCTO

Si en lugar de suma, se desea realizar productos de una lista de números, la técnica a utilizar es:
La variable producto debe tener un valor inicial, se inicializa junto a cuenta en la expresión de inicialización a I. No se debe suponer que todas las variables se deben inicializar a cero. Si producto se inicializa a cero, seguiría siendo cero después de que el bucle anterior terminara.

### EL FINAL DE UN BUCLE

Tamaño de la secuencia de entrada: Si su programa puede determinar el tamaño de la secuencia de entrada por anticipado, bien preguntando al usuario o por algún otro método, se puede utilizar un bucle «repetir n veces» para leer la entrada exactamente n veces, en donde n es el tamaño de la secuencia.
Preguntar antes de la iteración: El segundo método para la terminación de un bucle de entrada es preguntar, simplemente al usuario, después de cada iteración del bucle, si el bucle debe ser o no iterado de nuevo, Este método es muy tedioso para listas grandes de números.
Valor centinela: El método más práctico y eficiente para terminar un bucle que lee una lista de valores del teclado es con un valor centinela. Un valor centinela es aquel que es totalmente distinto de todos los valores posibles de la lista que se está leyendo y de este modo indica el final de la lista. Un ejemplo típico se presenta cuando se lee una lista de números positivos; un número negativo se puede utilizar como un valor centinela para indicar el final de la lista.
Agotamiento de la entrada: Cuando se leen entradas de un archivo, se puede utilizar un valor centinela, aunque el método más frecuente es comprobar simplemente si todas las entradas del archivo han sido procesadas y se alcanza el final del bucle cuando no hay más entradas a leer. Éste es el método usual en la lectura de archivos, que se suele utilizar una marca al final de archivo.

### Otras técnicas de terminación de bucle

Un bucle controlado por contador: Es cualquier bucle que determina el número de iteraciones antes de que el bucle comience y a continuación repite (itera) el cuerpo del bucle esas iteraciones. La técnica de la secuencia de entrada precedida por su tamaño es un ejemplo de un bucle controlado por contador.
Condición bandera o señalizadora: Una variable que cambia su valor para indicar que algún suceso o evento ha tenido lugar, se denomina normalmente bandera o indicador. En el ejemplo anterior de suma de números, la variable bandera es número de modo que cuando toma un valor negativo significa que indica que la lista de entrada ha terminado.
Preguntar antes de iterar: se puede utilizar para bucles distintos de los bucles de entrada, pero el uso más común de esta técnica es para procesar la entrada.

### Bucles anidados

Es posible anidar bucles: Los bucles anidados constan de un bucle externo con uno o más bucles internos. Cada vez que se repite el bucle externo, los bucles internos se repiten, se vuelven a evaluar los componentes de control y se ejecutan todas las iteraciones requeridas.

### EJEMPLO

El triángulo isósceles se realiza mediante un bucle externo y dos bucles internos. Cada vez que se repite el bucle externo se ejecutan los dos bucles internos. El bucle externo se repite cinco veces (cinco filas); el número de repeticiones realizadas por los bucles internos se basan en el valor de la variable fila. El primer bucle interno visualiza los espacios en blanco no significativos; el segundo bucle interno visualiza uno o más asteriscos.
Solución: El bucle externo se repite cinco veces, uno por línea o fila; el número de repeticiones ejecutadas por los bucles internos se basa en el valor de fila. La primera fila consta de un asterisco y cuatro blancos, la fila 2 consta de tres blancos y tres asteriscos, y así sucesivamente; la fila 5 tendrá 9 asteriscos.

## CONCEPTOS

Break: La sentencia de 'break' es de tipo de control de bucles. Dentro de la iteración en un bucle, de cualquiera de los tipos (while, do-while, for), el uso de esta sentencia rompe la iteración de dicho bucle.
Bucle: Un bucle o instrucción de control repetitiva permite ejecutar una o más instrucciones varias veces, es decir, permite ejecutar un bloque de instrucciones repetidamente, escribiéndolas una sola vez en el algoritmo, reduciendo de este modo el código del mismo. A los bucles también se los conoce como ciclos o lazos.
Centinela: Un problema que tiene nuestra primera solución es que resulta poco amigable preguntarle al usuario después de cada cálculo si desea continuar. Se puede usar el método del centinela: un valor distinguido que, si se lee, le indica al programa que el usuario desea salir del ciclo.
While: La iteración continuará hasta que su condición sea falsa. while ( condición ) sentencia ; La condición tiene que tomar un valor booleano (verdadero o falso).
Bandera: se utiliza una variable booleana con frecuencia como indicadores o banderas de estado para controlar la ejecución de un bucle. El valor del indicador se inicializa (normalmente a falso "false") antes de la entrada al bucle y se redefine (normalmente a verdadero "true") cuando un suceso específico ocurre dentro del bucle.
Algoritmo: conjunto finito de instrucciones que se deben seguir para resolver un problema. No obstante, desde el punto de vista de la programación de ordenadores.

## Ejemplos (código) while.

### 1.WHILE DIGITOS

#include
int main ()
{
clrscr;
int numero, sum_dig=0;
printf ("Inserte un numero de 3 digitos: "); scanf("%d",&numero);
if (numero>=100)
{
int num=numero; //salvamos en num, la variable numero
while (numero! =0)
{
sum_dig=sum_dig+(numero%10); //para sacar el ultimo digito de numero numero=numero/10; //elimina el ultimo digito de numero
}
printf("La suma de los digitos de %d es : %d",num, sum_dig);
}
else
printf ("\a ERROR: El numero que ingresaste no tiene 3 digitos");
getch ();
return (0);
}

### 2.WHILE 1 AL 10

#include
main ()
{
int m,l;
clrscr();
m=1;
l=5;
gotoxy(30,2);printf("Serie while 1-10");
while(m<=10)
{
gotoxy(34,l);printf("%d",m);
m++;
l++;
}
getch();
return(0);
}

## Ejemplos (código) FOR.

#include
int main()
{
int contador=0;
for (; contador<5;)
{
contador++;
printf (“; Bucle!");
}
printf ("\n Contador: %d \n”, &contador);
return 0;
}
#include
void main ()
{
clrscr();
for(int i=10;i>0;i--)
{
for(int j=0;j {
cout< }
cout< }
getch ();
}

## Ejemplos (código) DO While.

#include
int main ()
{
int contador=2;
do {
printf("\n %d",contador);
contador++;
}
while(contador<200);
return 0;
}

## CONCLUSIÓN

En conclusión, se define como bucle a un grupo de sentencias que se ejecutan repetidamente hasta cumplir con una condición de salida, dicha condición puede darse a través de diferentes técnicas dependiendo la necesidad de el programador.
Entre las técnicas antes mencionadas encontramos, preguntar antes de iterar, un contador, valor centinela por mencionar algunos.
Dependiendo de la estructura repetitiva podemos utilizar una de las técnicas para finalizar el bucle, de igual manera estos pueden estar anidados conteniendo en su interior una mayor numero de sentencias y de iteraciones entre uno y otro bucle.

## Bibliografía y Referencias electrónicas

• Joyanes, Luis. (2003). Algoritmos, estructura de datos y objetos (2da Edición).McGraw-Hill.
• Borjas, V. (2012). Algoritmos, estructuras y programación I. Sitio web: https://profvanessaborjas.wordpress.com/2013/03/19/ejemplos-con-for-while-y-do-while/
• programación en C. Metodología, algoritmos y Estructura de Datos.Luis Joyanes Aguilar y Zahonero Martínez, i.Mcgraw-Hill / interamericana de España, s.a., 2006
• Los Operadores Incremento (++) y Decremento (--) en C - Curso de Lenguaje C de Carlos PesWebsitetitle:Carlospes.com.URL:http://www.carlospes.com/curso_de_lenguaje_c/01_08_06_operadores_incremento_y_decremento.php
• Libros Web.http://librosweb.es/libro/estructuas_de_control.html
• Teoría de los algoritmos. http://teoriasdelosalgoritmo.blogspot.mx/2013/02/estructura-de-control-repetitiva-grupo-7.html

## COMPLEMENTOS

Fundamentos de Programación - Estructuras de Control Repetitivas (While, DO_While y For) en C.