SELECCIÓN -...
Transcript of SELECCIÓN -...
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatutos de Control C# Estatutos de Decisión (Selección)
Antes de ver esta presentación: Lee el Capítulo correspondiente a “Decisiones”, en tu libro de texto.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
SELECCIÓN
IF Condición THEN Estatuto1 ELSE Estatuto2
Estatuto1 Statement
Estatuto2
Condición . . .
true
false
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Para representar estas condiciones: Tipo de dato boolean
C# tiene el tipo de dato bool, primitivo, que puede tomar los valores verdadero (true) y falso (false).
true y false son palabras reservadas.
Es posible declarar variables de tipo boleano de la siguiente forma:
bool nombre_var;
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Expresiones Boleanas
La combinación de condiciones las llamamos expresiones boleanas. Estas son expresiones que al evaluarse dan como resultado un valor de verdadero (true) o falso (false).
Una expresión boleana se forma utilizando operadores relacionales o lógicos.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatuto condicional if
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Representación Gráfica de las decisiones:
edad >= 21 ?
Eres mayor de edad en EUA
Eres menor de edad en EUA
true false
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
El estatuto if
if (condición) estatuto; else estatuto;
* La parte del else es opcional
La condición es una expresión booleana (true/false)
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
El estatuto if:
if (condición) {
bloque de estatutos } else {
bloque de estatutos }
El else es opcional
Si se requiere poner más de un estatuto, los estatutos se deben encerrar entre llaves
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos: if (num < 0)
Console.WriteLine(“El número es negativo”);
num<0 ?
El número es negativo
true
false
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos: if (num < 0) {
Console.WriteLine(“núm es negativo, calcular su valor absoluto”); num = Math.Abs(num);
}
num<0 ?
num = Math.Abs(num)
true
false
núm es negativo
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos: if (num<0)
Console.WriteLine(“El número es negativo”); else
Console.WriteLine(“El número es positivo o cero”);
num<0 ? true false
El número es positivo o cero
El número es negativo
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplo con if anidados:
if (num<0) Console.WriteLine(“El número es negativo”);
else if (num = = 0) Console.WriteLine( “El número es cero”); else Console.WriteLine ( “El número es positivo”);
• Cuando adentro de una condición if tenemos otro if, se dice que tenemos if ’s anidados, o condiciones anidadas.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Operadores Relacionales
Operador Significado = = Igual != Diferente < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos de expresiones que utilizan operadores relacionales:
ExpresiónA Operador ExpresiónB
temperatura > humedad B*B - 4.0*A*C >= 0.0 uno + dos < 0 dos * tres <= cuatro numero == 35 inicial != ‘J’
Operadores Relacionales
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Suponiendo que x,y fueron declaradas e inicializadas: int x, y; x = 4; y = 6;
EXPRESION VALOR
x < y true
x + 2 < y false
x != y true
x + 3 >= y true
y == x false
y == x+2 true
Ejemplos de expresiones que utilizan operadores relacionales:
comparación !! y = x+2
asignación !! Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Operadores Lógicos
Operador Significado && And || Or ! Not
Sus operandos deben ser expresiones boleanas
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Operadores Lógicos AND OR NOT
X Y X && Y X Y__X | | Y X !X T T T T T T T F T F F T F T F T F T F F T T F F F F F F
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Operadores lógicos C# Expresión Lógica Significado
! p NOT p es false si p es true ! p es true si p es false
p && q p AND q p && q es true si ambos p y q son true. En caso contrario es false.
p || q p OR q p || q es true si cualquiera p o q o ambos son true.
En caso contrario es false
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos:
Expresión para saber si un número A es igual a un número B A = = B
Expresión para saber si un número A es par (A % 2) = = 0
Expresión para saber si 3 números son iguales ( A = = B) && ( B = = C) (A == B == C) No !
¿Cómo sería la expresión para saber si 2 números tienen el mismo signo? _______________________
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplos:
Expresión para saber si un número “A” está en el rango [0, 100] (incluyendo los valores 0 y 100)
(A >= 0) && (A <= 100)
Expresión para saber si un número “A” está fuera del rango (0, 100) (A < 0) | | (A > 100)
100 -13 27 califa numero hora
(califa >= 60) ?
(numero > 0) ?
(hora >= 0 && hora < 24) ?
(hora == 12 || hora == 0) ?
¿Cuál es el valor de cada expresión?
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
int edad; boolean esMayor, sabeIngles; double puntos;
edad = 21; puntos = 500.0; esMayor = (edad >= 21); // esMayor es ? sabeIngles = (puntos > 550.0); // sabeIngles es ?
EXPRESION VALOR esMayor && sabeIngles ? esMayor || sabeIngles ? !esMayor ? !sabeIngles ? esMayor && (puntos > 550) ?
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
¿Cuál es el valor de la expresión?
int edad, peso; edad = 25; peso = 70;
EXPRESION VALOR
!(edad < 10) ?
!(peso > 60) ?
Caso de programación
A un vendedor se le da una comisión sobre su venta, pero además, se le otorga un bono de 200 pesos de recompensa si su venta fue mayor a 15 mil pesos.
Para hacer esta aplicación desarrolla un método de tipo double llamado CalculaComision, que recibe como parámetros las ventas y el porcentaje de comisión.
Considera las ventas como double y el porcentaje como entero.
Fundamentos de programación C#. Román Mtz.
¿Puedo hacer que mi programa tome decisiones?
Fundamentos de programación C#. Román Mtz.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Evaluación de “Corto circuito” Evaluación de “Corto circuito”: significa que las expresiones
lógicas son evaluadas de izquierda a derecha, y la evaluación se detiene tan pronto como se pueda determinar el valor final de la expresión completa. Esto es:
Cuando se evalúa el operador &&, si el primer operando es falso, el segundo nunca se evalúa.
Cuando se evalúa el operador ||, si el primer operando es verdadero, el segundo nunca se evalúa.
Se ahorra tiempo en la evaluación de expresiones complejas usando los operadores || y &&
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplo de “Corto circuito” int edad, altura;
edad = 25; altura = 70;
EXPRESIÓN
(edad > 50) && (altura > 60) false
La evaluación se puede detener en la primera condición porque el resultado del && es verdadero solo si ambos lados son verdaderos; con esto se puede determinar que toda la expresión es falsa.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
int edad, altura;
edad = 25; altura = 70;
EXPRESIÓN (altura > 60) || (edad > 40) true
La evaluación se puede detener en la primera condición porque el resultado del || es verdadero si uno de los 2 lados es verdadero; con esto se puede afirmar que toda la expresión es verdadera.
Ejemplo de “Corto circuito”
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
int edad, peso;
edad = 25; peso = 145;
EXPRESIÓN
(peso < 180) && (edad >= 20) true
Debe ser evaluada toda la expresión ya que el valor final de esta
expresión no se conoce hasta evaluar la segunda parte. Por qué? Porque el resultado de && es true si y solo si ambas condiciones son true.
Otro ejemplo:
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
int edad, altura;
edad = 25; altura = 70;
EXPRESIÓN !(altura > 60)||(edad > 50)
true
false ¿Necesita ser evaluada esta parte?
Otro ejemplo:
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Escribe la expresión según corresponda:
impuesto mayor a 25% e ingreso menor a $20000
temperatura menor o igual que 75 o humedad menor que 70%
edad mayor de 21 y edad menor que 60
edad es 21 o 22
tipo de cliente es a, b, c
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Solución (impuesto > .25) && (ingreso < 20000)
(temperatura <= 75) || (humedad < .70)
(edad > 21) && (edad < 60)
(edad == 21) || (edad == 22)
(tipo == ‘a’ || tipo == ‘b’ || tipo == ‘c’)
Jerarquía de operadores
1. paréntesis 2. !, ++, - -, + (positivo), - (negativo) 3. *, /, % 4. +, - 5. < , < =, >, >= 6. ==, != 7. && 8. || 9. =, +=, -=, *=, /=, %=
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Ejemplo que requiere reglas de precedencia
int num; double x;
num != 0 && x < 1 / num
/ mayor prioridad < siguiente prioridad != después && finalmente
¿Qué pasa si num tiene valor 0? Run Time Error (División entre cero) !!
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
El mismo ejemplo: int num; double x;
(num != 0) && (x < 1/ num)
se evalua primero y si num == 0, su valor es false
Ya que el operador es &&, la expresión completa será false; debido al “corto circuito” la parte derecha de la expresión no será evaluada.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Condiciones múltiples
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
if (dia == 1)
Console.WriteLine(“Lunes”);
if (dia == 2)
Console.WriteLine(“Martes”);
if (dia== 3)
Console.WriteLine(“Miercoles”);
if (dia == 4)
Console.WriteLine(“Jueves”);
if (dia == 5)
Console.WriteLine(“Viernes”);
if (dia == 1)
Console.WriteLine(“Lunes”);
else if (dia == 2)
Console.WriteLine(“Martes”);
else if (dia == 3)
Console.WriteLine(“Miercoles”);
else if (dia == 4)
Console.WriteLine(“Jueves”);
else if (dia == 5)
Console.WriteLine(“Viernes”);
Cuál es más eficiente ?
Discusión en el aula. Tema: Decisiones
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatuto switch Cuando tenemos una condición que implicaría muchos if’s
anidados, es mejor utilizar una instrucción llamada switch. Veamos un ejemplo: Si queremos preguntar si el número de día es 1, 2, 3, 4, 5, 6,
7, para desplegar el nombre del día según corresponda: lunes, martes, miércoles... Utilzando if’s la solución sería: if (dia = = 1) Console.WriteLine(“lunes”); else if (dia = = 2) Console.WriteLine(“martes”); else if (dia = = 3) Console.WriteLine(“miercoles”); else if (dia = = 4) y así sucesivamente.....
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatuto switch
Formato: switch (expresión) { case const1: estatuto1;
break; ...
case constN: estatuto N;
break; default:
estatuto M; }
El default es opcional
La expresión debe ser de tipo int, char o string
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatuto switch: switch (dia) {
case 1: Console.WriteLine(“Lunes”); break;
case 2: Console.WriteLine(“Martes”); break;
case 3: Console.WriteLine(“Miercoles”); break;
case 4: Console.WriteLine(“Jueves”); break;
case 5: Console.WriteLine(“Viernes”); break;
case 6: Console.WriteLine(“Sabado”); break;
case 7: Console.WriteLine(“Domingo”); break;
}
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Control de la ejecución al utilizar Switch: El control de la ejecución salta al estatuto que sigue
después del case, que coincide con el valor de la Expresión entera.
El control de la ejecución continúa hacia todos los estatutos siguientes, incluyéndose el default, a menos que se redireccione por medio de un break.
Si ningún case coincide con el valor, el control de la ejecución pasa al default, si es que lo hay; de lo contrario el control pasa al siguiente estatuto después del switch.
Cuidado: Olvidar el break puede causar errores de lógica !!
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Estatuto Break
El break puede ser utilizado dentro del switch o cualquier estructura de control.
El break ocasiona una salida inmediata del switch, while, do, o for en el cual aparece.
Si el break está dentro de estructuras anidadas, el control de la ejecución sale solamente de la estructura que se encuentra más adentro.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Sintaxis
Expresion1 ? Expresion2 : Expresion3
Cómo funciona: Si Expresion1 es true, entonces el valor de la expresión es Expression2. De lo contrario, el valor de la expresión será Expresion3.
Ejemplo . . .
Operador Condicional (Ternario) ?
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Operador Condicional (Ternario) ?
// encontrar el menor de 2 números:
double min; double x; double y;
. . .
min = (x < y) ? x : y;
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Resumen de Sintaxis: if
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Resumen de Sintaxis:
El primer tipo de if es el siguiente: if (condition) statement;
o bien if (condition) { statement1; statement2;
}
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Resumen de Sintaxis:
El segundo tipo de if es el siguiente: if (condition)
statementA; else
statementB; o bien
if (condition) { statement1; statement2:
} else {
statement3; statement4;
} Fundamentos de Programación. TC1014.
Ing. Jakeline Marcos Abed
Resumen de Sintaxis: Debes ser cuidadoso al usar el if:
La condición debe estar dentro de paréntesis. Dentro del if, si se tienen varios estatutos, estos
deben estar entre { } Todos los enunciados dentro del if deben ser
seguidos por un punto y coma. El switch tiene una gramática complicada y debe
ser usado cuidadosamente.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed
Tips de programación: Para checar la condición no olvides ponerla entre paréntesis
como ésta: if (a > b)...
No olvides que la manera de checar la igualdad no es = sino = = if (a = b)... no compila correctamente,
mientras que if (a = = b)... si está correcto.
Ahora bien, si lo que quieres es preguntar si una variable está dentro de un rango [18,25]:
if (a >= 18 && <= 25)... es incorrecto. if ((a >=18) && (a <= 25))... esto sí es
correcto.
Caso para programar Realizar una aplicación en Windows que
sirva para capturar 3 valores, y que verifique si corresponden a los lados de un triángulo. En caso de que si, el programa indicará qué tipo de triángulo es: EQUILATERO, ISOCELES o ESCALENO.
Condición para que 3 valores correpondan a los lados de un triángulo: la suma de las longitudes de 2 lados cualesquiera debe ser mayor a la longitud del tercer lado. Las longitudes deben de ser mayores a cero.
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed