ETSII ALGORÍTMICA PARTE 1 - TEORÍA Dpto. de Informática y Sistemas Fundamentos 19 de Informática TEMA 3: ITERACIONES 3.- INTRODUCCIÓN. Objetivo: Mostrar diferentes maneras de describir la repetición de la ejecución de una secuencia de acciones ( esquemas clásicos de programación). Problema usual: Tratar sucesiones finitas de información cuyo número de elementos se puede conocer o no con antelación. Noción de vector: Mera estructura de objeto a partir de la cual se pueden definir numerosos tratamientos repetitivos. Ejemplos de algoritmos, con análisis descendiente, que comportan iteraciones. Iteración: Cada vez que se repite una secuencia de acciones (situación común). Necesidad de disponer en programación de estructuras algorítmicas que permiten describir una iteración de forma cómoda. 3.1.- ESTUDIO DE ALGUNOS ESQUEMAS ITERATIVOS Continuando con la lección veremos las sentencias mediante las cuales vamos a formular las iteraciones dentro de los algoritmos. Estas sentencias configuran los denominados BUCLES y son: REPETIR, MIENTRAS y PARA. 19 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 20 de Informática 3.1.1.- ESQUEMA REPETIR Repetir s hasta que p Esta sentencia se traduce como: repetir las sentencias u operaciones ‘s’ hasta que se cumpla la condición ‘p’. Acción S En el Organigrama o Diagrama de flujo, podemos observar la ejecución gráfica de la estructura del tipo Condición P Repetir. Verdadero Características principales de los esquemas REPETIR: - Este tipo de repetición se caracteriza por tener una condición final. - Como mínimo existe una iteración. - En general, no se conoce con antelación el número de iteraciones. Ejemplo: En este ejemplo observaremos como con iteraciones de restas, conseguiremos realizar una división. Algoritmo DIVISION Variables enteras DVDO, DVSR, C, R Leer DVDO, DVSR R DVDO C0 Repetir R R-DVSR C C+1 hasta que R<DVSR Escribir “Cociente = “, C Escribir “Resto = “,R Final 20 ETSII ALGORÍTMICA PARTE 1 - TEORÍA Dpto. de Informática y Sistemas Fundamentos 21 de Informática 3.1.2.- ESQUEMA MIENTRAS El esquema anterior no representa fácilmente todos los casos de iteración (p.e. algoritmo división cuando DVDO<DVSR). mientras q hacer t finmientras Esta sentencia se traduce como: mientras no se cumpla ‘q’ , hacer las operaciones o sentencias ‘t’. Se indica el final de las operaciones que se repiten con la palabra ’finmientras’. Condición P Falso Obsérvese como en la estructura de tipo Repetir, la condición aparece al final, mientras que en la estructura Verdadero de tipo Mientras aparece al principio. Esto nos permite en Acción S este último caso la posibilidad de nº de iteraciones = 0. Características principales de los esquemas MIENTRAS: - Esquema de repetición fundamental. - Número de iteraciones no conocido con antelación. - Posibilidad de nº iteraciones = 0. Ejemplo: Veamos seguidamente el algoritmo propuesto anteriormente para el Esquema Repetir. Obsérvese como se puede transformar un esquema repetir en un Esquema Mientras. 21 ETSII ALGORÍTMICA PARTE 1 - TEORÍA Dpto. de Informática y Sistemas Fundamentos 22 de Informática Algoritmo DIVISION Variables enteras DVDO, DVSR, C, R Leer DVDO, DVSR R DVDO C0 Mientras R>=DVSR hacer R R-DVSR C C+1 Fin mientras Escribir “Cociente = “, C Escribir “Resto = “, R Final 3.1.3.- ESQUEMA PARA Aquí es el propio procesador el que se encarga de modificar la variable de control y del fin de las iteraciones. Si el valor inicial es superior al final, la secuencia no se ejecuta. Para V de Vi a Vf incremento inc hacer a Finpara Esta sentencia se traduce como: Para la variable ‘V’ desde el valor ‘Vi’ ‘hasta el valor ’Vf’ repetir con un incremento de ‘inc’ en la variable ‘V’, realizando las operaciones o sentencias ‘a’ hasta encontrar la sentencia Finpara. V <- v alor inicial Falso V < v alor final Para el caso del bucle tipo Para, tenemos que el nº de iteración es conocido y no como en las dos estructuras Verdadero anteriores de bucles Repetir y Mientras donde no se sabe Acción a V <- V + inc 22 el nº de iteración de forma anticipada. ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 23 de Informática Características principales de los esquemas PARA: - Repetición con controlador. - Nº de iteraciones se conoce con antelación. - Posibilidad nº de iteraciones = 0. Nota importante: No debe incluirse en el núcleo de un Esquema PARA, ninguna sentencia que pueda influir en el número de repeticiones. Es decir, la variable controladora, no debe ser alterada en ningún momento por cualquier operación, aunque podemos utilizar dicha variable para realizar operaciones que no alteren su contenido. El motivo de esta decisión se justifica, en una programación ordenada y elegante, que evite cometer errores tontos (como caer en un bucle infinito o saltarnos la condición de salida) y facilite la lectura del algoritmo. Ejemplo: En el siguiente ejemplo podremos ver como determinar el factorial de un número a través de un sencillo Bucle Para. Algoritmo factorial Variable entera n Variable real fact Leer n fact 1.0 Para x de1 a n incremento 1 hacer Hay que decir, que cuando el incremento es 1, se suele omitir toda la subsentencia incremento 1, ya que por defecto, el incremento es 1. fact fact * x Fin para escribir fact Final 3.1.- OPERACIONES BÁSICAS CON ESQUEMAS ITERATIVOS Las estructuras de repetición se aplican a una gran variedad de algoritmos, que tienen en común la repetición de una serie de cálculos. Veamos algunos de los más comunes: 23 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 24 de Informática A) Generación de sucesiones Dada una sucesión X1, X2,...Xn en donde Xk = f(K1 , Xk-1),se pueden calcular los sucesivos valores Xk utilizando una sola variable X, mediante el siguiente algoritmos genéricos. Algoritmo sucesión Variables enteras X , K { Inicialización de variables } K1 X X1 (valor inicial de sucesión) Mientras (no condición final) hacer K K+1 X f (K,X) Fin mientras Final Ejemplo: Generar la sucesión 1, 1/2!, 1/3!,...1/n! teniendo en cuenta que Xk = Xk - 1/k con X1 = 1 Algoritmo sucesión1 Variable real X entera K Leer n K1 X1 Escribir X Mientras K<n hacer K K+1 X X/K Escribir X Fin mientras Final Ejercicio Propuesto: Determinar la traza del algoritmo anterior para n=5 24 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 25 de Informática B) Cálculo de sumas y productos. El cálculo de sumas de la forma: Xk = X1+X2+...+Xn se realiza de forma similar a la anterior, añadiendo una operación de acumulación. Algoritmo suma Variable entera K Variables reales X, suma K1 X X1 (valor inicial) suma 0 Mientras (no condición final) hacer suma suma+X K K+1 X f(K,X) Fin mientras Escribir suma Final Aquí la condición final puede ser del tipo K=n o más compleja relacionada con algún criterio de convergencia de series (por ejemplo: abs(Xk) , abs(Xk - Xk-1) Ejemplo: Veamos seguidamente un algoritmo donde se muestra el cálculo de la exponencial de un número a través de su desarrollo. Así se pide calcular: ea 1 a a2 a3 ak ... 2! 3! k! 25 ETSII ALGORÍTMICA PARTE 1 - TEORÍA Dpto. de Informática y Sistemas Fundamentos 26 de Informática Acabado la suma cuando se cumple que: xk ak k! De este modo se desarrolla la exponencial a través de: ak a ea x k ; x k = x k-1 k! k k 0 Algoritmo exponencial Constante épsilon (precisión deseada) Variables reales a, X, suma entera K Leer a K0 X 1,0 suma 0.0 mientras abs(X) > épsilon hacer suma suma + x k k +1 x x * a/k Fin mientras Final El cálculo de productos de la forma: n x k 1 k x1 x 2 ...x n se efectúa de forma parecida, cambiando el elemento neutro de la suma (0) por el del producto (1). 26 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 27 de Informática Ejemplo: Cálculo del factorial de un número entero positivo. Algoritmo factorial Variables enteras n, fact, X Leer n X1 fact 1 Mientras X n hacer fact fact*X X X+1 Fin mientras Escribir fact Final Ejercicio Propuesto: Se pide determinar la del algoritmo anterior para n=7. C) Tabulación de funciones. Otro caso típico es la escritura de los valores de una función y = f(X) para (a X b) Algoritmo tabular función Variables reales X, y, a, b, delta Leer a, b, delta Xa y f(a) Mientras X b hacer Escribir X,y X X+delta y f(X) Fin mientras Final D) Lectura de datos con repetición. A menudo en necesario leer una serie de datos con la misma estructura y efectuar un tratamiento similar para cada uno de ellos. 27 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos 28 de Informática Ejemplo: Algoritmo para calcular la media de una serie de números. Algoritmo media1 Variables reales suma, X, media enteras n, K Leer n K0 suma 0.0 Mientras K < n hacer K K+1 Leer X suma suma+1 Fin mientras media suma/n Escribir media Final Ejercicio Propuesto: Hallar la traza para la siguiente secuencia de datos de entrada: 6, 4.2, 5, 7, 7.2, 3, 4.5 E) Lectura de un número indefinido de datos. Concepto de CENTINELA. En ocasiones no se conoce de antemano el nº de datos a leer; para indicar, entonces, el final de la entrada de datos, se añade al final un dato con un valor especial, (dato llamado "centinela"). Por ejemplo, en el caso anterior suponemos que las condiciones del problema implican que el valor "X" es siempre positivo, podemos utilizar como “centinela” un valor negativo cualquiera. En dicho caso el algoritmo sería: Algoritmo media2 Variables reales suma, X, media entera n n0 suma 0.0 Leer X Mientras X 0 hacer n n+1 suma suma+X Leer X Fin mientras media suma/n Escribir media Final 28 ETSII ALGORÍTMICA PARTE 1 - TEORÍA Dpto. de Informática y Sistemas Fundamentos 29 de Informática Ejercicio Propuesto: Hallar la traza para: (3.0, 4.2, 5, 4.7, 6,-1) Ejercicios de Evaluación: 1.- Diseñar un algoritmo que lea tres valores reales a,b,c, correspondientes a los lados de un triángulo, ordenados de mayor a menor, y determinar el tipo del triángulo de acuerdo con las condiciones: ab+c no forman triángulo a^2 = b^2 + c^2 rectángulo a^2 > b^2 + c^2 obtusángulo a^2 < b^2 + c^2 acutángulo 2.- El término general de la sucesión de Fibonacci viene dado por Fi = Fi-1 + Fi-2 con F1 = 1, F2 = 1. Escribir un algoritmo para la obtención de n elementos de la sucesión. 3.- Escribir un algoritmo para calcular el valor de a mediante la sucesión xo, x1, ... con xo = a , xi+1 = (xi + a / xi) / 2. Terminar cuando x^2-a sea menor que un cierto 4.- Diseñar un algoritmo que lea un valor entero n y escribir todos sus divisores. 5.- Diseñar un algoritmo para escribir todos los números primos menores que un cierto valor N. 29 ETSII Dpto. de Informática y Sistemas 30 ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 30