Aller au contenu

Index des sujets 2023

Corrigé sujet 02 - Année : 2023

Sujet 02 - 2023

Exercice 1

1
2
3
4
5
6
7
8
9
def indices_maxi(tab):
    maxi, indices_maxi = tab[0], [0]
    for i in range(1,len(tab)):
        if tab[i] > maxi:
            maxi = tab[i]
            indices_maxi = [i]
        elif tab[i] == maxi:
            indices_maxi.append(i)
    return maxi, indices_maxi

Note

On parcourt la liste par indice:

  • lignes 4 à 6 : si on trouve un élément plus grand (strictement) que le maximum alors cet élément est le nouveau maximum (et la liste des indices du maximum ne contient que l'indice de cet élément)
  • lignes 7 et 8 :si on trouve un élément égal au maximum alors on rajoute son indice à la liste des indices du maximum

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def positif(pile):
    pile_1 = list(pile) #(1)
    pile_2 = [] #(2)
    while pile_1 != []:
        x = pile_1.pop() #(3)
        if x >= 0:
            pile_2.append(x) #(4)
    while pile_2 != []:
        x = pile_2.pop()
        pile_1.append(x) #(5)
    return pile_1
  1. On réalise dans pile_1 une copie indépendante de la pile
  2. pile_2 est initialement vide, on y empilera les éléments positifs de pile_1
  3. On retire successivement les éléments x de pile_1
  4. S'ils sont positifs, on les empile dans pile_2
  5. On depile tous les éléments de pile_2 dans pile_1 afin qu'ils soient dans l'ordre initial

Attention

  1. Bien comprendre que le sujet se limite à l'interface habituelle d'une pile (empile avec append, depile avec pop et est_vide avec ==[]). On pourrait trier les éléments positifs d'une liste bien plus simplement (par exemple par compréhension).
  2. On rappelle que x = pile_1.pop() possède deux effets : supprimer le dernier élément de pile_1() et affecte sa valeur à x.