Aller au contenu

Index des sujets 2022

Corrigé sujet 04 - Année : 2022

Sujet 04 - 2022

Exercice 1

1
2
3
4
5
6
def recherche(liste):
    consecutifs = []
    for i in range(len(liste)-1):
        if liste[i+1]==liste[i]+1:
            consecutifs.append((liste[i],liste[i+1]))
    return consecutifs

Commentaires

  • La condition liste[i+1]==liste[i]+1 permet de tester que deux éléments consécutifs de la liste sont deux entiers qui se suivent.
  • On peut utiliser les définitions de liste par compréhension :
        def recherche(liste):
            return [(liste[i],liste[i+1])  for i in range(len(liste)-1) if liste[i+1]==liste[i]+1]
    

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def propager(M, i, j, val):
    if M[i][j]== val: #(1)
        return

    M[i][j]=val

    # l'élément en haut fait partie de la composante
    if ((i-1) >= 0 and M[i-1][j] == 1): #(2)
        propager(M, i-1, j, val)

    # l'élément en bas fait partie de la composante
    if ((i+1) < len(M) and M[i+1][j] == 1): #(2)
        propager(M, i+1, j, val)

    # l'élément à gauche fait partie de la composante
    if ((j-1) >= 0 and M[i][j-1] == 1): #(2)
        propager(M, i, j-1, val)

    # l'élément à droite fait partie de la composante
    if ((j+1) < len(M) and M[i][j+1] == 1): #(2)
        propager(M, i, j+1, val)
  1. C'est la condition d'arrêt de la récursivité, on ne relance pas la propagation sur les cases voisines
  2. On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)
  3. On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)
  4. On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)
  5. On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)

Commentaire

Le return ligne 3 (équivalent à un return None) permet de mettre fin à la récursivité. On peut faire autrement et éviter d'utiliser return d'autant plus que cette fonction modifie une liste en place mais ne renvoie pas de valeur.