Está en la página 1de 7

Practica 7: Ejercicios de estructuras selectivas compuestas y

multiples.
Materia: Lgica Computacional.
Profesor: Lic. Salomn Aquino.

OBJETIVOS
Al finalizar la prctica, los estudiantes sern capaces de:
Resolver Problemas con estructuras de seleccin Compuesta y Mltiple.

II. Introduccin Terica.
Hasta este punto hemos trabajado con sentencias IF que implementan
decisiones que implican una o dos alternativas. En esta prctica se mostrar
como se puede utilizar la sentencia IF para implementar decisiones que
impliquen varias alternativas.
Estructuras Selectivas Compuestas.
Se identifican porque para solucionarlos se necesita establecer ms de una
condicin. Por lo general dentro de este grupo estn incluidos los ifs anidados,
en los cuales dentro de un if se encuentra otro y dentro de este hay otro, y as
sucesivamente.

Una sentencia IF es anidada cuando la sentencia de la rama verdadera o la
rama falsa, es a su vez una sentencia IF. A este tipo de estructura se le
conoce como selectiva compuesta o multi-alternativa.
Ejemplo. Si resolvemos el problema de la prctica anterior para saber si un
nmero es positivo, negativo o nulo usando seleccin compuesta, el mdulo
sera el siguiente:



Es recomendable utilizar sangras para diferenciar un if de otro y se deben
utilizar con cuidado para evitar posibles ambigedades.

Ejemplo 1:
Determinar la cantidad de dinero que recibir un trabajador por concepto de
las horas extras trabajadas en una empresa, sabiendo que cuando las horas de
trabajo exceden de 40, el resto se consideran horas extras y que stas se
pagan al doble de una hora normal cuando no exceden de 8; si las horas extras
exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora
normal y el resto al triple.

La solucion es la siguiente:

#include
#include
int main ( )
{
float ht,ph,he,het,phe,pt;
printf("\nIntroduzca la horas trabajadas: ");
scanf("%f",&ht);
printf("\n");
printf("\nIntroduzca el precio por hora: ");
scanf("%f",&ph);
printf("\n");
if (ht > 40)
{
he = ht - 40;
if (he > 8)
{
het = he -8;
phe = ph * 2 * 8 + ph * 3 * het;
}
else phe = ph * 2 * he;
pt = ph * 40 + phe;
}
else
pt = ph * ht;
printf("El salario a pagar es %f \n", pt);
system("pause");
return 0;
}


Ejemplo 2:
Se desea agregar una letra para representar la calificacin de los alumnos, las
calificaciones son notas entre 1 y 10; use los siguientes parmetros: A para
calificaciones mayores o iguales a 9, B para calificaciones mayores o iguales a
8, C para calificaciones mayores o iguales a 7, D para calificaciones mayores o
iguales a 6, F para todas las dems calificaciones.
#include
<#include stdlib.h>
main ( )
{
int nota;
printf ("Escriba la nota obtenida (valores enteros entre 1-10): ");
scanf ("%d",a);
if (nota>=9)
printf ("\nEl concepto en base a su nota es A");
else
if (nota>=8)
printf ("\nEl concepto en base a su nota es B");
else
if (nota>=7)
printf ("\nEl concepto en base a su nota es C");
else
if (nota>=6)
printf ("\nEl concepto en base a su nota es D");
else
printf ("\nEl concepto en base a su nota es F");

printf ("\nEl programa ha terminado\n\n");
system(pause);
return 0;
}

Ejemplo 3. Calcular el mayor de tres nmeros enteros.
#include
#include
int main ( )
{
int a, b, c, mayor;
printf ("\nIntroduzca tres enteros: ");
scanf ("%d %d %d",&a, &b, &c);
if (a > b)
if (a > c) mayor = a;
else mayor =c;
else
if (b > c ) mayor = b;
else mayor = c;
printf (El mayor es %d \n, mayor);
system(pause);
return 0;
}
Estructuras Selectivas Mltiples:
Este tipo de estructuras permiten hacer la seleccin entre dos o ms
alternativas. Siempre se realiza una evaluacin lgica que es la llave de
entrada al ciclo selectivo.
La sentencia que se utiliza para este fin es Switch, que ejecuta una de las
alternativas (la que cumpla la condicin) siempre y cuando el resultado de la
evaluacin lgica sea verdadero.
La sentencia switch es especialmente til cuando la seleccin se base en el
valor de una variable simple o de una expresin simple denominada expresin
de control o selector.
El valor de esta expresin puede ser de tipo int o char, pero no de tipo float
ni double o string.
Cada posible respuesta es un valor nico, constante y diferente de los otros.
Adems debe ser del mismo tipo que la evaluacin lgica.
Si se quiere considerar un proceso para un resultado falso utilizamos la
instruccin Default, que es el valor por omisin. Dado que cada uno de los
casos puede contener varias expresiones debemos indicarle al compilador que
el caso ha terminado y que debe salir del ciclo de seleccin, para este fin
utilizamos la instruccin break. Esta hace que siga la ejecucin en la siguiente
sentencia al switch.
El ciclo Switch debe estar agrupado entre llaves, la llave para abrir ( { ) se
escribe despus de la evaluacin lgica y la llave para cerrar ( } ), se escribe
despus del ltimo caso.
switch ( [Evaluacin Lgica] )
{
case ( [ posible respuesta 1 ] ) :
Expresin(es);
break;
case ( [ posible respuesta n ] ) :
Expresin(es);
break;
default:
Expresin(es);
break;
}
Si el valor selector no est listado en ninguna etiqueta case, no se ejecutar
ninguna de las opciones a menos que se especifique una accin por defecto
(omisin). Aunque esta etiqueta default es opcional, se recomienda su uso a
menos que se est absolutamente seguro de que todos los valores del selector
estn incluidos en las posibles respuestas del case.

