Está en la página 1de 13

Representacin de Datos y Aplicaciones Representaci

Tema 7 Estructuras de control (II)

Natividad Martnez Madrid Mart nati@it.uc3m.es

Objetivos del tema 7


Aprender a disear algoritmos sencillos para la solucin de problemas Aprender a representar de forma abstracta los algoritmos en forma de organigrama Conocer las estructuras de control de repeticin proporcionadas por Java y saber aplicarlas correctamente Conocer las estructuras de control de salto proporcionadas por Java y saber aplicarlas correctamente
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 2

Contenido del tema 7


Concepto de bucle Estructuras de repeticin Anidamiento de estructuras de control Estructuras de salto Criterios de utilizacin

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

Bucles
Bloque de sentencias se repite hasta que deja de cumplirse una condicin Son tambin llamadas sentencias de repeticin o de iteracin Tipos de bucles:
Bucle while Bucle do-while Bucle for
Nmero indeterminado de repeticiones Nmero determinado de repeticiones

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

Bucle while
Sintaxis:
while (condicin) { sentencias }

Donde
condicin es una expresin booleana que se evala al principio del bucle y antes de cada iteracin de las sentencias Si la condicin es verdadera, se ejecuta el bloque de sentencias, y se vuelve al principio del bucle Si la condicin es falsa, no se ejecuta el bloque de sentencias, y se contina con la siguiente sentencia del programa
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 5

Diagrama del bucle while

condicin false

true

sentencias

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

Caractersticas del bucle while


Si la condicin es falsa desde un principio, entonces el bucle nunca se ejecuta
Por eso se dice que el bucle while se ejecuta cero o ms veces

Si la condicin nunca llega a ser falsa, tenemos un bucle infinito La condicin se denomina invariante del bucle

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

Ejemplo: Bucle while


Bucle tipo contador
int i = 0; while (i < 10) { System.out.println (i); i++; } Contador de bucle Valor inicial del contador de bucle Incremento (o decremento) del contador en el cuerpo del bucle Condicin de final de bucle
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 8

Ejercicio: Bucle while


Escribir un programa que calcule si un nmero es primo
1 2 3 4 . . . n/2 . . . . . n

Empezando desde 2, comprobamos si cada nmero es un divisor entero de n Slo hace falta repetirlo hasta n/2 O hasta que encontremos un divisor entero Para esto utilizaremos un centinela
Variable booleana a la que asignaremos valores y que nos ayudar en el control del bucle
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

Ejercicio: Diagrama del bucle while


divisor = 2 esPrimo = true

divisor < n / 2 && esPrimo true n % divisor == 0 false divisor++

false

true

esPrimo = false

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

10

Ejercicio: Bucle while


public class Primo { public static void main (String[] args) { int numero; int divisor; boolean esPrimo; numero = 101; divisor = 2; esPrimo = true; while ((divisor < numero /2) && esPrimo) { if (numero % divisor == 0) esPrimo = false; divisor++; } System.out.println(El numero +numero); if (esPrimo) System.out.println( es primo.); else System.out.println( no es primo.); } }
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 11

Ejemplo: Bucle while


int factorial (int n) { int fact = 1; while (n < 0) { fact = fact * n; } return fact; }

Qu problema tiene este cdigo?

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

12

Bucle do-while
Sintaxis:
do { sentencias } while (condicin);

Sentencia muy parecida a while


El bloque de sentencias se repite mientras se cumpla una condicin La condicin se comprueba despus de ejecutar el bloque de sentencias El bloque se ejecuta siempre al menos una vez
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 13

Diagrama del bucle do-while

sentencias

condicin false

true

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

14

Ejemplo: Bucle do-while


Escribid un programa que pida al usuario introducir un nmero entero entre 1 y 100
Hasta que el nmero introducido sea efectivamente mayor que 1 y menor que 100

Y despus lo imprima en pantalla

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

15

Ejemplo: Bucle do-while

leer n de teclado

n<0 || n > 100 true imprimir n

false

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

16

Ejemplo: Bucle do-while


import java.io.*; public class PedirNumero { public static void main (String[] args) throws IOException{ int numero; String linea; BufferedReader teclado = new BufferedReader( new InputStreamReader(System.ini)); do { System.out.println(Introduce un nmero entre 1 y 100:); linea = teclado.readLine(); numero = Integer.parseInt(linea); } while (numero < 1 || numero > 100); System.out.println(El numero introducido es: + numero); } }

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

17

Bucle for
Sintaxis
for (inicializacin ; condicin ; actualizacin) { sentencias }

Donde
La inicializacin se realiza slo una vez, antes de la primera iteracin La condicin se comprueba cada vez antes de entrar al bucle. Si es cierta, se entra. Si no, se termina La actualizacin se realiza siempre al terminar de ejecutar la iteracin, antes de volver a comprobar la condicin
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

18

Diagrama del bucle for

inicializacin

condicin false

true sentencias

actualizacin

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

19

Ejemplo: Bucle for


public class ListaCaracteres { public static void main (String[] args) { for (char c = 0; c < 128; c++) { if (c != 26) // caracter para borrar pantalla System.out.println(Valor: + (int)c + \t Carcter: + c); } }

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

20

10

Ejercicio: Bucle do-while


Escribid un programa que calcule una aproximacin a la raz cuadrada de un nmero n mediante un mtodo iterativo
Cada nuevo valor aproximado se computa a partir del anterior segn la frmula: n x+ x x' = 2 El valor inicial de la secuencia de aproximaciones es Terminar el clculo cuando la diferencia entre las dos ltimas aproximaciones sea menor que 10-4
Usar double Math.abs(double n) para el valor absoluto
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 21

n 2

Criterios de utilizacin de bucles


while
Si hay casos en los que el bucle no se ejecute

do-while
Si la parte de ejecucin del bucle se ha de hacer al menos una vez

for
Si se sabe el nmero de veces que se ha de repetir el bucle Si utilizar la inicializacin y actualizacin del bucle permite escribir el cdigo de forma ms clara Si se realiza un recorrido en una esrtuctura de almacenamiento
Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones Natividad Martnez Madrid 22

11

Estructuras de salto
Sentencia break
Termina la ejecucin de una sentencia de repeticin o de un switch Continua con la siguiente instruccin

Sentencia continue
Slo en estructuras de repeticin Se termina la ejecucin de ese paso de repeticin y se vuelve a evaluar la condicin del bucle

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

23

Ejemplo: Sentencia break


public class Primo { public static void main (String[] args) { int numero; int divisor; boolean esPrimo; numero = 101; divisor = 2; esPrimo = true; while (divisor < numero /2) { if (numero % divisor == 0) { esPrimo = false; break; } divisor++; } System.out.println(El numero +numero); if (esPrimo) System.out.println( es primo.); else System.out.println( no es primo.); } }

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

24

12

Ejemplo: Sentencia continue


public class Letras { public static void main (String[] args) { String texto = En un lugar de la mancha, de cuyo ...; for (int I = 0; I < texto.length(); i++) { if (!Character.isLetter(texto.charAt(i))) { continue; } System.out`print(texto.charAt(i)); } } }

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

25

Utilizacin de estructuras de salto


Habitualmente, no ofrecen grandes mejoras respecto a no usarlo Para un principiante, se recomienda evitar su uso

Tema 7: Estructuras de control (II) Representacin de Datos y Aplicaciones

Natividad Martnez Madrid

26

13

También podría gustarte