Evitando errores. Invariante del bucle

El invariante es una condición (relación matemática entre las variables involucradas) que se tiene que cumplir:

  • Antes de empezar a ejecutarse el bucle
  • Después de cada vez que se ejecuta el bucle
  • Una vez terminada la ejecución del bucle

Si obtengo el invariante del bucle puedo comprobar si se va a cumplir en todas esas situaciones.

Ejemplo 1:

i:=1;
s:=1;

mientras que i<n hacer
    i:=i+1;
    s:=s+1;
fmq

En este ejemplo, el invariante es s=1+…+i;

Tras la primera ejecución: i=2, s=1+2=3; Tras la segunda ejecución: i=3, s=1+2+3=6; Tras la tercera ejecución: i=4, s=1+2+3+4=10; Al terminar el mientras que: i=n, s=1+2+…+n;

Ejemplo 2:

i:=1;
s:=1;

mientras que i<n hacer
    s:=s+1;
    i=i+1;
fmq

El invariante es s=1+…+(i-1);

Antes del bucle: i=2, s=1; Tras la primera ejecución: i=3, s=1+2=3; Tras la segunda ejecución: i=4, s=1+2+3=6;

Al terminar el mientras que: i=n+1, s=1+…+n;