TEMA 3: ITERACIONES ALGORÍTMICA PARTE 1 - TEORÍA

Anuncio
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
C0
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
C0
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 }
K1
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
K1
X1
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
K1
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
K0
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
X1
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
Xa
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
K0
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
n0
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:
ab+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
Descargar