Beruflich Dokumente
Kultur Dokumente
Objetivo:
1) Conocer y aplicar los operadores lgicos y relacionales en la resolucin de expresiones
simples y compuestas.
2) Conocer y aplicar las estructuras selectivas en la solucin de problemas sencillos y
complejos.
Contenido:
1. Introduccin
3.Estructuras de Seleccin
3.1 Concepto de Expresin Lgica o Condicin
3.2 Estructuras de Seleccin Simples
En este caso se puede elegir un camino o accin a ejecutar entre varios posibles, segn el
valor tomado por una variable de control o una expresin matemtica que se debe evaluar.
Esta se ubica dentro del rombo. En esta estructura no se dibujan condiciones, la estructura
misma las lleva implcitas, al igual que la evaluacin de las mismas.
Lo que nos permite elegir entre los varios caminos se le conoce como Selector y normalmente
es una variable, aunque en ocasiones se escribe una expresin matemtica; el selector
siempre debe de ser un dato de tipo entero o alfanumrico de un solo carcter o cadena de
caracteres. Y de acuerdo al valor que tenga, elige uno de los diferentes caminos; al igual que
las estructuras secuenciales y selectivas ya estudiadas, solo existe una forma de entrar a la
estructura y una nica forma de salir de la misma, en flujograma se representa as:
Select
or
Valor 1
Accin 1
Valor 2
Accin 2
Valor 3
Accin 3 Lo que est
... dentro de la lnea
punteada forma la
Valor n Estructura de
Accin n Seleccin Mltiple.
Excepcin Accin de
Excepcin
Ejemplo 10
En una tienda se efecta una promocin en la cual se hace un descuento sobre el valor de la
compra total, segn el color de la bolita que el cliente saque al pagar en caja. Si la bolita es
blanca 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%. Disee una solucin que determine
la cantidad final que un cliente deber pagar por su compra. Se sabe que solo hay bolitas de
los colores mencionados.
Entrada Salida
b. Constantes:
No hay
c. Restricciones:
monto>0 // el cliente debe de comprar algo
color==1 || color ==2 || color==3 || color==4 || color==5 //solo estos colores existen
d. Proceso:
Para calcular lo que el cliente va a pagar, le restamos al monto comprado el descuento
que se le realiza:
total = monto desc
1 d=0
2 d = 0.1
color : 3 d = 0.25
4 d = 0.5
5 d = 1.0
1 d=0
2 d=0.1
Si: color 3 d=0.25 //esta es una estructura de
4 d=0.5 //Seleccin Mltiple
5 d=1.0
desc = d*monto
total = monto desc
Principal
{El programa aplica un porcentaje de descuento segn el color de la bolita}
{total, monto, desc y d son de tipo real, color es de tipo entero}
Para escribir esta estructura en C#, necesitamos las palabras reservadas switch, que en
espaol significa: cambiarse a o interruptor; case, que significa caso, break
que significa: romper o cortar y default que se traduce como por defecto o excepcin.
De nuevo se utilizaran separadores tales como { } ( ) : ;
Cada ruta (opcin o caso) inicia con la palabra case, seguido del valor (etiqueta) que la
acompaa y dos puntos: Para finalizar cada opcin se escribe la palabra break.
Sintaxis en C#:
switch (selector)
{
case v1:
Accin1;
break;
case v2:
Accin 2;
break;
case v3:
Accin 3;
break;
...
case vn:
Accin n;
break;
default:
Accin de excepcin;
break;
Se debe tomar en cuenta las siguientes consideraciones para obtener una buena sintaxis:
El selector puede ser una variable int, char o string, o una expresin que devuelva
un valor int.
Los valores con los que se compara el selector se le conoce como etiqueta, si estos (el
valor del selector y el de la etiqueta) son iguales se ejecutan las sentencias que forman
la Accin dentro de esa etiqueta, indicadas en la figura por v1, v2, v3, v4 y vn.
Cada una de las rutas, opciones o casos (case) se pueden escribir en una sola lnea,
incluyendo el break; pero la estructura se distingue mejor en varias lneas y desde
luego se lee ms fcilmente y se corrige mucho ms rpido.
Una ruta u opcin puede ser elegida por 2 o ms valores o etiquetas, para codificar esto
en C#, se escriben las etiquetas, una despus de otra, con la palabra case y dos
puntos al final de cada etiqueta o valor. La accin se escribe una sola vez.
namespace Descuento_Compra
{
class Program
{
static void Main(string[] args)
{
float monto;
int color;
Console.WriteLine("Digite el monto de la compra");
monto = float.Parse(Console.ReadLine());
Console.WriteLine("Digite el codigo del color");
Console.WriteLine("1: blanco 2: verde 3: amarillo 4: azul 5: rojo");
color = int.Parse(Console.ReadLine());
if (monto > 0) //Primera restriccion
Descuento(monto, color);
else
Console.WriteLine("Error en el dato de compra");
Console.Read();
}
//determinar el porcentaje de descuento a realizar
public static float PorcentajeDescuento(int color)
{
float d=0;
switch (color)
{
case 1:
d = 0f;
break;
case 2:
d = 0.10f;
break;
case 3:
d = 0.25f;
break;
case 4:
d = 0.50f;
break;
case 5:
d = 1.0f;
break;
}
return d;
}
//calcular descuento
Nota: Tambin se pudo haber utilizado un selector de tipo string, que tomara directamente los
colores de la bolita: blanco, verde, amarillo, azul y roja.
Ejemplo 11
Disee un programa que permita calcular lo que hay que pagarle a un trabajador, teniendo en
cuenta su sueldo y las horas extras trabajadas. Para el pago de horas extra se toma en cuenta
la categora del trabajador:
Categora Precio de Hora
extra
1 $30.oo
2 $38.oo
3 $50.oo
4 $70.oo
Cada trabajador puede tener como mximo 30 horas extras, si alguno tiene ms slo se le
pagarn 30. A los trabajadores con categora mayor que 4 no se le debe pagar horas extras.
Entrada Salida
Pago total al
empleado
Salario del empleado
Categora del empleado
Nmero de horas extras
laboradas
c. Constantes:
No hay
d. Restricciones:
d. Proceso:
Para calcular el pago total del empleado sumamos al salario, lo que le corresponde por horas
extras:
pago = sal + extra
Donde extra es una variable que representa la cantidad de dinero que el empleado se ha ganado
en concepto de horas extra, y depende tanto del nmero de horas extras trabajadas como de la
categora:
extra = horas * pre
pre es la variable que contiene la cantidad a pagar por cada hora extra, segn las
categoras:
1 pre=30.00
2 pre=38.00
cat :
3 pre=50.00
4 pre=70.00
Cualquier
otro valor pre=0.00
Hay que recordar adems que el mximo de horas extras permitidas es 30; por lo tanto, se
debe garantizar que se paguen solo esas:
Si h_e > 30 entonces horas=30, en caso contrario horas=h_e;
horas es una variable de proceso que nos sirve para controlar el nmero de horas.
Ahora ordenando todo lo anterior, obtenemos el proceso que sigue:
sal>0 && cat>0 && h_e>=0? //prueba de restricciones
1 pre=30.00
Si: cat : 2 pre=38.00 //Seleccin mltiple
3 pre=50.00
4 pre=70.00
Exc p re=0.00
h_e > 30?
Si: horas = 30
No: horas= h_e
extra = horas * pre
pago = sal + extra
No: Desplegar Error en los datos
Sueldo_Extra
{El programa calcula el sueldo por horas extra}
{pago, sal, extra y pre son de tipo real, cat, h_e y horas es de tipo entero}
h_e>30?
15>30 FALSO
horas=h_e
horas= 15
extra=pre*horas
extra=50*15
extra=750
pago=sal+extra
pago= 875 + 750
pago=1625.00
III. Codificacin
namespace Saldo_Extra
{
class Program
{
static void Main(string[] args)
{
float pago, sal, extra, pre;
int cat, h_e, horas=0;
Console.WriteLine("digite el salario y la categoria del empleado");
sal = float.Parse(Console.ReadLine());
cat = int.Parse(Console.ReadLine());
Console.WriteLine("digite el numero de horas extra realizadas");
h_e = int.Parse(Console.ReadLine());
if ((sal > 0) && (cat > 0) && (h_e >= 0))
{
switch (cat)
{
case 1:
pre = 30;
break;
case 2:
pre = 38;
break;
case 3:
pre = 50;
break;
case 4:
pre = 70; break;
default:
pre = 0;
break;
}
if (h_e > 30)
horas =30;
else
horas = h_e;
extra = pre * horas;
pago = sal + extra;
Console.WriteLine("El total a pagar es: $"+pago.ToString("N2")+"dolares");
}
else
Console.WriteLine("Error en los datos");
Console.Read();
}
}
}
Pseudocdigo
Mtodo: PrecioHora Acceso: Pblico Esttico: S
{Obtiene el precio de la hora}
{pre de tipo real}
1. Recibir cat
2. Si cat es igual
1: Hacer pre = 30
2: Hacer pre = 38
3: Hacer pre = 50
4: Hacer pre =70
De otra forma: Hacer pre = 0
3. {Fin de condicional del paso 2}
4. Retornar pre
principal
{El programa calcula el sueldo por horas extra}
{pago, sal, extra y pre son de tipo real, cat, h_e y horas es de tipo entero}
IV. Codificacin
using System;
namespace Saldo_Extra
{
class Program
{
static void Main(string[] args)
{
float sal;
int cat, h_e;
Console.WriteLine("digite el salario y la categoria del empleado");
sal = float.Parse(Console.ReadLine());
cat = int.Parse(Console.ReadLine());
Console.WriteLine("digite el nmero de horas extra realizadas");
h_e = int.Parse(Console.ReadLine());
if ((sal > 0) && (cat > 0) && (h_e >= 0))
pago(sal, cat, h_e);
else
Console.WriteLine("Error en los datos");
Console.Read();
return;
}
Ejemplo 12
Disee una solucin que simule una calculadora sencilla, con solo las cuatro operaciones
aritmticas: suma, resta, multiplicacin y divisin.
Entrada Salida
c.Restricciones:
Los nmeros u operandos, pueden ser positivos, negativos o cero.
op== + || op== - || op== * || op== / //Solo 4 operaciones permitidas
d. Proceso:
La operacin que se va realizar, depende del tipo de operacin que hemos digitado:
+ si queremos sumar
- si queremos restar
* si queremos multiplicar
/ si queremos dividir
Si: + res = a + b
- res = a b
op: * res = a * b
/ Es b!=0?
Si: res = a / b
No: desplegar No se puede dividir
No: Desplegar Error en el tipo de operacin
Pseudocdigo
Mtodo: Suma Acceso: Pblico Esttico: S
{Realiza la suma}
{res de tipo real}
1. Recibe a,b
2. Hacer res = a + b
3. Escribir Suma + res
1. Recibe a,b
2. Hacer res = a * b
3. Escribir Multiplicacin + res
1. Recibe a, b
2. Si b != 0
Entonces
Hacer res = a / b
Escribir Divisin + res
Sino
Escribir No se puede dividir
3. {Fin de condicional del paso 2}
1. Recibir a, b y op
2. Si op es igual
+: Suma(a,b)
-: Resta(a,b)
*: Multiplicacion(a,b)
/: Division(a,b)
3. { Fin de condicional del paso 2}
principal
{El programa simula una calculadora}
{res, a y b son de tipo real, op es de tipo carcter}
V. Codificacin
using System;
namespace Calculadora
{
class Program
{
static void Main(string[] args)
{
float res, a, b;
char op;
Console.WriteLine("Digite los dos datos");
a = float.Parse(Console.ReadLine());
b = float.Parse(Console.ReadLine());
Console.WriteLine(" +: suma"); //muestra los simbolos de las
Console.WriteLine(" -: resta"); //operciones
Console.WriteLine(" *: multiplicacion)");
Console.WriteLine(" /: division");
Console.WriteLine("Digite el simbolo de la operacion deseada");
Console.ReadKey().KeyChar;
if ((op == '+') || (op == '-') || (op == '*') || (op == '/'))//prueba de restriccion de op
{
operacion(a, b, op);
}
else
Console.WriteLine("Error en el tipo de operacion");
Console.Read();
}
//realiza la suma de dos nmeros reales
}
}
}
Ejemplo 13
Disee una solucin que calcule el salario de un empleado, si la compaa aumentar a su
personal de acuerdo a los aos de servicio de cada empleado, ver tabla de porcentajes. El
programa debe imprimir el nombre y el nuevo salario del empleado.
Constantes:
No hay
e. Variables de Proceso
Pseudocdigo
Mtodo: CalcularAumento Acceso: Pblico Esttico: S
principal
{El programa calcula el salario de un empleado de acuerdo a los aos de servicio }
{sal, aum y sal_nu son de tipo real, annio es de tipo entero, nom es de tipo String}
IV. Codificacin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Salario_Empleado2
{
class Program
{
static void Main(string[] args)
{
float nu_sal, sal, aum = 0;
int annio;
String nom;
Console.WriteLine("Digite el nombre y los aos de servicio del
empleado");
nom = Console.ReadLine();
annio = int.Parse(Console.ReadLine());
Console.WriteLine("Digite el salario actual");
sal = float.Parse(Console.ReadLine());
if (sal > 0)
CalcularAumento(annio, sal, nom);
else
Console.WriteLine("Error en el dato del salario");
Console.Read();
}
public static void CalcularAumento(int annio, float sal, String nom)
{
float aum, nu_sal;
switch (annio)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
aum = 0;
break;
case 10:
case 11:
case 12:
case 13:
case 14:
aum = 0.075f * sal;
break;
case 15:
case 16:
case 17:
case 18:
case 19:
aum = 0.12f * sal;
break;
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
aum = 0.1825f * sal;
break;
default:
aum = 0.25f * sal;
break;
}
nu_sal = sal + aum;
Console.WriteLine(nom + "\trecibir:\t" + nu_sal.ToString("N2") +
"dlares");
}
}
}
78