algorithme avec EduPython
algorithme avec EduPython
from lycee import *
from math import sqrt
xA=demande("abscisse de A")
yA=demande("ordonnée de A")
xB=demande("abscisse de B")
yB=demande("ordonnée de B")
xC=demande("abscisse de C")
yC=demande("ordonnée de C")
c=sqrt((xB-xA)**2 + (yB-yA)**2)
b=sqrt((xC-xA)**2 + (yC-yA)**2)
a=sqrt((xB-xC)**2 + (yB-yC)**2)
if a==b or b==c or c==a :
print("triangle isocèle")
if a**2==b**2+c**2 or b**2==a**2+c**2 or c**2==a**2+b**2 :
print("triangle rectangle")
Bonjour,
pourquoi, le script ci-dessus m'indique-t-il bien que le triangle est rectangle quand A(3;1) B(5;3) et C(2;2) et et qu'il est isocèle quand A(1;5) B(9;-3) et C(2;-2) mais qu'il ne m'indique pas les deux à la fois quand je rentre :
A(0;0) B(3;0 et C(0;3) par exemple. Il indique seulement que le triangle est isocèle.
J'ai essayé de voir s'il s'agissait d'un problème d'indentation mais je ne pense pas.
Pourriez-vous m'aider pour qu'il traite aussi le cas d'un triangle isocèle et rectangle.
Merci !
C.
from math import sqrt
xA=demande("abscisse de A")
yA=demande("ordonnée de A")
xB=demande("abscisse de B")
yB=demande("ordonnée de B")
xC=demande("abscisse de C")
yC=demande("ordonnée de C")
c=sqrt((xB-xA)**2 + (yB-yA)**2)
b=sqrt((xC-xA)**2 + (yC-yA)**2)
a=sqrt((xB-xC)**2 + (yB-yC)**2)
if a==b or b==c or c==a :
print("triangle isocèle")
if a**2==b**2+c**2 or b**2==a**2+c**2 or c**2==a**2+b**2 :
print("triangle rectangle")
Bonjour,
pourquoi, le script ci-dessus m'indique-t-il bien que le triangle est rectangle quand A(3;1) B(5;3) et C(2;2) et et qu'il est isocèle quand A(1;5) B(9;-3) et C(2;-2) mais qu'il ne m'indique pas les deux à la fois quand je rentre :
A(0;0) B(3;0 et C(0;3) par exemple. Il indique seulement que le triangle est isocèle.
J'ai essayé de voir s'il s'agissait d'un problème d'indentation mais je ne pense pas.
Pourriez-vous m'aider pour qu'il traite aussi le cas d'un triangle isocèle et rectangle.
Merci !
C.
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: algorithme avec EduPython
Bonjour,
le problème ne vient pas de ton algorithme mais de la gestion des flottants avec Python. En python, les nombres réels les flottants sont convertis dans une écriture en base 2 afin d'être interprété dans la machine. Sauf que tous les réels n'ont pas une écriture en base 2 exacte, ce qui fait qu'on a des valeurs approchées qui deviennent encore plus approchées quand on a des racines carrées et cela s'empire lorsque l'on reprend le carré (ce qui est le cas dans ton programme. D'une manière générale, le test entre flottants est assez dangereux en python.
Pour contourner le problème, tu peux te contenter de calculer seulement les carrés des longueurs, ce qui limitera les valeurs approchées et n'empêchera pas de faire les tests de longueurs égales :
et la console donne bien les deux réponses pour ton exemple :
Bonne continuation
le problème ne vient pas de ton algorithme mais de la gestion des flottants avec Python. En python, les nombres réels les flottants sont convertis dans une écriture en base 2 afin d'être interprété dans la machine. Sauf que tous les réels n'ont pas une écriture en base 2 exacte, ce qui fait qu'on a des valeurs approchées qui deviennent encore plus approchées quand on a des racines carrées et cela s'empire lorsque l'on reprend le carré (ce qui est le cas dans ton programme. D'une manière générale, le test entre flottants est assez dangereux en python.
Pour contourner le problème, tu peux te contenter de calculer seulement les carrés des longueurs, ce qui limitera les valeurs approchées et n'empêchera pas de faire les tests de longueurs égales :
Code : Tout sélectionner
from lycee import *
from math import sqrt
xA=demande("abscisse de A")
yA=demande("ordonnée de A")
xB=demande("abscisse de B")
yB=demande("ordonnée de B")
xC=demande("abscisse de C")
yC=demande("ordonnée de C")
c=(xB-xA)**2 + (yB-yA)**2
b=(xC-xA)**2 + (yC-yA)**2
a=(xB-xC)**2 + (yB-yC)**2
if a==b or b==c or c==a :
print("triangle isocèle")
if a==b+c or b==a+c or c==a+b :
print("triangle rectangle")
Re: algorithme avec EduPython
Bonsoir,
merci beaucoup j'ai compris !
C.
merci beaucoup j'ai compris !
C.
-
- Messages : 4001
- Enregistré le : mer. 5 sept. 2007 12:04
Re: algorithme avec EduPython
Bonne continuation et à bientôt sur SoS math