Estructuras de control ii
description
Transcript of 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
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
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
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
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
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?
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
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
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
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);}
}
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
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.”);}
}
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