Les exercices de cette page peuvent (doivent) être réservés à une
seconde lecture.
if
: Exercices supplémentaires
Les exercices de cette page peuvent (doivent) être réservés à une
seconde lecture.
sont_paralleles()
, qui respecte la spécification
suivante :
Paramètres | m : coefficient directeur d'une droite d. a : coefficient directeur d'une droite d'. |
---|---|
Valeur renvoyée | True si les droites sont parallèles, False sinon |
intersection()
,
qui respecte la spécification suivante :
Paramètres | m, p : coefficient directeur et ordonnée à l'origine d'une droite d. a, b : coefficient directeur et ordonnée à l'origine d'une droite d'. |
---|---|
Valeur renvoyée | intersection des droites d et d' sous forme de chaîne de caractères (ensemble vide, la droite ou coordonnées du point d'intersection) |
On aura intérêt à limiter les tests à des coefficients entiers si l'on veut éviter les problèmes de comparaison des flottants.
Il peut également être intéressant de faire précéder ce travail d'un travail sur la comparaison de rationnels, ce qui permettrait d'appliquer notre fonction à des coefficients directeurs rationnels.
Pour comparer deux rationnels $\frac{a}{b}$ et $\frac{p}{q}$, on n'écrira pas bien entendu un test
tel que a/b == p/q
qui nous replonge immédiatement dans les
problèmes de comparaisons de flottants.
On écrira plutôt :
def rationnels_egaux(numerateur1, denominateur1, numerateur2, denominateur2):
return numerateur1 * denominateur2 == denominateur1 * numerateur2
Écrire une fonction en Python,
nommée nombre_solutions()
, qui respecte la spécification
suivante :
Paramètres | a, b, c réels (a non nul) et k un nombre quelconque |
---|---|
Valeur renvoyée | Le nombre de solutions de l'équation $a x^2 + b x + c = k$ |
Puisque le discriminant pourra être un flottant, l'utilisation de
la fonction isclose()
se justifie dans cet exercice :
##----- Importation des modules -----##
from math import isclose
##----- Définition des Fonctions -----##
def nombre_solutions(a, b, c, k) :
"""
renvoie le nombre de solutions de l'équation ax^2 + bx + c = k
avec a non nul
"""
discriminant = b**2 - 4*a*(c-k)
if isclose(discriminant, 0) :
return 1
elif discriminant > 0 :
return 2
else :
return 0
>>> nombre_solutions(1, 1, 1, 3/4) 1 >>> nombre_solutions(1, 1, 1, 1) 2 >>> nombre_solutions(1, 1, 1, -5) 0
##----- Importation des modules -----##
from math import isclose
##----- Définition des Fonctions -----##
def nombre_solutions(a, b, c, k) :
"""
renvoie le nombre de solutions de l'équation ax^2+bx+c = k
a non nul
"""
x = -b/(2*a) # abscisse du sommet
y = a*x**2 + b*x + c # ordonnée du sommet
if isclose(k, y) : # si k est l'ordonnée du sommet
return 1
if a>0 : # parabole orientée vers le haut
if k < y : # parabole entièrement au-dessus de la droite y=k
return 0
else :
return 2
else :
if k > y :
return 0
else :
return 2
>>> nombre_solutions(1, 1, 1, 3/4) 1 >>> nombre_solutions(1, 1, 1, 1) 2 >>> nombre_solutions(1, 1, 1, -5) 0
intermediaire()
, qui respecte la spécification
suivante :
Paramètres | a, b, c entiers |
---|---|
Valeur renvoyée | Celui des trois nombres qui est compris entre les deux autres. |
mini()
, qui respecte la spécification
suivante :
Paramètres | a, b, c entiers |
---|---|
Valeur renvoyée | La plus petite des trois valeurs |
maxi()
, qui respecte la spécification suivante :
Paramètres | a, b, c entiers |
---|---|
Valeur renvoyée | La plus grande des trois valeurs |
triangle_possible()
, qui respecte la spécification
suivante :
Paramètres | a, b, c entiers strictement positifs. |
---|---|
Valeur renvoyée | True si l'on peut construire un triangle de côtés a, b, c. False sinon. |
Écrire une fonction Python,
nommée est_tri_rect()
, dont les paramètres d'entrée sont
les longueurs des trois côtés d'un triangle, qui détermine si ce triangle
est rectangle, voire isocèle rectangle, et qui renvoie la nature de
ce triangle sous forme de chaîne de caractères.
Attention, on rappelle que pour comparer des
float
, l'utilisation de « ==
»
ne donnera pas un comportement du script satisfaisant.
Utilisez un test (distance inférieure à une borne epsilonesque)
ou utilisez la fonction isclose()
du module math
.
On peut coder ceci de diverses façons. Voici avec une fonction « tout-en-un » :
##----- Importation des modules -----##
from math import isclose
##----- Définition des Fonctions -----##
def est_tri_rect(a, b, c):
# on range les trois nombres par ordre croissant :
if a > b:
a, b = b, a
if b > c:
b, c = c, b
if a > b:
a, b = b, a
if not(isclose(c*c, a*a + b*b)) :
return "Triangle non rectangle"
elif isclose(a, b) :
return "Triangle rectangle isocèle"
else :
return "Triangle rectangle non isocèle"
>>> est_tri_rect(3, 4, 5) 'Triangle rectangle non isocèle' >>> est_tri_rect(3, 4, 2) 'Triangle non rectangle' >>> est_tri_rect(2, 2, 2.8284271247461903) 'Triangle rectangle isocèle'
A nouveau, il s'agit de calculs numériques en machine donc les conclusions ne sont que conjectures...
L'usage de plusieurs fonctions clarifie l'ensemble (séparation des fonctions de calcul et des instructions ne servant qu'à l'échange avec l'utilisateur).
##----- Importation des modules -----##
from math import isclose
##----- Définition des Fonctions -----##
def est_rectangle(a, b, c) :
return isclose(c*c, a*a + b*b) or isclose(a*a, c*c + b*b) or isclose(b*b, c*c + a*a)
def est_isocele(a, b, c) :
return isclose(a, b) or isclose(a, c) or isclose(c, b)
def message_avertissement() :
print("\n#######################################################")
print("Rappel : il s'agit de calculs numériques en machine.")
print("Les conclusions ne sont donc que conjectures.")
print("#######################################################\n")
def est_tri_rect(a, b, c):
message_avertissement()
if not(est_rectangle(a, b, c)):
return "Triangle non rectangle"
elif est_isocele(a, b, c):
return "Triangle rectangle isocèle"
else :
return "Triangle rectangle non isocèle"
>>> est_tri_rect(3, 4, 5) ####################################################### Rappel : il s'agit de calculs numériques en machine. Les conclusions ne sont donc que conjectures. ####################################################### 'Triangle rectangle non isocèle'