Python en mathématiques - Niveau 1

if : Exercices supplémentaires

Plus tard ! Les exercices de cette page peuvent (doivent) être réservés à une seconde lecture.

Position relative de droites

  1. Écrire une fonction en Python, nommée 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
  2. Écrire une fonction (procédure) en Python, nommée 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)
  • Question 1
  • Question 2

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

		
		

Équation du second degré

É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$
  • Un code possible avec le discriminant
  • Un code possible sans le discriminant

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
	

Triangle possible ?

  1. Écrire une fonction en Python, nommée 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.
  2. Écrire une fonction en Python, nommée mini(), qui respecte la spécification suivante :
    Paramètres a, b, c entiers
    Valeur renvoyée La plus petite des trois valeurs
  3. Écrire une fonction en Python, nommée maxi(), qui respecte la spécification suivante :
    Paramètres a, b, c entiers
    Valeur renvoyée La plus grande des trois valeurs
  4. Écrire une fonction en Python, nommée 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.
  • Question 1
  • Question 2
  • Question 3
  • Question 4

		
		

		
		

		
		

		
		

Coin de carré

É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.

  • Warning !
  • Une solution
  • Une solution améliorée

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'