PYTHON.2 INFO FEUILLE n°13 D'EXERCICES

                      PYTHON 2  FEUILLE n° 13                      AVRIL- MAI 2012     

           Thème:

               PROGRAMME SUR LES SUITES DE FIBONACCI

---------------------------------------------------------------

   EXERCICE 1

     Soit la suite de fibonacci ( u) définie par:

                   u0 = 1

                   u1 = 1 

                   un = un -1 + un -2   pour tout entier naturel   n ≥ 2                                            

      Ecrire un programme principal qui appelle un script

      utilisant if ...else et qui retourne la valeur du

      terme d'indice n entrée par l'utilisateur.

---------------------------------------------------------------------------------------------

 Réponse :

def fibonacci(n):                                                 
       if
n==0 or n==1:
          return 1
       else:
            return  fibonacci(n-1)+fibonacci(n-2)   

# PROGRAMME PRINCIPAL#

   #####################

n= int(input(" Donner l'indice n du terme de la suite souhaité : n ="))  

print "u",n,"=",fibonacci(n)

print  " Appuyer sur Entrée pour arrêter"

  On obtient par exemple :

>>>

Donner l'indice n du terme de la suite souhaité : n = 4

un = 5

Appuyer sur Entrée pour arrêter"

On obtient par exemple :

>>>

Donner l'indice n du terme de la suite souhaité : n = 10

un = 89

Appuyer sur Entrée pour arrêter"

------------------------------------------------------------------------------------------

  EXERCICE 2

          Reprendre le même objectif mais avec deux modifications

         • Le programme principal ( de lancement) demande la saisie de a

           la valeur commune de u0 et u1.

         • Le premier script appelé utlise une boucle while dès que a et n dans IN

          sont les variables connues.

   -----------------------------------------------------------

        REPONSE:

def fibonacci2(n,a):   
      u0=a
      u1=a
      i=0
      while i<n−1:
            temp=u1
            u1=u1+u0
            u0=temp
            i=i+1
      return  u1

# PROGRAMME PRINCIPAL   de lancement automatique #
a=input("Donner la valeur du premier terme de la suite de Fibonacci  a =  " )

n= int(input(" Donner l'indice n du terme de la suite souhaité : n = "))  

print "u",n,"=",fibonacci2(n,a)

print(" Appuyer sur Entrée pour arrêter")

  Par exemple:

>>> 
Donner la valeur du premier terme de la suite de Fibonacci a = 2
 Donner l'indice n du terme de la suite souhaité : n = 4
u 4 = 10
 Appuyer sur Entrée pour arrêter

>>> 

    Par exemple  on retrouve :

>>> 
Donner la valeur du premier terme de la suite de Fibonacci a= 1
 Donner l'indice n du terme de la suite souhaité : n = 4
u 4 = 5
 Appuyer sur Entrée pour arrêter

>>> 

------------------------------------------------------------------------------------

  EXERCICE 3

     Soit la suite de fibonacci ( u) définie sur IN* par:

                   u1 = 1

                   u2 = 1 

                   un +2 = un + 1 + un        pour tout entier naturel n≥1

                                                

      Ecrire un algorithme muni d'un programme principal qui

      appelle un script utilisant while et qui retourne la valeur

      du terme d'indice n entré par l'utilisateur.

---------------------------------------------------------------------

 Réponse:

def fibonacci2(n):
       u1=1
       u2=1
       i=1

       while (i<n):
             temp=u2
             u2=u1+u2
             u1=temp
             i=i+1

       return(u2)

# PROGRAMME PRINCIPAL#

   #####################

n= int(input(" Donner l'indice n du terme de la suite souhaité : n ="))  

print "u",n,"=",fibonacci2(n)

print  " Appuyer sur Entrée pour arrêter"

      On a par exemple :

>>>

 Donner l'indice n du terme de la suite souhaité : n = 10

u10 = 89

Appuyer sur Entrée pour arrêter

---------------------------------------------------------------------------------------------

  Exercice 3    

     Ecrire un programme principal qui appelle successivement deux scripts 

      et qui retourne la liste ou tableau des n premiers termes de la suite quand

      l'utilisateur entre n.

-----------------------------------------------------------------------------------------

 Réponse:   Synthèse

def fibonacci(n): 

                             # Renvoie le terme un quand l'utilisateur entre n
       if n==0 or n==1:
          return 1
       else:
             return fibonacci(n-1)+fibonacci(n-2)

