Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ALGORITMOS
Tema 1
1. Introducción
Tema 1. 2. Estados, asertos
Especificación 3. Especificación Pre/Post (tripleta
de algoritmos de Hoare)
4. Especificación de un TAD
2
¿Por qué hay que especificar?
/**********************************************************
* Funcion Inicializa
Especificación * Pone el valor inicial de todos los elementos del vector a 0
*
informal * Parametros:
* v E y S vector
**********************************************************/
void Inicializa(Vector v)
{
int i;
Ejemplo
/**********************************************************
* Funcion Suma
* Suma dos vectores
*
Especificación * Parametros:
informal * v1 E vector a sumar
* v2 E vector a sumar
* vres S vector resultado
*
**********************************************************/
void Suma(Vector v1, Vector v2, Vector vres)
{
int i;
8
Estados
Ejemplo
x ←y → 3 3 1
y ←z → 3 1 1
FIntercambia
si x >= 1 entonces
{x >= 1} Aserto = “El programa debe estar en cualquier estado donde x >= 1”
x ← x – 1
{x >= 0} Aserto = “El programa debe estar en cualquier estado donde x >= 0”
∀𝛼𝛼 : dominio: B(𝛼𝛼) Para todo valor α del dominio se cumple B(α)
∃𝛼𝛼 : dominio: B(𝛼𝛼) Existe un valor α del dominio para el que se cumple B(α)
Valor natural que indica el número de valores α del
Ν𝛼𝛼 : dominio: B(𝛼𝛼)
dominio para los que se cumple B(α)
Mayor valor tomado por E(𝛼𝛼), cuando α recorre todos los valores
max 𝛼𝛼 : dominio: E(𝛼𝛼)
del dominio
Menor valor tomado por E(𝛼𝛼), cuando α recorre todos los valores
min 𝛼𝛼 : dominio: E(𝛼𝛼)
del dominio
Ejemplo
v.
Ejemplo
■ Denota un valor booleano que será cierto si, y solo si, algún
elemento del vector v es igual a 0, y falso en caso contrario.
Ejemplo
■ Denota el mayor valor que contenido en el vector v.
– Libres:
■ Variables de programa: denotan el último valor que se les haya
asignado (letras minúsculas)
■ Variable iniciales: denotan el valor de una variable en un punto
concreto del programa (letras mayúsculas).
– Las constantes son un caso particular de este tipo de variables.
■ Ejemplo ( P indica el código de una función ):
{x = X л y = Y} Aserto = “x tiene un valor X e y tiene un valor Y”
P ¿Qué hace P?
{x = Y л y = X} Aserto = “x tiene un valor Y e y tiene un valor X”
■ Documentar el programa.
19
Especificación Pre/Post
■ Significado de la especificación:
– “Si al empezar a ejecutarse la función se cumple la
precondición, al acabar necesariamente tiene que cumplirse
la postcondición.”
■ Ejemplos:
func Inicializa(v: Vector[1..N] de ℕ) dev v: Vector[1..N] de ℕ
{Pre: cierto}
{Post: ∀α: 1 <= α <= N: v[α] = 0}
Ejemplo
3. Especificación de una función que devuelva la posición del
máximo de un vector.
Ejemplo
Estructuras de datos y algoritmos (TEMA 1) 24
2. Especificación de una función que devuelva el máximo
de un vector.
Ejemplo
o bien,
Ejemplo
o bien,
■ Postcondición:
– Fase de desarrollo (depuración) Opcional incluir comprobaciones
(totales o parciales).
– Versión de producción Eliminar estas comprobaciones.
Ejemplo
// Pre:
assert(a >= 0 && b > 0);
c = a / b;
r = a % b;
// Post:
assert( (c >= 0) && (r >= 0) && (a == b*c + r) && (r < b) );
return c;
}
// Pre:
if ( !(a >= 0 && b > 0) )
{
(void)fprintf(stderr, "Assertion failed: file \"%s\", line
%d\n", __FILE__, __LINE__);
Ejemplo
exit(1);
}
c = a / b;
resto = a % b;
// Post:
if ( !((a == b*c + resto) && (resto >= 0) && (resto < b) ) )
{
(void)fprintf(stderr, "Assertion failed: file \"%s\", line
%d\n", __FILE__, __LINE__);
exit(1);
}
return c;
}
Estructuras de datos y algoritmos (TEMA 1) 30
1. Introducción
Tema 1. 2. Estados, asertos
Especificación 3. Especificación Pre/Post (tripleta
de algoritmos de Hoare)
4. Especificación de un TAD
31
Especificación de un TAD
Ejemplo
cero : -> contador
Operaciones generadoras =
incr : contador -> contador Se puede obtener un objeto de
decr : contador -> contador cualquier valor
si_cero : contador -> ℬ
Ecuaciones: ∀ x: contador
1) decr(incr(x)) ≡ x
2) si_cero(cero) ≡ cierto
3) si_cero(incr(x)) ≡ falso
Ecuaciones de error:
func decr(x: contador) dev y: contador
4) decr(cero) ≡ error {Pre: x≠cero}
Ejemplo
Tipo Pila
𝐸𝐸: Tipo de elementos contenidos en una pila
pila: Conjunto de pilas que contienen elementos de 𝐸𝐸
ℬ: Conjunto de valores lógicos = {cierto, falso}
ℕ: Conjunto de números naturales
Operaciones:
p_nueva: → pila Operaciones generadoras
apilar: 𝐸𝐸, pila → pila
desapilar: pila → pila
cima: pila → 𝐸𝐸
vacia: pila → ℬ
tamaño: pila → ℕ
Ejemplo
Ecuaciones de Error:
7) desapilar(p_nueva) ≡ error Precondiciones en:
8) cima(p_nueva) ≡ error • desapilar
• cima
Ejemplo
iguales dos pilas?):
igual: pila, pila → ℬ
cima(desapilar(apilar(3,apilar(1,apilar(2,p_nueva)))))
(Ec. 1) = cima(apilar(1,apilar(2,p_nueva)))
(Ec. 2) = 1
Ejemplo
Estructuras de datos y algoritmos (TEMA 1) 38
Ejercicio 2: Definir las ecuaciones
Ejemplo
(x=y) л igual(p,q)
Ejemplo
{Post: ?? }