Vous êtes sur la page 1sur 32

Prof.

Robert Espinoza Dominguez

Estructuras de control repetitivas o


iterativas

Estructuras repetitivas

Tambin llamadas estructuras de iteracin o bucles


Los bucles permiten que un programa pueda repetir
una sentencia o grupo de sentencias un nmero
determinado o indeterminado de veces.

Bucles deterministas

Copiar 100 veces no hablar en clase

Bucles no deterministas:

Post-condicin
Echar una cucharada de azcar y mientras la chicha
est desabrida continuar agregando azcar
Pre-condicin
Mientras queden platos en el lavadero, coger plato,
lavarlo y secarlo

Estructuras repetitivas

Una condicin de control (expresin lgica) permite


controlar el nmero de repeticiones
Los bucles usualmente trabajan en secuencias finitas
controladas por la condicin

Existe un primer elemento y una forma de acceder a l

Existe una forma de pasar de un elemento al siguiente

Valor inicial del elemento a ser verificado por la condicin de


control
Modificar el valor del elemento por ejemplo por un contador

Existe una manera de identificar si un elemento es el


ltimo

Si la condicin de control es falsa

Bucles no deterministas

Bucle post-condicin: Hacer mientras


(do while)

La condicin de terminacin se evala despus de


cada iteracin

Bucle post-condicin: Hacer mientras


(do while)

En Pseudocdigo

En C++

Hacer
<sentencias>
Mientras (condicin)

do
{
<sentencias>
}while(<condicin>);

<sentencias_fuera>
<sentencias_fuera>
condicin

tiene que ir SIEMPRE


entre parntesis
<sentencias> se ejecuta 1 o ms veces

Bucle post-condicin: Hacer mientras


