Introducción a la programación y la informática. Tema 8

19
Tema 8. Estructuras de control: Selecci´ on Introducci´ on a la Inform´ atica y a la Programaci´ on (IIP) Curso 2011/2012 Departamento de Sistemas Inform´ aticos y Computaci´ on

Transcript of Introducción a la programación y la informática. Tema 8

Page 1: Introducción a la programación y la informática. Tema 8

Tema 8. Estructuras decontrol: Seleccion

Introduccion a la Informatica y a la Programacion (IIP)

Curso 2011/2012

Departamento de Sistemas Informaticos y Computacion

Page 2: Introducción a la programación y la informática. Tema 8

Indice

1 Introduccion y motivacion . 3

2 Revision de condicionales . 5

3 Instrucciones condicionales . 7

• Instruccion if-else• Instruccion switch

4 El operador ternario condicional . 18

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.2

Page 3: Introducción a la programación y la informática. Tema 8

Introduccion y motivacion

Hasta ahora hemos considerado el codigo simplemente como una secuenciade instrucciones.

Sin embargo, la mayor parte de los problemas reales necesitan tomar deci-siones segun la situacion, y con ello elegir entre distintas subsecuencias deinstrucciones.

Las estructuras de control permiten cambiar el flujo simple de instruccionespara conseguir estas caracterısticas.

En un metodo, las decisiones se toman generalmente en funcion de los datosde entrada. La secuencia de instrucciones puede cambiar dependiendo de losdatos de entrada o los datos intermedios generados durante la ejecucion.

En este tema presentaremos los mecanismos que ofrece el lenguaje Java paratomar decisiones.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.3

Page 4: Introducción a la programación y la informática. Tema 8

Introduccion y motivacion

Las instrucciones condicionales pueden ser sencillas o anidadas:

if (temp>100)System.out.println("Temperatura mayor que 100");

else System.out.println("Temperatura menor o igual que 100");//.....

if (temp>100)System.out.println("Mayor que 100");

else if (temp>50)System.out.println("Mayor que 50, menor o igual que 100");

else System.out.println("Menor o igual que 50");System.out.println("Continuamos aqui");. . ...

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.4

Page 5: Introducción a la programación y la informática. Tema 8

Revision de condicionales

La mayorıa de las estructuras de decision dependen de expresiones logicas(boolean).

Las expresiones logicas se construyen a partir de expresiones numericasempleando operadores relacionales y a partir de otras expresiones logicasusando operadores logicos.

Una expresion logica es toda aquella expresion que se evalua a cierto(true) o falso (false).

Operadores condicionales

Operador Operacion

== Igual a!= Diferente a> Mayor que>= Mayor o igual que< Menor que<= Menor o igual que

Operadores logicos

Operador Operacion

! NOT& AND| OR^ XOR&& AND cortocircuitado|| OR cortocircuitado

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.5

Page 6: Introducción a la programación y la informática. Tema 8

Revision de condicionales

Tabla de verdad

x y x && y x || y x ^ y !xx & y x | y

false false false false false truefalse true false true true truetrue false false true true falsetrue true true true false false

if ((temp>=15) && (temp<=20)) .....

if ((temp>15) || (temp==15)) .....// similar a (temp>=15)

if ((temp>=0) ^ (temp<=100)) .....// similar a (temp>100) || (temp<0)

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.6

Page 7: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if

El condicional mas simple de Java presentaesta estructura:

if (B) S

B es una condicion.

S es cualquier instruccion o bloque de ins-trucciones.

Ejecucion:

1. Se evalua B.

2. Si B es cierto, se ejecuta S.

3. Se continua con la instruccion que sigue alcondicional.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.7

Page 8: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if

Ejemplo: clase Circulo, metodo setRadio:/** actualiza radio del Circulo a nuevoRadio

solo si nuevoRadio es positivo o cero. */public void setRadio(double nuevoRadio) {

if (nuevoRadio >= 0)radio = nuevoRadio;

}

Ejemplo: datos medicos, segun el sexo, se pregunta si la persona esta embarazadaHumano h = new Humano();// ...System.out.print("Que edad tiene? ");// ...if (h.getSexo()==’M’) {System.out.print("Esta embarazada? ");// ...

}System.out.print("Es alergico a algun medicamento? ");// ...

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.8

Page 9: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

Su forma general es:

if (B) S1 else S2

B es una condicion.

S1 y S2 son cualquier instruccion o conjuntode instrucciones.

Ejecucion:

1. Se evalua B.

2. Si B es cierto, se ejecuta S1.

3. Si B es falso, se ejecuta S2.

4. Se continua con la instruccion que sigue alcondicional.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.9

Page 10: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

Ejemplo: segun la temperatura, en-cender o apagar el aire acondiciona-do:

Habitacion h = new Habitacion();AireAcon a = new AireAcon();// ...if (h.getTemp()>26.0)

a.encender();else

a.apagar();// ...

Ejemplo: segun la intensidad solar, re-gular la intensidad de las luces:

DetectorSolar d = new DetectorSolar();Bombilla b1 = new Bombilla();Bombilla b2 = new Bombilla();// ...if (d.getIntensidad()<100) {b1.incrIntens();b2.incrIntens();

}else {b1.decrIntens();b2.decrIntens();

}// ...

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.10

