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 un tableau☘

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]
    """