(do while)
cout << Hola mundo\n;
contador = 1;
do{
cout << -;
contador++;
while(contador <= 7);
Hola mundo
----------

Bucle post-condicin: Hacer mientras


(do while)

Ejemplo: clculo aproximado de e x

cin >> x;
cont=0; serie=0.0;
fact=1.0; pot=1.0;
do{
serie = serie + pot / fact;
cont++;
fact = fact * (float)cont;
pot = pot * x;
}while(pot/fact > 0.000001 );

Hasta que el
trmino sea menor
que 0.000001

No se sabe de antemano las veces que se itera el bucle

Vamos a mostrar la ejecucin de tres iteraciones

Bucle post-condicin: Hacer mientras


(do while)

Ejemplo: Validacin de entradas por teclado


do{
cout << Nmero de mes:;
cin >> mes;
}while (!( mes>=1 && mes<=12 ));

Validar nmero
de mes

do{
cout << Da del mes:;
cin >> dia;
}while (!( dia>=1 && dia<=31 ));

Validar da del
mes

Bucle post-condicin: Hacer mientras


(do while)

Ejemplo: Calcula el nmero positivo ms grande de una lista. La


entrada se realiza mientras los nmeros sean mayores que cero.

#include <iostream>
using namespace std;
int main(){
int num, max=0;
do{
cout << Introduce un numero: ;
cin >> num;
if( num > max )
max = num;
}while( num > 0 );
if( max!=0 )
cout << El numero mas grande es << max;
else
cout << No se han introducido numeros;
return 0;
}

Bucle pre-condicin: mientras (while)

La condicin de terminacin se evala antes de cada


iteracin

Bucle pre-condicin: mientras (while)

En Pseudocdigo

Mientras (condicin)hacer
<sentencias>
Fin mientras

En C++

while (condicin)
{
<sentencias>
}

<sentencias_fuera>
<sentencias_fuera>
condicin

tiene que ir SIEMPRE


entre parntesis
<sentencias> se ejecuta 0 ms veces

Bucle pre-condicin: mientras (while)

Algunos ejemplos muy utilizados son:

Bucle controlado por contador


Bucle controlado por centinela
Bucle contador

Bucle pre-condicin: mientras (while)

Bucle controlado por contador

Se ejecuta un numero determinado de veces

Se utiliza una variable de control del bucle

Componentes

Inicializacin

Comprobacin de la condicin

Actualizacin

i=0;
//Inicializacin
while(i<=10) //Comprobacin
{
//sentencias
i++;
//actualizacin
}

Bucle pre-condicin: mientras (while)

Bucle controlado por centinela

centinela valor especial de una variable que controla el


final del bucle

Es necesario actualizar el centinela en cada iteracin

La primera evaluacin de la condicin exige una


actualizacin adelantada de la variable de control del
bucle
cin >> centinela; //actualizacin adelantada
while(centinela!=0)
{
//sentencias
cin >> centinela; //actualizacin
}

Bucle pre-condicin: mientras (while)

Bucle contador

til cuando se quiere contar el nmero de veces que se


ejecuta el bucle
La condicin de terminacin no depende del contador

/*hace eco por pantalla de la entrada y cuenta


los caracteres hasta encontrarse un punto*/
contador = 0;
cin >> ch;
while(ch!=.)
{
cout << ch;
contador++;
cin >> ch;
}
cout << Caracteres leidos << contador;

Bucle pre-condicin: mientras (while)


/*Ejemplo de bucle contador: clculo de la media de una
lista de nmeros hasta introducir el cero */
#include <iostream>
using namespace std;
int main()
{
int i=0; float x, suma=0.0;
cout << Introduce un nmero: ;
cin >> x;
while ( x != 0 )
{
suma = suma + x;
i++;
cout << Introduce un nmero: ;
cin >> x;
}
if ( i != 0 )
cout << La media es << suma/(float)i;
else
cout << No se han introducido nmeros\n;
return 0;
}

ERROR comn

Olvidar actualizar la variable de control


en el cuerpo de la sentencia while o do

while, lo que genera un ciclo infinito

Bucles deterministas

El bucle Para (for)

El bucle Para (for)

Lo usaremos cuando el nmero de veces que se repite


el bucle se puede determinar a priori
Tendremos siempre una variable de control del bucle
(vcb)
En el cuerpo del bucle, vcb puede usarse, NUNCA
cambiarse

El bucle Para (for)

El bucle Para (for)


En Pseudocdigo
Para cont desde val_inicial hasta val_final <inc/dec> hacer
<sentencias>

Fin Para

En C++

for (<inicializacin>; <condicin>; <actualizacin>)


{
<sentencias>
}

El bucle Para (for)


for(i=1;i<10;i++)

/* i empieza tomando el valor 1,


cada vez que el bucle da una iteracin se incrementa en 1. El bucle
terminar cuando i sea igual a 10, es decir, el ltimo valor que i
tomar dentro del bucle ser 9 */

for(i=2;i<=128;i*=2)

/* i empieza tomando el valor


2; cada vez que el bucle da una iteracin i se multiplica por 2. Esto
continua mientras i sea menor o igual que 128. Los valores de i
dentro del bucle sern 2,4,8,16,32,64 y 128 */

for(j=10;j>0;j--)

/* j empieza tomando el valor 10,


cada vez que el bucle da una iteracin se decrementa en 1. El bucle
terminar cuando j sea igual a 0, es decir, el ltimo valor que i
tomar dentro del bucle ser 1. Se ejecuta 10 veces */

El bucle Para (for)

Ejemplo: Tabla de multiplicar

#include <iostream>
using namespace std;
int main(){
int i, num;
cout << Introduce un nmero :;
cin >> num;
for(i=1; i<=10; i++)
{
cout<<num<< x <<i<< = <<num*i;
cout<<endl;
}
return 0;
}

Introduce numero: 5
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50

El bucle Para (for)

Ejemplo: Factorial

#include <iostream>
using namespace std;
int main()
{
int factorial, i, num;
cout << Introduce un numero :;
cin >> num;
factorial=1;
for(i=1; i<=num; i++)
factorial*= i;
cout<<\nEl factorial es <<factorial;
return 0;
}

Introduce numero: 6
El factorial es 720

El bucle Para (for)


break y continue
La sentencia break se utiliza para forzar la salida de
un bucle independientemente de que se cumpla o no
la condicin de terminacin.
La sentencia continue termina la iteracin en curso y
vuelve a evaluar de nuevo la condicin de terminacin
del bucle.
En programacin estructurada, no es recomendable el
uso de este tipo de sentencias y por lo tanto NO LAS
USAREMOS

El bucle Para (for)


Anidamiento de bucles
Al igual que en las estructuras selectivas, no hay
restricciones en las sentencias del cuerpo del bucle
La estructura interna debe de estar totalmente incluida
en la externa

El bucle Para (for) - Anidamiento

Ejemplo: Escribe un rectngulo de asteriscos

#include <iostream>
using namespace std;
int main()
{
int i, j;
for(i=1;i<=3;i++)
{
for(j=1;j<=8;j++)
cout << *;
cout << \n;
}
return 0;
}

********
********
********

El bucle Para (for) - Anidamiento

Ejemplo: Escribe un tringulo de asteriscos

/*Escribe un rectngulo de asteriscos*/


#include <iostream>
using namespace std;
int main()
{
int i, j;
for(i=1;i<=3;i++)
{
for(j=1;j<= i ;j++)
cout << *;
cout << \n;
}
return 0;
}

*
**
***

El bucle Para (for) - Anidamiento

Ejercicio:

Basndote en el cdigo anterior, modifica el programa


para que obtenga los ejemplos adjuntos. La altura del
tringulo se pide por teclado.

Introduce altura: 3
1
12
123

Introduce altura: 4
1
121
12321
1234321

Bucles infinitos

Un bucle infinito es un bucle que nunca acaba

Normalmente se produce cuando un bucle no alcanza la


condicin de finalizacin
suma = 0;
N = 0;
while (N <= 100)
suma = suma + N;
cout << suma;

suma = 0;
N = 0;
while (N <= 100);
{
suma = suma + N;
N++;
}
cout << suma;

Mucho cuidado con los puntos y coma tras las condiciones.

Por tanto, al disear un bucle, hay que comprobar siempre que


las condiciones de finalizacin sern alcanzadas

Vous aimerez peut-être aussi