nsi:premiere:algorithme:correction
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| nsi:premiere:algorithme:correction [2023/03/16 10:38] – supprimée - modification externe (Unknown date) 127.0.0.1 | nsi:premiere:algorithme:correction [2023/03/16 10:38] (Version actuelle) – ↷ Page déplacée de nsi:premiere:algorithmie:correction à nsi:premiere:algorithme:correction goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Correction ====== | ||
| + | ===== Définitions ===== | ||
| + | On se demande si un algorithme -- ou, cela revient au même, une fonction -- est correct. C'est à dire que l'on veut savoir si l' | ||
| + | |||
| + | <WRAP tip> | ||
| + | |||
| + | Il s'agit d'un condition portant sur les entrées. Pour que l' | ||
| + | </ | ||
| + | |||
| + | <WRAP tip> | ||
| + | |||
| + | Ce sont les conditions que nous voulons voir réalisées à la fin de l' | ||
| + | </ | ||
| + | |||
| + | <WRAP tip> | ||
| + | |||
| + | On veut que l' | ||
| + | </ | ||
| + | |||
| + | <WRAP tip> | ||
| + | |||
| + | On dira qu'un algorithme (ou fonction) est **correct** s'il **termine** ET que préconditions $\Rightarrow$ postconditions. | ||
| + | </ | ||
| + | |||
| + | ===== Exemple ===== | ||
| + | |||
| + | Je considère une fonction '' | ||
| + | |||
| + | <code python> | ||
| + | def solve(A: | ||
| + | ''' | ||
| + | renvoie le plus petit entier N tel que N**3 >= A | ||
| + | ''' | ||
| + | n = 0 | ||
| + | while n**3 < A: | ||
| + | n += 1 | ||
| + | return n | ||
| + | </ | ||
| + | |||
| + | === Terminaison === | ||
| + | |||
| + | Cette fonction contient une boucle '' | ||
| + | |||
| + | Ici, '' | ||
| + | |||
| + | La fonction termine donc. | ||
| + | |||
| + | === Correction === | ||
| + | |||
| + | On a déjà vérifié que la fonction termine. | ||
| + | |||
| + | Fait-elle ce qu' | ||
| + | |||
| + | <WRAP box> | ||
| + | |||
| + | <WRAP important> | ||
| + | |||
| + | On ajoute donc la précondition : '' | ||
| + | |||
| + | <code python> | ||
| + | def solve(A: | ||
| + | ''' | ||
| + | A entier positif | ||
| + | renvoie le plus petit entier N tel que N**3 >= A | ||
| + | ''' | ||
| + | n = 0 | ||
| + | while n**3 < A: | ||
| + | n += 1 | ||
| + | return n | ||
| + | </ | ||
| + | |||
| + | La précondition a été écrite dans le commentaire. Dans certains cas, cela peut suffire. Mais rien n' | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | 0 | ||
| + | </ | ||
| + | |||
| + | La précondition écrite dans le commentaire n'est qu' | ||
| + | |||
| + | On peut être plus contraignant : | ||
| + | |||
| + | <code python> | ||
| + | def solve(A: | ||
| + | ''' | ||
| + | A entier positif | ||
| + | renvoie le plus petit entier N tel que N**3 >= A | ||
| + | ''' | ||
| + | assert A >= 0 | ||
| + | n = 0 | ||
| + | while n**3 < A: | ||
| + | n += 1 | ||
| + | return n | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | <WRAP box>Avec la précondition '' | ||
| + | |||
| + | <WRAP tip>La commande '' | ||
| + | * pour les tests : vérifier les fonctions sur des cas connus d' | ||
| + | * pour la maintenance : certains environnement de programmation comme [[https:// | ||
| + | </ | ||
