Aller au contenu

Programmer avec effet de bord

Dans le dossier [NSI], créez le dossier [F04_Portee_Variables].

Téléchargez le fichier « à trous » TPF04.21.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans ce dossier.

Consignes communes à chaque partie

  • Appelez régulièrement l'enseignant pour vérifier le travail réalisé.
  • Le programme principal contient un appel au module doctest :
    ##----- Programme principal et tests -----##
    if __name__ == '__main__':
        import doctest
        doctest.testmod()
    
    Chacune des fonctions devra passer les tests proposés.
    Il faudra aussi ajouter vos propres tests dans le programme principal (le main) afin de vous entraîner à en réaliser.

Partie 1 - Échanger deux éléments

Complétez le corps de la fonction echange() qui prend en paramètre un tableau tab d'entiers et deux indices d'éléments de ce tableau et qui échange les valeurs présentes à ces indices.

Cette fonction est à effet de bord, c'est-à-dire qu'elle ne renvoie rien mais modifie le contenu de tab, le tableau passé en paramètre.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def echange(tab, indice1, indice2):
    """
    tab - list, tableau d'entiers
    indice1 - indice d'un élément de tab
    indice2 - indice d'un élément de tab
    Sortie : None - échange les valeurs de tab[indice1] et tab[indice2]
             (fonction à effet de bord, ne renvoie rien)
    >>> lst = [2001, 42, 3, 1, 666, 2]
    >>> echange(lst, 1, 4)
    >>> lst
    [2001, 666, 3, 1, 42, 2]
    """

Remarque

Il est inutile de programmer une assertion : on considère l'utilisateur intelligent...

Partie 2 - Moyenne des éléments

Complétez le corps de la fonction moyenner() en respectant ses spécifications.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def moyenner(tab):
    """
    tab - list, tableau de flottants
    Sortie : None - remplace chaque élément de tab par la moyenne des éléments de tab
             (fonction à effet de bord, ne renvoie rien)
    >>> lst = [0.1, 0.2, 0.3, 0.4]
    >>> moyenner(lst)
    >>> lst
    [0.25, 0.25, 0.25, 0.25]
    """

Partie 3 - Renverser une liste

Complétez le corps de la fonction renverser() en respectant ses spécifications.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def renverser(tab):
    """
    tab - list
    Sortie: None - inverse tab : le premier élément devient le dernier,
            le deuxième devient l'avant-dernier, etc...
            (fonction à effet de bord, ne renvoie rien)
    >>> lst = [2001, 42, 3, 1, 666, 2]
    >>> renverser(lst)
    >>> lst
    [2, 666, 1, 3, 42, 2001]
    """

Partie 4 - Syracuse

Soit n un entier strictement positif.
L'algorithme de syracuse permet de calculer un entier qui « suit » cet entier n:

  • \frac{n}{2} lorsque n est pair ;
  • 3 n+1 lorsque n est impair.

Complétez le corps de la fonction syracuse() en respectant ses spécifications.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def syracuse(tab, nb):
    """
    tab - list, tableau contenant un entier strictement prositif
    nb - int, nombre final d'éléments de tab
    Sortie : None - ajoute à tab n-1 éléments déterminés selon l'algorithme de syracuse
             (fonction à effet de bord, ne renvoie rien)
    >>> lst1 = [42]
    >>> syracuse(lst1, 10)
    >>> lst1
    [42, 21, 64, 32, 16, 8, 4, 2, 1, 4]
    >>> lst2 = [35]
    >>> syracuse(lst2, 13)
    >>> lst2
    [35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2]
    """