mirror of
https://github.com/Fare-spec/cours.git
synced 2025-12-08 03:00:37 +00:00
add exo monday
This commit is contained in:
68
recursivite/exercice_MJoannic/sqrt/main.py
Normal file
68
recursivite/exercice_MJoannic/sqrt/main.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
### D'après WIKIPEDIA
|
||||||
|
def racine_raphson(number: float, precision: float) -> float:
|
||||||
|
assert number > 0, "La racine du nombre n'est pas réelle."
|
||||||
|
|
||||||
|
y = (number / 3)+ 1
|
||||||
|
diff = precision + 1
|
||||||
|
|
||||||
|
while diff > precision:
|
||||||
|
y_next = (y + number / y) / 2.0
|
||||||
|
diff = abs(y_next - y)
|
||||||
|
y = y_next
|
||||||
|
|
||||||
|
return y
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(racine_raphson(36, 0.000000000000001)**2 == 36)
|
||||||
|
|
||||||
|
|
||||||
|
def dichotomie(liste: list[any], element: any, start: int = 0, end: int = None, bypass_sorting: bool = False) -> int:
|
||||||
|
"""Recherche la partie entière de la racine carrée d'un nombre en utilisant une recherche dichotomique.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
liste (list[any]): Liste de nombres simulée pour la recherche.
|
||||||
|
element (any): Le nombre dont on cherche la racine carrée entière.
|
||||||
|
start (int, optional): Index de départ. Defaults to 0.
|
||||||
|
end (int, optional): Index de fin. Defaults to None.
|
||||||
|
bypass_sorting (bool, optional): Ignoré dans cette version.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: La partie entière de la racine carrée.
|
||||||
|
"""
|
||||||
|
if end is None:
|
||||||
|
end = len(liste) - 1
|
||||||
|
|
||||||
|
if start > end:
|
||||||
|
return end # Retourne la partie entière trouvée.
|
||||||
|
|
||||||
|
middle = (start + end) // 2
|
||||||
|
squared = middle * middle
|
||||||
|
|
||||||
|
if squared == element:
|
||||||
|
return middle
|
||||||
|
elif squared < element:
|
||||||
|
return dichotomie(liste, element, middle + 1, end, bypass_sorting=True)
|
||||||
|
else:
|
||||||
|
return dichotomie(liste, element, start, middle - 1, bypass_sorting=True)
|
||||||
|
|
||||||
|
def racine_dich(number: int) -> int:
|
||||||
|
"""
|
||||||
|
Calcul de la partie entière de la racine carrée d'un nombre entier.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
number (int): Nombre dont on cherche la racine carrée.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: La partie entière de la racine carrée.
|
||||||
|
"""
|
||||||
|
assert number >= 0, "Le nombre doit être positif ou nul."
|
||||||
|
liste = [i for i in range(number // 2 + 2)] # Simule une "liste" pour la dichotomie
|
||||||
|
return dichotomie(liste, number)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(racine_dich(36)) # Retourne 6
|
||||||
|
print(racine_dich(20)) # Retourne 4
|
||||||
|
print(racine_dich(0)) # Retourne 0
|
||||||
|
print(racine_dich(1)) # Retourne 1
|
||||||
Reference in New Issue
Block a user