Page 11: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

En cualquiera de las formas de las instrucciones condicionales if ...else ...,los bloques de instrucciones pueden incluir otras instrucciones condicionales:instrucciones condicionales anidadas.

Ejemplos:

if (B1)if (B2) S1;else S2;

if (B1)if (B2) S1;

else S2;

if (B1)if (B2) S1;else S2;

elseif (B3) S3;else S4;

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.11

Page 12: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

Ejemplo: gestor de multas de trafico:

// ...if (vehic.getVel()>carr.getMaxVel()) {System.out.println("Velocidad maxima sobrepasada");if (vehic.getVel()>1.2*carr.getMaxVel())vehic.crearMultaEspecial();

elsevehic.crearMultaNormal();

}else {if (vehic.getVel()<carr.getMinVel())vehic.crearMultaNormal();

}// ...

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.12

Page 13: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

Una instruccion if-else se di-ce multiple cuando cada uno delos else tiene asociado un nuevoif-else (excepto el ultimo).

if (B1) S1

else if (B2) S2

else if (B3) S3

...else if (Bn) Sn

else Sn+1

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.13

Page 14: Introducción a la programación y la informática. Tema 8

Instruccion condicional: if-else

Ejemplo completo de uso de condicionales: validar una fecha (metodo validar)

public class Fecha {int dd, mm, aa; // Dia, mes, anyo// ...public boolean bisiesto() { return ((aa%4)==0 && (aa%100)!=0) || (aa%400)==0; }

public boolean validar() {int numdd=31; // Numero de dias del mes

if ((mm<=0) || (mm>12)) return false; // Examina rango del mes// Determinar rango de diasif ((mm==4) || (mm==6) || (mm==9) || (mm==11)) numdd=30;else if (mm==2)

if (bisiesto()) numdd=29; else numdd=28;if ((dd<=0) || (dd>numdd)) return false; // Examina rango del dia

return true;}// ...

}

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.14

Page 15: Introducción a la programación y la informática. Tema 8

Instruccion condicional: switch

switch (expresion) {case val1: [SC1] [break;]case val2: [SC2] [break;]......case valn: [SCn] [break;][default: [SCn+1] [break;]]

}

expresion debe evaluarse a un tipo primitivo (excepto float o double) oa String (desde la version 7.0 de Java).

val1, val2, . . . , valn son valores cuyo tipo de datos es compatible con elde expresion.

SC1, SC2, . . . , SCn+1 son cualquier secuencia de instrucciones.

Los componentes que aparecen entre corchetes ([]) son opcionales.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.15

Page 16: Introducción a la programación y la informática. Tema 8

Instruccion condicional: switch

Ejecucion:

1. Se evalua expresion.2. Se compara su valor con todos los

valores en los case.3. Cuando es igual a alguno de ellos,

ejecutar las instrucciones desde esepunto incluyendo el codigo asocia-do a otras etiquetas case hasta:

que se encuentre un break, oque se finaliza el bloque switch,

4. Si no es igual a ningun valor, seejecutan las instrucciones asociadasa la etiqueta default (si las hay)hasta el fin del bloque switch.

5. Se continua con la instruccion quesigue al bloque switch.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.16

Page 17: Introducción a la programación y la informática. Tema 8

Instruccion condicional: switch

Un ejemplo completo: escribir el nombre del mes a partir de su numero:public class Fecha {

int dd, mm, aa; // Dia, mes, anyo// ...

public String nomMes() {String mn;switch(mm) {

case 1: mn=new String("Enero"); break;case 2: mn=new String("Febrero"); break;case 3: mn=new String("Marzo"); break;case 4: mn=new String("Abril"); break;// ...case 12: mn=new String("Diciembre"); break;default: mn=new String("Desconocido");

}return mn;

}// ...

}

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.17

Page 18: Introducción a la programación y la informática. Tema 8

El operador ternario o condicional

Java, al igual que C y C++, posee un operador ternario con un comportamientosemejante a una instruccion condicional.

boolexpr ? expr1 : expr2

donde boolexpr es una expresion logica y expr1 y expr2 son expresionescualquiera, pero del mismo tipo de datos.

Ejecucion:

1. Se evalua boolexpr.

2. Si boolexpr es cierta (true), la expresion completa se evalua a expr1.

3. En otro caso (boolexpr es falsa), la expresion completa se evalua a expr2.

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.18

Page 19: Introducción a la programación y la informática. Tema 8

El operador ternario o condicional

Ejemplo: validacion de fecha usando operador ternario

public class Fecha {int dd, mm, aa; // Dia, mes, anyo// ...public boolean bisiesto() { return ((aa%4)==0 && (aa%100)!=0) || (aa%400)==0; }

public boolean validar() {int numdd=31; // Numero de dias del mes

if ((mm<=0) || (mm>12)) return false; // Examina rango de mes// Determinar rango de diaif ((mm==4) || (mm==6) || (mm==9) || (mm==11)) numdd=30;else if (mm==2) numdd=(bisiesto())?29:28; // Aqui se usa el operador ternario

if ((dd<=0) || (dd>numdd)) return false; // Examina rango de dia

return true;}// ...

}

22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.19