Ejemplo 4:
Escriba un programa tal que al escribir el nmero de mes muestre el nombre
completo del mes (hecho para el primer semestre).

#include
#include
main ( )
{
int mes;
printf ("Escriba el nmero del mes (primer semestre): ");
scanf ("%d",&mes);
switch (mes) {
case (1):
printf ("Enero");
break;
case (2):
printf ("Febrero");
break;
case (3):
printf ("Marzo");
break;
case (4):
printf ("Abril");
break;
case (5):
printf ("Mayo");
break;
case (6):
printf ("Junio");
break;
default:
printf ("Escribio un numero mayor de seis, recuerde solo primer semestre");
break;
}
printf ("\n\n\nFin del Programa \n");
system(pause); return 0;
}
Caso particular de Case
Est permitido tener varias expresiones case en una alternativa dada dentro
de la sentencia switch.
Ejemplo 4:
#include
#include
main()
{
int c;
printf("Digite el valor de c:\n");
scanf("%d",&c);
switch ( c ) {
case (0) : case (1) : case (2): case (3) : case (4) :
printf("esta entre 1 y 4\n");
break;
case (5) : case (6) : case (7): case (8) : case (9) :
printf("esta entre 5 y 9\n");
break;
default:
printf("no esta ahi \n");
}
system(pause);
return 0;
}
La sentencia switch es til cuando se quieren elaborar mens para que el
usuario seleccione opciones. Un men de un restaurante presenta una lista de
alternativas para que un cliente elija entre sus diferentes opciones. Un men
en un programa de computadora hace la misma funcin: presentar una lista
de alternativas en la pantalla para que el usuario elija una de ellas.
Expresiones condicionales: EL OPERADOR ? :
Las sentencias de seleccin (if y switch) consideradas hasta ahora, son
similares a las sentencias previstas en otros lenguajes, tales como Pascal y
Fortran 90. C tiene un tercer mecanismo de seleccin, una expresin que
produce uno de dos valores, resultado de una expresin lgica o booleana
(tambin denominada condicin). Este mecanismo se denomina expresin
condicional. Una expresin condicional tiene el formato C ? A : B y es
realmente una operacin ternaria (tres operandos) en el que C, A y B son los
tres operandos y ? : es el operador.
Sintaxis: condicin ? expresin1 : expresin2
Ejemplo: Recuerdas los ejercicios que hicimos en la prctica 2?
#include stdio.h>
#include stdlib.h>
#include conio.h>
main()
{
int a,b,c;
a=3;
b=8;
c=10;
(a>3 && (b==4 || a + b<=c)) ? printf("verdadero\n") : printf("falso\n");
system(pause);
return 0;
}

COMPARACIN DE LAS SENTENCIAS IF-ELSE IF Y SWITCH.
Se necesita saber si un determinado carcter car es una vocal.
Solucin if-else if
#include
#include
main()
{
char car;
printf("Digite el caracter:\n");
car=getchar();
if ((car=='a')||(car=='A'))
printf("%c es una vocal\n", car);
else if ((car=='e')||(car=='E'))
printf("%c es una vocal\n", car);
else if ((car=='i')||(car=='I'))
printf("%c es una vocal\n", car);
else if ((car=='o')||(car=='O'))
printf("%c es una vocal\n", car);
else if ((car=='u')||(car=='U'))
printf("%c es una vocal\n", car);
else
printf("%c no es una vocal\n", car);
system(pause);
return 0;
}

Solucin con SWITCH.
#include
#include
main()
{
char car;
printf("Digite el caracter:\n");
car=getchar();
switch (car) {
case ('a'): case ('A'):
case ('e'): case ('E'):
case ('i'): case ('I'):
case ('o'): case ('O'):
case ('u'): case ('U'):
printf("%c es una vocal\n", car);
break;
default:
printf("%c no es una vocal\n", car);
}
system(pause);
return 0;
}


III. Ejercicios
1. La empresa Milagrito S.A. tiene la siguiente tabla de parmetros para pagar
las comisiones de sus ejecutivos de ventas:



Escriba un programa que al introducir la cantidad vendida por el ejecutivo de
ventas, calcule de cunto ser su comisin.
2. En base al valor de dos nmeros enteros, determine si estos son:
A. Iguales.
B. No iguales.
C. El primero es mayor que el segundo.
D. El segundo es mayor que el primero.
E. El primero es mayor o igual que el segundo.
F. El segundo es mayor o igual que el primero.
3. Un restaurante, desea dar a conocer a sus clientes el plato que se ha
preparado para cada uno de los tiempos de comida desayuno, almuerzo y
cena. El restaurante prepara un plato nico para cada uno de los tiempos.
Cuando el cliente seleccione entre los tiempos de comida (desayuno,
almuerzo o cena) se debe desplegar el detalle de este.
Ejemplo:
Seleccione su tiempo de Comida: desayuno
Detalle
Pltanos, Frijoles, Queso, Crema, Pan y Caf.
4: Elabore un programa que pida dos nmeros y que permita mostrar un men
con las cuatro operaciones bsicas, donde el usuario pueda seleccionar la
operacin que desea realizar (basta con que seleccione el nmero).

También podría gustarte