Aller au contenu

Sujet n°16

Sujet original

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

Exercice n°1

Écrire une fonction maxi qui prend en paramètre une liste tab de nombres entiers et renvoie un couple donnant le plus grand élément de cette liste, ainsi que l’indice de la première apparition de ce maximum dans la liste.

Commentaires
  1. 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.
  2. Il manque, semble-t-il, une spécification importante : le tableau doit être non vide !!!

Exemple

>>> maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8])
(9, 3)
Une solution

Dans cette solution, la fonction ne fait rien (elle renvoie None) si le tableau est vide.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def 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
    """
    if len(tab)>0:
        pge = tab[0]
        indice_pge = 0
        for i in range(1, len(tab)):
            if tab[i] > pge:
                pge = tab[i]
                indice_pge = i
        return (pge, indice_pge)


if __name__ == '__main__':
    print(maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8]) == (9, 3))
    print(maxi([]) is None)
    print(maxi([5, 6, 9, 1, 2, 3, 7, 9, 8, 1]) == (9, 2))

Exercice n°2

Cet exercice utilise des piles qui seront représentées en Python par des listes (type list). On rappelle que l’expression T1 = list(T) fait une copie de T indépendante de T, que l’expression x = T.pop() enlève le sommet de la pile T et le place dans la variable x et, enfin, que l’expression T.append(v) place la valeur v au sommet de la pile T.

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 T de nombres entiers en paramètre et qui renvoie la pile des entiers positifs dans le même ordre, sans modifier la variable T.

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

  2. Une fonction qui renvoie une valeur ET qui effectue un affichage ??? Vraiment !!!
    Il ne faut surtout pas prendre cette manière de faire comme normale.

Exemple

>>> positif([-1, 0, 5, -3, 4, -6, 10, 9, -8])
T = [-1, 0, 5, -3, 4, -6, 10, 9, -8]
[0, 5, 4, 10, 9]
Une réponse
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
def positif(T):
    T2 = list(T)
    T3 = []
    while T2 != []:
        x = T2.pop()
        if x >= 0:
            T3.append(x)
    T2 = []
    while T3 != []:
        x = T3.pop()
        T2.append(x)
    print('T = ',T)
    return T2


if __name__ == '__main__':
    print(positif([-1, 0, 5, -3, 4, -6, 10, 9, -8]) == [0, 5, 4, 10, 9])