Sunteți pe pagina 1din 19

Facultad: Ingeniería

Escuela: Ingeniería en Computación


Asignatura: Programación Estructurada

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.
a. 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.
b. La instrucción switch realiza una de varias acciones distintas, dependiendo del valor de una
expresión (expresión de control).
c. A la instrucción if se le llama instrucción de selección simple, debido a que selecciona o ignora
una acción individual.
d. 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).
e. 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).

86
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.
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)

87
{
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 C# SINTAXIS COMENTARIO
AND && Exp_Lógica && Exp_Lógica Devuelve verdaderos si se cumplen ambas
condiciones.
OR || Exp_Lógica || Exp_Lógica Devuelve verdaderos si se cumple al menos
una de las condiciones.
NOT ! ! Niega la condición.

Nota:
 La operación (x&&y) corresponde a la operación (x and y).
 La operación (x||y) corresponde a la operación (x or y).
Instrucción 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.

88
La sintaxis es la siguiente:
Switch (expresión de control )
{
case<literal-1>:
Instrucción(es)
break;
.
.
case<literal-n>:
Instrucción(es)
break;
default:
Instrucción(es)
}
Caracteres ASCII utilizados:
ALT + 92 = \ ALT + 91 = [ ALT + 93 = ] ALT + 35 = #
ALT + 94 = ^ ALT + 123 = { ALT + 125 = } 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.

Diseñar un programa en C# que nos permita saber cuál es el número mayor


Ejemplo1 entre 2 números.

1 static void Main(string[] args)


2 {
3 Console.Title = " El mayor de dos numeros";
4 Int32 x,y;

89
5 Console.WriteLine("Digitar el primer número del 1 al 1000");
6 x = Int32.Parse(Console.ReadLine());
7 Console.WriteLine("Digitar el segundo número del 1 al 1000");
8 y = Int32.Parse(Console.ReadLine());
9 if (x>y)
10 {
11 Console.WriteLine("\nEl numero {0} es mayor que {1}", x, y); // v
12 }
13 else
14 {
15 Console.WriteLine("\nEl numero {0} es mayor que {1}", y, x); // f
16 }
17 Console.WriteLine("\n\n");
18 Console.WriteLine("\n----->Fin del programa");
19 Console.ReadKey();
20 }

No. Corrida Datos entradas Resultado

1 x=100 y=87

2 x=150 y=245

3 x=200 y=135

Desarrollar un programa que solicite al usuario un número y determine si dicha


Ejemplo2 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 static void Main(string[] args)
2 {
3 int Numero;
4 Console.Title = "VERIFICANDO NUMEROS PARES";
5 Console.Write("\nIngrese un numero:");
6 Numero = int.Parse(Console.ReadLine());
7 if (Numero < 0)
8 {
9 Console.Write("\n\tNumero Negativo...Ingrese un numero positivo");

90
10 }
11 else if (Numero % 2 == 0)
12 {
13 Console.Write("\n\tEl numero (" + Numero + ") es par.");
14 if (Numero >= 10 && Numero <= 100)
15 {
16 Console.Write("\n\tEl numero (" + Numero + ") se encuentra en el rango [10-100]");
17 }
18 else
19 {
20 Console.Write("\n\tEl numero (" + Numero + ") NO esta en el rango [10-00]");
21 }
22 }
23 else
24 {
25 Console.Write("\n\tEl numero ingresado es impar...");
26 }
27 Console.ReadKey();
28 }
29 }
30 }

No. Corrida Datos entradas Resultado

1 Numero = 30

2 Numero = 25

3 Numero = -24

Desarrollar un programa en C# que lea desde teclado dos números. Si el


Ejemplo3 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 Double x, y, z, w;
3 Console.Title = "CONDICIONALES";
4 Console.WriteLine("\tDigitar primer numero:");
5 x = Double.Parse(Console.ReadLine());
91
6 Console.WriteLine("\tDigitar segundo numero:");
7 y = Double.Parse(Console.ReadLine());
8 if (x > y)
9 {
10 z = x + y;
11 w = x - y;
12 Console.WriteLine("\tMOSTRANDO RESULTADOS");
13 Console.WriteLine("\tSUMA: " + z);
14 Console.WriteLine("\tRESTA: " + w);
15 }
16 else
17 {
18 z = x * y;
19 if (y == 0)
20 {
21 Console.WriteLine("\tNo se puede dividir entre CERO");
22 }
23 else
24 {
25 w = x / y;
26 Console.WriteLine("\tMOSTRANDO RESULTADOS");
27 Console.WriteLine("\tMULTIPLICACION: " + z);
28 Console.WriteLine("\tDIVISION: " + w);
29 }
30 }
31 Console.ReadKey();
32 }
33 }
34 }

