39
Programación 2 Lección 10. Corrección de un algoritmo 1

Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

Programación 2

Lección 10. Corrección de un algoritmo

1

Page 2: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

1. Estados de un algoritmo y satisfacción de predicados

2. Concepto de corrección de un algoritmo– Ejemplos

3. Axioma de la instrucción de asignación– Ejemplos

4. Axioma de la instrucción de devolución de valor

– Ejemplos

5. Axioma de la instrucción nula– Ejemplos

2

Page 3: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

1. Estados de un algoritmo y predicados• Un algoritmo cambia de estado al ser ejecutado su código (pasa por una

sucesión de estados):[Estado inicial] E0 → E1 → E2 → → Ef‐1 → Ef [Estado final]

• El estado de un algoritmo viene definido por su punto de ejecución y porlos valores de sus datos.

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (const int n) {

int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}return resultado;

}3

Page 4: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

• Un predicado se satisface para un estado E si, al ser evaluado, su valor escierto (true). En caso contrario, si su valor es falso (false), diremos queel predicado no se satisface para ese estado

• La precondición es un predicado que se formula para su estado inicial(sobre los datos de partida) y la postcondición es un predicado que seformula para su estado final (sobre los resultados)

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (const int n) {

// Pre:  n ≥ 0int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}return resultado;// Post: factorial(n) = ([1,n]. )

}4

Page 5: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

• Podemos documentar un algoritmo con aserciones adicionales. Sonpredicados que debieran satisfacerse, si el algoritmo estuviera biendiseñado, para los estados del algoritmo alcanzados en los puntos delcódigo en los que se insertan.

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (const int n) {

// Pre: n ≥ 0int indice = 0, resultado = 1;// Aserción: resultado = ([1,indice]. )while (indice != n) {

// Aserción: resultado = ([1,indice]. )indice = indice + 1;  resultado = indice * resultado;

}// Aserción: resultado = ([1,n]. )return resultado;// Post: factorial(n) = ([1,n]. )

} 5

Page 6: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

Relaciones entre dos predicados P y Q:

• P es igual o más fuerte que Q si todo estado que satisface Ptambién satisface Q ( también puede afirmarse que Q es igualo más débil que P)• P  Q

• P es equivalente a Q si todo estado que satisface P tambiénsatisface Q y viceversa• P  Q  [ P = Q ]

6

Estados quesatisfacen P

Estados quesatisfacen Q

Estados quesatisfacen P

Estados quesatisfacen Q

Page 7: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

2. Concepto de corrección de un algoritmo

// P

A

// Q

La corrección del código A se plantea con relación a unaprecondición P y a una postcondición Q.

Diremos que el código A es correcto si para toda ejecución queparta de un estado [inicial] que satisfaga la precondición P,ésta concluye en un tiempo finito y el estado [final] alcanzadosatisface su postcondición Q

7

Page 8: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

Concepto de corrección de un algoritmo// P

A

// Q

Diremos que el código A es correcto si para toda ejecución queparta de un estado [inicial] que satisfaga la precondición P,ésta concluye en un tiempo finito y el estado [final] alcanzadosatisface su postcondición Q

8

Esta definición es clave.Hay que saberla de MEMORIA

y, sobre todo, hay que COMPRENDERLA

Page 9: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Cuándo no es correcto un algoritmo?

// P

A

// Q

Diremos que el código A es correcto si para toda ejecución queparta de un estado [inicial] que satisfaga la precondición P,ésta concluye en un tiempo finito y el estado [final] alcanzadosatisface su postcondición Q

Por lo tanto, no será correcto en dos casos:1. Si se presenta algún caso tal que …2. Si se presenta algún caso tal que …

9

Page 10: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Cuándo no es correcto un algoritmo?

// P

A

// Q

Diremos que el código A es correcto si para toda ejecución que parta de unestado [inicial] que satisfaga la precondición P, ésta concluye en un tiempofinito y el estado [final] alcanzado satisface su postcondición Q

Por lo tanto, no será correcto en dos casos:

1. Si se presenta algún caso tal que la ejecución de A parta de un estadoque satisfaga su precondición P y no concluya (por un error en laejecución, un bucle infinito o una recursión infinita)

2. Si se presenta algún caso tal que la ejecución de A parta de un estadoque satisfaga su precondición P y concluya en un estado que nosatisfaga su postcondición Q

10

Page 11: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = x + y;  y = x – y ;  x = x ‐ y;

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = y;  y = x;

//  x = N  y = M

11

Page 12: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;       

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = x + y;  y = x ‐ y;  x = x ‐ y;

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = y;  y = x;

//  x = N  y = M

12

Page 13: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;       

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = x + y;  y = x ‐ y;  x = x ‐ y;

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = y;  y = x;

//  x = N  y = M

13

Page 14: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;       

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = x + y;  y = x ‐ y;  x = x ‐ y;

//  x = N  y = M

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

x = y;  y = x;

//  x = N  y = M

14

Page 15: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

T aux = x;  x = y;  y = aux;

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;

//  falso

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  cierto

x = y;  y = x;

//  x = N  y = M

15

Page 16: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

T aux = x;  x = y;  y = aux;

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;

//  falso

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  cierto

x = y;  y = x;

//  x = N  y = M

16

?

Page 17: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

T aux = x;  x = y;  y = aux;

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;

//  falso

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  cierto

x = y;  y = x;

//  x = N  y = M

17

?

Page 18: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

T aux = x;  x = y;  y = aux;

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  x = M  y = N

T aux = x;  x = y;  y = aux;

//  falso

¿Es correcta esta secuencia de asignaciones (x e y son datos de tipo T)?

//  cierto

x = y;  y = x;

