Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

221 views

Published on

Introduccion a la programación y la informática, Universitat Politècnica de València.

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

  1. 1. 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
  2. 2. ´Indice 1 Introducci´on y motivaci´on 3 2 Revisi´on de condicionales 5 3 Instrucciones condicionales 7 • Instrucci´on if-else • Instrucci´on switch 4 El operador ternario condicional 18 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.2
  3. 3. Introducci´on y motivaci´on Hasta ahora hemos considerado el c´odigo simplemente como una secuencia de instrucciones. Sin embargo, la mayor parte de los problemas reales necesitan tomar deci- siones seg´un la situaci´on, y con ello elegir entre distintas subsecuencias de instrucciones. Las estructuras de control permiten cambiar el flujo simple de instrucciones para conseguir estas caracter´ısticas. En un m´etodo, las decisiones se toman generalmente en funci´on de los datos de entrada. La secuencia de instrucciones puede cambiar dependiendo de los datos de entrada o los datos intermedios generados durante la ejecuci´on. En este tema presentaremos los mecanismos que ofrece el lenguaje Java para tomar decisiones. 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.3
  4. 4. Introducci´on y motivaci´on 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
  5. 5. Revisi´on de condicionales La mayor´ıa de las estructuras de decisi´on dependen de expresiones l´ogicas (boolean). Las expresiones l´ogicas se construyen a partir de expresiones num´ericas empleando operadores relacionales y a partir de otras expresiones l´ogicas usando operadores l´ogicos. Una expresi´on l´ogica es toda aquella expresi´on que se eval´ua a cierto (true) o falso (false). Operadores condicionales Operador Operaci´on == Igual a != Diferente a > Mayor que >= Mayor o igual que < Menor que <= Menor o igual que Operadores l´ogicos Operador Operaci´on ! NOT & AND | OR ^ XOR && AND cortocircuitado || OR cortocircuitado 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.5
  6. 6. Revisi´on de condicionales Tabla de verdad x y x && y x || y x ^ y !x x & y x | y false false false false false true false true false true true true true false false true true false true 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
  7. 7. Instrucci´on condicional: if El condicional m´as simple de Java presenta esta estructura: if (B) S B es una condici´on. S es cualquier instrucci´on o bloque de ins- trucciones. Ejecuci´on: 1. Se eval´ua B. 2. Si B es cierto, se ejecuta S. 3. Se contin´ua con la instrucci´on que sigue al condicional. 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.7
  8. 8. Instrucci´on condicional: if Ejemplo: clase Circulo, m´etodo 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 m´edicos, seg´un el sexo, se pregunta si la persona est´a embarazada Humano 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
  9. 9. Instrucci´on condicional: if-else Su forma general es: if (B) S1 else S2 B es una condici´on. S1 y S2 son cualquier instrucci´on o conjunto de instrucciones. Ejecuci´on: 1. Se eval´ua B. 2. Si B es cierto, se ejecuta S1. 3. Si B es falso, se ejecuta S2. 4. Se contin´ua con la instrucci´on que sigue al condicional. 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.9
  10. 10. Instrucci´on condicional: if-else Ejemplo: seg´un 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: seg´un 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
  11. 11. Instrucci´on 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; else if (B3) S3; else S4; 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.11
  12. 12. Instrucci´on condicional: if-else Ejemplo: gestor de multas de tr´afico: // ... if (vehic.getVel()>carr.getMaxVel()) { System.out.println("Velocidad maxima sobrepasada"); if (vehic.getVel()>1.2*carr.getMaxVel()) vehic.crearMultaEspecial(); else vehic.crearMultaNormal(); } else { if (vehic.getVel()<carr.getMinVel()) vehic.crearMultaNormal(); } // ... 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.12
  13. 13. Instrucci´on condicional: if-else Una instrucci´on if-else se di- ce m´ultiple cuando cada uno de los else tiene asociado un nuevo if-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
  14. 14. Instrucci´on condicional: if-else Ejemplo completo de uso de condicionales: validar una fecha (m´etodo 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 dias if ((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
  15. 15. Instrucci´on 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) o a String (desde la versi´on 7.0 de Java). val1, val2, . . . , valn son valores cuyo tipo de datos es compatible con el de 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
  16. 16. Instrucci´on condicional: switch Ejecuci´on: 1. Se eval´ua 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 ese punto incluyendo el c´odigo asocia- do a otras etiquetas case hasta: que se encuentre un break, o que se finaliza el bloque switch, 4. Si no es igual a ning´un valor, se ejecutan las instrucciones asociadas a la etiqueta default (si las hay) hasta el fin del bloque switch. 5. Se contin´ua con la instrucci´on que sigue al bloque switch. 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.16
  17. 17. Instrucci´on condicional: switch Un ejemplo completo: escribir el nombre del mes a partir de su n´umero: 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
  18. 18. El operador ternario o condicional Java, al igual que C y C++, posee un operador ternario con un comportamiento semejante a una instrucci´on condicional. boolexpr ? expr1 : expr2 donde boolexpr es una expresi´on l´ogica y expr1 y expr2 son expresiones cualquiera, pero del mismo tipo de datos. Ejecuci´on: 1. Se eval´ua boolexpr. 2. Si boolexpr es cierta (true), la expresi´on completa se eval´ua a expr1. 3. En otro caso (boolexpr es falsa), la expresi´on completa se eval´ua a expr2. 22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.18
  19. 19. El operador ternario o condicional Ejemplo: validaci´on 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 dia if ((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

×