Fecha de efectividad: CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA LSC 2003-1 5221 Lenguaje de Programación Estructurada PRÁCTICA No. 2 LABORATORIO DE NOMBRE DE LA PRÁCTICA Licenciado en Sistemas Computacionales DURACIÓN (HORA) Utilización de mandos de decisión 2 1. INTRODUCCIÓN Los programas hasta ahora realizados se ejecutan de un modo secuencial, de tal forma que se ejecuta una sentencia después de otra. Sin embargo, para la resolución de problemas de tipo general es necesario controlar cualquiera de las sentencias que se ejecuten. En esta práctica veremos las estructuras condicionales que controlan la ejecución de una sentencia o lista de sentencias, si se cumple una condición. Es común que en los programas, las acciones que se toman dependen de que una o varias condiciones se cumplan, inclusive una condición puede a su vez contener otras condiciones, cuando esto sucede estamos frente a un problema de decisiones anidadas. C maneja las siguientes estructuras para la toma de decisiones: if, if- y switch() Cada una de ellas puede anidar una similar o diferente, es decir una estructura if puede anidar a otra estructura if o bien a otra estructura switch y viceversa, construyendo de este modo estructuras de decisiones anidadas. Formuló Revisó Aprobó Autorizó Ing Veronica Beltran Ing. Linda Eugenia Arredondo Acosta Ing. Maria Luisa Gonzalez Ramirez L.I. Hilda Olivia Albarrán P. M.C. Gloria Etelbina Chávez Valenzuela M.C. Miguel Ángel Martínez Romero Maestro Coordinador de Programa Educativo Página 1 de 13 Gestión de Calidad Director de la Facultad Revisión 2
2. OBJETIVO (COMPETENCIA) Aplicará los mandos de decisiones en programas de forma adecuada, en los diferentes problemas, para que los utilice de aquí en adelante durante el curso de programación. También utilizará condiciones anidadas para la toma de decisiones en los programas. 3. FUNDAMENTO La Estructura if. La estructura if es una estructura de control condicional que permite llevar a cabo una acción si una condición lógica dada, tiene un valor especifico (cierto o falso). Esta estructura tiene dos formas diferentes. La forma más sencilla es: if (expresión lógica) Acción; La sentencia Acción de la estructura anterior se ejecutará solamente si la expresión lógica es cierta. Si la expresión lógica es falsa será ignorada. La segunda forma es: if (expresión lógica) Acción1; Acción2; La Acción1 y la Acción2, pueden ser una única sentencia que termina en un punto y coma (;) o un grupo de sentencias encerradas entre llaves, es decir un bloque de instrucciones. Cuando se ejecuta la sentencia if- se evalúa la expresión lógica. Si la expresión es verdadera, se ejecuta Acción1 y en caso contrario se ejecuta Acción2 Ejemplo 1: if (a==0) if (b!=3) sentencia1; sentencia2; Ejemplo 2: Página 2 de 13
if(a==0) if(b!=3) sentencia1; sentencia2; En el Ejemplo 1 el está asociado con la condición if(b!=3), en el ejemplo 2 esta asociado con la condición if(a==0). La escalera if--if Una construcción común en programación es la escalera if--if que se vera de la siguiente manera: if (condición) sentencia; if (condición) sentencia; if (condición) sentencia;... if (condición) sentencia; sentencia; La computadora evalúa las expresiones condicionales iniciando con la primera, y continuando con la siguiente en forma descendente hasta encontrar una condición verdadera, en cuyo caso la computadora ejecuta la sentencia asociada a esta condición y salta el resto de la escalera, si ninguna condición es verdadera se ejecutará la sentencia asociada con el final. Si todas las condiciones son falsas y no hay final, no hace nada. La sentencia switch(). El lenguaje C tiene incorporada una sentencia de bifurcación múltiple llamada switch, la computadora comprueba una variable sucesivamente frente a una lista de constantes enteras o de caracter. Después de encontrar una coincidencia, la computadora ejecuta la sentencia o bloque de sentencias que se asocian con la constante. La forma general de la sentencia switch es: switch(variable) case constante1: secuencia de sentencias Página 3 de 13
case constante2: secuencia de sentencias.. default: secuencia de sentencias donde la computadora ejecuta la sentencia default si el valor de la variable no coincide con ninguna constante de la lista. El default es opcional. Cuando el valor de la variable coincide con alguna constante de la lista, la computadora ejecuta las sentencias asociadas con el case hasta encontrar un break. 4. PROCEDIMIENTO (DESCRIPCIÓN) A) EQUIPO NECESARIO MATERIAL DE APOYO Computadoras con Linux instalado. La practica 3 de Lenguaje de Programación Estructurada impresa. B) DESARROLLO DE LA PRÁCTICA Considérese el siguiente ejemplo para resolver los ejercicios propuestos, obsérvese como el mismo problema puede resolverse con estructuras if o switch anidadas. Un restaurante ofrece el siguiente menú, con los siguientes costos por platillo: 1.- carne en su jugo 89.60 2. Hígado encebollado 60.25 Adicionalmente el cliente puede elegir uno de los siguientes postres, por los cuales se agregará al costo del platillo las cantidades que se indican: 1) Flan 5.00 2) Gelatina 3.50 3) No desea postre (el cliente pagará 10.00 pesos menos por su platillo). Página 4 de 13
El programa deberá pedir la información referente al platillo y al postre, a través de un menú y al final mostrará un mensaje con el monto que el cliente deberá pagar. El siguiente programa soluciona el problema anterior con estructuras if anidadas. #include <stdio.h> int main() int platillo,postre; float costo=0.0; printf("\n\nque platillo desea el cliente\n"); printf(" 1)Carne en su Jugo ó 2)Hígado encebollado\n"); printf("proporcione la Opción (1 ó 2): [ ]\b\b"); scanf("%d",&platillo); if(platillo==1) printf("\nseleccione postre\n"); printf("1-flan, 2-Gelatina 3-No desea postre)\n"); printf("proporcione la Opción (1,2 ó 3): [ ]\b\b"); scanf("%d",&postre); if (postre==1) costo=89.60+5.00; if (postre==2) costo=89.60+3.50; if (postre==3) costo=89.60-10.00; printf("\nexiste un error en la selección del postre\n"); if(platillo==2) printf("\nseleccione postre\n"); printf("proporcione la Opción (1,2 ó 3): [ ]\b\b"); scanf("%d",&postre); if (postre==1) costo=60.25+5.00; if (postre==2) costo=60.25+3.50; if (postre==3) costo=60.25-10.00; printf("error en la selección del platillo\n"); printf("\nel total a pagar es %8.2f \n",costo); return 0; Página 5 de 13
Solución con estructuras switch anidadas, las opciones del platillo serán ahora a y b. #include <stdio.h> int main() char platillo; int postre; float costo=0.0; printf("\n\nque platillo desea el cliente\n"); printf(" a)carne en su Jugo ó b)hígado encebollado\n"); printf("proporcione la Opción (a ó b): [ ]\b\b"); scanf("%c",&platillo); switch(platillo) case 'A': case 'a': printf("\n\nque postre desea el cliente:\n"); printf("1) Flan, 2) Gelatina 3) No desea postre\n"); printf("proporcione la Opción (1,2 ó 3): [ ]\b\b\b"); scanf("%d",&postre); switch(postre) case 1:costo=89.60+5.00; case 2:costo=89.60+3.50; case 3:costo=89.60-10.00; default:printf("\nerror en la selección del postre\n"); case 'B': case 'b': printf("\n\nque postre desea el cliente:\n"); printf("1) Flan, 2) Gelatina 3) No desea postre\n"); printf("proporcione la Opción (1,2 ó 3): [ ]\b\b\b"); scanf("%d",&postre); switch(postre) case 1:costo=60.25+5.00; case 2:costo=60.25+3.50; case 3:costo=60.25-10.00; default:printf("\nerror en selección del postre\n"); Página 6 de 13
default:printf("\nerror en la selección del platillo\n"); printf("\nel total a pagar es %8.2f \n",costo); return 0; A continuación se muestra un ejemplo utilizando posicionamiento de cursor y algunas funciones matemáticas, al momento de compilarlo deberás hacerlo como se muestra abajo, substituyendo nombre por el nombre con el que tu lo salvaste: gcc -o nombre nombre.c -l m -l ncurses #include <ncurses.h> #include <math.h> int main() char opcion1; int opcion2; float dato,resultado; initscr(); clear(); move(10,10);printw("menú de Opciones"); move(11,10);printw("a] Funciones Matemáticas"); move(12,10);printw("b] Áreas y Perímetros"); move(13,10);printw("dame tu opción[ ]\b\b"); scanw("%c",&opcion1); switch(opcion1) case 'A': case 'a': clear(); move(10,10); printw("menú de Funciones Matemáticas"); move(11,10); printw("1] Eleva un número dado al cuadrado"); move(12,10); printw("2] Calcula raíz cuadrada de un número dado"); move(13,10); printw("dame tu opció[ ]\b\b"); scanw("%d",&opcion2); if (opcion2==1) move(15,10);printw("dame un número : "); Página 7 de 13
scanw("%f",&dato); resultado=pow(dato,2); move(17,10); printw("%.2f elevado al cuadrado es %.2f",dato,resultado); if (opcion2==2) move(15,10);printw("dame un número : "); scanw("%f",&dato); resultado=sqrt(dato); move(17,10); printw("la raíz cuadrada de %.2f es %.2f",dato,resultado); move(20,10); printw("error en opció del segundo menú"); case 'B': case 'b': clear(); move(10,10; printw("menú de Áreas y Perímetros"); move(11,10); printw("1] Dado el radio de un circulo calcula área"); move(12,10); printw("2] Dado el radio de un circulo calcula perímetro"); move(13,10); printw("dame tu opció[ ]\b\b"); scanw("%d",&opcion2); if (opcion2==1) move(15,10); printw("proporciona radio del circulo : "); scanw("%f",&dato); Página 8 de 13
resultado=3.1416*pow(dato,2); move(17,10); printw("el área del circulo es %.2f",resultado); if (opcion2==2) move(15,10); printw("proporciona radio del circulo : "); scanw("%f",&dato); resultado=2*3.1416*dato; move(17,10); printw("el perímetro del circulo es %.2f",resultado); move(20,10); printw("error en opción del segundo menú"); default: move(20,10); printf("error en la opción del menú principal"); getch(); endwin(); return 0; A continuación se mencionan 5 ejercicios para el alumno, de los cuales deberá resolver uno con una estructura if y otro con un switch anidado, recuerde que una estructura if puede anidar una estructura switch() y viceversa. Para seleccionar el ejercicio que deberá resolver usted, atienda las indicaciones de su maestro de laboratorio. 1.- Una empresa clasifica a los empleados en dos grupos: Grupo 1, son empleados que laboran en la empresa y desea darles un incremento en su sueldo de acuerdo a lo siguiente: Si el empleado tiene entre 1 y 5 años inclusive en la empresa se le dará un bono de 100 Si el empleado tiene mas de 5 años pero menos de 10 el bono será de 200 Página 9 de 13
Si el empleado tiene mas de 10 años en la empresa el bono será de 300 Si el empleado es mujer y tiene mas de 5 años en la empresa, o simplemente tiene mas de 10 años en la empresa se le dará un 10% mas de su sueldo (esto es independientemente del bono por antigüedad), si no cumple con alguna de las condiciones anteriores no se le dará el 10%. Para estos empleados se pide mostrar el sueldo final, la antigüedad en la empresa, de cuanto fue el bono otorgado y el 10% de sobresueldo si es que se le otorgo (indicar con un mensaje si no se le dio este 10%). Grupo 2, son los que aspiran a ingresar a la empresa y de estos se desea saber si podrán ingresar a la empresa si cumplen con las siguientes condiciones: Si el aspirante pasó al menos una de dos pruebas aplicadas con una calificacion de 8 y ademas cumple con una edad entre 18 y 50 inclusive. De estos se mostrará un mensaje indicando si va a ser aceptado o no en la empresa; en caso de ser rechazado se indicará la razon del rechazo y si es aceptado se mostrará la edad y la puntuacion obtenida en ambas pruebas. 2. Una empresa familiar de zapatos, fabrica 3 modelos de zapatos para caballero con los siguientes precios de venta: 1.- Modelo Ejecutivo...345.50 2.- Modelo Premier...298.70 3.- Modelo Emperador...246.00 Los 3 modelos son fabricados únicamente en talla 8. La empresa planea fabricar los tres modelos también en tallas 9 y 10, y desea un programa que calcule los precios de venta para estas nuevas tallas. Se sabe que por cada número que se aumente en la talla del zapato, su precio de venta deberá incrementarse 10 pesos, esto significa que si el modelo Emperador cuesta 246.00 pesos en medida número 8, su costo en número 9 será 256.00 y en 10 es 266.00 Escribe un programa que pida el modelo del zapato (a, b ó c) y la medida (8,9 ó 10) e imprima en pantalla su precio de venta correspondiente. 3. Escribe un programa que calcule el sueldo semanal de un empleado, si la empresa donde trabaja, paga a sus empleados por horas trabajadas semanalmente, siguiendo las siguientes consideraciones: Existen dos departamentos, en los que a sus empleados se les pagan las siguientes cantidades por hora: 1) Contabilidad 61.25 pesos p/hora 2) Producción 22.45 pesos p/hora Página 10 de 13
Además la empresa otorga a sus empleados un bono por asistencia según el reporte de asistencias del último año 0 (cero) faltas...185.00 pesos adicionales 2 faltas...90.00 pesos adicionales 3 faltas...30.00 pesos adicionales Más de 3 faltas no reciben bono por asistencia El programa deberá preguntar: El departamento en que trabaja en el empleado (1 =contabilidad ó 2 =producción), el número de faltas que tiene en el último año trabajado y horas trabajadas por semana. Después de pedir esta información el programa calculará el sueldo integrado del empleado, que se obtendrá de la siguiente manera: sueldo_neto= (horas_trabajadas*sueldo_diario) sueldo_integrado=sueldo_neto+bono_por_asistencia Finalmente mostrara un reporte como el siguiente: Sueldo neto...:xxxxx.xx Bono por asistencia...:xxxxx.xx Sueldo integrado...:xxxxx.xx 4. Una asociación de asistencia social otorga las siguientes cantidades por concepto de beca mensual a estudiantes con pobreza extrema y moderada, de los siguientes 3 niveles: a) Primaria...beca básica=300.00 b) Secundaria...beca básica=600.00 c) Preparatoria...beca básica=900.00 Adicionalmente se suman las siguientes cantidades a la beca básica dependiendo del estado de la vivienda en la que habita el estudiante. 1) Su familia vive en casa propia...= no se incrementa su beca básica. 2) Su familia renta casa...= se suman 100.00 pesos a su beca básica. 3) Vivienda irregular, sin servicios..= se suman 200.00 pesos a su beca básica. Escribe un programa que pregunte el nivel del estudiante: ( a)primaria, b)secundaria ó c)preparatoria) Pregunte también la condición de la vivienda que el estudiante habita: (1) casa propia, 2)casa rentada ó 3)vivienda irregular, sin servicios) Posteriormente muestre en pantalla el monto total de su beca. Página 11 de 13
5.- En una central de autobuses se tienen las siguientes salidas diarias desde Mexicali y costos por pasajero a las siguientes ciudades: Tijuana $200.00 Ensenada $350.00 Tecate $ 125.00 Ademas, dependiendo del dia de la semana en que se viaje se obtiene un descuento: Lunes y martes 10% Miércoles 12% Jueves y viernes 5% Sabado y domingo No hay descuento Elabore un programa que permita determinar y mostrar cuanto se pagaria de pasaje si se quisiera viajar a cualquiera de esas ciudades cualquier dia de la semana, tambien se va a mostrar a que ciudad se esta viajando y el dia que se viaja. Se otorga un 50% de descuento si se presenta la credencial de estudiante y un 25% si se presenta la credencial de maestro, en estos casos no se dara el descuento por dia. Podria considerarse que a una ciudad podria viajar mas de una persona. C) CÁLCULOS Y REPORTE El maestro le pedirá de forma individual que ejecute los programas que se realizaron en la practica y le preguntará acerca del desarrollo de los mismos. Conteste las siguientes preguntas: 1. Cuándo una estructura if debe llevar llaves? 2. Qué sucede en una estructura switch cuando colocamos cualquier sentencia entre el switch( ) y el primer case, o entre un break y un case? 3. Qué sucede en un estructura switch() cuando no ponemos los break? 4. Para qué se utiliza la opción -l del compilador gcc? 5. RESULTADOS Y CONCLUSIONES En cada uno de los problemas propuestos, se recomienda, hacer una prueba de escritorio, con algunos valores deentrada predeterminados, y observar los resultados obtenidos, para posteriormente comprobarlos en el momento de ejecutar el programa Página 12 de 13
6. ANEXOS 7. REFERENCIAS http://www.uclm.es/profesorado/lrbenitez/programasc/seleccion.htm http://www.alegsa.com.ar/notas/102.php Página 13 de 13