Aller au contenu

Sujet n°2

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire une fonction indices_maxi qui prend en paramètre une liste tab, non vide, de nombres entiers et renvoie un couple donnant d’une part le plus grand élément de cette liste et d'autre part la liste des indices de la liste tab où apparaît ce plus grand élément.

Commentaires

Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.

Exemples

>>> indices_maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8])
(9, [3, 8])

>>> indices_maxi([7])
(7, [0])
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def indices_maxi(tab):
"""
tab - list, tableau de nombres entiers
Sortie: tuple, couple constitué du plus grand élément de tab
    et de son premier indice de présence dans tab
"""
pge = tab[0]
indices_pge = [0]
for i in range(1, len(tab)):
    if tab[i] == pge:
        indices_pge.append(i)
    elif tab[i] > pge:
        pge = tab[i]
        indices_pge = [i]
return (pge, indices_pge)


if __name__ == '__main__':
# Exemples de l'énoncé
print(indices_maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8]) == (9, [3, 8]))
print(indices_maxi([7]) == (7, [0]))

#Exemples supplémentaires
print(indices_maxi([5, 6, 9, 1, 2, 3, 7, 9, 8, 1]) == (9, [2, 7]))

Exercice n°2

Cet exercice utilise des piles qui seront représentées en Python par des listes (de type list).

On rappelle que l’expression liste_1 = list(liste) fait une copie de liste indépendante de liste, que l’expression x = liste.pop() enlève le sommet de la pile liste et le place dans la variable x et, enfin, que l’expression liste.append(v) place la valeur v au sommet de la pile liste.

Commentaires

A nouveau, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.

Compléter le code Python de la fonction positif ci-dessous qui prend une pile pile de nombres entiers en paramètre et qui renvoie la pile des entiers positifs dans le même ordre, sans modifier la variable pile.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def positif(pile): 
    pile_1 = ...(pile) 
    pile_2 = ... 
    while pile_1 != []: 
        x = ... 
        if ... >= 0: 
            pile_2.append(...) 
    while pile_2 != ...: 
        x = pile_2.pop() 
        ... 
    return pile_1
Commentaires sur le code et l'énoncé originaux
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. L'énoncé original parle d'une variable nommée liste, absente du code proposé. Ce nom a été remplacé par pile dans la retranscription ci-dessus.

Exemple

>>> positif([-1, 0, 5, -3, 4, -6, 10, 9, -8]) 
[0, 5, 4, 10, 9]

>>> positif([-2]) 
[]
Une réponse
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def positif(pile):
    pile_1 = list(pile)
    pile_2 = []
    while pile_1 != []:
        x = pile_1.pop()
        if x >= 0:
            pile_2.append(x)
    while pile_2 != []:
        x = pile_2.pop()
        pile_1.append(x)
    return pile_1


if __name__ == '__main__':
    # Exemples de l'énoncé
    print(positif([-1, 0, 5, -3, 4, -6, 10, 9, -8]) == [0, 5, 4, 10, 9])
    print(positif([-2]) == [])

    # Exemples supplémentaires
    print(positif([-3, 4, -5, 2, -7, 1, -8, 0]) == [4, 2, 1, 0])
    print(positif([2]) == [2])