Vous êtes sur la page 1sur 2

Lycéee Lyautey - 1ère spé NSI 6 DS11 Lundi 19 février 2023

DS11
Tris et recherches
Types construits et tables de données
Durée de l’épreuve : 01h50

L’usage de la calculatrice n’est pas autorisé.


Le candidat répond sur feuilles doubles numérotées et garde l’énoncé.
Les traces de recherche, même incomplètes ou infructueuses, seront valorisées.
La qualité de la rédaction, la clarté et la précision des raisonnements seront prises en compte.

Question 1

Programmer une fonction verifie qui prend en paramètre un tableau de valeurs numériques non vide et qui
renvoie True si ce tableau est trié dans l’ordre croissant, False sinon :

>>> assert verifie([0, 5, 8, 8, 9]) == True


>>> assert verifie([8, 12, 4]) == False
>>> assert verifie([-1, 4]) ==True
>>> assert verifie([5]) == True

Question 2

Écrire une fonction indices_maxi qui prend en paramètre une liste 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 où
apparaît ce plus grand élément :

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


>>> assert indices_maxi([7]) == (7, [0])

Question 3

Écrire une fonction max_dico qui :


◦ prend en paramètre un dictionnaire dico non vide dont les clés sont des chaînes de caractères et les valeurs
associées sont des entiers positifs ou nuls ;
◦ renvoie un tuple dont :
 la première valeur est une clé du dictionnaire associée à la valeur maximale ;
 la seconde valeur est la valeur maximale présente dans le dictionnaire.

>>> assert max_dico({'Bob': 102, 'Ada': 201, 'Alice': 103, 'Tim': 50}) == ('Ada', 201)
>>> assert max_dico({'Alan': 222, 'Ada': 201, 'Eve': 220, 'Tim': 50}) == ('Alan', 222)

Question 4

La fonction tri_insertion suivante prend en argument une liste tab et trie cette liste en place en utilisant la
méthode du tri par insertion.

Compléter cette fonction pour qu’elle réponde à la spécification demandée.

On rappelle le principe du tri par insertion : on considère les éléments à trier un par un, le premier élément
constituant, à lui tout seul, une liste triée de longueur 1. On range ensuite le second élément pour constituer
une liste triée de longueur 2, puis on range le troisième élément pour avoir une liste triée de longueur 3 et ainsi
de suite. . . A chaque étape, le premier élément de la sous-liste non triée est placé dans la sous-liste des éléments
déjà triés de sorte que cette sous-liste demeure triée.
Le principe du tri par insertion est donc d’insérer à la n-ième itération, le n-ième élément à la bonne place.

Page 1 sur 2
Lycéee Lyautey - 1ère spé NSI 6 DS11 Lundi 19 février 2023

1 def tri_insertion(tab):
2 n = len(tab)
3 for i in range(1, n):
4 valeur_insertion = tab[...]
5 # la variable j est utilisée pour déterminer où placer la valeur à insérer
6 j = ...
7 # tant qu'on a pas trouvé la place de l'élément à insérer
8 # on décale les valeurs du tableau vers la droite
9 while j > ... and valeur_insertion < tab[...]:
10 tab[j] = tab[j-1]
11 j = ...
12 tab[j] = ...

Question 5

Compléter la fonction de recherche dichotomique ci-après en respectant la spécification :

1 def dichotomie(tab, x):


2 """
3 tab (list) : tableau d'entiers trié dans l'ordre croissant
4 x (int) : nombre entier
5 La fonction renvoie True si tab contient x et False sinon
6 """
7 debut = 0
8 fin = len(tab) - 1
9 while debut <= fin:
10 m = ...
11 if x == tab[m]:
12 return ...
13 if x > tab[m]:
14 debut = m + 1
15 else:
16 fin = ...
17 return ...

Proposer deux améliorations à cette fonction.

Question 6

Programmer une fonction occurences qui renvoie un dictionnaire d’occurences des chiffres d’un entier naturel :

>>> assert occurences(100) == {1: 1, 0: 2}


>>> assert occurences(1414213562) == {1: 3, 4: 2, 2: 2, 3: 1, 5: 1, 6: 1}

Question 7

Programmer une fonction recherche qui recherche dans une table de données les élèves qui ont une note
supérieur aux critères donnés en deuxième argument :

table = [{'Nom': 'Nagoumi', 'Prénom': 'Lim', 'Maths': 13, 'NSI': 15, 'HLP': 19}, \
{'Nom': 'Chagoumi', 'Prénom': 'Zaza', 'Maths': 17, 'NSI': 16, 'CAV': 14}, \
{'Nom': 'Ghazoumi', 'Prénom': 'Didi', 'PC': 19, 'NSI': 18, 'SVT': 17}]
>>> assert recherche(table, {'NSI': 15, 'Maths': 15}) == [{'Nom': 'Chagoumi', \
'Prénom': 'Zaza', 'Maths': 17, 'NSI': 16, 'CAV': 14}]

Exercice bonus (optionnel) Programmer un tri plus performant que le tri par insertion.

Page 2 sur 2

Vous aimerez peut-être aussi