Terminaison
Nous allons étudier l'algorithme en démontrant par cas qu'il répond toujours la bonne réponse.
Cas A : le tableau est vide
Lignes 4-5 : On a i = 0 et longueur = 0
Ligne 6 : on ne rentre pas dans la boucle puisque le tableau est vide : 0 n'est pas inférieur à 0.
On atteint la ligne 8 et puisque 0 n'est pas inférieur à 0, on atteint la ligne 10 puis 11 : on répond bien -1 pour signaler qu'on ne trouve pas x.
Correct sur ce cas.
CAS B : on atteint une case d'indice k contenant x.
Nous avons montré l'initialisation et la conservation lors des questions 7 et 8. Démontrons la terminaison de la boucle dans ce cas.
Le dernier tour est le tour (k-1) puisque t[k-1] != x.
Donc Pk-1 est vérifiée.
Donc x n'est pas dans t[0 .. k-1].
A la fin de la dernière boucle, i passe de k-1 à k avec t[k] = x.
Fin du TANT QUE car la condition de poursuite n°2 n'est plus valide.
On atteint la ligne 8 avec i = k et puisque i est inférieur à n, on place cet indice dans la réponse.
Correct sur ce cas.
CAS C : on atteint la fin du tableau de taille n.
On considère n valeurs dont les indices vont de 0 à (n-1).
Nous avons montré l'initialisation et la conservation lors des questions 7 et 8. Démontrons la terminaison de la boucle dans ce cas :
On commence la dernière boucle avec i = k = n-1.
Puisque Pn-1 est vérifiée, on a ceci en début de boucle :
- i = n-1
- x n'est pas dans t[0 .. n-1]
A la fin de cette boucle, i passe de n-1 à n.
Fin du TANT QUE car la condition de poursuite n°1 n'est plus valide.
On atteint la ligne 8 : n n'est pas inférieur à n. On passe donc en ligne 10 puis 11 : on répond bien -1 pour signaler qu'on ne trouve pas x.
Correct sur ce cas.
Nous avons traité les 3 cas possibles.
L'algorithme est correct.
◻