Estructuras de control ii

13
1 Natividad Natividad Mart Martí nez Madrid nez Madrid [email protected] [email protected] Tema Tema 7 Estructuras de control (II) Representaci Representación de de Datos Datos y y Aplicaciones Aplicaciones Tema 7: Estructuras de control (II) Representación de Datos y Aplicaciones 2 © Natividad Martínez Madrid Objetivos del tema 7 Aprender a diseñar algoritmos sencillos para la solución de problemas Aprender a representar de forma abstracta los algoritmos en forma de organigrama Conocer las estructuras de control de repetición proporcionadas por Java y saber aplicarlas correctamente Conocer las estructuras de control de salto proporcionadas por Java y saber aplicarlas correctamente

description

 

Transcript of Estructuras de control ii

Page 1: Estructuras de control ii

1

NatividadNatividad MartMartíínez Madridnez [email protected]@it.uc3m.es

TemaTema 77Estructuras de control (II)

RepresentaciRepresentacióónn de de DatosDatos y y AplicacionesAplicaciones

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 2© Natividad Martínez Madrid

Objetivos del tema 7

● Aprender a diseñar algoritmos sencillos para la solución de problemas

● Aprender a representar de forma abstracta los algoritmos en forma de organigrama

● Conocer las estructuras de control de repetición proporcionadas por Java y saber aplicarlas correctamente

● Conocer las estructuras de control de salto proporcionadas por Java y saber aplicarlas correctamente

Page 2: Estructuras de control ii

2

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 3© Natividad Martínez Madrid

Contenido del tema 7

● Concepto de bucle● Estructuras de repetición● Anidamiento de estructuras de control● Estructuras de salto● Criterios de utilización

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 4© Natividad Martínez Madrid

Bucles

● Bloque de sentencias se repite hasta que deja de cumplirse una condición

● Son también llamadas sentencias de repetición o de iteración

● Tipos de bucles:―Bucle while―Bucle do-while―Bucle for

Número indeterminado de repeticiones

Número determinado de repeticiones

Page 3: Estructuras de control ii

3

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 5© Natividad Martínez Madrid

Bucle while

● Sintaxis:while (condición) {

sentencias}

● Donde―condición es una expresión booleana que se evalúa al

principio del bucle y antes de cada iteración de las sentencias

―Si la condición es verdadera, se ejecuta el bloque de sentencias, y se vuelve al principio del bucle

―Si la condición es falsa, no se ejecuta el bloque de sentencias, y se continúa con la siguiente sentencia del programa

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 6© Natividad Martínez Madrid

Diagrama del bucle while

sentenciascondición

false

true

Page 4: Estructuras de control ii

4

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 7© Natividad Martínez Madrid

Características del bucle while

● Si la condición es falsa desde un principio, entonces el bucle nunca se ejecuta―Por eso se dice que el bucle while se ejecuta cero o

más veces

● Si la condición nunca llega a ser falsa, tenemos un bucle infinito

● La condición se denomina invariante del bucle

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 8© Natividad Martínez Madrid

Ejemplo: Bucle while

● Bucle tipo contadorint 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―Condición de final de bucle

Page 5: Estructuras de control ii

5

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 9© Natividad Martínez Madrid

Ejercicio: Bucle while

● Escribir un programa que calcule si un número es primo

1 2 3 4 . . . n/2 . . . . . n

―Empezando desde 2, comprobamos si cada número es un divisor entero de n

―Sólo 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)Representación de Datos y Aplicaciones 10© Natividad Martínez Madrid

Ejercicio: Diagrama del bucle while

esPrimo = false

divisor < n / 2&&

esPrimo

false

true

divisor = 2esPrimo = true

n % divisor == 0

divisor++

true

false

Page 6: Estructuras de control ii

6

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 11© Natividad Martínez Madrid

Ejercicio: Bucle whilepublic 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.”);

elseSystem.out.println(“ no es primo.”);

}}

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 12© Natividad Martínez Madrid

Ejemplo: Bucle while

int factorial (int n) {

int fact = 1;

while (n < 0) {

fact = fact * n;

}

return fact;

}

