You are on page 1of 25

Estructuras bsicas de control del flujo de ejecucin LA ITERACIN EN C++

Contenido
La iteracin en C++ Bucles a priori, la instruccin while Bucles a posteriori, la instruccin do.. while Bucles controlados por contador, la instruccin for

Tema 3 - 1

Estructura de la iteracin en C++


En C++ la estructura de un bucle consta siempre de: Una instruccin de repeticin, delimita la seccin repetitiva del cdigo y controla su ejecucin: while for do...while

Una condicin, el cdigo (cuerpo del bucle) se ejecuta slo si la condicin es verdadera.
Una instruccin para inicializar correctamente el valor de la condicin. Una instruccin en el cuerpo del bucle que garantice su interrupcin.
Tema 3 - 2

Bucles a priori: while


while(condicin) instruccin; while(condicin) {
secuencia de instrucciones;

}
Condicin debe ser tipo bool

Tema 3 - 3

Bucles a priori: while


int cuenta; while (cuenta <= 10) cout << cuenta;

int cuenta = 1; while (cuenta <= 10) cout << cuenta;

Tema 3 - 4

Bucles a priori: while

int cuenta = 1; while (cuenta <= 10){ cout << cuenta; cuenta ++; }

Tema 3 - 5

Bucles a priori: while


// Salida de este programa?
#include <iostream.h> int main () { int i = 10; while (i >= 1){ cout << i << ; i--; } return 0; }

Tema 3 - 6

Bucles a priori: while


// Salida de este programa?
#include int main { int n while <iostream.h> () = 10, p, x = 1; (n != 0) { if (n % 2 == 1) p = p + x; cout << p; n = (int) n / 2;

} return 0; }

Tema 3 - 7

Bucles a priori: while


// Salida de este programa?
#include int main { int x while <iostream.h> () = 1; (x > 0) { x--; if (x == 0) x = 1;

} return 0;

Tema 3 - 8

Bucles a priori: while

ejemplo

while

// Ejemplo: programa que calcule cuadrado y cubo de los n primeros naturales

Tema 3 - 9

Bucles a priori: while


#include <iostream.h> #include <iomanip.h> int main () { int num; cout << Este programa calcula el cuadrado y el cubo de los n primeros naturales << \n; cout << Introduzca valor del numero mximo del que desea calcular cuadrado y cubo: << \n; cin >> num; cout << NUMERO\tCUADRADO\tCUBO\n; cout << ------ -----------\n; int i = 1; //Variable para llevar la iteracion while (i <= num) { cout << setw(3) << i << \t << setw(3) << i*i << \t << setw(3) << i*i*i << \t <<endl; i++; } return 0; }

ejemplo

while

Tema 3 - 10

Bucles a priori: while

ejemplo

while

// Ejemplo: programa que sume y promedie de los enteros en el rango especificado

Tema 3 - 11

Bucles a priori: while

ejemplo

while

#include <iostream.h> #include <iomanip.h> int main () { int cuenta; double suma = 0.0; int primero, ultimo, temp; cout << Este programa calcula la suma y el promedio del rango de enteros\nintroducidos por Vd. << \n; cout << Introduzca limite inferior del rango: << \n; cin >> primero; cout << Introduzca limite superior del rango: << \n; cin >> ultimo; if (primero > ultimo) { temp = primero; primero = ultimo; ultimo = temp; } cout << Suma de enteros desde << primero << hasta << ultimo << = ; while (primero <= ultimo) { cuenta ++; suma += (double) primero++; } cout << suma << endl; cout << El promedio vale: << suma/cuenta << endl; return 0; } Tema 3 - 12

Bucles a priori: while

ejemplo: centinelas

while

// Ejemplo: clculo de la vida media de los circuitos. El usuario introduce valores correspondientes a los tiempos de fallo de las componentes de un circuito electrnico. La vida media del circuito es la media de los tiempos de fallo de sus componentes. Para marcar el fin de la introduccin de datos el usuario introduce un valor negativo.

Tema 3 - 13

Bucles a priori: while

ejemplo centinelas

#include <iostream.h> #include <iomanip.h> int main () { int cuenta = 0; double suma = 0.0; int TiempoFallo; cout << Este programa calcula la vida media de un circuito. << \n; //Validez de var control en la 1 vuelta cout << Introduzca tiempo de fallo de componente (0 para terminar): ; cin >> TiempoFallo; while (TiempoFallo != 0) { cuenta ++; suma += (double) TiempoFallo; cout << Introduzca tiempo de fallo de componente (0 para terminar): ; cin >> TiempoFallo; } //Compruebo que al menos hay un dato if (cuenta != 0){ cout << Vida Media del circuito = << suma/cuenta; } else cout << No ha introducido datos; return 0; }

