Aller au contenu

Sujet n°38

Sujet original

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

Exercice n°1

Écrire une fonction tri_selection() qui prend en paramètre un tableau tab de nombres entiers, et qui renvoie le tableau trié par ordre croissant.

On utilisera l’algorithme suivant :

  • on recherche le plus petit élément du tableau, et on l'échange avec l'élément d'indice 0 ;

  • on recherche le second plus petit élément du tableau, et on l'échange avec l'élément d'indice 1 ;

  • on continue de cette façon jusqu'à ce que le tableau soit entièrement trié.

Les tableaux seront représentés sous forme de listes Python.

Commentaires sur l'énoncé original

L'énoncé parle tout d'abord de tab comme d'une liste, puis comme un tableau. Par soucis de cohérence, l'énoncé reproduit ici n'évoque que la notion de tableau.

Exemple

>>> tri_selection([1, 52, 6, -9, 12])
[-9, 1, 6, 12, 52]
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
25
26
27
28
29
30
31
32
33
def tri_selection(tab):
    """
    tab - list, tableau de nombres non triés
    Sortie: list, tableau contenant les éléments de tab,
            mais triés par ordre croissant
    """
    for i in range(len(tab)-1):
        i_mini = i
        for j in range(i, len(tab)):
            if tab[j] < tab[i_mini]:
                i_mini = j
        tab[i], tab[i_mini] = tab[i_mini], tab[i]
    return tab


if __name__ == '__main__':
    tableau = [1, 52, 6, -9, 12]
    resultat = tri_selection(tableau)
    result = True
    for i in range(len(resultat)-1):
        if resultat[i] > resultat[i+1]:
            result = False
            break
    print(result)

    tableau = [0, 1, 4, 2, -2, 9, 3, 1, 7, 1]
    resultat = tri_selection(tableau)
    result = True
    for i in range(len(resultat)-1):
        if resultat[i] > resultat[i+1]:
            result = False
            break
    print(result)

Exercice n°2

Le jeu du « plus ou moins » consiste à deviner un nombre entier choisi entre 1 et 99.

Un élève de NSI décide de le coder en langage Python de la manière suivante :

  • le programme génère un nombre entier aléatoire compris entre 1 et 99 ;

  • si la proposition de l’utilisateur est plus petite que le nombre cherché, l’utilisateur en est averti. Il peut alors en tester un autre ;

  • si la proposition de l’utilisateur est plus grande que le nombre cherché, l’utilisateur en est averti. Il peut alors en tester un autre ;

  • si l’utilisateur trouve le bon nombre en 10 essais ou moins, il gagne ;

  • si l’utilisateur a fait plus de 10 essais sans trouver le bon nombre, il perd.

La fonction randint est utilisée. Si a et b sont des entiers, randint(a, b) renvoie un nombre entier compris entre a et b.

Compléter le code ci-dessous et le tester.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from random import randint

def plus_ou_moins():
    nb_mystere = randint(1, ...)
    nb_test = int(input("Proposez un nombre entre 1 et 99 : "))
    compteur = ...

    while nb_mystere != ... and compteur < ... :
        compteur = compteur + ...
        if nb_mystere ... nb_test:
            nb_test = int(input("Trop petit ! Testez encore : "))
        else:
            nb_test = int(input("Trop grand ! Testez encore : "))

    if nb_mystere == nb_test:
        print ("Bravo ! Le nombre était", ...)
        print("Nombre d'essais :", ...)
    else:
        print ("Perdu ! Le nombre était", ...)
Commentaire sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. Un programme rempli de input() et de print(), ce n'est clairement pas dans l'esprit des instructions officielles. De plus, sans exemple, comment tester son travail correctement ?

Une réponse
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from random import randint

def plus_ou_moins():
    nb_mystere = randint(1, 99)
    nb_test = int(input("Proposez un nombre entre 1 et 99 : "))
    compteur = 1

    while nb_mystere != nb_test and compteur < 10 :
        compteur = compteur + 1
        if nb_mystere > nb_test:
            nb_test = int(input("Trop petit ! Testez encore : "))
        else:
            nb_test = int(input("Trop grand ! Testez encore : "))

    if nb_mystere == nb_test:
        print ("Bravo ! Le nombre était", nb_mystere)
        print("Nombre d'essais :", compteur)
    else:
        print ("Perdu ! Le nombre était", nb_mystere)