● ¿Qué problema tiene este código?

Page 7: Estructuras de control ii

7

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 13© Natividad Martínez Madrid

Bucle do-while

● Sintaxis:do {

sentencias} while (condición);

● Sentencia muy parecida a while―El bloque de sentencias se repite mientras se cumpla

una condición―La condición se comprueba después de ejecutar el

bloque de sentencias―El bloque se ejecuta siempre al menos una vez

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 14© Natividad Martínez Madrid

Diagrama del bucle do-while

sentencias

condición

false

true

Page 8: Estructuras de control ii

8

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 15© Natividad Martínez Madrid

Ejemplo: Bucle do-while

● Escribid un programa que pida al usuario introducir un número entero entre 1 y 100―Hasta que el número introducido sea efectivamente

mayor que 1 y menor que 100

● Y después lo imprima en pantalla

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 16© Natividad Martínez Madrid

Ejemplo: Bucle do-while

leer n de teclado

n < 0 ||

n > 100

false

imprimir n

true

Page 9: Estructuras de control ii

9

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 17© Natividad Martínez Madrid

Ejemplo: Bucle do-whileimport 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 número 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)Representación de Datos y Aplicaciones 18© Natividad Martínez Madrid

Bucle for

● Sintaxisfor (inicialización ; condición ; actualización) {

sentencias}

● Donde―La inicialización se realiza sólo una vez, antes de la

primera iteración―La condición se comprueba cada vez antes de entrar

al bucle. Si es cierta, se entra. Si no, se termina―La actualización se realiza siempre al terminar de

ejecutar la iteración, antes de volver a comprobar la condición

Page 10: Estructuras de control ii

10

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 19© Natividad Martínez Madrid

Diagrama del bucle for

sentencias

condición

false

true

inicialización

actualización

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 20© Natividad Martínez Madrid

Ejemplo: Bucle forpublic class ListaCaracteres {

public static void main (String[] args) {for (char c = 0; c < 128; c++) {

if (c != 26) // caracter para borrar pantallaSystem.out.println(“Valor: “ + (int)c

+ “\t Carácter: “ + c);}

}

Page 11: Estructuras de control ii

11

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 21© Natividad Martínez Madrid

Ejercicio: Bucle do-while

● Escribid un programa que calcule una aproximación a la raíz cuadrada de un número nmediante un método iterativo―Cada nuevo valor aproximado se computa a partir del

anterior según la fórmula:

―El valor inicial de la secuencia de aproximaciones es

―Terminar el cálculo cuando la diferencia entre las dos últimas aproximaciones sea menor que 10-4

Usar double Math.abs(double n) para el valor absoluto

2' x

nxx

+=

2n

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 22© Natividad Martínez Madrid

Criterios de utilización de bucles

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

● do-while―Si la parte de ejecución del bucle se ha de hacer al

menos una vez● for

―Si se sabe el número de veces que se ha de repetir el bucle

―Si utilizar la inicialización y actualización del bucle permite escribir el código de forma más clara

―Si se realiza un recorrido en una esrtuctura de almacenamiento

Page 12: Estructuras de control ii

12

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 23© Natividad Martínez Madrid

Estructuras de salto

● Sentencia break―Termina la ejecución de una sentencia de repetición o

de un switch―Continua con la siguiente instrucción

● Sentencia continue―Sólo en estructuras de repetición―Se termina la ejecución de ese paso de repetición y

se vuelve a evaluar la condición del bucle

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 24© Natividad Martínez Madrid

Ejemplo: Sentencia breakpublic 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.”);}

}

Page 13: Estructuras de control ii

13

Tema 7: Estructuras de control (II)Representación de Datos y Aplicaciones 25© Natividad Martínez Madrid

Ejemplo: Sentencia continuepublic 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)Representación de Datos y Aplicaciones 26© Natividad Martínez Madrid

Utilización de estructuras de salto

● Habitualmente, no ofrecen grandes mejoras respecto a no usarlo

● Para un principiante, se recomienda evitar su uso