No. Corrida Datos entradas Resultado

1 x = 8, y=4

2 x = 5, y = 10

3 x = 0, y=0

92
Las raíces reales de la expresión ax2 + bx + c = 0.
Ejemplo4 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𝑎
1 {
2 Console.ForegroundColor = ConsoleColor.Black;
3 Console.BackgroundColor = ConsoleColor.White;
4 Console.Clear();
5 Double a,b,c,disc,x1,x2;
6 Console.Title = ("Programa que calcule las raíces de una ecuación de 2do grado");
7 Console.WriteLine("Ingresa coeficiente cuadratico");
8 a = Double.Parse(Console.ReadLine());
9 Console.WriteLine("Ingresa coeficiente lineal");
10 b = Double.Parse(Console.ReadLine());
11 Console.WriteLine("Ingresa constante");
12 c = Double.Parse(Console.ReadLine());
13 disc=(Math.Pow(b,2)-4*a*c);
14 if(a!=0)
15 {
16 if(disc<0)
17 {
18 Console.WriteLine("Tiene raices imaginarias");
19 }
20 else
21 {
22 x1=(-b+Math.Sqrt(disc))/(2*a);
23 x2=(-b-Math.Sqrt(disc))/(2*a);
24 Console.WriteLine("X1 = " + Math.Round(x1,3) + " X2 = " + Math.Round(x2,3));
25 }
26 }
27 else
28 {
29 Console.WriteLine("El coeficiente cuadratico debe ser diferente de 0");
30 }
31 Console.ReadKey();
32 }

93
Realice un programa que solicite el nombre de una persona, su edad y su sexo
Ejemplo5 si el sexo es masculino que muestre en pantalla el mensaje de “ El Sr. (nombre)
ha sido registrado" y si el sexo es femenino que muestre el mensaje "La Sra.
(nombre) ha sido registrada".
1 {
2 Console.Title = " El sexo de una persona";
3 Int32 edad;
4 String nombre, sexo;
5 Console.WriteLine("Digitar tu nombre");
6 nombre = Console.ReadLine();
7 Console.WriteLine("Digitar tu edad");
8 edad = Int32.Parse(Console.ReadLine());
9 Console.WriteLine("Digitar tu sexo ( Hombre=M y Mujer=F )");
10 sexo = Console.ReadLine();
11 if (sexo == "M" || sexo == "m") // instruccion lógica OR
12 {

94
13 Console.WriteLine("\nEl Sr {0} ha sido registrado", nombre); // v
14 }
15 else
16 {
17 Console.WriteLine("\nLa Sra {0} ha sido registrada", nombre); // f
18 }
19 Console.WriteLine("\n\n");
20 Console.WriteLine("\n----->Fin del programa");
21 Console.ReadKey();
22 }

No. Corrida Datos entradas Resultado


1 nombre = Chabelo
edad = 45
sexo = m
2 nombre = Luismi
edad = 28
sexo = m
3 nombre = Andrea
edad = 44
sexo = f

Se necesita un programa que muestre un menú con las siguientes opciones:


Ejemplo6 1. Suma.
2. Resta.
3. Multiplicación.
4. División.
5. Raíz Cuadrada.
6. Exponenciación.
7. Salir del programa.

1 static void Main(string[] args)


