Title: Estructuras bsicas de control del flujo de ejecucin LA ITERACIN EN C
1Estructuras básicas de control del flujo de
ejecuciónLA ITERACIÓN EN C
Departamento de Sistemas Informáticos y
Programación
- Facultad de CC. FísicasLaboratorio de
Programación curso 05/06 TEMA 3
2Contenido
-
- La iteración en C
- Bucles a priori, la instrucción
- while
- Bucles a posteriori, la instrucción
- do.. while
- Bucles controlados por contador, la instrucción
- for
3Estructura de la iteración en C
- En C la estructura de un bucle consta siempre
de - Una instrucción de repetición, delimita la
sección repetitiva del código y controla su
ejecución - while
- for
- do...while
- Una condición, el código (cuerpo del bucle) se
ejecuta sólo si la condición es verdadera. - Una instrucción para inicializar correctamente el
valor de la condición. - Una instrucción en el cuerpo del bucle que
garantice su interrupción.
4Bucles a priori while
-
- while(condición) instrucción
- while(condición)
- secuencia de instrucciones
-
Condición debe ser tipo bool
5Bucles a priori while
-
- int cuenta
- while (cuenta lt 10)
- cout ltlt cuenta
int cuenta 1 while (cuenta lt 10) cout ltlt
cuenta
6Bucles a priori while
-
- int cuenta 1
- while (cuenta lt 10)
- cout ltlt cuenta
- cuenta
-
7Bucles a priori while
- // Salida de este programa?
- include ltiostream.hgt
- int main ()
-
- int i 10
- while (i gt 1)
- cout ltlt i ltlt
- i--
-
- return 0
-
8Bucles a priori while
- // Salida de este programa?
- include ltiostream.hgt
- int main ()
-
- int n 10, p, x 1
- while (n ! 0)
- if (n 2 1) p p x
- cout ltlt p
- n (int) n / 2
-
- return 0
9Bucles a priori while
- // Salida de este programa?
- include ltiostream.hgt
- int main ()
-
- int x 1
- while (x gt 0)
- x--
- if (x 0) x 1
-
- return 0
10Bucles a priori while
ejemplo while
- // Ejemplo programa que calcule cuadrado y cubo
de los n primeros naturales
11Bucles a priori while
ejemplo while
- include ltiostream.hgt
- include ltiomanip.hgt
- int main ()
-
- int num
- cout ltlt Este programa calcula el cuadrado y el
cubo de los n primeros naturales ltlt \n - cout ltlt Introduzca valor del numero máximo del
que desea calcular cuadrado y cubo ltlt \n - cin gtgt num
- cout ltlt NUMERO\tCUADRADO\tCUBO\n
- cout ltlt ------ -------- ----\n
- int i 1 //Variable para llevar la iteracion
- while (i lt num)
- cout ltlt setw(3) ltlt i ltlt \t
- ltlt setw(3) ltlt ii ltlt \t
- ltlt setw(3) ltlt iii ltlt \t ltltendl
- i
-
- return 0
12Bucles a priori while
ejemplo while
- // Ejemplo programa que sume y promedie de los
enteros en el rango especificado
13Bucles a priori while
ejemplo while
- include ltiostream.hgt
- include ltiomanip.hgt
- int main ()
-
- int cuenta
- double suma 0.0
- int primero, ultimo, temp
- cout ltlt Este programa calcula la suma y el
promedio del rango de enteros\nintroducidos por
Vd. ltlt \n - cout ltlt Introduzca limite inferior del rango
ltlt \n - cin gtgt primero
- cout ltlt Introduzca limite superior del rango
ltlt \n - cin gtgt ultimo
- if (primero gt ultimo)
- temp primero
- primero ultimo
- ultimo temp
-
- cout ltlt Suma de enteros desde ltlt primero ltlt
hasta ltlt ultimo ltlt - while (primero lt ultimo)
14Bucles a priori while
ejemplo centinelas while
- // Ejemplo cálculo de la vida media de los
circuitos. El usuario introduce valores
correspondientes a los tiempos de fallo de las
componentes de un circuito electrónico. La vida
media del circuito es la media de los tiempos de
fallo de sus componentes. Para marcar el fin de
la introducción de datos el usuario introduce un
valor negativo.
15Bucles a priori while
ejemplo centinelas while
- include ltiostream.hgt
- include ltiomanip.hgt
- int main ()
-
- int cuenta 0
- double suma 0.0
- int TiempoFallo
- cout ltlt Este programa calcula la vida media de
un circuito. - ltlt \n
- //Validez de var control en la 1ª vuelta
- cout ltlt Introduzca tiempo de fallo de
componente (0 para terminar) - cin gtgt TiempoFallo
- while (TiempoFallo ! 0)
- cuenta
- suma (double) TiempoFallo
- cout ltlt Introduzca tiempo de fallo de
componente (0 para terminar) - cin gtgt TiempoFallo
-
- //Compruebo que al menos hay un dato
16Bucles a priori while
- include ltiostream.hgt
- int main ()
-
- int cuenta 0
- char caracter
- bool FaltaLeer true
- const char centinela _at_
- while (FaltaLeer)
- cuenta
- cin ltlt cuenta
- if (caracter centinela)
- FaltaLeer false
-
- cout ltlt Se han introducido ltlt cuenta ltlt
caracteres. - return 0
-
ERROR?
17Bucles a priori while
- include ltiostream.hgt
- int main ()
-
- int cuenta 0
- char caracter
- bool FaltaLeer true
- const char centinela _at_
- while (FaltaLeer)
- cuenta
- cin ltlt cuenta
- if (caracter centinela)
- FaltaLeer false
-
- cout ltlt Se han introducido ltlt cuenta ltlt
caracteres. - return 0
-
ERROR?
18Bucles a priori while
- ERRORES EN LA CONDICIÓN
- Utilización de en lugar de .
- Fallos al codificar relaciones entre varias
variables. - Cuidado con el y el ! cuando se comparen
cantidades reales. Es mucho más seguro comparar a
menor con una cantidad aceptablemente pequeña
19Bucles a posteriori do...while
-
- do
- instrucción
- while(condición)
- do
- secuencia de instrucciones
- while(condición)
El cuerpo del bucle se ejecuta siempre al menos
una vez
20Bucles a posteriori do...while
ejemplo centinelas do...while
- // Ejemplo cálculo de la vida media de los
circuitos. El usuario introduce valores
correspondientes a los tiempos de fallo de las
componentes de un circuito electrónico. La vida
media del circuito es la media de los tiempos de
fallo de sus componentes. Para marcar el fin de
la introducción de datos el usuario introduce un
valor negativo.
21Bucles a posteriori do...while
ejemplo centinelas do...while
- include ltiostream.hgt
- include ltiomanip.hgt
- int main ()
-
- int cuenta 0
- double suma 0.0
- int TiempoFallo
- cout ltlt Este programa calcula la vida media de
un circuito. - ltlt \n
- do
- cout ltlt Introduzca tiempo de fallo de
componente (0 para terminar) - cin gtgt TiempoFallo
- if ( TiempoFallo ! 0) cuenta
- while (TiempoFallo ! 0)
- if (cuenta ! 0)
- cout ltlt Vida Media del circuito ltlt
suma/cuenta - else cout ltlt No ha introducido datos
- return 0
22Bucles a posteriori do...while
ejemplo revisiones de validez do...while
- // Ejemplo Se solicita al usuario introducir un
numero válido en el rango 1000 y 1999. - do
- cout ltlt Introduzca un numero entre 1000 y
1999 - cin gtgt Numero
-
- while ((Numero lt1000) (Numero gt 1999))
23Bucles a posteriori do...while
- Es útil en cualquier situación en la que sea
necesario ejecutar al menos una vuelta del ciclo. - Especialmente adecuado cuando se leen datos del
teclado hasta detectar un carácter centinela - Diferencia básica 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.
24Bucles con contador for
- for(inicialización condición incremento)
instrucción - La inicialización normalmente es una instrucción
de asignación que se utiliza para inicializar la
variable de control del bucle. - La condición es una expresión relacional que
determina cuándo finaliza el bucle. - El incremento define cómo cambia la variable de
control cada vez que se repite el bucle. - int main()
-
- for(int x 1 x lt 100 x)
- cout ltlt x
- return 0
Declaración de la variable de control
directamente dentro del for
Aunque la forma de las secciones puede ser
bastante complicada, usaremos esta forma sencilla
25Interrupción de iteraciones break y continue
- La instrucción break
- Además de terminar los case de una instrucción
switch,sirve para forzar la terminación
inmediata de un bucle - for(t 0 t lt 100 t)
- cout ltlt t
- if(t 10) break // salir del for
-
- La instrucción continue Fuerza una nueva
iteración en un bucle - do
- cin gtgt x
- if(x lt 0) continue // ignorar lo que sigue y
volver - cout ltlt x // a comprobar la
condición - while(x ! 100)