Introducción a la Computación TFA Departamento de Informática Facultad de Ciencias Físico, Matemáticas y Naturales- UNSL Lenguaje de Diseño de Algoritmos Estructura de Control Condicional Simple y Múltiple 1 Estructuras de control Estructurar el control de un conjunto de acciones, detalladas en un algoritmo, es brindar mecanismos que permitan indicar el orden en que las mismas van a ser llevadas a cabo. Una de las mayores potencias de un procesador proviene de su capacidad de tomar decisiones y de determinar qué acción realizar al momento de ejecutar un algoritmo, sobre la base de los valores de algunos de los datos que se leen o bien, de los resultados de los cálculos que se realizan. 2 1
Clasificación Acciones simples Asignación Operaciones de Entrada/Salida Acciones compuestas Secuencia. Selección Repetición Las acciones compuestas, en general, no modifican el ambiente sino el orden en que el procesador ejecuta las acciones primitivas. 3 Estructura de control secuencial Cuando no se indique lo contrario el flujo de control de ejecución de un algoritmo seguirá la secuencia implícita del mismo. Entendemos por secuencia implícita, que las acciones se ejecutan en el orden en que son escritas en el algoritmo, es decir desde la primera hacia la ultima ("desde arriba hacia abajo"). Al terminar de ejecutarse una acción se pasa a la inmediata siguiente que está perfectamente determinada y, así siguiendo, hasta alcanzar la última acción del algoritmo. 4 2
Ejemplo de acciones que representan una secuencia I <- 1; Leer numero; f <- numero + I; Diagrama de flujo (las acciones que modifican el ambiente se escriben dentro de rectángulos): I <- 1; Leer numero; f <- numero + I; 5 Estructura de control condicional simple Lenguaje de Diseño provee un mecanismo para expresar que un conjunto de acciones se ejecuten sólo bajo ciertas condiciones, esto permite crear algoritmos que resuelvan una mayor cantidad de instancias para un problema dado. El condicional permitirá que una o un conjunto de acciones primitivas se ejecuten sólo si cierta condición se cumple. El condicional permite que la ejecución de cierto conjunto de acciones quede sometida a una condición. 6 3
ejemplo Supongamos que se tienen dos variables enteras, X e Y, que tienen cada una un valor entero previamente asignado; buscamos escribir el mayor valor. Esto es, si X > Y debe escribirse el valor de X en caso contrario el valor de Y. En este caso, es evidente que existen secuencias de acciones alternativas, tales son escribir el valor de X o escribir el valor de Y. La elección acerca de cuál de los dos valores escribir depende de la condición: el valor de X es o no mayor que el valor de Y. 7 El diagrama de flujo asociado con la acción condicional es: Falso X > Y Verdadero Escribir Y; Escribir X; donde X > Y es un predicado que describe una condición que se debe evaluar. 8 4
Sintaxis y funcionamient o Si <condición> Entonces <alternativa verdadera>; <alternativa falsa>; Observaciones: Si, Entonces,, Finsi son palabras reservadas. <condición> debe ser una expresión que devuelva un valor lógico. La ejecución involucra los siguientes pasos: Se evalúa la condición; Si es VERDADERA se ejecuta < alternativa verdadera > Si b es FALSO se ejecuta <alternativa falsa> Si <condición> Entonces <alternativa verdadera>; La ejecución involucra los siguientes pasos: Se evalúa la condición; Si es VERDADERA se ejecuta < alternativa verdadera > 9 Observaciones Si <condición> Entonces <alternativa verdadera>; <alternativa falsa>; <condición> puede ser un predicado simple o uno compuesto < alternativa verdadera > y <alternativa falsa> pueden ser una acción simple o una acción compuesta Si <condición> Entonces <alternativa verdadera>; 10 5
Ejemplo Calcular la raíz cuadrada de un número, si éste no es negativo; en caso contrario no calcular nada. Ambiente VARIABLE del Algoritmo: a DESCRIPCION Variable de entrada-salida de tipo entero. Como variable de entrada contendrá el número del cual se quiere calcular la raíz cuadrada; como variable de salida, contendrá la raíz cuadrada 11 Versión 1: Algoritmo Declarar las variables a ser utilizadas por el algoritmo. Leer el número del cual se desea calcular la raíz cuadrada, guardándolo en la variable a. Si su valor es positivo o cero, entonces calcular la raíz cuadrada, usando la función primitiva correspondiente, devolver el valor en la variable a y escribir el valor de la raíz; sino no hacer nada. 12 6
Algoritmo Versión Final (en PSeInt): Proceso rc Definir a Como Entero ; // Entrada de datos Escribir Ingrese el valor ; Leer a; // Se determina si el valor de a es no negativo Si a >= 0 Entonces //Cálculo de la raíz cuadrada a <- RC(a); // Salida del resultado Escribir La raíz cuadrada es:, a; FinProceso 13 Anidamiento de estructuras de decisión Tanto la alternativa verdadera como la falsa, pueden contener a su vez, estructuras de decisión. Por ejemplo: Los operarios de una empresa trabajan en tres turnos; uno matutino, cuyo código es 1, otro vespertino cuyo código es 2 y el otro nocturno cuyo código es 3. Se desea calcular el jornal para un operario sabiendo que, para el turno nocturno, el pago es de $5 la hora y, para el turno vespertino es $3 la hora y para el matutino es $ 2 la hora, pero en este último caso, si el día es Domingo se paga un adicional de $1 por hora. Las fórmulas para calcular el jornal son: fórmula 1 (para el turno nocturno) : jornal = 5 * horas trabajadas fórmula 2 (para el turno vespertino) : jornal = 3 * horas trabajadas fórmula 3a (turno diurno, no es domingo) : jornal = 2 * horas trabajadas fórmula 3b (turno diurno, domingo): jornal = (2 + 1) * horas trabajadas. 14 7
Ejemplo Ambiente del Algoritmo: VARIABLES DESCRIPCION horas turno dia jornal Variable de entrada, de tipo entero cuyo valor es la cantidad de horas trabajadas en un día, por un operario. Variable de entrada, de tipo entero, cuyo valor es el código del turno. Variable de entrada, de tipo caracter, si su valor es d, indica que es día domingo, sino tiene un valor n Variable de salida, de tipo numérico (entero) que contiene el valor de la paga que debe efectuarse. 15 Versión 1: Declarar variables Leer datos de entrada Calcular el jornal Informar resultados Versión 2: Declarar variables Leer los valores correspondientes a las horas trabajadas, el código del turno y el código del día. Si el turno es nocturno entonces calcular el jornal usando la fórmula 1 sino si el turno es vespertino entonces calcular el jornal usando la fórmula 2 sino calcular el jornal usando la fórmula 3 Escribir el valor del jornal 16 8
Versión Final: Proceso Jornales Definir horas, turno, jornal Como Entero ; Definir dia Como Caracter; Leer horas, turno, dia; Si turno = 3 Entonces jornal <- 5 * horas ; Si turno = 2 Entonces jornal <- 3 * horas; Si dia <> d Entonces jornal <- 2 * horas; jornal <- (2 + 1) * horas; Finsi Escribir jornal; FinProceso 17 Leer horas, turno, dia V turno=3 F Jornal <- 5*horas V turno=2 F Jornal <- 3*horas V dia<> d F Jornal <- 2*horas jornal <- (2+1)*horas Escribir jornal 18 9
Estructura de control condicional multiple La estructura de selección múltiple evalúa una expresión que puede tomar n valores enteros distintos (1, 2, 3,...,n). A cada valor de la expresión le corresponde una acción (o serie de acciones) diferente, lo que significa que el flujo de ejecución seguirá un camino distinto entre los n posibles caminos en dependencia del valor de la expresión de control. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia de acciones asociada con el valor que en ese momento tiene la variable. 19 Estructura de control condicional multiple Diagrama de flujo: variable 1: 2: n-1: n: Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de acciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números. Opcionalmente, se puede agregar una opción final, cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores. 20 10
Sintaxis y funcionamiento Segun <variable> Hacer <número1>: <acciones> <número2>,<número3>: <acciones> <...> De Otro Modo: <acciones> FinSegun Observaciones: Segun, Hacer, De Otro Modo, FinSegun son palabras reservadas. <variable> debe ser una variable entera. La ejecución involucra los siguientes pasos: Consultar el valor de la variable Ejecutar el conjunto de acciones asociadas al valor de la variable Si el valor no está especificado se ejecutarán las acciones asociadas a De Otro Modo si existen 21 Ejemplo Proceso Jornales Definir horas, turno, jornal Como Entero; Definir dia Como Caracter; Escribir Ingrese un carácter d si el día laboral es domingo, l si es lunes Leer dia Escribir Ingrese la cantidad de horas y el turno de trabajo Leer horas, turno Segun turno Hacer 1: Si dia <> d Entonces jornal <- 2 * horas; jornal <- (2 + 1) * horas; 2: jornal <- 3 * horas; 3: jornal <- 5 * horas; De Otro Modo: Escribir Ingresó un turno inválido ; jornal <- 0; FinSegun Escribir jornal; FinProceso 22 11
Relación entre el condicional simple y múltiple Si vble=1 Entonces <acciones1>; Si vble=2 Entonces <acciones2>; <acciones3>; Segun vble Hacer 1: <acciones1>; 2: <acciones2>; De Otro Modo: <acciones3>; FinSegun 23 Relación entre el condicional simple y múltiple Segun vble Hacer 1, 24, 3: <acciones1>; 4, 50: <acciones2>; De Otro Modo: <acciones3>; FinSegun es equivalente a: Si vble=1 vble=24 vble=3 Entonces <acciones1>; Si vble=4 vble=50 Entonces <acciones2>; <acciones3>; 24 12
Cuando usar un condicional múltiple Cuando hay que seleccionar entre más de dos grupos de acciones. Es frecuente usarlo en situaciones donde hay que elegir una acción según una opción ingresada por el usuario (menú) Ejemplo:. //muestra el menú Escribir 1 Agregar ; Escribir 2 Borrar ; Escribir 3 Eliminar ; Leer opcion; Segun opcion Hacer 1: <acciones para Agregar>; 2: <acciones para Borrar>; 3: <acciones para Eliminar>; De Otro Modo: Escribir Opción Inválida ; FinSegun. 25 13