2 {
3 int op;
4 Double x, y, z;
5 Console.WriteLine("\nDigitar el primer numero:");

95
6 x = Double.Parse(Console.ReadLine());
7 Console.WriteLine("\nDigitar el segundo numero:");
8 y = Double.Parse(Console.ReadLine());
9 Console.Title = "SWITCH CASE";
10 Console.WriteLine("\n\tOPERACIONES MATEMATICAS");
11 Console.WriteLine("\n\t1. SUMAR");
12 Console.WriteLine("\n\t2. RESTAR");
13 Console.WriteLine("\n\t3. MULTIPLICAR");
14 Console.WriteLine("\n\t4. DIVIDIR");
15 Console.WriteLine("\n\t5. RAIZ CUADRADA");
16 Console.WriteLine("\n\t6. POTENCIACION");
17 Console.WriteLine("\n\t7. SALIR DEL PROGRAMA");
18 Console.WriteLine("\n\n\t Digite su opcion: ");
19 op = int.Parse(Console.ReadLine());
20 switch (op)
21 {
22 case 1:
23 z = x + y;
24 Console.WriteLine("\t El resultado de la suma es: " + z);
25 break;
26 case 2:
27 z = x - y;
28 Console.WriteLine("\t El resultado de la resta es: " + z);
29 break;
30 case 3:
31 z = x * y;
32 Console.WriteLine("\t El resultado de la multiplicacion es: " + z);
33 break;
34 case 4:
35 if ( y == 0 )
36 {
37 Console.WriteLine("\t Division Invalida...");
38 }
39 else
40 {
41 z = x / y;

96
42 Console.WriteLine("\t El resultado de la division es: " + z);
43 }
44 break;
45 case 5:
46 z = Math.Sqrt(x);
47 Console.WriteLine("\t La raiz cuadrada del primer numero es " + z);
48 break;
49 case 6:
50 z = Math.Pow(y,2);
51 Console.WriteLine("\t El cuadrado del segundo numero es " + z);
52 break;
53 case 7:
54 Environment.Exit(0);
55 break;
56 default:
57 Console.WriteLine("\t Opcion no definida.. intente de nuevo");
58 break;
59 }
60 Console.ReadKey();
61 }
62 }
63 }

Corrida del ejercicio:

97
NOTA: Siempre hay que utilizar las validaciones para que las operaciones matemáticas tengan el
resultado correcto.

Análisis de Resultados

1. 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%.
No. Corrida Datos entradas Resultado
1 total=100 contestadas=87
2 total=150 contestadas=45
3 total=200 contestadas=135

Investigación Complementaria
1. Cree un programa que pida 3 números al usuario y determine cuál de ellos es el mayor.
No. Corrida Datos entradas Resultado

1 a=9 b=4 c=1

2 a=3 b=6 c=2

3 a=4 b=1 c=10

98
2. Cree un programa que pida 3 números al usuario y determine cuál de ellos es el menor.
No. Corrida Datos entradas Resultado

1 a=9 b=4 c=1

2 a=2 b=6 c=5

3 a=4 b=1 c=10

3. Cree un programa que pida 2 números al usuario y determine si el primer número es múltiplo del
segundo.
No. Corrida Datos entradas Resultado

1 a=9 b=3

2 a=12 b=5

3 a=25 b=5

4. Crear un programa que pida tres números e indicar si el tercero es igual a la suma del primero y el
segundo.
No. Corrida Datos entradas Resultado

1 a=9 b=3 c=12

2 a=12 b=5 c=15

3 a=25 b=5 c=30

5. Crear un programa que tome dos números y diga si ambos son pares o impares.
No. Corrida Datos entradas Resultado

1 x=9 y=3

2 x=12 y=10

3 x=25 y=4

99
6. Crear un programa que muestre un menú donde las opciones sean “Equilátero”, “Isósceles” y
“Escaleno”, pida una opción y calcule el perímetro del triángulo seleccionado.
Formulas:
Equilátero: Perímetro = 3 * lado1
Isósceles: Perímetro = (2*lado1) + base
Rectángulo: Perímetro = lado1 + lado2 + (raizcuadrada[ (lado1)2 + (lado2)2] )

7. 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.
No. Corrida Datos entradas Resultado

1 d=20 m=enero a=2000

2 d=4 m=mayo a=2010

3 d=12 m=julio a=2016

8. 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.

No. Corrida Datos entradas Resultado

1 d1=20 m1=1 a1=2000

d2=10 m2=3 a1=2017

2 d1=4 m1=5 a1=2010

d2=10 m2=5 a1=2017

3 d1=12 m1=8 a1=2006

d2=3 m2=3 a1=2017

100
9. Hacer un programa que posea dentro de él 2 menús, teniendo el siguiente formato:
a) conversión de colones a dólares
b) conversión de millas a kms
c) conversión de grados Celsius a grados Fahrenheit
d) segundo menú
1. si es positivo o negativo
2. área de un triangulo
3. fin submenú
e) fin de menú
Seleccione una opción (a..e):

10. Hacer un programa que pida una letra y detecte si es una vocal, utilizando switch case.
No. Corrida Datos entradas Resultado

1 letra=a

2 letra=h

3 letra=u

