lunes, 27 de agosto de 2007

Practica 7: Ejercicios de estructuras selectivas compuestas y multiples.

Materia: Lógica Computacional.
Profesor: Lic. Salomón Aquino.

OBJETIVOS
Al finalizar la práctica, los estudiantes serán capaces de:
• Resolver Problemas con estructuras de selección Compuesta y Múltiple.

II. Introducción Teórica.
Hasta este punto hemos trabajado con sentencias IF que implementan decisiones que implican una o dos alternativas. En esta práctica 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 más de una condición. Por lo general dentro de este grupo están 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 práctica anterior para saber si un número es positivo, negativo o nulo usando selección compuesta, el módulo sería el siguiente:



Es recomendable utilizar sangrías para diferenciar un if de otro y se deben utilizar con cuidado para evitar posibles ambigüedades.

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 calificación de los alumnos, las calificaciones son notas entre 1 y 10; use los siguientes parámetros: 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 demás 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 números 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 Múltiples:
Este tipo de estructuras permiten hacer la selección entre dos o más alternativas. Siempre se realiza una evaluación lógica 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 condición) siempre y cuando el resultado de la evaluación lógica sea verdadero.
La sentencia switch es especialmente útil cuando la selección se base en el valor de una variable simple o de una expresión simple denominada expresión de control o selector.
El valor de esta expresión 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. Además debe ser del mismo tipo que la evaluación lógica.
Si se quiere considerar un proceso para un resultado falso utilizamos la instrucción Default, que es el valor por omisión. 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 selección, para este fin utilizamos la instrucción break. Esta hace que siga la ejecución en la siguiente sentencia al switch.
El ciclo Switch debe estar agrupado entre llaves, la llave para abrir ( { ) se escribe después de la evaluación lógica y la llave para cerrar ( } ), se escribe después del último caso.
switch ( [Evaluación Lógica] )
{
case ( [ posible respuesta 1 ] ) :
Expresión(es);
break;
case ( [ posible respuesta n ] ) :
Expresión(es);
break;
default:
Expresión(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 acción por defecto (omisión). Aunque esta etiqueta default es opcional, se recomienda su uso a menos que se esté absolutamente seguro de que todos los valores del selector estén incluidos en las posibles respuestas del case.

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

#include
#include
main ( )
{
int mes;
printf ("Escriba el número 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 menús 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 función: presentar una lista de alternativas en la pantalla para que el usuario elija una de ellas.
Expresiones condicionales: EL OPERADOR ? :
Las sentencias de selección (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 selección, una expresión que produce uno de dos valores, resultado de una expresión lógica o booleana (también denominada condición). Este mecanismo se denomina expresión condicional. Una expresión condicional tiene el formato C ? A : B y es realmente una operación ternaria (tres operandos) en el que C, A y B son los tres operandos y ? : es el operador.
Sintaxis: condición ? expresión1 : expresión2
Ejemplo: Recuerdas los ejercicios que hicimos en la práctica 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;
}

COMPARACIÓN DE LAS SENTENCIAS IF-ELSE IF Y SWITCH.
Se necesita saber si un determinado carácter car es una vocal.
Solución 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;
}

Solución 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 parámetros 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 cuánto será su comisión.
2. En base al valor de dos números 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
Plátanos, Frijoles, Queso, Crema, Pan y Café.
4: Elabore un programa que pida dos números y que permita mostrar un menú con las cuatro operaciones básicas, donde el usuario pueda seleccionar la operación que desea realizar (basta con que seleccione el número).

6 comentarios:

Anónimo dijo...

la verdad me das lastima por que te tienes que meter deldedo al culo y

Anónimo dijo...

me pueden ayudar con 5 prgramas con do case sencillos es que soy novato y no se usar bien visual fox pro si me la puden enviar al correo isarel_927@hotmail.com
escritos en word

Anónimo dijo...

por fanececito que me ayuden a desarrollar tareas en c++ y hacerejercicios de practica mi correo es karlita_87_7@hotmail.com por fa es urgente

carolina dijo...

por fa necesito un programa de colas dinamicas que usen estructuras y que compare si el dato es palindrome o capicua

Unknown dijo...

M e agrado la parte básica que manejas para principiantes, saludos y buen material

Unknown dijo...

M e gusto el material ya que trata lo básico, gracias por proporcionar una buena introducción