Exercice 1 : Récursivité

On définit la suite mathématique par la relation de récurrence :  u0 =  2

et, pour tout n entier, un = 3.un-1 + 4 si n > 0.

 

 

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. Ecrire une fonction récursive suite(n) du calcul du n-ième terme de la suite.

Exemple :

print(suite(0))
print(suite(1))
print(suite(10))
Résultat :
2
10
236194

 

Exercice 2 : Récursivité - Nombre de clients

Une entreprise a remarqué que d'une année à l'autre:

  • elle perd 6% de ses clients;
  • elle gagne 300 clients.

En admettant que le nombre de clients de cette entreprise était égale à 3000 au 1 janvier 2021.

2.1. Ecrire en python une fonction récursive nommé nb_clients(n, clients ) qui retourne le nombre théorique de clients après n années.

Exemple 

print(nb_clients(1,3000)) retourne 3120.0
print(nb_clients(20,3000))  retourne 4419.787517737077
 

2.2. Ecrire cette fonction en utilisant une fonction itérative (boucle for).

 
 
 

 Exercice 3 : Modularité

Nous avons le programme suivant qui réalise un dessin :

import turtle

#initialiser turtle
turtle.setup(800, 600)
turtle.speed(0)
turtle.hideturtle()
turtle.pensize(3)
 
y_sol = -200

# Dessin du sol de la rue
x1 = -380
y1 = y_sol
x2 = 380
y2 = y_sol
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
#Fin dessin du sol de la rue

#Dessin du rectangle 1
x = -100
y = y_sol
w = 100
h = 200
turtle.penup()
turtle.goto(x-w/2,y)
turtle.pendown()
turtle.goto(x+w/2,y)
turtle.goto(x+w/2,y+h)
turtle.goto(x-w/2,y+h)
turtle.goto(x-w/2,y)

#Dessin du rectangle 2
x = 100
w = 50
h = 300
turtle.penup()
turtle.goto(x-w/2,y)
turtle.pendown()
turtle.goto(x+w/2,y)
turtle.goto(x+w/2,y+h)
turtle.goto(x-w/2,y+h)
turtle.goto(x-w/2,y)

#sortie
 turtle.exitonclick()
 
Nous souhaitons décomposer ce programme en 4 fonctions (méthodes) pour qu'il soit plus facile à débuger.
 
import turtle

def init():
      """
      Fonction initialisation de turtle
      """
      
def exit():
      """
      Fonction exit
      """
      
# Dessin du sol de la rue
def sol(y_sol):
      """
      Fonction dessin du sol
      """    

def rectangle(x,y,w,h):
      """
      Fonction dessin d'un rectangle
      """
      
y_sol = -200

#initialisation
init()

# Dessin du sol de la rue
sol(y_sol)

#Dessin du rectangle 1
rectangle(-100,y_sol,100,200)

#Dessin du rectangle 2
rectangle(100,y_sol,50,300)

#sortie
exit()
 
3.1. Ecrire la fonction init.
 
3.2. Ecrire la fonction exit.
 
3.3.Ecrire la fonction sol.
 
3.4. Ecrire la fonction rectangle
 
3.5. Testez votre code pour voir si vous avez le même dessin avec les 2 programmes.
 
 

Exercice 4 : Modularité

Ecrire un module SurfaceAire.py qui est composé de 4 fonctions avec le cahier des charges suivant :
4.1. La fonction srectangle qui a comme paramètre la largeur et la longueur du rectangle et qui retourne sa surface.
4.2. La fonction vparallelepipede qui a comme paramètre la largeur, la longueur et la hauteur d'un parallélépipède et qui retourne son volume. Attention, cette fonction doit utiliser la fonction srectangle.
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(srectangle(2,3))
print(vparallelepipede(2,3,4))
print(scarre(3))
print(vpyramide(3,4))
vous obtenez :
6
24
9
12.0 
 

Ecercice 5 : POO

 
5.1. Ecrire une classe de base nommée Client.
  Un Client possède trois attributs :
  • id de type int ;
  • solde_achat de type float;
  • remise de type float:
Et les méthodes :
  •  __affiche__() permet d’afficher les trois attributs : id, solde et remise;
  •  __achat__(prix) permet de modifier le solde du client à l’aide de la formule suivante :
    solde = solde + prix * (1 - remise/100)
 5.2. Tester la classe avec les instructions suivantes :
 
client1 = Client(12131,300,5)
client2 = Client(12132,500,3)

client1.__affiche__()
client2.__affiche__()
client1.__achat__(120)
client2.__achat__(90)
client1.__affiche__()
client2.__affiche__()
Résultat :
12131 300 5
12132 500 3
12131 414.0 5
12132 587.3 3

Exercice 6 : POO

Nous avons la classe Robot suivante qui gère le déplacement d'un robot
 
class Robot:
      def __init__(self,x,y,orientation):
            self.pos = [x,y]
            self.orientation = orientation
            self.tupMvt = ((1,0),(0,1),(-1,0),(0,-1))
      
      def posiRobot(self):
            print(self.pos,self.orientation)
      
      def avance(self):
            self.pos[0] = self.pos[0] + self.tupMvt[self.orientation][0]
            self.pos[1] = self.pos[1] + self.tupMvt[self.orientation][1]
            
      def rotLeft(self):
            self.orientation += 1
            if self.orientation == 4 :
                  self.orientation = 0
 
Cette classe est composé de 4 méthodes :
  • __init__ pour positionner et orienter le robot;
  • posiRobot qui afficher position et l'orientation du robot;
  • avance qui fait avancer le robot suivant sont orientation;
  • rotLeft qui fait tourner le robot de +90°.

6.1. Tester la classe Robot avec les instructions suivantes :

robot1 = Robot(0,0,0)
robot1.posiRobot()
robot1.avance()
robot1.posiRobot()
robot1.rotLeft()
robot1.posiRobot()
robot1.rotLeft()
robot1.posiRobot()
robot1.rotLeft()
robot1.posiRobot()
robot1.rotLeft()
robot1.posiRobot()

6.2. En vous aidant de la méthode avance crée  une méthode recule qui fait reculer le robot suivant son orientation.

Exemple :

robot2 = Robot(3,1,0)
robot2.posiRobot()
robot2.recule()
robot2.posiRobot()
 
Résultat:
[3, 1] 0
[2, 1] 0

6.3. Ecrire une méthode rotRight qui fait tourner le robot vers la droite de --90°.

 Exemple : 
robot3 = Robot(3,1,0)
robot3.posiRobot()
robot3.rotRight()
robot3.posiRobot()
robot3.rotRight()
robot3.posiRobot()
Résultat :

[3, 1] 0
[3, 1] 3
[3, 1] 2

 

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.