def valeurs_de_fibo(n):
       Tab=[0]*n                # Ainsi une listeTab de n zéros est crée
       for i in range(0,n):
             Tab[i]=fibonacci(i)            # Les termes de Tab existent on peut les remplacer chacun
       return Tab

# PROGRAMME PRINCIPAL#

    ##################### 

n=int(input("Saisir un nombre de valeurs : n ="))
print valeurs_de_fibo(n)

 On a par exemple:

>>>

Saisir un nombre de valeurs : n = 10

[1 ,1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 ],

                    AUTRE VARIANTE possible pour l'algo:

def fibonacci(n): 
       if n==0 or n==1:
          return 1
       else:
             return fibonacci(n-1)+fibonacci(n-2)

def valeurs_de_fibo(n):
      Tab=range(n)           # Cela crée la liste Tab=[0,1,....n-1] si n>0 sinon Tab =[ ]
       for i in range(0,n):
             Tab[i]=fibonacci(i)    # Tab existant chaque terme peut être remplacé
      return Tab

# PROGRAMME PRINCIPAL#

    ##################### 

n=int(input("Saisir un nombre de valeurs : n ="))
print valeurs_de_fibo(n)

    Par exemple:

>>> 
Saisir un nombre de valeurs : n = 0
[]
>>> 


>>> 
Saisir un nombre de valeurs : n = 1
[1]
>>>


>>> 
Saisir un nombre de valeurs : n = 10
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> 

---------------------------------------------------------------------------------------------------------------- 

  EXERCICE 5     

     Ecrire un programme principal qui appelle successivement deux scripts 

      et qui retourne la SOMME des n premiers termes de la suite de

     Fibonacci quand  l'utilisateur entre n dans IN ainsi que la LISTE 

     de ces n premiers termes..

-----------------------------------------------------------------------------------

 REPONSE:

def fibonacci(n):
      if n==0 or n==1:
          return 1
      else:
           return  fibonacci(n-1)+fibonacci(n-2)

def valeurs_de_fibo(n):
      Tab=range(n)

       S=0
       for i in range(0,n):
            Tab[i]=fibonacci(i)    
            S=S+Tab[i]
       print "La somme est",S
       return  Tab
# PROGRAMME PRINCIPAL#
 ##################### 

n=int(input("Saisir un nombre de valeurs : n = "))
print valeurs_de_fibo(n)


  Par exemple:

>>> 
Saisir un nombre de valeurs : n = 6
La somme est 20
[1, 1, 2, 3, 5, 8]

>>>    

----------------------------------------------------------

  EXERCICE 6

    Avoir simplement la somme des n premiers termes

   d'une suite ( un ) de fibonaccci de premiers termes u0 = 1   u 1 = 1

    quand on saisit n.

------------------------------------------------------

  REPONSE :

def fib(n):

       if n==0 or n==1:

           return 1

       else:

             return fib(n-1)+fib(n-2)

def  valeurs_de_fibo(n):

        S=0

       for i in range(n):

              S=S+fib(i)

        print  "La somme est"

        return S

# PROGRAMME PRINCIPAL#

n=int(input("Saisir un nombre de valeurs : n = "))

print valeurs_de_fibo(n)

             Par exemple :

>>> 
Saisir un nombre de valeurs : n = 6
La somme est
20

>>> 

         Par exemple :

>>>

Saisir un nombre de valeurs : n = 6

La somme est

20

>>>

----------------------------------------------------

       EXERCICE 7       

  Avoir le terme d'indice n et  la somme S des n  + 1 premiers termes et la liste L

  des n+1 premiers termes  de la suite ( un ) de fibonaccci de premiers termes u0 = 1   u 1 = 1

    quand on saisit n.

------------------------------------------------------------------------------------------------------------

     REPONSE:

from random import*
def fib(n):
       if n==0 or n==1:
            return 1
      else:
            return fib(n-1)+fib(n-2)
def valfib():
       n=int(input("Saisir un entier n : n =  "))
       print fib(n)
       S=0
       L=[]
       if n!=0:
             for i in range(n+1):
                   S=S+fib(i)
                    L.append(fib(i))
             print  S
             print  L        
       else:        
             print  1
             print  [1]

          PAR EXEMPLE:            
 

>>> valfib()
Saisir un entier n  : n =  0
1
1
[1]

>>> valfib()
Saisir un entier n  : n =  1
1
2
[1, 1]

>>> valfib()
Saisir un entier n  : n =  2
2
4
[1, 1, 2]

>>> valfib()
Saisir un entier n : n =  6
13
33
[1, 1, 2, 3, 5, 8, 13]

>>>  

-------------------------------------------------------------------------