Aller au contenu

Index des sujets 2022

Corrigé sujet 24 - Année : 2022

Sujet 24 - 2022

Exercice 1

1
2
3
4
5
6
def maxliste(liste):
    maxi = liste[0]
    for elt in liste:
        if elt > maxi:
            maxi=elt
    return maxi

Commentaires

L'énoncé précise que la liste est non vide, on peut donc se permettre d'initialiser le maximum courant avec le premier élément de la liste.

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Pile:
    """ Classe définissant une pile """
    def __init__(self, valeurs=[]):
        self.valeurs = valeurs

    def est_vide(self):
        """Renvoie True si la pile est vide, False sinon"""
        return self.valeurs == []

    def empiler(self, c):
        """Place l’élément c au sommet de la pile"""
        self.valeurs.append(c)

    def depiler(self):
        """Supprime l’élément placé au sommet de la pile, à condition qu’elle soit non vide"""
        if self.est_vide() == False:
            self.valeurs.pop()


def parenthesage (ch):
    """Renvoie True si la chaîne ch est bien parenthésée et False sinon"""
    p = Pile()
    for c in ch:
        if c == "(": #(1)
            p.empiler(c)
        elif c == ")": #(2)
            if p.est_vide():
                return False
            else:
                p.depiler()
    return p.est_vide() #(3)
  1. On suit l'algorithme donné dans l'énonce : si on rencontre une parenthèse ouvrante alors on l'empile
  2. Si c'est une parenthèse fermante, on dépile dans le cas où la pile est vide, l'expression est mal parenthésée.
  3. Si à la fin du parcours la pile n'est pas vide, l'expression est mal parenthésée.

Attention

  • Le code fourni utilise un objet mutable (une liste) comme paramètre par défaut d'une fonction :
    def __init__(self, valeurs=[]):
    
    C'est une très mauvaise pratique car source d'erreurs, en effet la variable valeurs étant mutable elle est modifiée par la fonction lors d'un premier appel et ne sera donc plus vide lors des appels suivants. Pour une solution à ce problème, on pourra par exemple consulter ce site
  • Dans l'énoncé au format pdf, le else de la ligne 29 n'est pas correctement indenté, le problème n'apparaît pas dans le fichier .py fourni avec le sujet. Probablement en lien avec ce souci, le elif de la ligne 26 pourrait être un else.