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] 

 
 

En poursuivant votre navigation sur mon site, vous acceptez l’utilisation des Cookies et autres traceurs  pour réaliser des statistiques de visites et enregistrer sur votre machine vos activités pédagogiques. En savoir plus.