1) La décomposition fonctionnelle:
Nous désirons écrire un programme qui va permettre d’afficher la liste des diviseurs du nom “n” ou “m”. Ayant le plus grand nombre de diviseurs. il va donc falloir définir les trois fonctions suivantes:
- diviseur (d,n) retourne True si d est un diviseur de n.
- n_diviseurs(n) compte et retourne le nombre de diviseurs de n.
- liste_diviseurs(n) retourne la liste des diviseurs de n.
n=200 m=450 if n_diviseurs(n) > n_diviseurs(m): print(liste_diviseurs(n)) else: print (liste_diviseurs(m))
Maintenant vous allez devoir modifier le code présent ci-dessus en insérant la définition de ces trois fonctions et tester le programme.
n=200
m=450
def diviseur (d,n):
return n%d==0
def liste_diviseurs(n):
L=[]
For i in range(1, n+1):
if diviseur(i,n):
L.append(i)
return L
def n_diviseurs(n):
eturnr len(liste_diviseurs(n))
If n_diviseurs(n) > n_diviseurs(m):
print(liste_diviseurs(n))
else:
print(liste_diviseurs(m))
[1, 2, 4, 5, 10, 19, 20, 25, 38, 50, 76, 95, 100, 190, 380, 475, 950, 1900]
2) Fonctions python et fonctions géométriques
Si vous voulez utiliser les fonctions mathématiques “Log” et “Sin”, vous allez devoir importer les fonctions mathématiques de Python dans votre programme. Vous devrez utiliser la commande: from math import *.
- Ecrire une fonction f définie par: f(x) = 20*log(x)
- Dans le programme vous allez devoir écrire un algorithme qui va dessiner la fonction f avec Turtle dans l’intervalle [1,300]. Ensuite, dans une boucle, vous tracerez successivement tous les points de coordonnées (x, f(x)).
- Ecrire la g définie par: g(x) = x/2*sin(x/20).
- Ensuite vous devrez écrire une fonction min_fg qui pour une valeur d’abscisse x compare f(x) et g(x) puis retourner la plus petite valeur.
- Ecrire la fonction compose_fog qui aura comme valeur d’abscisse x retourne f o g(x).
- Pour finir vous devez écrire une procédure dessinée qui prend en paramètre une fonction et la dessine avec Turtle dans l’intervalle [1,300]. Tester en dessinant f,g,min_fg puis compose_fog.
from turtle import * from math import * up() goto(-300,0) down() goto (300,0) up() goto(0,300) down() goto(0,300)
from turtle import *
from math import *
def f(x):
return 20*log(x)
def g(x):
return x/2*sin(x/20)
def min_fg (x):
if f(x)<g(x)
return f(x)
Else:
return g(x)
def compose_fog(x):
return g(f(x))
def dessiner(fonc):
up()
goto(0,0)
down()
for x in range (1,300):
goto (x, fonc (x))
up()
goto(-300,0)
goto(300,0)
up()
goto(0,-300)
down()
goto(0,300)
dessiner(f)
dessiner(g)
dessiner(min_fg)
dessiner(compose_fog)
exitonclick()
3) Fonctions simples
Il vous faut écrire une fonction f définie par: f(x) = 2 x^2 – 1. Dans le programme, vérifier que f(0) = -1, f(1) = 2 et f(5) = 74
Ensuite, vous devez écrire une fonction fahrenheit qui convertit en en °F une température d donnée en paramètre en °C, selon la formule tF = tC * 1,8 + 32. Combien font 20°C et -2°C en °F ?
def farenheit (tc):
return tc*1.8+32
print (farenheit(20), farenheit (-3))
68.0 26.6
Ecrire maintenant une fonction bissextile qui va prendre en compte un entier a et retourne True si l’année a est bissextile (et si ce n’est pas le cas: False). Petit rappel: une année bissextile est soit un multiple de 4 mais pas de 100, soit un multiple de 400. Les année 2002 et 2016 sont elles bissextiles?
def bissextile(a):
return (a%4==0 and a%100!=0) or a%400==0
print(bissextile(2002), bissextile(2016))
True False
Ecrire une fonction air_disque qui va prendre en compte un entier r et qui va renvoyer la surface du disque de rayon r, définie par S = πr^2 . La fonction pi définie un peu plus haut sera utilisée pour la valeur de π.
pi=3.14
def surface(r):
return pi*r**2
print (surface(1.5))
7.065
Maintenant vous devez écrire une fonction prix_ttc qui va prendre en compte un entier prix_ht et qui va renvoyer le prix TTC selon la formule: prixTTC = prixHT * (1+TVA), où la TVA est égale à: 19.6%
Vous devez modifier la fonction pour que le taux de TVA soit également passé en paramètre de la fonction.
def prix_ttc(prix_ht):
return prix_ht*(1+TVA/100)
TVA=19.6
print(prix_ttc(9.90))
11.8404
Ecrire une fonction polynôme qui va accepter 4 paramètres a, b, c et x et qui va renvoyer le résultat de l’expression P(x) = ax^2 + bx + c. Avec P(x) = 2x^2 – x + 2. Vérifier que P(0) = 2, P(1) = 3 et P(2) = 8.
def polynome(a,b,c,x):
return a*x**2+b*x+c
print(polynome(2,-1,2,0), polynome(2,-1,2,1), polynome(2,-1,2,2))
2 3 8
Vous devez maintenant écrire une fonction max qui renvoi le maximum de deux nombres a et b.
def max(a,b):
if a>=b:
max=a
Else:
max=b
return max
print(max(3,2))
3
Ecrire une fonction val_abs qui retourne la valeur asbolue d’un nombre x passé en paramètre.
def val_abs(x):
if (x<0):
return -x
Else:
return x
print(cal_abs(2), val_abs(-2))
2 2
Maintenant il vous faut écrire une fonction signe qui évalue le signe d’un paramètre x et qui renvoie 0 si x = 0, 1 si x>0 et -1 si x < 0.
def signe(x):
if x>0:
return 1
Else:
if x<0:
return -1
Else:
return 0
print(signe(0), signe(4), signe(-7))
0 1 -1
Ecrire une fonction factorielle qui va renvoyer la valeur factorielle de n, n étant passé en paramètre. Vérifier que 1! = 1 et 5! = 120
def factorielle(n):
fact=1
for i in range(1,n+1):
fact=fact*i
return fact
print(factorielle(1), factorielle(5))
1 120
4) Équation du second degré
Exercice 1:
Vous allez devoir rédiger une fonction delta qui retourne la valeur de Δ = b^2 – 4ac, les coefficients a, b et c seront passés en paramètre.
def delta(a,b,c):
return b**2-(4*a*c)
Exercice 2:
Vous devez écrire une fonction solution qui calcule et renvoie sous forme de liste (contenant qu’un seul élément) la valeur de l’expression s = -b / 2a
def solution(a,b):
return -b/(2*a)
Exercice 3:
Ecrire une fonction solution_deux qui va calculer et renvoyer sous forme de liste les valeurs des deux expressions s1= (- b -√Δ) / 2a et s2=( -b + √Δ) / 2a.
def solution_double(a,b,c):
return [(-b-delta(a,b,c)**0.5)/(2*a),(-b+delta(a,b,c)**0.5)/(2*a)]
Exercice 4:
Vous devez écrire la fonction resoudre qui prend en compte les 3 coefficients a, b et c de l’équation ax^2 +bx +c = 0 et qui retournera la ou les solutions du résultat de l’équation sous forme de liste. Une liste vide sera renvoyée si l’équation admet aucune solution. Vous devez afficher les solutions des équations suivantes: x^2 – 2^x +1 = 0.2x^2 + x + 3 = 0 et x^2 – 1 =0
def resoudre(a,b,c):
d=delta(a,b,c)
if d==0:
return solution(a,b)
else:
return []
print(resoudre(1,-2,1))
print(resoudre(2,1,3))
print(resoudre(1,0,-1))
1.0
[]
[-1.0, 1.0]
5) Calcul d’une durée
Exercice 1:
Vous devez écrire une fonction seconde qui retourne en secondes une durée exprimée en heures, minutes et secondes. Vous allez devoir vérifier que 1h30m = 5400s et 3h20m15s = 12015s
def hms_to_s(h,m,s):
return h*3600+m*60+s
print(hms_to_s(1,30,0), hms_to_s(3,20,15))
5400 12015
Exercice 2
Vous devez trouver un procédé pour afficher le temps (affichage) qui va prendre en compte une durée exprimée en seconde et qui va l’afficher en heures, minutes, secondes. Il faudra vérifier que affichage (5400) affiche 1h30m0s et que affichage (12015) affiche 3h20m15s
def s_to_hms(s):
heures=s//3600
minutes=(s%3600)//60
secondes=(s%3600)%60
return [heures, minutes, secondes]
print(s_to_hms(5400), s_to_hms(12015))
[1, 30, 0] [3, 20, 15]
def affichage(hms):
print(hms[0], ‘h’,hms[1], ‘m’, hms[2], ‘s’)
Exercice 3:
Vous allez devoir écrire un programme qui affichera une seule ligne de code, le temps écoulé entre 13h58m et 15h31m30s
affichage(s_to_hms(hms_to_s(15,31,30)-hms_to_s(13,58,0)))
1 h 33 m 30 s
0 commentaires