SELECCIÓN Estatutos de Control C# IF Condición THEN Estatuto1 ELSE Estatuto2 Estatutos de Decisión (Selección) true Estatuto1 Statement Condició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 ... false Estatuto2 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. 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). Es posible declarar variables de tipo boleano de la siguiente forma: Una expresión boleana se forma utilizando operadores relacionales o lógicos. bool nombre_var; Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Representación Gráfica de las decisiones: false Estatuto condicional if Eres menor de edad en EUA Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed El estatuto if La condición es una expresión booleana (true/false) if (condición) estatuto; else estatuto; true edad >= 21 ? Eres mayor de edad en EUA Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed El estatuto if: if (condición) { bloque de estatutos } else { bloque de estatutos Si se requiere poner más de un estatuto, los estatutos se deben encerrar entre llaves El else es opcional } * La parte del else es opcional Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos: Ejemplos: if (num < 0) Console.WriteLine(“El número es negativo”); num<0 ? false num<0 ? núm es negativo El número es negativo num = Math.Abs(num) Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos: Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplo con if anidados: if (num<0) Console.WriteLine(“El número es negativo”); else Console.WriteLine(“El número es positivo o cero”); El número es negativo false true true true if (num < 0) { Console.WriteLine(“núm es negativo, calcular su valor absoluto”); num = Math.Abs(num); } num<0 ? • Cuando adentro de una condición if tenemos otro if, se dice que tenemos if’s anidados, o condiciones anidadas. false El número es positivo o cero Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed 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”); Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Operadores Relacionales Operadores Relacionales Operador Significado == != < > <= >= Igual Ejemplos de expresiones que utilizan operadores relacionales: ExpresiónA ExpresiónB Diferente Menor que Mayor que Menor o igual que Mayor o igual que temperatura B*B - 4.0*A*C uno + dos dos * tres numero inicial 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 Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed > >= < <= == != humedad 0.0 0 cuatro 35 ‘J’ Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos de expresiones que utilizan operadores relacionales: comparación !! Operador Operadores Lógicos Operador && || ! Significado And Or Not Sus operandos deben ser expresiones boleanas y = x+2 asignación !! Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Operadores Lógicos AND OR Operadores lógicos NOT C# X T T F F Y X && Y T T F F T F F F X T T F F Y__X | | Y T T F T T T F F X T F !X F T Expresión Lógica !p NOT p p && q p || q 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 Significado es false si p es true ! p es true si p es false p AND q p && q es true si ambos p y q son true. En caso contrario es false. 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” 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) Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed ¿Cuál es el valor de cada expresión? 100 califa -13 numero edad = 21; puntos = 500.0; esMayor = (edad >= 21); // esMayor es ? sabeIngles = (puntos > 550.0); // sabeIngles es ? 27 hora (califa >= 60) ? (numero > 0) ? (hora >= 0 && hora < 24) ? (hora == 12 || hora == 0) ? Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed int edad; boolean esMayor, sabeIngles; double puntos; EXPRESION esMayor && sabeIngles esMayor || sabeIngles !esMayor !sabeIngles esMayor && (puntos > 550) VALOR ? ? ? ? ? Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed ¿Cuál es el valor de la expresión? Caso de programación A un vendedor se le da una comisión sobre su int edad, peso; edad = 25; peso = 70; EXPRESION VALOR !(edad < 10) ? !(peso > 60) ? Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed 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? 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 Fundamentos de programación C#. Román Mtz. Ejemplo de “Corto circuito” Ejemplo de “Corto circuito” int edad, altura; int edad, altura; edad = 25; altura = 70; 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 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. Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Otro ejemplo: Otro ejemplo: int edad, peso; int edad, altura; edad = 25; peso = 145; edad = 25; altura = 70; 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. EXPRESIÓN !(altura > 60)||(edad > 50) true false ¿Necesita ser evaluada esta parte? 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% Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Solución (impuesto > .25) && (ingreso < 20000) (temperatura <= 75) || (humedad < .70) (edad > 21) && (edad < 60) edad mayor de 21 y edad menor que 60 edad es 21 o 22 (edad == 21) || (edad == 22) (tipo == ‘a’ || tipo == ‘b’ || tipo == ‘c’) tipo de cliente es a, b, c Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed 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 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) Condiciones múltiples 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 Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Cuál es más eficiente ? Discusión en el aula. Tema: Decisiones if (dia == 1) if (dia == 1) Console.WriteLine(“Lunes”); Console.WriteLine(“Lunes”); else if (dia == 2) if (dia == 2) Console.WriteLine(“Martes”); Console.WriteLine(“Martes”); else if (dia == 3) if (dia== 3) Console.WriteLine(“Miercoles”); Console.WriteLine(“Miercoles”); else if (dia == 4) if (dia == 4) Console.WriteLine(“Jueves”); Console.WriteLine(“Jueves”); else if (dia == 5) if (dia == 5) Console.WriteLine(“Viernes”); Console.WriteLine(“Viernes”); 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; } 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: La expresión debe ser de tipo int, char o string switch (dia) { break; 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; case 1: Console.WriteLine(“Lunes”); case 2: Console.WriteLine(“Martes”); El default es opcional Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed } 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 !! 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 Operador Condicional (Ternario) Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed ? Sintaxis Operador Condicional (Ternario) ? // encontrar el menor de 2 números: 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. double min; double x; double y; . . . min = (x < y) ? x : y; Ejemplo . . . Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed 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; } Resumen de Sintaxis: if Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Resumen de Sintaxis: Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Resumen de Sintaxis: Debes ser cuidadoso al usar el if: 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 La condición debe estar dentro de paréntesis. 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. Dentro 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. Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed 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