11. Hacer un programa con un menú que pase de Kg a otra unidad de medida de masa, mostrar en
pantalla un menú con las opciones posibles.
Menú:
Kg a libras
Kg a onzas
Kg a toneladas
No. Corrida Datos entradas Resultado

1 Kg=10 a onzas

2 Kg=15 a libras

3 Kg=2000 a toneladas

12. Crear un programa que pida al usuario un número de día y un número de mes, evalúe si la entrada
es correcta y en caso de que así sea calcule el día del año que es, considerando un año no bisiesto.
Observaciones a tomar en cuenta:
 Un problema puede tener distintas vías para ser resuelto. Vamos a enfocarlo hacia una resolución
usando la instrucción Según (Caso) Hacer.
101
 En primer lugar y como variantes globales contemplaremos dos posibilidades: datos correctos o
datos incorrectos. Se considerarán datos correctos aquellos en los que el número de día esté
comprendido entre 1 y 31 y el número de mes entre 1 y 12. Se podría afinar más restringiendo
mes a mes las posibilidades (p. ej. en el mes de febrero no admitir un número de día que fuera
30, ya que ese valor es inviable), cosa que no haremos para simplificar el ejercicio.
 Por otro lado, para el cálculo del día del año se considerarán 12 casos posibles, que son los doce
meses del año. Para cada mes, se calculará el día del año como el día del mes correspondiente
más el total de días acumulados correspondientes a los meses anteriores. Por ejemplo: el día del
año que es el día 15 del mes 2 (15 de febrero) se calcula como 15 + 31 siendo 31 el acumulado
de días de los meses anteriores.

Resultados a obtener.
 Día del año expresado como un valor comprendido entre 1 y 365.
 Convertir este pseucódigo en C#

1. Inicio [Cálculo del día del año ejemplo aprenderaprogramar.com]


2. Mostrar “Introduzca el número del día y número del mes”
3. Pedir NDia, Nmes
4. Si Ndia>= 1 y Ndia <= 31 y Nmes >= 1 y Nmes <= 12 Entonces
Según Nmes Hacer
Caso, = 1
DDA = NDia [DDA es día del año]
Caso, = 2
DDA = NDia + 31
Caso, = 3
DDA = NDia + 59
Caso, = 4
DDA = NDia + 90
Caso, = 5
DDA = NDia + 120
Caso, = 6
DDA = NDia + 151
Caso, = 7
DDA = NDia + 181
Caso, = 8
DDA = NDia + 212
102
Caso, = 9
DDA = NDia + 243
Caso, = 10
DDA = NDia + 273
Caso, = 11
DDA = NDia + 304
Caso, = 12
DDA = NDia + 334
FinSegún
Mostrar “El”, NDia, “del”, Nmes, “es el día”, DDA, “del año”
SiNo
Mostrar “Datos proporcionados no válidos”
FinSi
5. Fin

13. El siguiente programa que simula un cajero automático con un saldo inicial de 1000 Euros, se
encuentra diseñado en C++ y lo necesitamos convertirlo a C#.

#include <stdio.h>
void main(){
int SI,opc;
float din,dan,S;
SI=1000;
printf("Bienvenido a su cajero virtual.\n");
printf("Seleccione una opcion:\n\n");
printf("1.Ingreso en cuenta.\n2.Reintegro.\n3.Ver el saldo
disponible\n0.Salir\n\nUsted ha marcado: ");
scanf("%d",&opc);
if(opc==1){
printf("\nBien, escriba el dinero que desee introducir: ");
scanf("%f",&din);
S=SI+din;
printf("\nIngreso realizado correctamente. Su saldo actual es de %f\n",S);
}else if(opc==2){
printf("\nAhora, teclee la cantidad de capital que desea retirar: ");
scanf("%f",&dan);
103
if(dan>SI){
printf("\nError. No dispone de tanto sueldo.\n");
}else{
S=SI-dan;
printf("\nReintegro realizado correctamente. Su saldo actual es de %f\n",S);
}
}else if(opc==3){
printf("\nSu saldo actual es de %d\n",SI);
}else if(opc==0){
printf("\nGracias por utilizar este programa.\n\n");
}else{
printf("\nDisculpe, se ha equivocado al marcar.\n\n");
}
}

Bibliografía

 Deitel, Harvey M. y Paul J. Deitel, Cómo Programar en C#, Segunda Edición, México, 2007.

104

S-ar putea să vă placă și