TP1 đ„ Calcul de racines
Une vidéo expliquant en détail le TP et fournissant quelques conseils est disponible en bas de page.
Un ordinateur, câest trĂšs rapide, mais pas trĂšs intelligent. On va en profiter pour lui faire calculer la racine carrĂ©e⊠de façon trĂšs bĂȘte.
Vous devez implĂ©menter deux mĂ©thodes de calcul « brutales » dâune racine carrĂ©e :
- une méthode par dichotomie (réduction d'un intervalle)
- une méthode chiffre par chiffre (par essais successifs)
Puis vous devrez :
- comparer ces méthodes à la fonction standard
math.sqrt()en termes de performance - étendre le calcul à une racine n-iÚme
Ă la fin de ce travail, vous serez capable de :
- Utiliser des variables, types de base, opérateurs et fonctions
- Utiliser des structures conditionnelles et expressions logiques
- Utiliser des structures répétitives
- Décomposer un algorithme en fonctions réutilisables
- Ăvaluer la performance dâun algorithme avec des mesures de temps
- Appliquer la logique pour résoudre un problÚme numérique complexe sans bibliothÚque
- Valider le fonctionnement de vos algorithmes Ă l'aide de jeux d'essais
Pour faire ce TP, votre enseignant a créé un dépÎt de code personnel pour chaque étudiant.
Ce dépÎt vous est propre et n'est accessible que par vous. Vous devez le récupérer (le cloner).
- Utilisez ce dépÎt tout au long du TP; ne créez pas de nouveau projet ni de nouveau dépÎt.
- Effectuez vos commits réguliÚrement dans ce dépÎt (voir la consigne sur les commits ci-dessous).
âđ€ đ đ«
Si votre travail est suspecté de plagiat (code copié d'un.e autre étudiant.e, code généré par IA, notions non abordées en classe, etc.), deux choses peuvent se produire :
- Le plagiat est prouvé par nos outils : note de 0, automatiquement.
- Le plagiat est plutÎt évident, mais une validation est requise : vous serez convoqué(e) au bureau de votre enseignant(e). Vous devrez répondre à certaines questions pour prouver que vous comprenez et maßtrisez le code qui a été utilisé. Si vous ne réussissez pas à répondre à certaines questions, vous aurez la note de 0 (si vous ne comprenez pas votre propre code, c'est que vous avez plagié, d'une maniÚre ou d'une autre).
- Au moins 5 commits de tailles comparables (il n'y a pas un commit avec tout dedans et les autres vides)
- Les commits décrivent l'avancement du projet dans un français sans faute (voir instructions)
- Chaque fonction doit ĂȘtre documentĂ©e Ă l'aide d'un docstring dans un français sans faute : description de la fonction, paramĂštres, valeur retournĂ©e, exceptions possibles, etc.
- Votre dépÎt contient déjà tous les fichiers nécessaires à la réalisation de votre TP :
tp1/
âââ .gitignore # ce fichier vous est fourni et sert Ă exclure les fichiers Ă ne pas versionner
âââ racine.py # doit contenir vos 2 fonctions pour les 2 mĂ©thodes diffĂ©rentes du calcul de la racine carrĂ©e
âââ performance.py # doit contenir vos tests de performance des fonctions du module "racine.py"
âââ autocorrection.py # ce fichier vous est fourni et sert Ă l'autocorrection de votre travail
Les fichiers racine.py et performance.py sont ceux que vous devrez compléter.
Votre dépÎt de code ne doit contenir aucun autre fichier que les 4 fichiers fournis.
Dans le script racine.py, vous devez créer 2 fonctions, soit une pour chacune des 2 méthodes du calcul de la racine carrée d'un nombre.
On cherche la racine dans un intervalle qui se réduit de moitié à chaque étape.
On commence par déterminer l'intervalle initial :
Par la suite, on va réduire l'intervalle de moitié de la maniÚre suivante :
- On calcule le milieu :
- Puis :
On rĂ©pĂšte l'opĂ©ration de rĂ©duction de l'intervalle jusqu'Ă ce que le critĂšre dâarrĂȘt soit atteint (voir ci-dessous).
đ CritĂšre dâarrĂȘtâ
On arrĂȘte lorsque les deux bornes donnent le mĂȘme rĂ©sultat, une fois arrondi Ă la prĂ©cision demandĂ©e.
Par exemple, si on veut dĂ©cimales, on arrĂȘte lorsque :
et ce résultat arrondi est la racine approximée.
Exemple (racine de , avec dĂ©cimales)â
On poursuit les itérations jusqu'à ce que :
Supposons quâon obtienne :
bas = 2.8284225463867188haut= 2.82843017578125
Alors :
round(2.828422..., 5) = 2.82842round(2.828430..., 5) = 2.82843
â On continue.
Plus tard :
bas = 2.8284263610839844haut= 2.82843017578125
Alors :
round(2.8284263..., 5) = 2.82843round(2.8284301..., 5) = 2.82843
â On peut donc arrĂȘter.
Résultat retourné : .
On construit le résultat décimale par décimale, en partant de la gauche vers la droite.
Supposons que nous cherchons la racine carrée de .
đ Partie entiĂšreâ
On commence par déterminer la partie entiÚre (à gauche de la virgule) de la racine carrée.
On fait des essais successifs pour trouver le plus grand entier dont le carré est inférieur ou égal à :
Puisque , on retient .
đ Ă cette Ă©tape, on sait que la racine est dans lâintervalle :
Donc, la racine de ressemble Ă point quelque chose (ex : ).
đą DĂ©cimalesâ
On va maintenant ajouter les décimales une à la fois.
PremiĂšre dĂ©cimaleâ
On teste les valeurs possibles :
Puisque , on retient .
đ On a maintenant :