Estructuras de control i

13
1 Natividad Natividad Mart Martí nez Madrid nez Madrid [email protected] [email protected] Tema Tema 6 Estructuras de control (I) Representaci Representación de de Datos Datos y y Aplicaciones Aplicaciones Tema 6: Estructuras de control (I) Representación de Datos y Aplicaciones 2 © Natividad Martínez Madrid Objetivos del tema 6 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 tipo selección proporcionadas por Java y saber aplicarlas correctamente Ser capaces de elegir la estructura de selección adecuada a cada situación

Transcript of Estructuras de control i

Page 1: Estructuras de control i

1

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

TemaTema 66Estructuras de control (I)

RepresentaciRepresentacióónn de de DatosDatos y y AplicacionesAplicaciones

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

Objetivos del tema 6

● 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 tipo selección proporcionadas por Java y saber aplicarlas correctamente

● Ser capaces de elegir la estructura de selección adecuada a cada situación

Page 2: Estructuras de control i

2

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

Contenido del tema 6

● Conceptos básicos del flujo de control● Secuenciación de sentencias● Sentencia simple y sentencia compuesta● Estructuras de selección simple y múltiple

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

Conceptos básicos del flujo de control

● Dentro del cuerpo de los métodos se ejecutan sentencias (instrucciones) que determinan el comportamiento del programa

● Dichas sentencias se ejecutan en secuencia―Cada sentencia termina con un punto y coma

● Las sentencias que hemos visto hasta ahora eran sencillas (asignación o return)

Page 3: Estructuras de control i

3

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

Secuenciación de sentencias

sentencia1

sentencia2

sentencia3

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

void metodo() {int n;...{ int k;

int n;...

}...}

Bloque de sentencias

● Un bloque de sentencias (o sentencia compuesta) es un número de sentencias Java simples rodeadas por llaves―Los bloques definen un ámbito de variables―Los bloques pueden anidarse

void metodo() {int n;...{ int k;

...}

...}

Error

Page 4: Estructuras de control i

4

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

Sentencias de control

● Los lenguajes de programación proporcionan sentencias de control que permiten―Ejecución opcional de un bloque de sentencias―Ejecución repetida de un bloque de sentencias

● De esta forma, se pueden implementar algoritmos para calcular los valores resultantes

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

Estructuras de selección

● Las estructuras de selección permiten, en función del valor lógico de un selector, ejecutar un bloque de sentencias u otro

● Tipos de sentencias de selección:― Sentencia if / if-else

―Sentencia switch

Page 5: Estructuras de control i

5

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

Sentencia if

● La sentencia if es la sentencia básica de selecciónif (condición) {

bloque de sentencias

}

● donde ―condición es una expresión booleana―sentencias representa un bloque de sentencias o

una sentencia únicaSi es una sentencia única, se pueden quitar las llaves

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

Diagrama de la sentencia if

sentencias

condición

true

false

Este tipo de diagramas se llaman organigramas y representan el flujo de control de una parte del programa

Page 6: Estructuras de control i

6

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

Significado de la sentencia if

● Si la condición es cierta (si el valor de la expresión es true) se ejecutará el bloque de sentencias asociado

● Si la condición es falsa, dicho bloque de sentencias no se ejecutará

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

public class Alumno {String nombre;int año;String grupo;

public Alumno (String nombre, int año) throws Exception {if (nombre == null)

throw new Exception (“Nombre vacío”);if (año < 0)

throw new Exception (“Año incorrecto”); this.nombre = nombre;this.año = año;

}}

Ejemplo: Sentencia if

¿Cuál sería el organigrama de este constructor?

Page 7: Estructuras de control i

7

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

Sentencia if - else

● Opcionalmente, se puede añadir una parte elsea la sentencia if

● Indica otro bloque de sentencia a ejecutar si la condición es falsaif (condición) {

sentencias1

} else {

sentencias2

}

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

Diagrama de la sentencia if - else

sentencias1

