Exercice 1 : Récursivité
On définit la suite de Tribonacci par la relation de récurrence : u0 = u1 = 0 , u2 =1
et, pour tout n entier, un = un-1 + un-2 + un-3 si n > 2.
1.1 Quel est l'écueil à éviter lorsqu'on programme le calcul du n-ième terme de la suite de Tribonacci de manière récursive ?
1.2. Proposer une version récursive efficace du calcul le n-ième terme de la suite .
Exemple :
print(tribonacci(0))
print(tribonacci(1))
print(tribonacci(2))
print(tribonacci(3))
print(tribonacci(10))
Résultat :
0
0
1
1
81
Exercice 2 : Récursivité
Nous souhaitons réaliser une fonction qui convertit un nombre romain en décimal.
Exemple rom_to_dec("MDCLXVI") retourne 1666.
Pour cela vous utiliserez dans la fonction le dictionnaire ci-dessous :
dic = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
2.1. Ecrire cette fonction en utilisant une fonction itérative (boucle for).
2.2. Ecrire cette fonction en utilisant une fonction récursive.
Rappels; si s = "MDCLXVI"
print(s[0]) -> "M"
print(s[1:]) -> "DCLXVI"
print(dic[s[0]]) -> 1000
Exemples :
print(rom_to_dec(""))
print(rom_to_dec("I"))
print(rom_to_dec("V"))
print(rom_to_dec("X"))
print(rom_to_dec("L"))
print(rom_to_dec("C"))
print(rom_to_dec("D"))
print(rom_to_dec("M"))
print(rom_to_dec("MDCLXVI"))
résultats :
0
1
5
10
50
100
500
1000
1666
Exercice 3 : Modularité
Nous avons le programme suivant qui calcule les solutions d'un polynôme du second degré (a.x2+b.x+c) :
from math import *
def solutpoly2(a,b,c) :
d = b**2 - 4 * a * c
if d < 0 :
return None
elif d == 0 :
return - b / (2*a)
else :
x1 = (- b + sqrt(d) ) / (2*a)
x2 = (- b - sqrt(d) ) / (2*a)
return (x1,x2)
#Test de la fonction
print(solutpoly2(1,2,3))
print(solutpoly2(1,4,4))
print(solutpoly2(1,0,-1))
Nous souhaitons décomposer ce programme en 4 fonctions (méthodes) pour qu'il soit plus facile à débuger.
Nous utiliserons comme fonction principale la fonction suivante :
def solutpoly2(a,b,c) :
d = delta(a,b,c)
if d < 0 :
return None
elif d == 0 :
return sol1(a,b)
else :
return sol2(a,b)
3.1. Ecrire la fonction delta.
3.2. Ecrire la fonction sol1
3.3.Ecrire la fonction sol2.
3.4. Tester votre code avec :
print(solutpoly2(1,2,3))
print(solutpoly2(1,4,4))
print(solutpoly2(1,0,-1))
et vérifier que vous obtenez les mêmes résultats que la première fonction solupoly2.
Exercice 4 : Modularité
Ecrire un module SurfaceAire.py qui est composé de 4 fonctions avec le cahier des charges suivant :
4.1. La fonction sdisque qui a comme paramètre le diamètre du disque et qui retourne sa surface.
4.2. La fonction vcylindre qui a comme paramètre le diamètre et la hauteur d'un cylindre et qui retourne son volume. Attention, cette fonction doit utiliser la fonction sdisque.
4.3. La fonction scarre qui a comme paramètre un coté du carré et qui retourne sa surface.
4.4. La fonction vpyramide qui a comme paramètre le coté et la hauteur de la pyramide et qui retourne son volume. Attention, cette fonction doit utiliser la fonction scarre.
Si vous tester avec les instructions suivantes :
print(sdisque(2))
print(vcylindre(2,4))
print(scarre(3))
print(vpyramide(3,4))
vous obtenez :
3.141592653589793
12.566370614359172
9
12.0
Ecercice 5 : POO
5.1. Ecrire une classe de base nommée Vehicule.
Un Vehicule possède trois attributs :
- annee_achat de type int ;
- prix_achat de type float;
- prix_courant de type float:
Et les méthodes :
- __affiche__() permet d’afficher les trois attributs : Annee_achat, prix_achat et prix_courant ;
- __calculePrix__() permet de calculer le membre prix_courant d’un Vehicule à l’aide de la formule suivante :
prix_courant = (1 - ( (2020 - annee_achat) * 0.01 )) * prix_achat
5.2. Tester la classe avec les instructions suivantes :
mavoiture = Vehicule(2010,20000,12000)
print(mavoiture.__affiche__())
print(mavoiture.__calculePrix__())
Résultat :
(2010, 20000, 12000)
18000.0
Exercice 6 : POO
Nous avons la classe grille suivante qui crée une grille de 5 x5.
from random import randint
class Grille:
def __init__(self):
self.matrix = [[randint(0,1) for i inrange(5) ] for j inrange(5)]
def afficher(self):
for ligne in self.matrix:
print(ligne)
Cette classe est composé de 2 méthodes :
- __init__ pour créer la matrice (matrix);
- afficher pour afficher la grille (matrix)
6.1. Tester la classe Grille avec les instructions suivantes :
magrille = Grille()
magrille.afficher()
6.2. Ecrire une méthode getXY(x,y) qui retourne la valeur de la case en position x et y de la grille.
Exemple :
print(magrille.getXY(2,3))
6.3. Ecrire une méthode setXY(x,y,valeur) qui change la valeur de la case en position x et y de la grille.
Exemple :
magrille.setXY(2,3,5)
print(magrille.getXY(2,3))
magrille.afficher()
Résultat :
0, 0, 1, 1, 1]
[1, 1, 0, 0, 0]
[1, 1, 0, 5, 1]
[1, 1, 0, 1, 0]
[1, 0, 1, 1, 1]