Tema 2: Sentencias Condicionales
o de Selección
Tema 2: Sentencias de Selección
Después de haber leído y estudiado este capítulo usted
podrá
Comprender la lógica de las estructuras condicionales
Implementar un control de selección utilizando sentencias if
Implementar un control de selección utilizando sentencias
switch
Escribir expresiones booleanas utilizando expresiones
relacionales y boolenas
Evaluar correctamente expresiones booleanas
Sentencias if anidadas
Describir como son comparados los objetos
Elegir una sentencia de control de selección apropiada dada
una tarea
2
Estructuras de Control
3 Estructuras de control
1. Secuenciales
2. De Selección o Condicionales
3. Repetitivas
Suficiente para todos los propósitos
Combinadas dan potencia a la programación
3
1. Estructuras Secuenciales
Inicio y fin INICIO
Entrada o
lectura a,b
Procesamiento
suma=a+b
Salida o
escritura suma
FIN
2. Estructuras Condicionales
Inicio y fin INICIO
Entrada o
lectura a,b
Procesamiento
suma=a+b
Salida o
escritura suma
Condición
FIN
V F
cond
2. Estructuras Condicionales
Ejercicio: ingresar 2 números enteros,
si el primero es mayor que el segundo
mostrar la suma, de lo contrario
mostrar la diferencia
2. Estructuras Condicionales
Ejercicio: ingresar 2 números enteros,
si el primero es mayor que el segundo
mostrar la suma, de lo contrario
mostrar la diferencia
2. Estructuras Condicionales
Si a>b
INICIO
result=a+b
Sino
a,b
result=a-b
finSi
V F
a>b
result=a+b result=a-b
result
FIN
2. Estructuras Condicionales
if (condición)
sentencia;
if (condición)
{
sentencia1;
sentencia2;
...
}
2. Estructuras Condicionales
if (condición)
sentencia;
else
sentencia;
if (condición)
{ sentencia1;
sentencia2;
...
}
else
{ sentencia1;
sentencia2;
...
}
La Sentencia if
int nota;
Esta sentencia es
nota = scanner.nextInt(); ejecutada si la nota es
menor a 11.
if (nota < 11)
JOptionPane.showMessageDialog(null, “Jalado" );
else
JOptionPane.showMessageDialog(null, “Aprobado" );
Esta sentencia es
ejecutada si la nota es
11 o mayor.
11
Sintaxis para if
if ( <expresion booleana> )
<bloque then (entonces)>
else
<bloque else (sino)>
Expresión Booleana
if ( nota < 11 )
Bloque
Then JOptionPane.showMessageDialog(null,”Jalado" );
entonces
else
Bloque Else JOptionPane.showMessageDialog(null,“Aprobado");
sino
12
Flujo de Control del if
false nota < 11?
true
nota < 11?
JOptionPane. JOptionPane.
showMessageDialog showMessageDialog
(null, “Aprobado"); (null, “Jalado");
13
Operadores Relacionales
RELACIONALES
< menor que
<= menor o igual que
== igual (comparación)
!= diferente
> Mayor que
>= mayor o igual que
EXPRESIONES BOOLEANAS:
nota < 80
nota * 2 >= 350
30 < w / (h * h)
x + y != 2 * (a + b)
2 * Math.PI * radius <= 359.99
14
Sentencias Múltiples
Utilice llaves { } si el bloque <then> o <else> tiene
sentencias multiples
if (nota < 11)
{
JOptionPane.showMessageDialog(null,“Jalado" );
Bloque
JOptionPane.showMessageDialog(null,“Estudie mas");
Then
}
else
{
JOptionPane.showMessageDialog(null, “Aprobado" );
JOptionPane.showMessageDialog(null,“Siga asi" );
} Bloque
Else
15
Guía de Estilo
if ( <expresion booleana> ) {
…
} else { Estilo 1
…
}
if ( <expresion booleana> )
{
…
Estilo 2
}
else
{
…
}
16
La sentencia if-then
if ( <expresión booleana> )
<bloque then>
Expresión Booleana
if ( nota >= 18 )
Bloque
JOptionPane.showMessageDialog(null,"Aprobado con Honores");
Then
17
Flujo de Control de if-then
nota
true
nota >=18?
>=18?
JOptionPane.
showMessageDialog (null,
false “Aprobado con Honores");
18
Estructura Condicional Simple
PROBLEMA:
Se desea saber cuanto se debe pagar a
un empleado, considerando que si gana
menos de S/. 1000 se le dará un bono del
10%
Estructura Condicional Simple
Si sueldo<1000
INICIO
sueldo=sueldo*1.1
finSi
sueldo
V sueldo<1000 F
sueldo=sueldo*1.1
sueldo
FIN
Estructura Condicional Simple
EN JAVA?????
Estructura Condicional Doble
if ( <expresión booleana> )
<bloque then>
else
<bloque else>
Expresión Booleana
if ( nota >= 13 )
Bloque Then JOptionPane.showMessageDialog(null,“Aprobado");
else
Bloque Else JOptionPane.showMessageDialog(null,“Desprobado");
Estructura Condicional Doble
PROBLEMA:
Se desea saber cuanto se debe pagar a
un empleado, considerando que si gana
menos de S/. 1000 se le dará un bono del
20%, de lo contrario ganará un bono de
10%
Estructura Condicional Doble
Si sueldo<1000
INICIO
sueldo=sueldo*1.2
Sino
sueldo sueldo=sueldo*1.1
finSi
V sueldo<1000 F
sueldo=sueldo*1.2 sueldo=sueldo*1.1
sueldo
FIN
Estructura Condicional Doble
EN JAVA?????
El Operador ? :
Puede ser utilizado en lugar de la sentencia condicional
TestExpression ? Expresion1 : Expresion2
TestExpression se evalua primero.
Si ésta evalúa a verdadero, el valor de la operación sera
Expresion1; sino será el valor de Expresion2.
if (condicion)
a=expre1;
else
a=expre2;
a=(condicion)?expre1:expre2;
26
El Operador ? :
Ejemplo
int input1=3, input2=5, min;
min = (input1 <= input2) ? input1: input2;
System.out.println(min);
Esto es equivalente a
int input1=3, input2=5, min;
if (input1 <= input2)
min = input1;
else
min = input2;
System.out.println(min);
27
Estructura Condicional Anidada
PROBLEMA:
Se desea saber cuanto se debe pagar a
un empleado, considerando que si gana
menos de S/. 1000 se le dará un bono del
20%, de lo contrario ganará un bono de
10% siempre que no gane más de S/.
5000 en cuyo caso sólo recibirá un bono
del 5%
Estructura Condicional Anidada
sueldo
V sueldo<1000 F
sueldo=sueldo*1.2 V sueldo<=5000 F
sueldo=sueldo*1.1 sueldo=sueldo*1.05
sueldo
Estructura Condicional Anidada
Si sueldo<1000
sueldo=sueldo*1.2
Sino
Si sueldo<=5000
sueldo=sueldo*1.1
Sino
sueldo=sueldo*1.05
finSi
finSi
Estructura Condicional Anidada
EN JAVA?????
La sentencia if-Anidada
Los bloques then y else de una sentencia if
pueden contener cualquier sentencia válida,
incluyendo otras sentencias if.
Una sentencia if conteniendo otra sentencia if es
llamada if-anidada
if (notaTeo >= 11)
if (notaLab > 16)
System.out.println(“Buen trabajo!");
else
System.out.println(“Aprobado");
else
System.out.println(“Desaprobado");
32
Flujo de Control del if-anidado
false notaTeo>=
notaTeo>= 1111?
? true If interno
false notaLab>16? true
System.out.println notaLab > 16 ?
(“Desaprobado");
System.out.println System.out.println
(“Aprobado"); (“Buen Trabajo!");
33
Escribiendo una sentencia if adecuada #1
if (num1 < 0) negativeCount = 0;
if (num2 < 0)
if (num3 < 0)
if (num1 < 0)
negativeCount = 3;
else negativeCount++;
negativeCount = 2; if (num2 < 0)
else negativeCount++;
if (num3 < 0)
if (num3 < 0)
negativeCount = 2;
else negativeCount++;
negativeCount = 1;
else
if (num2 < 0)
if (num3 < 0)
negativeCount = 2;
else
La sentencia
negativeCount = 1;
else negativeCount++;
if (num3 < 0)
negativeCount = 1; incrementa la variable en uno
else
negativeCount = 0;
34
Control if – else if
if (nota >= 90)
System.out.print(“Su nota es A");
else if (nota >= 80)
Nota Grade System.out.print(“Su nota es B");
90 nota A
else if (nota >= 70)
80 nota 90 B System.out.print(“Su nota es C");
70 nota 80 C
else if (nota >= 60)
60 nota 70 D System.out.print(“Su nota es D");
nota 60 F
else
System.out.print(“Su nota es F");
35
Matching else
Son A y B diferentes?
if (x < y) A Ambos A y B significa
if (x < z)
System.out.print("Hello"); if (x < y) {
else if (x < z) {
System.out.print("Good bye"); System.out.print("Hello");
} else {
System.out.print("Good bye");
}
if (x < y) }
B
if (x < z)
System.out.print("Hello");
else
System.out.print("Good bye");
36
Escribiendo una sentencia if
apropiada #2
if (num1 > num2) {
System.out.print(“El valor mas largo es");
System.out.println(num1);
System.out.println("Bye.");
} else {
System.out.print(“El valor mas largo es");
System.out.println(num2);
System.out.println("Bye.");
}
Mueva las sentencias
comunes fuera del if
System.out.print(“El valor mas largo es");
if (num1 > num2)
System.out.println(num1);
else
System.out.println(num2);
System.out.println("Bye.");
37
Estructura Condicional Múltiple –
La sentencia switch
PROBLEMA:
Se desea saber el nivel de una persona
según la cantidad de respuestas correctas:
4: gran maestro
3: maestro
2: prospecto
1: aprendiz
0: novato
Estructura Condicional Múltiple
cant
4 3 2 1 0
nivel=“gran maes” nivel=“maestro” nivel=“novato”
nivel
Estructura Condicional Múltiple
Caso cant
4: nivel=“gran maestro”
3: nivel=“maestro”
2: nivel=“prospecto”
1: nivel=“aprendiz”
0: nivel=“novato”
FinCaso
escribir nivel
Estructura Condicional Múltiple
SINTAXIS:
switch( variable )// variable sólo puede ser entera
{ case expr1: // expresión constante entera
etiqueta sentencias;
Case
break;
case expr2:
sentencias; Cuerpo
Case
break;
...
default: //opcional
sentencias;
break;
}
La sentencia switch
String inputStr = JOptionPane.showInputDialog( null,
“Semestre (1, 2,3,4):" );
int semestre = Integer.parseInt(inputStr);
switch (semestre) {
Esta sentencia
case 1: System.out.print(“Vaya al aula 301"); es ejecutada si
break; el semestre es
igual a 1
case 2: System.out.print(“Vaya al aula 302");
break;
case 3: System.out.print(“Vaya al aula 201");
break;
Esta sentencia
es ejecutada si
case 4: System.out.print(“Vaya al aula 202"); el semestre es
break; igual a 4
}
42
La sentencia switch
Expresión aritmética
switch ( semestre ) {
case 1: System.out.print( “Vaya al aula 301" );
break;
etiqueta
Case case 2: System.out.print( “Vaya al aula 302" );
break;
case 3: System.out.print( “Vaya al aula 201" ); Cuerpo
break; Case
case 4: System.out.print( “Vaya al aula 202" );
break;
}
43
La sentencia switch
La expresión aritmética utilizada en la sentencia
switch debe ser del tipo entero
Los siguientes tipos son enteros: byte, int, short,
long, char
No son tipos enteros: float, double
44
switch que no tienen la sentencia
break
N == true
N 1==
? 1? x = 10;
switch ( N ) {
case 1: x = 10; false
case 2: x = 20; N ==
true
N ==
2 ?2? x = 20;
case 3: x = 30;
} false
N == true
N ==
3 ?3? x = 30;
false
45
switch con sentencia break
N == true
switch ( N ) { N 1==? 1?
x = 10;
case 1: x = 10;
false break;
break;
true
case 2: x = 20; NN==
==
2? x = 20;
2?
break;
false break;
case 3: x = 30;
N == true
break; N 3==? 3? x = 30;
}
false break;
46
La sentencia switch
PROBLEMA: Resolver en Java
Se desea saber el nivel de una persona
según la cantidad de respuestas correctas:
4: gran maestro
3: maestro
2: prospecto
1: aprendiz
0: novato
47
La sentencia switch
48
La sentencia switch
PROBLEMA: Se quiere saber el nivel de acuerdo
a la cantidad de respuestas correctas, entre
0 y 10.
MAESTRO: 10, 9, 8
BUENO: 7, 6
APRENDIZ: 5, 4
NOVATO: 3, 2, 1, 0
49
switch con el bloque default
switch (cantRespuestas) {
case 10:
case 9:
case 8: System.out.print(“Maestro");
break;
case 7:
case 6: System.out.print(“Bueno");
break;
case 5:
case 4: System.out.print("Aprendiz");
break;
case 3:
case 2:
case 1:
case 0: System.out.print(“Novato");
break;
default: System.out.print(“Error de Ingreso: Dato no valido");
break;
}
50
Operadores Booleanos o Lógicos
Un operador booleano toma valores booleanos
como sus operandos y retorna un valor booleano.
Los tres operadores booleanos son:
and: &&
or: ||
not !
if (temperature >= 15 && distanceToDestination < 2)
System.out.println(“Vamos a caminar!");
else
System.out.println(“Vamos a Manejar!");
51
Semantica de los Operadores
Booleanos
Operadores Booleanos y su signficado:
P Q P && Q P || Q !P
V V V V F
V F F V F
F V F V V
F F F F V
52
Evaluación de Circuito-Corto
Considere la siguiente expresion booleana:
x > y || x > z
La expresion es evaluada de izquierda a derecha. Si x> y
es verdadero, no existe la necesidad de evaluar x>z
porque toda la expresión ya es verdadera aun x>z sea falso
Detener la evaluación una vez que se conoce el resultado
de toda la expresión se llama short-circuit evaluation.
(También recibe el nombre de LazyEvaluation)
x > y && x > z pero si x no es mayor que y!!!
¿Qué ocurriría si el short-circuit evaluation no se aplica a la
siguiente expresión?
z == 0 || x / z > 20
53
Reglas de Precedencia de Operadores
54
Variables Booleanas (1/3)
El resultado de una expresion boolena es
true o false. Estos son los dos únicos valores
en el tipo de dato boolean
Podemos declarar variables del tipo de dato
boolean y asignarle un valor
boolean pass, done;
pass = 70 < x;
done = true;
if (pass)
{
…
}
else
{
…
} 55
Variables Booleanas(2/3)
Las variables locales booleanas estan no-
inicializadas por defecto.
boolean esPrimo;
boolean paqueteRecibido;
boolean elementoEncontrado;
esPrimo -
paqueteRecibido -
elementoEncontrado -
56
Variables Booleanas (3/3)
Variables booleanas con inicialización
boolean procede = true;
boolean prefiereAzul = false;
boolean finalizado = true;
procede true
prefiereAzul false
finalizado true
57
Comparando Objetos
Con tipos de datos primitivos, sólo existe una
forma de compararlos, pero con objetos (tipo
referencial), tenemos dos formas de
compararlos.
1. Podemos evaluar si dos variables apuntan al mismo
objeto (utilizamos ==), o
2. Podemos evaluar si dos objetos tienen el mismo
contenido
58
Utilizando == con Objetos (Ejemplo 1)
String str1 = new String("Java");
String str2 = new String("Java");
if (str1 == str2)
System.out.println(“Son iguales");
else
System.out.println(“No son iguales");
No son iguales No iguales porque str1
y str2 apuntan a dos
objetos String distintos.
59
Utilizando == con Objetos (Ejemplo 2)
String str1 = new String("Java");
String str2 = str1;
if (str1 == str2)
System.out.println(“Ellos son iguales");
else
System.out.println(“Ellos no son iguales");
Ellos son iguales Son iguales porque
str1 y str2 apuntan al
mismo objeto.
60
Utilizando “equals” con String
String str1 = new String("Java");
String str2 = new String("Java");
if (str1.equals(str2))
System.out.println(“Ellos son iguales");
else
System.out.println(“Ellos no son iguales");
Ellos son iguales Son iguales porque
str1 y str2 tienen el
mismo contenido
61
La Semántica de ==
62
En la Creacion de Objetos String
63
EJERCICIOS Realizar los programas en Java:
1. Determinar si un alumno aprueba a reprueba un curso,
sabiendo que aprobará si su promedio de tres calificaciones
es mayor o igual a 13; reprueba en caso contrario.
2. Un programa que lea dos números y los imprima en forma
ascendente
3. Dados 2 enteros, deseo conocer todos los posibles
operadores relacionales válidos
4. Un hombre desea saber cuanto dinero se generará por
concepto de interés anual sobre la cantidad que piensa
invertir en el banco. El programa le dirá si debe invertir o no,
considerando que se decidirá invertir cuando los intereses
excedan a $70 al año, y en ese caso desea saber cuánto
dinero tendrá al acabar el año de inversión en su cuenta. La
tasa de interés es anual
5. Programa que me diga si un estudiante está aprobado o no, y
su nota respectiva, basándose en las condiciones:
Está aprobado si sus notas de teoría y de práctica son
aprobatorias
El promedio que se calcula por la fórmula NF =
0.75*NT+0.25*NP, en caso sea aprobado, si no la nota final
es la mínima de sus notas
6. Programa que me diga si un estudiante está aprobado o no y
que me muestre su nota final, basándose en las condiciones:
• En el caso que el laboratorio esté aprobado entonces recién
se saca el promedio con la fórmula NF = 0.75*NT+0.25*NP,
en cualquier otro caso se coloca la mínima nota
• NOTA: nota mínima aprobatoria en cualquier caso es 13
7. Leer 2 números; si son iguales que los multiplique, si el
primero es mayor que el segundo que los reste y si no que los
sume.
8. Leer cuatro números diferentes e imprimir el número mayor
de los cuatro. Sin usar max().
9. Calcular la utilidad que un trabajador recibe en el reparto
anual de utilidades, el cual se le asigna como un porcentaje
de su salario mensual que depende de su antigüedad en la
empresa de acuerdo con la sig. tabla:
Tiempo Utilidad
• Menos de 1 año 5 % del salario
• 1 año o mas y menos de 2 años 7% del salario
• 2 años o mas y menos de 5 años 10% del salario
• 5 años o mas y menos de 10 años 15% del salario
• 10 años o mas 20% del salario
Realizarlo con if y con switch
10. En una tienda de descuento se efectúa una promoción en la cual
se hace un descuento sobre el valor de la compra total según el
color de la bolita que el cliente saque al pagar en caja. Si la bolita
es de color blanco no se le hará descuento alguno, si es verde se
le hará un 10% de descuento, si es amarilla un 25%, si es azul un
50% y si es roja un 100%. Determinar la cantidad final que el
cliente deberá pagar por su compra. se sabe que solo hay bolitas
de los colores mencionados.
Realizarlo con if y con switch
11. Las AFP requieren clasificar a las personas que se jubilaran en el
año de 2010. Existen tres tipos de jubilaciones: por edad, por
antigüedad joven y por antigüedad adulta.
Las personas adscritas a la jubilación por edad deben tener 60
años o más y una antigüedad en su empleo de menos de 25
años.
Las personas adscritas a la jubilación por antigüedad joven
deben tener menos de 60 años y una antigüedad en su empleo
de 25 años o más.
Las personas adscritas a la jubilación por antigüedad adulta
deben tener 60 años o más y una antigüedad en su empleo de
25 años o más.
En cualquier otro caso indicar que no accede a jubilación
Determinar en que tipo de jubilación, adscrita una persona.
12. Se desea calificar en palabras una nota, según el siguiente
criterio:
0.0 a 4.9 : reprobado, repite el semestre
5.0 a 10.4: reprobado, pasa a subsanación
10.5 a 15.9: aprobado
16.0 a 20.0: aprobado con distinción máxima
13. Programa que me muestre las raíces de una ecuación
cuadrática y que me muestre mensajes en caso haya algún
problema
14. Haga un programa que determine si un año es bisiesto: si es
divisible por 4, pero no es divisible por 100 o si es divisible
por 400:
Año ? 1998 Año ? 1996 Año ? 1900 Año ? 2000
no si no si
15. Suma de fracciones. Usa la siguiente fórmula:
a + c = ad + bc
b d bd
Obtener a, b, c y d, y luego calcule la suma. Si la división no se puede
realizar porque el denominador es cero, despliega un mensaje. Si el
resultado es entero, despliega el valor. Si el resultado es una fracción,
Fin
68