Lenguaje de Especificación

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

description

Lenguaje de Especificación. Algoritmos y Estructuras de Datos I Especificación – Práctica 2. Especificación de problemas. Expresamos formalmente qué debe cumplir una función para ser solución al problema dado. No expresamos cómo solucionarlo - PowerPoint PPT Presentation

Transcript of Lenguaje de Especificación

Page 1: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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: Lenguaje de Especificación

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