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] 

 
 
Affichages : 1011