Guía de Estudio II. Unidad Didáctica II: Estructuras de Control en Algoritmo y Programación. Estructuras de Control Selectivas: Las estructuras selectivas se utilizan para tomar decisiones lógicas y existen en dos “formas”: la sentencia if-then-else y la sentencia Switch. a) If: La estructura selectiva (if-else) se considera de alternativa doble (si se cumple cierta condición, entonces…, en caso contrario…), y tiene la siguiente estructura: If (condición) Instrucción 1; else Instrucción 2; Nota: Cuando existe una sola If (condición) instrucción no se agregan llaves Instrucciones; de {apertura y cierre}. Cuando se trabaja con el lenguaje C no se coloca la palabra reservada then. (lado izquierdo) Existen casos en donde no es necesario el else (lado derecho), ya que se necesita que se cumpla la condición y listo. También se puede dar el caso cuando se tienen más instrucciones, esa opción si deberá llevar las llaves de {apertura y cierre}. Ejemplos: If (condición) { Instrucción 1; Instrucción 2; Instrucción 3; /*Bloque de instrucciones que se ejecutaran si la condición es verdadera*/ } else { Instrucción 4; Instrucción 5; /*Bloque de instrucciones que se ejecutaran si la condición es falsa*/ } Nota: También se da el caso If (condición 1) cuando existen selecciones { anidadas como se muestra a Instrucción 1; continuación. (lado derecho) If (condición 2) Instrucción 2; } else { Instrucción 4; Instrucción 5; } Recomendación #1: Cuando utilice la estructura de control If no implica utilizar siempre un else. Hay ocasiones en que un else no es necesario. Nunca coloque un punto y coma (;) después de la condición del If porque esto crearía una estructura vacía (sin cuerpo), ya que las instrucciones que hay dentro de él se ejecutan aunque la condición sea falsa. Práctica (If): Ejercicio N° 1: Dados dos números enteros, determine cuál es el mayor y cuál es el menor. Realizar el siguiente problema en algoritmo y en lenguaje C++. Análisis del Problema: Resultados o salidas esperadas: Mostrar cual de los dos números introducidos por pantalla es el mayor y cuál es el menor. Datos de entradas: Dos números enteros. Determinar las restricciones: Los números introducidos por pantalla deben ser enteros. Procesos necesarios: Preguntar con la estructura de control IF quien es el número mayor de los dos números y enviar el resultado. Resultado: Algoritmo MayorMenor Inicio Variables: numero1, numero2, mayor, menor: entero; Escribir “Introduzca el primer número”; Leer numero1; Escribir “Introduzca el segundo número”; Leer numero2; Si (numero1 ˃ numero2) entonces mayor = numero1; menor = numero2; Escribir “El mayor de los dos números es el número 1: ”, mayor; Escribir “El menor de los dos números es el número 2: ”, menor; Sino mayor = numero2; Programa MayorMenor #include ˂iostream.h˃ int numero1, numero2, mayor, menor; main () { cout˂˂ “Introduzca el primer número”: cin˃˃numero1; cout˂˂ “Introduzca el segundo número”: cin˃˃numero2; if (numero1˃numero2) { mayor = numero1; menor = numero2; cout˂˂ “El mayor de los dos números es el número 1: ”, mayor; cin˃˃ “El menor de los dos números es el número 2: ”, menor; menor = numero1; } Escribir “El mayor de los dos números else es el número 2: ”, { mayor; mayor = numero2; Escribir “El menor de los dos números menor = numero1; es el número 1: ”, cout˂˂ “El mayor de los dos números es menor; el número 2: ”, Fin. mayor; cin˃˃ “El menor de los dos números es el número 1: ”, menor; } } Salida Nº 1: Introduzca el primer número: 2 Introduzca el segundo número: 1 El mayor de los dos números es el número 1: 2 El menor de los dos números es el número 2: 1 Salida Nº 2: Introduzca el primer número: 3 Introduzca el segundo número: 4 El mayor de los dos números es el número 2: 4 El menor de los dos números es el número 1: 3 Ejercicio N° 2: Una empresa comercializadora contrata vendedores a los cuales les paga un salario que va de acuerdo al total de las ventas realizadas en el mes. La siguiente tabla es tomada como referencia para calcular el sueldo total de cada vendedor. Venta (Bsf) 0-500000 500001 – 1000000 1000001 – 1500000 1500001 - 2500000 2500001 – 4000000 Más de 4000000 Sueldo (Bsf) 80.000 160.000 320.000 450.000 550.000 20% de las ventas Realizar un programa en C++que sistematice este procedimiento y al ingresar las ventas de un empleado inmediatamente muestre el sueldo que le corresponde. Análisis del Problema: Resultados o salidas esperadas: Mostrar el sueldo que le corresponde a un empleado de acuerdo a las ventas realizadas. Datos de entradas: Monto de las ventas realizadas. Determinar las restricciones: El monto de las ventas de acuerdo a la tabla. Procesos necesarios: Utilizar la estructura If para realizar cada condición de acuerdo a las ventas que el empleado realizó y luego calcular el sueldo total del vendedor. Algoritmo sueldo_total Inicio Variables: Enteras: ventas, salario; Escribir “*****Programa Nómina*****”; Escribir “Indique el monto total de las ventas del empleado: \n”; Leer ventas; Si (ventas ≤ 500000) salario = 80000; sino Si (ventas ≥ 500001) or (ventas ≤ 1000000) salario = 160000; sino Si (ventas ≥ 1000001) or (ventas ≤ 1500000) salario = 320000; sino Si (ventas ≥ 1500001) or (ventas ≤ 2500000) salario = 450000; sino Si (ventas ≥ 2500001) or (ventas ≤ 4000000) salario = 550000; sino salario = ventas * 0.20; Escribir "El salario del empleado es: ",salario; Fin. Salida Nº 1: Programa sueldo_total #include˂iostream.h˃ main() { int ventas, salario; cout˂˂ “*****Programa Nómina*****”; cout˂˂ “Indique el monto total de las ventas del empleado: \n”; cin˃˃ventas; if (ventas ≤ 500000) salario = 80000; else if (ventas ≥ 500001) || (ventas ≤ 1000000) salario = 160000; else if (ventas ≥ 1000001) || (ventas ≤ 1500000) salario = 320000; else if (ventas ≥ 1500001) || (ventas ≤ 2500000) salario = 450000; else if (ventas ≥ 2500001) || (ventas ≤ 4000000) salario = 550000; else salario = ventas * 0.20; cout << "El salario del empleado es: ",<< salario << endl; } *****Programa Nómina***** Indique el monto total de las ventas del empleado: 415000 El salario del empleado es: 80000 Salida Nº 2: *****Programa Nómina***** Indique el monto total de las ventas del empleado: 1250380 El salario del empleado es: 320000 Salida Nº 4: *****Programa Nómina***** Indique el monto total de las ventas del empleado: 5800000 El salario del empleado es: 1160000 b) Switch: Existe otra sentencia para la selección múltiple, esta es la sentencia Switch, actúa como una función de bifurcación múltiple que sustituye con ventaja a if-else-if cuando el número de opciones que se puede presentar son numerosas. El mandato Switch (variable) se utiliza para bifurcar las diferentes opciones presentadas según el valor ingresado para la variable en cada caso. Por ejemplo: Switch (variable) { case constante1 : instrucción1; break; case constante1 : instrucción2; break; case constante1 : instrucción3; break; case constante1 : instrucción4; break; default: acción5; } Nota: Un ejemplo es donde evaluamos nota (tipo entero) y se imprime la calificación correspondiente al valor de nota, al final si la nota es de 6 al 0, imprimirá en pantalla Reprobado. Switch (nota) { case 10 : printf(“Calificación 10”); break; case 9 : printf(“Calificación 9”); break; case 8: printf(“Calificación 8”); break; case 7: printf(“Calificación 7”); break; default: printf(“Reprobado”);; } La sentencia Switch se considera de selección múltiple, ya que el flujo de ejecución puede continuar por una cantidad N de alternativas posibles, según el valor de la expresión que se evalúa al principio. Recomendación #2: Cuando se encuentre con un problema que contiene una serie de decisiones para los cuales utilizar if/else if, esto es tedioso, es aquí donde se puede hacer uso de la estructura de selección múltiple switch en la cual una variable o expresión se probará por separado contra cada uno de los valores constantes enteros que puede asumir y de acuerdo con ellos determinar que acción se debe seguir. En el caso default (por defecto) no tiene sentido usar un break ya que es el último caso evaluado. Práctica (Switch): Ejercicio Nº 1: Dado como datos la matricula de un alumno, el semestre en el que está inscrito, y promedio, determine si el mismo es apto para pertenecer alguna de las profesiones que tiene la universidad. Si el alumno es aceptado teniendo en cuenta las especificaciones que se listan abajo se debe imprimir su matrícula, carrera y la palabra “Aceptado”. Ingeniería Semestre ˃ 6 y Promedio ≥ 8.8 Medicina Semestre ≥ 6 y Promedio ≥ 8.5 Licenciatura Semestre ˃ 5 y Promedio ≥ 8.3 Técnico Semestre ≥ 3 y Promedio ≥ 7.8 Programa Matricula int main() { char Carrera; int Matricula, Semestre; float Promedio; cout<< “*******Programa matricula de un alumno,\n******”; cout<<(“ Escriba el numero de Matricula\n\t”); cin>>Matricula; cout<<(“Escriba el promedio\n\t”); cin>>Promedio; cout<<(“ Escriba el Semestre\n\t”); cin>>Semestre; cout<< “$Profesión a elegir (Escribir en MAYUSCULA la letra)\n\t”; cout<<”[I = Ingeniería , M = Medicina , L = Licenciatura , T = Técnico]\n\t“; cin>>Carrera; switch (Carrera) { case‘I’: if (Semestre>6) && (Promedio ≥8.8) { cout<< “***APROBADO***\n”; cout<< “Matricula No. “<<Matricula; cout<< “Tipo de Carrera: “<<Carrera<<”\n\t“; } else { cout<< “No Aprobado\n\t”; } break; case‘M’: if (Semestre≥6) && (Promedio>8.5) { cout<< “***APROBADO***\n”; cout<< “Matricula No. “<<Matricula; cout<< “Tipo de Carrera: “<<Carrera<<”\n\t”; } else { cout<<”\n\t No Aprobado\n\n\t“; } break; case‘L’: if (Semestre>5) && (Promedio≥8.3) { cout<< “***APROBADO***\n”; cout<< “Matricula No. “<<Matricula; cout<< “Tipo de Carrera: ”<<Carrera<< “\n\t“; } else { cout<< “No Aprobado \n\t”; } break; case‘T’: if (Semestre>=3) && (Promedio>=7.8) { cout<< “***APROBADO***\n”; cout<< “Matricula No. “<<Matricula; cout<< “Tipo de Carrera: “<<Carrera<< “\n\n\t“; } else { cout<< “No Aprobado \n\t“; } break; } system(“PAUSE“); return 0; } Salida: Ejercicio Nº 2: Estructuras de Control Iterativas: También conocidas como estructuras de repetición (bucles o ciclos) se utilizan para realizar varias veces el mismo conjunto de operaciones. Entre ellas se encuentran aquellas donde la cantidad de repeticiones se conoce a priori y aquellas en las que las repeticiones se realizan hasta que se cumple una condición lógica dada. Se encuentran las siguientes estructuras iterativas: for, while y do-while. a) For: La estructura for, permite definir un bucle controlado por un contador, denominado variable de control o de inducción, la sintaxis es: Sintaxis: for (inicialización; condición lógica; actualización de la variable) Observación: Dentro del paréntesis lleva “;” es decir, en la primera se inicializa la variable de control y sólo se ejecuta una vez; la segunda es la condición lógica que debe cumplirse y la Ejemplo: for (i = 0; i ˂ 10; i ++) { printf (“Elemento[%d] = %d\n”, i, valores, [i]); } Inicialización: i = 0. Condición booleana de parada: i ˂ 10. tercera es la actualización de la variable de control. Incremento: i ++. Expresión a repetir: printf (…). Recomendación #3: Utilice for cuando sepa de antemano cuántas veces se ejecutará el cuerpo del ciclo, de lo contrario utilice while o do/while. No inicialice fuera del ciclo for la variable de control del mismo. Práctica (For): Ejercicio N° 1: Leer N números e imprimir solamente los números positivos. Realizar el problema en Algoritmo y en Lenguaje C++. Análisis del Problema: Resultados o salidas esperadas: Imprimir los números positivos. Datos de entradas: La cantidad de N números que el usuario debe introducir por pantalla. Determinar las restricciones: Los números deben ser positivos para poder imprimirlos por pantalla. Procesos necesarios: Utilizar la estructura de control For para controlar la cantidad de números, luego se utiliza el IF para preguntar si el número es mayor que 0, si es verdadero es el número es positivo, en caso contrario el número no es positivo, y luego se envía el resultado por pantalla. Algoritmo numpositivo Inicio Variables: N, num, i: Entero; Escribir “Introduzca la números: ”; Leer N; Desde (i=1; i ≤ N; i++) { Escribir “Número: ”, i; Leer num; Si (num ˃ 0) cantidad Programa numpositivo #include˂iostream.h˃ int N, num, i; main() de { cout˂˂”Introduzca la cantidad de números: ”; cin˃˃N; for(i=1; i≤N; i++) { cout˂˂”Número: ”, i; cin˃˃num; Escribir “El número”, num, “es if(num˃0) positivo”; cout˂˂”El número”, num, “es positivo”; Sino else Escribir “El número”, num, “no es cout˂˂”El número”, num, “no es positivo”; positivo”; }fin-Desde } Fin. } Salida: Introduzca la cantidad de números: 4 Número: 1 4 El número 4 es positivo Número: 2 8 El número 8 es positivo Número: 3 -2 El número -2 no es positivo Número: 4 -6 El número -6 no es positivo Ejercicio N° 2: Se tiene un conjunto de calificaciones de un grupo de 5 alumnos. Realizar un programa en C++ que calcule la calificación promedio y la calificación más baja de todo el grupo. Análisis del Problema: Resultados o salidas esperadas: Calificación promedio y la calificación más baja. Datos de entradas: La calificación de 5 alumnos que deben ser introducidos por pantalla. Determinar las restricciones: Deben ser introducidos solo 5 calificaciones. Procesos necesarios: Utilizar la estructura de control For para controlar la cantidad de calificaciones e incrementar el contador i, luego se utiliza el IF para hacer la comparación con un valor tope, lo que permitirá conocer la calificación más baja. Algoritmo calificación Inicio Variables: Entero: suma, baja, i; Real: calif, media; Programa calificación #include˂iostream.h˃ int suma, baja, i; float calif, media; main() suma=0, baja=9999, i=1; Desde (i= 1; i ≤ 5; i++) { Escribir “Calificación: ”, i; Leer calif; suma= suma + calif; /*para encontrar cual es la calificación menor*/ si (calif ˂ baja) entonces baja= calif; }fin-desde media = suma / 5; Escribir “La calificación promedio del grupo de alumnos es: ”, media; Escribir “La calificación menor del grupo de alumnos es: ”, baja; fin-inicio. Salida: { suma=0, baja=9999, i=1; for(i= 1; i ≤ 5; i++) { cout˂˂”Calificación: ”, i; cin˃˃ calif; suma=suma+calif; if(calif˂baja) baja=calif; } media=suma/5; cout˂˂“La calificación promedio del grupo de alumnos es: ”, media; cout˂˂“La calificación menor del grupo de alumnos es:”, baja; } Calificación 1: 56 Calificación 2: 78 Calificación 1: 90 Calificación 1: 100 Calificación 1: 45 La calificación promedio del grupo de alumnos es: 73 La calificación menor del grupo de alumnos es: 45 b) While: Se utiliza para ejecutar acciones repetitivas mientras se cumpla o no una condición. Su funcionamiento: debe evaluarse la condición lógica antes de comenzar cada iteración, si la condición es verdadera, entonces se ejecuta el cuerpo de la estructura while, en caso contrario, el bucle termina. A continuación se muestra la sintaxis de la estructura while: while (condición) { Instrucción 1; Instrucción 2; Instrucción 3; . . . Instrucción n; } i = 0; acum=0; while (i˂100) { acum = acum+i; printf(“%d”, acum); printf(“\t %d”, i); Ejemplo: (Explicación) Como se observa en el código (lado- printf(“\n”); Donde (lado-izquierda): La condición es una expresión lógicabooleana. Instrucción, es una instrucción simple o compuesta. derecho), la variable de control “i” se i = i+1; inicializa antes, posteriormente es la que } se compara en la condición, en donde se debe actualizar dentro del bucle (i = i+1 puede sustituirse por una forma abreviada en el lenguaje de programación C como i++) Recomendación #4: Utilice while cuando el cuerpo del ciclo tenga que ejecutarse sólo si una condición es cierta. Antes de ejecutar un programa que utilice estructuras de control while verifique en cada una que la condición que la controla en algún momento se hará falsa. Si no hace lo anterior, se corre el riesgo que el programa se quede ejecutando continuamente y en muchos casos el computador no responda, es decir, se hace un ciclo infinito. Práctica (While): Ejercicio N° 1: Realizar un algoritmo y un programa en C++, que imprima los números del 1 al 10 en formato ascendente. Algoritmo ascendente Inicio Variables: Entero: c; c = 1; Mientras (c ≤ 10) { Escribir “Los números en forma ascendente del 1 al 10 son: ”, c; c= c +1; }fin-mientras Fin. Programa ascendente #include˂iostream.h˃ int c=1; main() { cout˂˂ “Los números en forma ascendente del 1 al 10 son: ”; while(c ≤ 10) { cout˂˂ \n c; c= c +1; } } Salida: Los números en forma ascendente del 1 al 10 son: 1 2 3 4 5 6 7 8 9 10 Ejercicio Nº 2: Encontrar el mayor valor de acuerdo a un conjunto de N números dados. Realizar el problema en algoritmo y en el lenguaje de programación C++. Algoritmo mayor Inicio Variables: Entero: N, d, mayor, valor; d= 1, mayor=0; Escribir “Introduzca la cantidad de datos: ”; Leer N; Mientras (d ≤ N) { Escribir “Introduzca el valor: ” ; Leer valor; Si (valor ˃ mayor) entonces mayor = valor; d = d+1; } Escribir “El número mayor es: ”, mayor; Fin. Salida: Introduzca la cantidad de datos: 5 Introduzca el valor: 3 Introduzca el valor: 8 Introduzca el valor: 1 Introduzca el valor: 2 Introduzca el valor: 9 El número mayor es: 9 Programa mayor #include˂iostream.h˃ int N, d, mayor, valor; main() { d=1; mayor=0; cout˂˂ “Introduzca la cantidad de datos: \n”; cin˃˃ N; while (d ≤ N) { cout˂˂ “Introduzca el valor: ” ; cin˃˃ valor; if (valor ˃ mayor) mayor = valor; d = d+1; } cout˂˂ “El número mayor es: \n”, mayor; } c) Do-while: La estructura do-while, se utiliza cuando se quiere asegurar que el ciclo se ejecuta al menos una vez, ya que la evaluación de la condición lógica se hace al final. La sintaxis de la estructura do-while se muestra a continuación: do { Instrucción 1; Instrucción 2; Instrucción 3; . . . Instrucción n; }while (condición); Ejemplo: (Explicación) En este ejercicio se ejecuta primero las instrucciones y posteriormente se verifica la condición si es verdadera, en caso contrario sale del ciclo o bucle. i = 0; acum=0; do { acum = acum + i; printf(“%d”, acum); printf(“\t %d”, i); printf(“\n”); i = i+1; }while (i˂100); Recomendación #5: Utilice do/while cuando desee que el cuerpo del ciclo se ejecute al menos una vez. Cuando utilice la estructura de iteración do/while acuérdese de colocar el ;(punto y coma) después de la condición. Esta es la única estructura donde se coloca el punto y coma después de la condición.