OCaml (option informatique) · Chapitre 4 · Exercice de TD
Racine carrée entière
Programmation impérative : références et boucles · niveau 3 (difficile)
Énoncé
Écrire racine n () renvoyant le plus grand entier tel que , avec une boucle while, et prouver sa terminaison par un variant.
Corrigé
let racine n =
let r = ref 0 in
while (!r + 1) * (!r + 1) <= n do
r := !r + 1
done;
!r
On incrémente r tant que (r+1)^2 ne dépasse pas n. À la sortie, r^2 <= n < (r+1)^2 : c'est bien la partie entière de . Variant : n - !r * !r, entier positif tant que la boucle tourne, qui décroît strictement (!r croît de ). (racine 10 , car .)
Exercices semblables
- Fibonacci itératif corrigé
- Compter les diviseurs corrigé
- Suite de Syracuse corrigé
- Test de primalité corrigé
- Partage d'une référence (aliasing) corrigé