while

Tema 3 - 14

Bucles a priori: while


#include <iostream.h> int main () { int cuenta = 0; char caracter; bool FaltaLeer = true; const char centinela = @; while (FaltaLeer); { cuenta ++; cin << cuenta; if (caracter = = centinela) FaltaLeer = false; } cout << Se han introducido << caracteres.; return 0; } ERROR?

<<

cuenta

Tema 3 - 15

Bucles a priori: while


#include <iostream.h> int main () { int cuenta = 0; char caracter; bool FaltaLeer = true; const char centinela = @; while (FaltaLeer); { cuenta ++; cin << cuenta; if (caracter = = centinela) FaltaLeer = false; } cout << Se han introducido << caracteres.; return 0; } ERROR?

<<

cuenta

Tema 3 - 16

Bucles a priori: while


ERRORES EN LA CONDICIN: Utilizacin de = en lugar de ==.

Fallos al codificar relaciones entre varias variables.


Cuidado con el == y el != cuando se comparen cantidades reales. Es mucho ms seguro comparar a menor con una cantidad aceptablemente pequea

Tema 3 - 17

Bucles a posteriori: do...while


do
instruccin

while(condicin); do {
secuencia de instrucciones

instruccin

} while(condicin); true
El cuerpo del bucle se ejecuta siempre al menos una vez expresin booleana

false
Tema 3 - 18

Bucles a posteriori: do...while

ejemplo: centinelas

do...while

// Ejemplo: clculo de la vida media de los circuitos. El usuario introduce valores correspondientes a los tiempos de fallo de las componentes de un circuito electrnico. La vida media del circuito es la media de los tiempos de fallo de sus componentes. Para marcar el fin de la introduccin de datos el usuario introduce un valor negativo.

Tema 3 - 19

#include <iostream.h> #include <iomanip.h> int main () { int cuenta = 0; double suma = 0.0; int TiempoFallo; cout << Este programa calcula la vida media de un circuito. << \n; do { cout << Introduzca tiempo de fallo de componente (0 para terminar): ; cin >> TiempoFallo; if ( TiempoFallo != 0) cuenta++; } while (TiempoFallo != 0); if (cuenta != 0) cout << Vida Media del circuito = << suma/cuenta; else cout << No ha introducido datos; return 0; }

Bucles a posteriori: do...while

ejemplo: centinelas

do...while

Tema 3 - 20

Bucles a posteriori: do...while

ejemplo: revisiones de validez

do...while

// Ejemplo: Se solicita al usuario introducir


un numero vlido en el rango 1000 y 1999.
do { cout << Introduzca un numero entre 1000 y 1999: ; cin >> Numero; } while ((Numero <1000) || (Numero > 1999));

Tema 3 - 21

Bucles a posteriori: do...while


Es til en cualquier situacin en la que sea necesario ejecutar al menos una vuelta del ciclo.

Especialmente adecuado cuando se leen datos del teclado hasta detectar un carcter centinela
Diferencia bsica con WHILE: ejecuta el cuerpo del bucle al menos una vez (WHILE puede no llegar a ejecutarse nunca) Cualquier estructura do..while es reemplazable mediante un while con una vuelta adicional del bucle.
Tema 3 - 22

Bucles con contador: for


for(inicializacin; condicin; incremento) instruccin; La inicializacin normalmente es una instruccin de asignacin que se utiliza para inicializar la variable de control del bucle. La condicin es una expresin relacional que determina cundo finaliza el bucle. El incremento define cmo cambia la variable de control Declaracin de la variable cada vez que se repite el bucle.
int main() { for(int x = 1; x <= 100; x++) Aunque la forma de las secciones puede ser cout << x; bastante complicada, usaremos esta forma sencilla return 0; } Tema 3 - 23 de control directamente dentro del for

Interrupcin de iteraciones: break y continue


La instruccin break Adems de terminar los case de una instruccin switch, sirve para forzar la terminacin inmediata de un bucle
for(t = 0; t < 100; t++) { cout << t; if(t = = 10) break; // salir del for }

La instruccin continue
do {
cin >> x; if(x < 0) continue; cout << x; } while(x != 100);

Fuerza una nueva iteracin en un bucle

// ignorar lo que sigue y volver // a comprobar la condicin

Tema 3 - 24

You might also like