Académique Documents
Professionnel Documents
Culture Documents
UNIVERSIDAD
DE CANTABRIA
1. Introduccin
2. Datos y expresiones. Especificacin de algoritmos
3. Estructuras algortmicas bsicas
4. Iteracin y recursin
5. Iteracin y recursin sobre secuencias
6. Iteracin y recursin sobre tablas
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA
Y COMPUTACIN
4
Notas:
UNIVERSIDAD
DE CANTABRIA
1. Introduccin
2. Datos y expresiones. Especificacin de algoritmos
3. Estructuras algortmicas bsicas
4. Iteracin y recursin
5. Iteracin y recursin sobre secuencias
Descripcin de la secuencia. Interfaz. Recorridos sobre secuencias. Bsquedas en secuencias.
Esquemas mixtos
6. Iteracin y recursin sobre tablas
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Introduccin
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
UNIVERSIDAD
DE CANTABRIA
Descripcin de la secuencia
UNIVERSIDAD
DE CANTABRIA
UNIVERSIDAD
DE CANTABRIA
parte derecha
ai-1 ai
an
actual i
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
UNIVERSIDAD
DE CANTABRIA
Interfaz de la secuencia
La interfaz representa una
coleccin de mtodos de los que
deben disponer las clases que se
deriven de ella
las secuencias deben disponer
de los mtodos que indican en la
interfaz de la figura
- Elemento representa el tipo o
clase de los elementos que se
guardan en la secuencia
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
UNIVERSIDAD
DE CANTABRIA
Secuencia
<<interfaz>>
reinicia()
Elemento actual()
avanza()
booleano fds()
constructor()
escribe(Elemento e)
UNIVERSIDAD
DE CANTABRIA
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
10
UNIVERSIDAD
DE CANTABRIA
mtodo constructor()
{Pre:}
{Post:S est vaca}
fmtodo
mtodo escribe(Elemento e)
{Pre:pi(S)=}
{Post:pi(S)=e}
fmtodo
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
11
UNIVERSIDAD
DE CANTABRIA
1. Recorridos
recorrer todos los elementos de la secuencia para hacer algo
con cada uno de ellos
2. Bsquedas
buscar y obtener un elemento de la secuencia que cumple una
determinada condicin
3. Combinacin de recorridos y bsquedas
recorrer una secuencia buscando elementos que cumplen una
determinada condicin para hacer algo con ellos
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
12
UNIVERSIDAD
DE CANTABRIA
1. Recorridos
contar el numero de apariciones de una letra en un texto
calcular la media de una secuencia de enteros
evaluacin de un polinomio representado por la secuencia de
sus coeficientes, en un punto x dado
2. Bsquedas
determinar si en un texto aparece una letra dada
determinar si una secuencia de enteros est formado por
nmeros positivos solamente
mostrar los datos de un alumno cuyo DNI se indica, dada una
lista de alumnos
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
13
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
14
UNIVERSIDAD
DE CANTABRIA
mtodo contarLetra(caracter l,
Secuencia<caracter> texto) retorna entero
texto.reinicia();
var entero num:=0; fvar
{Inv: num es el nmero de letras l en pi(texto)}
{Cota: longitud de pd(texto)}
mientras no texto.fds() hacer
si texto.actual()==l entonces
num++;
fsi
texto.avanza();
fmientras
retorna num;
{Post: valor retornado=nmero de letras l del texto}
fmtodo
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
15
UNIVERSIDAD
DE CANTABRIA
16
UNIVERSIDAD
DE CANTABRIA
esquema recorrido(Secuencia<Elemento> s)
{Pre:}
Inicializaciones;
s.reinicia();
{Inv: los elementos de pi(s) han sido tratados}
{Cota: longitud de pd(s)}
mientras no s.fds() hacer
tratar s.actual();
s.avanza();
fmientras
Finalizacin
{Post: los elementos de s han sido tratados}
fesquema
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
17
UNIVERSIDAD
DE CANTABRIA
P ( [ a n, , a 0 ], x ) = a n x + a n 1 x
n1
+ + ai x + + a1 x + a0
P ( [ a n, , a 0 ], x ) = ( ( ( ( a n x + a n 1 )x + a n 2 )x + ) + a 1 )x + a 0
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
18
UNIVERSIDAD
DE CANTABRIA
P ( [ a n ], x ) = a n
P ( [ a n, a n 1 ], x ) = a n x + a n 1
2
P ( [ a n, a n 1, a n 2 ], x ) = a n x + a n 1 x + a n 2
3
P ( [ a n, a n 1, a n 2, a n 3 ], x ) = a n x + a n 1 x + a n 2 x + a n 3
P ( [ a n, , a 0 ], x ) = a n x + a n 1 x
n1
+ + ai x + + a1 x + a0
19
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
20
UNIVERSIDAD
DE CANTABRIA
mtodo tieneLaLetra(caracter l,
Secuencia<caracter> texto)
retorna encontrado:booleano
{Pre:}
encontrado:=false;
texto.reinicia();
{Inv: l no est en pi(texto) y
si encontrado entonces pd(texto)=l}
{Cota: longitud de pd(texto)}
mientras no texto.fds() y no encontrado hacer
encontrado:= (texto.actual()==l);
si no encontrado entonces
texto.avanza();
fsi
fmientras
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
21
UNIVERSIDAD
DE CANTABRIA
retorna encontrado;
{Post: encontrado= l est en el texto,
si encontrado entonces l no est en pi(texto) y
pd(texto)=l,
si no encontrado entonces pd(texto)=vacia}
fmtodo
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
22
UNIVERSIDAD
DE CANTABRIA
esquema busca(Secuencia<Elemento> s)
retorna encontrado:booleano
{Pre:}
Busca un elemento que cumple la propiedad P
{Post: encontrado= algn elemento de s cumple P,
si encontrado entonces ningn elemento de
pi(s) cumple P y s.actual() cumple P,
si no encontrado entonces pd(s)=vacia}
fesquema
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
23
UNIVERSIDAD
DE CANTABRIA
esquema busca(Secuencia<Elemento> s)
retorna encontrado:booleano
encontrado:=false; Inicializaciones;
s.reinicia();
{Inv: ningn elemento de pi(s) cumple P
si encontrado entonces s.actual() cumple P}
{Cota: longitud de pd(texto)}
mientras no s.fds() y no encontrado hacer
encontrado:= P(s.actual());
si no encontrado entonces
s.avanza();
fsi
fmientras
Finalizaciones; retorna encontrado;
fesquema
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
24
UNIVERSIDAD
DE CANTABRIA
25
UNIVERSIDAD
DE CANTABRIA
Mostrar los datos de un alumno cuyo DNI se indica, dada una lista
de alumnos
la clase Alumno se caracteriza
Alumno
por el diagrama de clases de la
figura
- al constructor se le pasan los
valores iniciales de los atributos
- muestra pone los datos del
alumno en pantalla
- dni retorna el dni
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
texto nombre
texto direccion
texto dni
Alumno(texto nombre,)
texto direccion,
texto dni)
muestra()
texto dni()
26
UNIVERSIDAD
DE CANTABRIA
mtodo buscaAlumno(Secuencia<Alumno> s,
texto dniBuscado)
var booleano encontrado:=false; fvar
texto.reinicia();
{Inv: ningn elemento de pi(s) tiene el dniBuscado
si encontrado s.actual() tiene el dniBuscado}
{Cota: longitud de pd(s)}
mientras no s.fds() y no encontrado hacer
encontrado:= s.actual().dni==dniBuscado;
si no encontrado entonces
s.avanza();
fsi
fmientras
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
27
UNIVERSIDAD
DE CANTABRIA
si encontrado entonces
s.actual().muestra();
si no
muestra mensaje de no encontrado;
fsi
fmtodo
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
28
Esquemas mixtos
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
29
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
30
UNIVERSIDAD
DE CANTABRIA
Diseo
contaremos una palabra cada vez que pasemos de un separador
a una letra
necesitamos para ello recordar si el carcter anterior era o no un
separador: booleano anteriorEsSep
para contar la primera palabra bastar suponer que delante del
primer carcter hay un separador
- inicializar anteriorEsSep a true
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
31
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
32
UNIVERSIDAD
DE CANTABRIA
33
UNIVERSIDAD
DE CANTABRIA
34
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
35
UNIVERSIDAD
DE CANTABRIA
{Inv: t=fusin(pi(s1),pi(s2)}
mientras no s1.fds() y no s2.fds() hacer
// escribir en t el menor de los elementos
// no ledos de s1 y s2
si s1.actual()<=s2.actual() entonces
t.escribe(s1.actual());
s1.avanza();
si no
t.escribe(s2.actual());
s2.avanza();
fsi
fmientras;
// se cumple Inv y (s1.fds() o s2.fds())
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
36
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
Ejercicio propuesto
37
UNIVERSIDAD
DE CANTABRIA
DEPARTAMENTO DE MATEMTICAS,
ESTADSTICA Y COMPUTACIN
38