L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2...

18
LENGUAJE DE ESPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 A E D I E s p e c i f i c a c i ó n P r á c t i c a 2 1

Transcript of L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2...

Page 1: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

LENGUAJE DE ESPECIFICACIÓNAlgoritmos y Estructuras de Datos I

Especificación – Práctica 2

AE

DI

Esp

ecifica

ción

– P

ráctica

2

1

Page 2: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

ESPECIFICACIÓN DE PROBLEMAS

Expresamos formalmente qué debe cumplir una función para ser solución al problema dado.

No expresamos cómo solucionarloPuede no haber solución al problema que

planteamos.O tal vez, no sabemos escribirla.

Recordemos que lo que queremos especificar es el contrato que debe cumplir la función para ser considerada solución del problema planteado.

AE

DI

2

Esp

ecifica

ción

– P

ráctica

2

Page 3: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

ESPECIFICACIÓN DE PROBLEMAS NOTACIÓN

problema nombre(parámetros) = salida {

modifica: parámetro;

requiere: expresión1;

asegura: expresión2;

-- DEFINICIÓN DE AUX –

}

AE

DI

3

Esp

ecifica

ción

– P

ráctica

2

Page 4: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

EJERCICIOS

Especificar el problema de, dados dos enteros, devolver cualquiera de ellos.

Especificar el problema de, dados dos enteros, devolver el máximo.

AE

DI

4

Esp

ecifica

ión

– P

ráctica

2

Page 5: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

OPERACIONES CON SECUENCIAS

long(a) ó |a| indice(s,i) ó s[i] ó si

cab(s) cola(s) en(e,s) ó e en s ó e s cons(e,s) ó e:s conc(s,t) ó s++t sub(s, e, f) ó s[e..f] cambiar (s, i, e)

AE

DI

5

Esp

ecifica

ción

– P

ráctica

2

Page 6: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

OPERACIONES CON SECUENCIAS

alguno(s) todos(s) sum(s) ó s prod(s) ó s

AE

DI

6

Esp

ecifica

ción

– P

ráctica

2

Page 7: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

RECORDANDO

  Para todo: ( selectores, condiciones) propiedad

Equivale a todos([propiedad | selectores, condiciones])

Existe: ( selectores, condiciones) propiedad

Equivale a alguno([propiedad | selectores, condiciones])

Nota: cuando decimos “propiedad” nos referimos a expresiones de tipo Bool.

AE

DI

7

Esp

ecifica

ción

– P

ráctica

2

Page 8: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

SECUENCIAS POR COMPRENSIÓN Notación: [expresión | selectores, condiciones]

selectores: variable secuencia (o <-) variable va tomando el valor de cada elemento de

secuencia en orden. condiciones: expresiones de tipo Bool

Resultado Secuencia

el valor de la expresión calculado para los elementos seleccionados por los selectores que cumplen las condiciones

AE

DI

8

Esp

ecifica

ción

– P

ráctica

2

Page 9: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

RECORDANDO

  Contar cuántas veces aparece x en la secuencia aaux cuenta(x: T, a: [T]): Int = long([y | y <- a, y == x]);

Determinar si dos secuencias tienen los mismos elementos (sin importar el orden)

aux mismos(a, b: [T]): Bool = |a| == |b| && ( c a) cuenta(c,a) ==

cuenta(c,b);

AE

DI

9

Esp

ecifica

ción

– P

ráctica

2

Page 10: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

ESPECIFICACIÓN DE PROBLEMAS EJERCICIO – SOLUCIÓN

Especificar el problema de, dados dos enteros, devolver el máximo.

problema mayor(a, b: Int) = result: Bool{ asegura: result == (if (a > b) then a else b); }

problema mayor(a, b: Int) = result: Bool{ asegura: result ==

Beta(a > b)*a + Beta(a<=b)*b; }

AE

DI

10

Esp

ecifica

ción

– P

ráctica

2

Page 11: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

ESPECIFICACIÓN DE PROBLEMAS EJERCICIO – SOLUCIÓN

Especificar el problema de, dados dos enteros, devolver cualquiera de ellos.

problema dameUno(a, b: Z) = result: Z{ asegura: (result == a) || (result == b); }

AE

DI

11

Esp

ecifica

ción

– P

ráctica

2

Page 12: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

USANDO LISTAS POR COMPRENSIÓN

  [x | x [5,7,4,2,8,6,4,5,8,2,7,4], x4] = [4,2,4,2,4]

[x+y | x a, y b, x y], qué indica esta expresión? Por ejemplo: a = [1,2,3] y b = [1,2,3] [3,4,3,5,4,5] 

Sea a una secuencia, obtener la secuencia inversa de a: aux reverso(a:[T]):[T] =

[x[|a|-i-1] | i<-[0..|a|)]

Sea a una secuencia y n un natural, obtener la secuencia que queda de eliminar los primeros n elementos de s:

aux quitarN(n:Int, a:[T]) =

[a[i] | i<-[0...|a|), i>=n]

AE

DI

12

Esp

ecifica

ción

– P

ráctica

2

Page 13: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas de enteros, devolver la suma de las cabezas de cada una.

problema sumaCabezas (a, b: [Z]) = result : Z {

requiere : |a| > 0 && |b| > 0;

asegura : result == cab(a) + cab(b);

}

AE

DI

13

Esp

ecifica

ión

– P

ráctica

2

Page 14: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas de enteros, devolver la suma del primer elemento par de cada una.

problema sumaPrimerosPares (a, b: [Z]) = result : Z {

requiere : existePar(a) && existePar(b);

asegura : result == primerPar(a) + primerPar(b);

aux existePar(a: [Z]) : Bool =

( x <- a) a mod 2 == 0;

aux primerPar(a: [Z]) : Z =

cab([ x | x <- a, a mod 2 == 0]);

}

AE

DI

14

Esp

ecifica

ión

– P

ráctica

2

Page 15: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dadas dos listas con números enteros (que posean igual longitud), devolver la suma elemento a elemento.

problema sumaListas (a, b: [Z]) = result : [Z] {

requiere : |a| == |b|;

asegura : result == [ a[i] + b[i] | i <- [0..|a|)];

}

AE

DI

15

Esp

ecifica

ión

- Prá

ctica 2

Page 16: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Variante: no requerir que sean de igual longitud y suponer que se devuelve la suma hasta que alguna se acaba.

problema sumaListas (a, b: [Z]) = result : [Z] {

asegura :

result == [a[i] + b[i] | i <- [0..min(|a|,|b|))];

aux min(a,b: Z) : Z =

if (a < b) then a else b;

}

AE

DI

16

Esp

ecifica

ión

- Prá

ctica 2

Page 17: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Encontrar el índice (la posición) del menor elemento en una secuencia de números reales distintos no negativos.

problema indiceMenorDistintos(a:[Float])=result:[Z]{

requiere noNegativos: (x <- a) x 0; requiere distintos:

(i <- [0..|a|), j <- [0..|a|), i ≠ j) a[i] ≠ a[j];

asegura : 0 ≤ result < |a|;

asegura : (x <- a) a[result] ≤ x;}

AE

DI

17

Esp

ecifica

ión

- Prá

ctica 2

Page 18: L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.

MÁS EJERCICIOS CON SECUENCIAS Especificar el problema de, dada una lista de enteros, devolver una que tenga los mismo elementos pero ordenada.

problema ordenar(a:[Z])=result:[Z]{

asegura : mismos(result,a);

asegura :

(i <- [0..|a|-1)) result[i] ≤ result[i+1];}

AE

DI

18

Esp

ecifica

ión

- Prá

ctica 2