Programación I, Guía 4 1 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Tema: “Estructuras de Selección en C#”. Objetivos Utilizar las instrucciones de selección “if” e “if..else” para elegir una de varias acciones alternativas. Conocer la sintaxis de C# para las instrucciones condicionales simples, dobles y múltiples, así como también la utilidad en la programación. Aprender a utilizar la estructura y sintaxis del switch-case para la evaluación de condiciones múltiples. Introducción Por lo general, las instrucciones en una aplicación se ejecutan una después de la otra, en el orden en que se escriben. A este proceso se le conoce como ejecución secuencial. Varias instrucciones de C# le permiten especificar que la siguiente instrucción a ejecutar no es necesariamente la siguiente en la secuencia. A este se le conoce como transferencia de control. Estructuras de Selección en C# C# cuenta con tres tipos de estructuras de selección, que de aquí en adelante denominaremos instrucciones de selección. La instrucción if realiza (selecciona) una acción si una condición es verdadera, o ignora la acción si la condición es falsa. La instrucción if…else realiza una acción si una condición es verdadera o realiza una acción distinta si la condición es falsa. La instrucción switch realiza una de varias acciones distintas, dependiendo del valor de una expresión (expresión de control). A la instrucción if se le llama instrucción de selección simple, debido a que selecciona o ignora una acción individual. A la instrucción if...else se le llama instrucción de selección doble, debido a que selecciona una de dos acciones distintas (o grupos de acciones). A la instrucción switch se le llama instrucción de selección múltiple, debido a que selecciona una de varias acciones distintas (o grupo de acciones). Sintaxis de las Instrucciones Condicionales Una instrucción if simple responde a la siguiente sintaxis: if (expresión booleana) { Instrucción(es) de condición verdadera. } Advertencia: Las llaves son opcionales si hay una sola acción. Normalmente, es aconsejable añadirlas de todas formas. Su omisión puede ser causa de fallos inesperados. 2 Programación I, Guía 4 La instrucción if solo garantiza la ejecución de determinadas acciones basándose en una condición verdadera (true). Se ejecutan o no se ejecutan. Para controlar tanto la condición true como la falsa (false) es necesario utilizar la instrucción if…else. Su sintaxis en la siguiente: if (expresión booleana) { Instrucción(es) de condición verdadera. } else { Instrucción(es) de condición falsa. } Recordar: La condición siempre se evalúa en el if. NUNCA se evaluará una condición después de la sentencia else. Muchas veces vamos a necesitar evaluar más de dos condiciones, por lo que nos encontramos con el siguiente tipo de estructura, para el cual se muestra la sintaxis e interpretación: if (condicion1) { Bloque de instrucciones que se ejecutan si la condición 1 es verdadera. } else if(condicion2) { Bloque de código que se ejecuta si la condición 2 es verdadera. } else if(condicion n) { Bloque de código se la siguiente condición n es verdadera. } else { Bloque de código que se ejecuta si ninguna de las condiciones previas fue verdadera. } Operadores Lógicos Los operadores lógicos producen un resultado booleano (verdadero o falso) y sus operandos son también valores lógicos. Nos permiten formular condiciones complejas a partir de condiciones simples. A continuación se muestra una tabla con las tres compuertas lógicas básicas que nos servirán como operadores lógicos: OPERADOR AND OR C# SINTAXIS COMENTARIO && || Exp_Lógica && Exp_Lógica Exp_Lógica || Exp_Lógica NOT ! ! Devuelve verdaderos si se cumplen ambas condiciones. Devuelve verdaderos si se cumple al menos una de las condiciones. Niega la condición. Programación I. Guía 4 3 Nota: La operación x && y corresponde a la operación x & y, excepto que y se evalúa solamente si x es true. La operación x || y corresponde a la operación x | y, excepto que y se evalúa solamente si x es false. Caracteres ASCII utilizados: ALT + 92 = \ ALT + 94 = ^ ALT + 33 = ! ALT + 91 = [ ALT + 123 = { ALT + 93 = ] ALT + 125 = } ALT + 35 = # ALT +124 = | Material y Equipo Guía de laboratorio No. 4. Computadora con Visual Studio 2013 o superior. Dispositivo de almacenamiento (USB). Procedimiento Crear una carpeta con el nombre Practica4 para guardar los ejemplos y ejercicios, en el escritorio de su computadora. Guía_4_Ejemplo_1 Desarrollar un programa que solicite al usuario un número y determine si dicha cantidad es par o impar, en caso de que el número sea par, el programa deberá verificar si el número está entre el rango [10 - 100]. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; namespace Guia4_Ejemplo1 { class Par { static void Main(string[] args) { int Numero; Console.Title = "VERIFICANDO NUMEROS PARES"; Console.Write("\nIngrese un numero:"); Numero = int.Parse(Console.ReadLine()); if (Numero < 0) { Console.Write("\n\tNumero Negativo...Ingrese un numero positivo"); } 4 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Programación I, Guía 4 else if (Numero % 2 == 0) { Console.Write("\n\tEl numero (" + Numero + ") es par."); if (Numero >= 10 && Numero <= 100) { Console.Write("\n\tEl numero (" + Numero + ") se encuentra en el rango [10-100]"); } Else { Console.Write("\n\tEl numero (" + Numero + ") NO se encuentra en el rango [10-100]"); } } else { Console.Write("\n\tEl numero ingresado es impar..."); } Console.ReadKey(); } } } Corrida del ejercicio: Guía_4_Ejemplo_2 Desarrollar un programa en C# que lea desde teclado dos números. Si el primero es mayor que el segundo se deberá mostrar la suma y la diferencia de dichas cantidades, en caso contrario se deberá mostrar el producto y la división del primero respecto al segundo. 1 2 3 4 5 6 7 8 9 using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; namespace Guia4_Ejemplo2 { class Program Programación I. Guía 4 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 { static void Main(string[] args) { Double x, y, z, w; Console.Title = "CONDICIONALES"; Console.WriteLine("\tDigitar primer numero:"); x = Double.Parse(Console.ReadLine()); Console.WriteLine("\tDigitar segundo numero:"); y = Double.Parse(Console.ReadLine()); if (x > y) { z = x + y; w = x - y; Console.WriteLine("\tMOSTRANDO RESULTADOS"); Console.WriteLine("\tSUMA: " + z); Console.WriteLine("\tRESTA: " + w); } else { z = x * y; if (y == 0) { Console.WriteLine("\tNo se puede dividir entre CERO"); } else { w = x / y; Console.WriteLine("\tMOSTRANDO RESULTADOS"); Console.WriteLine("\tMULTIPLICACION: " + z); Console.WriteLine("\tDIVISION: " + w); } } Console.ReadKey(); } } } Corrida del ejercicio: 5 6 Programación I, Guía 4 Instrucciones switch Cuando hay muchas condiciones a evaluar, la instrucción if…else puede resultar demasiado compleja de manejar. Una solución mucho más limpia en estos casos consiste en usar la instrucción switch. La instrucción switch permite cualquier valor entero o de cadena con múltiples valores. Cuando se produce una coincidencia se ejecutan todas las instrucciones asociadas con ella. Esta estructura es muy utilizada a la hora de trabajar con menú dentro de las aplicaciones. La sintaxis es la siguiente: switch(expresión_de_control) ----------------- Puede ser int o string { case<literal-1>: Instrucción(es) break; . . . case<literal-n>: Instrucción(es) break; default: Instrucción(es) } Guía_4_Ejemplo_3 Se necesita un programa que muestre un menú con las siguientes opciones: 1. Suma. 2. Resta. 3. Multiplicación. 4. División. 5. Raíz Cuadrada. 6. Exponenciación. 7. Salir del programa. 1 2 3 4 5 6 7 8 9 10 11 12 13 using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; namespace Guia4_Ejemplo3 { class Opciones { static void Main(string[] args) { int op; Programación I. Guía 4 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 Double x, y, z; Console.WriteLine("\nDigitar el primer numero:"); x = Double.Parse(Console.ReadLine()); Console.WriteLine("\nDigitar el segundo numero:"); y = Double.Parse(Console.ReadLine()); Console.Title = "SWITCH CASE"; Console.WriteLine("\n\tOPERACIONES MATEMATICAS"); Console.WriteLine("\n\t1. SUMAR"); Console.WriteLine("\n\t2. RESTAR"); Console.WriteLine("\n\t3. MULTIPLICAR"); Console.WriteLine("\n\t4. DIVIDIR"); Console.WriteLine("\n\t5. RAIZ CUADRADA"); Console.WriteLine("\n\t6. POTENCIACION"); Console.WriteLine("\n\t7. SALIR DEL PROGRAMA"); Console.WriteLine("\n\n\t Digite su opcion: "); op = int.Parse(Console.ReadLine()); switch (op) { case 1: z = x + y; Console.WriteLine("\t El resultado de la suma es: " + z); break; case 2: z = x - y; Console.WriteLine("\t El resultado de la resta es: " + z); break; case 3: z = x * y; Console.WriteLine("\t El resultado de la multiplicacion es: " + z); break; case 4: if ( y == 0 ) { Console.WriteLine("\t Division Invalida..."); } else { z = x / y; Console.WriteLine("\t El resultado de la division es: " + z); } break; case 5: z = Math.Sqrt(x); Console.WriteLine("\t La raiz cuadrada del primer numero es " + z); break; case 6: z = Math.Pow(y,2); Console.WriteLine("\t El cuadrado del segundo numero es " + z); break; case 7: Environment.Exit(0); break; default: Console.WriteLine("\t Opcion no definida.. intente de nuevo"); 7 8 68 69 70 71 72 73 Programación I, Guía 4 break; } Console.ReadKey(); } } } Corrida del ejercicio: NOTA: Siempre hay que utilizar las validaciones para que las operaciones matemáticas tengan el resultado correcto. Programación I. Guía 4 9 Análisis de Resultados 1. Cree un programa que pida 3 números al usuario y determine cuál de ellos es el mayor. 2. Un postulante a un empleo, realiza un test de capacitación. Se obtuvo la siguiente información: cantidad total de preguntas que se realizaron y la cantidad de preguntas que contestó correctamente. Se pide desarrollar un programa que ingrese los datos por teclado e informe el nivel del mismo según el porcentaje de respuestas correctas que ha tenido y sabiendo que: Nivel máximo ---------------------------------- Porcentaje >= 90. Nivel medio ------------------------------------ Porcentaje >= 75% y < 90%. Nivel regular ----------------------------------- Porcentaje >= 50% y < 75%. Fuera de nivel --------------------------------- Porcentaje < 50%. 3. Las raíces reales de la expresión ax2 + bx + c = 0. Desarrollar un programa para encontrar las raíces de la ecuación cuadrática sabiendo que la fórmula a utilizar es: −𝑏 ± √𝑏 2 − 4𝑎𝑐 𝑥= 2𝑎 Investigación Complementaria 1. Desarrollar un programa en C# que acepte las fechas escritas de modo usual y las visualice como números. Por ejemplo, la entrada: 20, agosto, 2015 debe mostrar una salida así: 20, 08, 2015. 2. Se requiere calcular la edad de un individuo; para ello se va a tener como entrada dos fechas en el formato día (1 a 31), mes (1 a 12) y un año (entero de cuatro dígitos), correspondientes a la fecha de nacimiento y la fecha actual, respectivamente. Escriba un programa que calcule y muestre la edad del individuo. Si es la fecha de un bebé (menos de un año de edad), la edad se debe dar en meses y días; en caso contrario, la edad se calculará en años. Bibliografía Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007. Anotaciones