Contenu connexe
Similaire à Estructuras de control ii
Similaire à Estructuras de control ii (20)
Plus de Whaleejaa Wha (20)
Estructuras de control ii
- 1. Representación de Datos y Aplicaciones
Representació
Tema 7
Estructuras de control (II)
Natividad Martínez Madrid
Martí
nati@it.uc3m.es
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
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 2
1
- 2. 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 © Natividad Martínez Madrid 3
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
Número indeterminado de repeticiones
― Bucle do-while
― Bucle for Número determinado de repeticiones
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 4
2
- 3. 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 © Natividad Martínez Madrid 5
Diagrama del bucle while
true
condición sentencias
false
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 6
3
- 4. 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 © Natividad Martínez Madrid 7
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
― Condición de final de bucle
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 8
4
- 5. 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 © Natividad Martínez Madrid 9
Ejercicio: Diagrama del bucle while
divisor = 2
esPrimo = true
divisor < n / 2 false
&&
esPrimo
true
n % divisor == 0 true esPrimo = false
false
divisor++
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 10
5
- 6. 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)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 11
Ejemplo: Bucle while
int factorial (int n) {
int fact = 1;
while (n < 0) {
fact = fact * n;
}
return fact;
}
● ¿Qué problema tiene este código?
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 12
6
- 7. 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 © Natividad Martínez Madrid 13
Diagrama del bucle do-while
sentencias
true
condición
false
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 14
7
- 8. 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 © Natividad Martínez Madrid 15
Ejemplo: Bucle do-while
leer n de teclado
n<0 false
||
n > 100
true
imprimir n
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 16
8
- 9. 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 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 © Natividad Martínez Madrid 17
Bucle for
● Sintaxis
for (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
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 18
9
- 10. Diagrama del bucle for
inicialización
true
condición
sentencias
false
actualización
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez 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 Carácter: “ + c);
}
}
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 20
10
- 11. Ejercicio: Bucle do-while
● Escribid un programa que calcule una
aproximación a la raíz cuadrada de un número n
mediante un método iterativo
― Cada nuevo valor aproximado se computa a partir del
anterior según la fórmula:
n
x+
x' = x
2
n
― El valor inicial de la secuencia de aproximaciones es
2
― 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
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 21
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
Tema 7: Estructuras de control (II)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 22
11
- 12. 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 © Natividad Martínez 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)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 24
12
- 13. 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)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 25
Utilización 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)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 26
13