x = int(input("Entrez un nombre entier positif : "))
devine = 0
while devine ** 2 < x:
devine += 1
if devine ** 2 != x:
print(f"{x} n'est pas un carré parfait")
else:
print(f"La racine carrée de {x} est {devine}.")
x = float(input("Entrez un nombre entier positif : "))
devine = 0
pas = 0.0001
while devine ** 2 < x:
devine += pas
erreur = abs(x - devine ** 2)
print(f"La racine carrée de {x} est {devine} à {erreur} près")
Cette approche est basée sur une énumération exhaustive.
Limites :
D'autres approches existent.
valeur_recherchee = int(input("Entrez un nombre entre 0 et 1 000 000 : "))
if valeur_recherchee < 0 or valeur_recherchee > 1000000:
print("Erreur")
else:
debut = 0
fin = 1000000
milieu = round((fin + debut) / 2)
while milieu != valeur_recherchee:
if milieu > valeur_recherchee:
fin = milieu
else:
debut = milieu
milieu = round((fin + debut) / 2)
print(milieu)
x = float(input("Entrez un nombre positif : "))
debut = 0
fin = max(1, x)
milieu = (fin + debut) / 2
epsilon = 0.0001
while abs(milieu ** 2 - x) >= epsilon:
if milieu ** 2 > x:
fin = milieu
else:
debut = milieu
milieu = (fin + debut) / 2
erreur = abs(milieu ** 2 - x)
print(f"La racine carrée de {x} est {milieu} à {erreur} près")
Intuitivement, pour les 3 problèmes qui nous préoccupent :
S'il est nécessaire de tester toutes les valeurs, la dichotomie n'apporte rien.
L'instrumentation consiste à rajouter du code :
print
.Ces ajouts ne modifient pas l'algorithme instrumenté. Il s'agit d'instruments de mesure.
x = float(input("Entrez un nombre positif : "))
debut = 0
fin = max(1, x)
milieu = (fin + debut) / 2
epsilon = 0.0001
while abs(milieu ** 2 - x) >= epsilon:
print(milieu) # On affiche ici la valeur
if milieu ** 2 > x:
fin = milieu
else:
debut = milieu
milieu = (fin + debut) / 2
erreur = abs(milieu ** 2 - x)
print(f"La racine carrée de {x} est {milieu} à {erreur} près")
x = float(input("Entrez un nombre positif : "))
debut = 0
fin = max(1, x)
milieu = (fin + debut) / 2
epsilon = 0.0001
compteur = 0
while abs(milieu ** 2 - x) >= epsilon:
compteur += 1 # On incrémente le compteur d'itérations
if milieu ** 2 > x:
fin = milieu
else:
debut = milieu
milieu = (fin + debut) / 2
erreur = abs(milieu ** 2 - x)
print(f"La racine carrée de {x} est {milieu} à {erreur} près")
print(f"Nombre d'itérations : {compteur}") # on l'affiche
import time
x = float(input("Entrez un nombre positif : "))
chrono_debut = time.process_time() # démarrage du chronomètre
#
# Corps du code à chronométrer
# (voir diapositives précédentes pour les détails)
#
chrono_fin = time.process_time() # arrêt du chronomètre
temps_ecoule = chrono_fin - chrono_debut # calcul du temps écoulé
erreur = abs(milieu ** 2 - x)
print(f"La racine carrée de {x} est {milieu} à {erreur} près")
print(f"Temps d'exécution : {temps_ecoule}s") # on l'affiche
time.process_time
ne sont pas précises car elles sont impactées par les autres processus s'exécutant sur la machine.a0 = float(input("Entrez un nombre positif : "))
s = a0 / 2
epsilon = 0.0001
while abs(s ** 2 - a0) >= epsilon:
P = s ** 2 - a0
P_prime = 2 * s
s = s - P / P_prime
erreur = abs(s ** 2 - a0)
print(f"La racine carrée de {a0} est {s} à {erreur} près")
En résumé :
Vous allez voir cela en pratique dans le prochain TP.
Solution : mettre en place de bonnes pratiques de développement logiciel.
Nous aborderons quelques unes de ces bonnes pratiques dans les prochains cours.
a0 = 16
s = a0 / 2
epsilon = 0.1
while abs(s ** 2 - a0) >= epsilon:
P = s ** 2 - a0
P_prime = 2 * s
s = s - P / P_prime
print(f"sqrt({a0}) == {s}")
A gauche de l'interface se trouve le menu Run and Debug.
Dans le cadre de ce cours, vous choisirez toujours de déboguer le fichier courant.
Lorsque le programme s'exécute (non arrêté sur un point d'arrêt), la barre d'outils de débogage, qui se trouve en haut de l'éditeur, a cet aspect.
Aspect d'une ligne avant de poser un point d'arrêt.
En haut à droite de l'éditeur se trouve un bouton avec une flêche. Si on sélectionne la flêche avec un insecte, on lance l'exécution en mode débogage.
Parfois, on souhaite arrêter l'exécution uniquement lorsqu'une condition bien particulière est remplie.
Pour cela, on commence par créer un point d'arrêt classique. Ensuite, on fait un clic droit sur ce point d'arrêt pour l'éditer.
Si on souhaite arrêter l'exécution uniquement si la valeur de la variable P est inférieure à 20, il suffit de rentrer l'expression P < 20
.
Il est possible de rentrer n'importe quelle expression Booléenne valide en Python.
L'aspect d'un point d'arrêt conditionnel permet d'alerter sur la nature particulière de ce point d'arrêt.
On peut obtenir l'arborescence de toutes les valeurs de toutes les variables dans l'encadré à gauche de l'éditeur.
Un point d'arrêt Log est un losange à la place d'un cercle.