condicióntruefalse

sentencias2

Page 8: Estructuras de control i

8

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

Ejemplo: Sentencia if - elsepublic class IfElse {

public void pruebaIfElse (int a, int b) {if (a>b) {System.out.println(“El número mayor es “ + a);

} else {System.out.println(“El número mayor es “ + b);

}}public static void main (String[] args) {IfElse ie = new IfElse();ie.pruebaIfElse(3,7);ie.pruebaIfElse(7,6);

}}

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

Ejercicio: if-else

● Escribid un método:boolean aprueba (float nota)

que, dada una nota, determine si el examen estáaprobado o no―Pintad primero el organigrama―Después codificad el método

Page 9: Estructuras de control i

9

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

Sentencia if anidada

● Las sentencias if se pueden anidar―También las otras sentencias de control que veremos

a continuación

● Dentro del bloque de sentencias del if (o de los bloques de if-else) puede encontrarse otra sentencia if

● Importante―A qué if corresponde cada else―Cuál es el estado del programa en cada punto― ¡Una buena indentación!

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

Ejemplo: Sentencia if anidada

if (i == 10) {if (j < 20) a = b;

if (k > 100) c = d;

else a = c;

}

else a = d;¿A qué ifs pertenencen?

Page 10: Estructuras de control i

10

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

Sentencia if-else-if

● Habitual cuando hay más de una condición― Basada en los if anidados, se anidan en la parte del elseif (condición1) {

sentencias1

} else if (condición2) {

sentencias2

} else if (condición3) {

sentencias3

}

...

else {

sentenciasElse

}

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

Diagrama de la sentencia if-else-if

sentencias1

condición1 true

false

condición2

condición3

sentenciasElse

false

false

sentencias2

sentencias3

true

true

Page 11: Estructuras de control i

11

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

Ejemplo: Sentencias if-else-if

class Meses {private int mes;

public String dameEstacion() {String estacionif (mes == 12 || mes == 1 || mes == 2) estacion = “Invierno”;

else if (mes == 3 || mes == 4 || mes == 5) estacion = “Primavera”;

else if (mes == 6 || mes == 7 || mes == 8) estacion = “Verano”;

else if (mes == 9 || mes == 10 || mes == 11) estacion = “Otoño”;

return estacion;}...

}

● ¿Cómo se puede mejorar el método?

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

Ejercicio: Sentencia if-else-if

● Se desea escribir un método en la clase Ciudadano que calcule si una persona cumple las condiciones para ser residente en España. Suponed que, para ser residente, se debe cumplir al menos una de las siguientes condiciones:― Ser de nacionalidad española― Ser estudiante matriculado en algún estudio oficial― Ser menor de 18 años y que al menos uno de los padres sea

residente― Ser ciudadano de la EU y tener trabajo o que el cónyuge sea

residente― Ser extranjero y que el cónyuge sea residente

● Podéis diseñar los atributos de la clase Ciudadanonecesarios

Page 12: Estructuras de control i

12

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

Sentencia switch

● Estructura de selección múltiple● Selección de bloques de sentencias entre múltiples casos

― Dependiendo del valor de una expresión enteraswitch (expresion) {

case valor1:sentencias;break;

case valor2:case valor3:sentencias;break;

…default:sentencias;break;

}

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

Caraterísticas switch

● Puede haber default o no● Si un bloque contiene un break, se continua con

la sentencia siguiente al switch● Si no, continúa comprobando los siguientes

valores, o va al default● Los valores tienen que ser una expresión

constante―Conocida en tiempo de ejecución

Page 13: Estructuras de control i

13

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

Ejemplo sentencia switch

public class DiasDelMespublic static void main (String[] args) {

int dias;int mes; = 8;switch (mes) {

case 4:case 6:case 8:case 10:

dias = 30;break;

case 2:dias = 28;break;

default;días = 31;break;

}System.out.println(“El mes “ + mes +

“ tiene “ + dias + “ días.”); }

}