//  x = N  y = M

18

?

Page 19: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta instrucción de asignación?

//  falso

x = y + 1;  

//  x = y

¿Es correcta esta instrucción de asignación?

//  x > 0

x = x / y;  

//  cierto

¿Es correcta esta instrucción de asignación?

//  falso

x = x / y;  

//  cierto

19

Page 20: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta instrucción de asignación?

//  falso

x = y + 1;  

//  x = y

¿Es correcta esta instrucción de asignación?

//  x > 0

x = x / y;  

//  cierto

¿Es correcta esta instrucción de asignación?

//  falso

x = x / y;  

//  cierto

20

Page 21: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta instrucción de asignación?

//  falso

x = y + 1;  

//  x = y

¿Es correcta esta instrucción de asignación?

//  x > 0

x = x / y;  

//  cierto

¿Es correcta esta instrucción de asignación?

//  falso

x = x / y;  

//  cierto

21

Page 22: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Es correcta esta instrucción de asignación?

//  falso

x = y + 1;  

//  x = y

¿Es correcta esta instrucción de asignación?

//  x > 0

x = x / y;  

//  cierto

¿Es correcta esta instrucción de asignación?

//  falso

x = x / y;  

//  cierto

22

Page 23: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

3. Axioma de la instrucción de asignación

Esta instrucción de asignación es correcta , por definición :

//  Dom(v = E) 

v = Exp;

//  Q

Dom(v = Exp): condiciones que han de satisfacerse para que pueda serevaluada la expresión v = Exp sin errores (se habla decondiciones de dominio).

: predicado resultante de sustituir en el predicado Q cada ocurrencia

de la variable v por la expresión Exp.23

Page 24: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

x = x + 1;

//  x + y > x * z

24

Page 25: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

x = x + 1;

//  x + y > x * z

//  Dom(x = x+1)  (x + 1) + y > (x + 1) * z 

x = x + 1;

//  x + y > x * z

25

Page 26: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

x = x + 1;

//  x + y > x * z

//  Dom(x = x + 1)  (x + 1) + y > (x + 1) * z

x = x + 1;

//  x + y > x * z

//  cierto  (x + 1) + y > (x + 1) * z

x = x + 1;

//  x + y > x * z

26

Page 27: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

x = x + 1;

//  x + y > x * z

//  cierto  (x + 1) + y > (x + 1) * z

x = x + 1;

//  x + y > x * z

// (x + 1) + y > (x + 1) * z

x = x + 1;

//  x + y > x * z

27

Page 28: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

// P

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 0

28

Page 29: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 0

// Dom(v[j] = v[i] + v[i‐1]/v[i+1])

// v[i] + v[i‐1] / v[i+1] > 0

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 0

29

Page 30: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que la instrucción de asignación sea correcta?

//  P

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 0

// Dom(v[j] = v[i] + v[i‐1] / v[i+1])

// v[i] + v[i‐1] / v[i+1] > 0

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 0

// j  0  j < #v – 1  i  1 i < #v – 1 

// v[i+1]  0 v[i] + v[i‐1] / v[i+1] > 0

v[j] = v[i] + v[i‐1] / v[i+1];

//  v[j] > 030

Page 31: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

4. Axioma de la instrucción de devolución de valor

tipoValorDevuelto nombreFunción (lista_de_parámetros)

Esta instrucción de devolución de valor es correcta , por definición:

// Dom(Exp)  Q ó á

return Exp;

// Q

Dom(Exp): condiciones que han de satisfacerse para que pueda ser evaluadala expresión Exp sin errores (sus condiciones de dominio).

Q ó á : predicado resultante de sustituir en el 

predicado  cada ocurrencia de la invocación por la expresión  Exp.31

Page 32: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (const int n) {

// Pre: n ≥ 0int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}//  Preturn resultado;// Post: factorial(n) = ([1,n]. )

}

¿Un predicado  P que haga que la última instrucción sea correcta?

32

Page 33: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (int n) {

// Pre: n ≥ 0int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}//  Dom(resultado)  resultado = ([1,n]. )return resultado;// Post: factorial(n) = ([1,n]. )

}

Ese predicado garantiza que la última instrucción es correcta33

Page 34: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (int n) {

// Pre: n ≥ 0int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}//  cierto  resultado = ([1,n]. )return resultado;// Post: factorial(n) = ([1,n]. )

}

Ese predicado garantiza que la última instrucción es correcta

34

Page 35: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

// Pre: n ≥ 0// Post: factorial(n) = ([1,n]. )int factorial (int n) {

// Pre: n ≥ 0int indice = 0, resultado = 1;while (indice != n) {

indice = indice + 1;  resultado = indice * resultado;

}//  resultado = ([1,n]. )return resultado;// Post: factorial(n) = ([1,n]. )

}

Ese predicado garantiza que la última instrucción es correcta35

Page 36: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

5. Axioma de la instrucción nulaEsta instrucción nula es correcta, por definición :

//  P

;

//  P 

36

Page 37: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que esta instrucción nula sea correcta?

//  P

;

//  x + y > x * z

¿Un predicado P que haga que esta instrucción nula sea correcta?

//  P

;

//  v[i] > 0

37

Page 38: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil

¿Un predicado P que haga que esta instrucción nula sea correcta?

//  x + y > x * z

;

//  x + y > x * z

¿Un predicado P que haga que esta instrucción nula sea correcta?

//  v[i] > 0

;

//  v[i] > 0

38

Page 39: Lección 10. Corrección de un algoritmowebdiis.unizar.es/asignaturas/PROG2/doc/grupo_412/transparencias/...predicados 2. Concepto de corrección de un algoritmo – ... omás débil