Sujet n°6
Sujet original
Pour télécharger l'énoncé original, cliquer ici.
Exercice n°1☘
Programmer la fonction recherche
, prenant en paramètre un tableau non vide
tab
(de type list) d'entiers et un entier n
, et qui renvoie l'indice de
la dernière occurrence de l'élément cherché. Si l'élément n'est pas
présent, la fonction renvoie la longueur du tableau.
Exemples
>>> recherche([5, 3], 1)
2
>>> recherche([2, 4], 2)
0
>>> recherche([2, 3, 5, 2, 4], 2)
3
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 |
|
Exercice n°2☘
On souhaite programmer une fonction donnant la distance la plus courte entre un point de départ et une liste de points. Les points sont tous à coordonnées entières.
Les points sont donnés sous la forme d'un tuple de deux entiers.
La liste des points à traiter est donc un tableau de tuples.
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.
On rappelle que la distance entre deux points du plan de coordonnées (x ; y) et (x' ; y') est donnée par la formule :
On importe pour cela la fonction racine carrée (sqrt
) du module math
de
Python.
Compléter le code des fonctions distance
et plus_courte_distance
fournies
ci-après pour qu’elles répondent à leurs spécifications.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Commentaires sur le code original
-
Pour télécharger l'original du fichier à compléter, cliquer ici.
-
La deuxième fonction est mal nommée puisqu'elle renvoie un point (couple de coordonnées) au lieu d'une valeur (plus courte distance).
-
L'énoncé ne donne pas d'indication sur le point à sélectionner par la deuxième fonction si plusieurs conviennent. En se basant sur les derniers exemples, on peut en déduire que c'est le premier rencontré qui convient.
Exemples
>>> distance((1, 0), (5, 3))
5.0
>>> distance((1, 0), (0, 1))
1.4142135623730951
>>> plus_courte_distance([(7, 9), (2, 5), (5, 2)], (0, 0))
(2, 5)
>>> plus_courte_distance([(7, 9), (2, 5), (5, 2)], (5, 2))
(5, 2)
Une solution
Attention ! Vous devez compléter les pointillés et seulement les pointillés : il ne faut pas ajouter d'autres instructions, ni définir de fonction supplémentaire...
from math import sqrt # import de la fonction racine carrée
def distance(point1, point2):
""" Calcule et renvoie la distance entre deux points. """
return sqrt((point1[0] - point2[0])**2 + ((point1[1] - point2[1]))**2)
def plus_courte_distance(tab, depart):
""" Renvoie le point du tableau tab se trouvant à la plus
courte distance du point depart."""
point = tab[0]
min_dist = distance(point, depart)
for i in range (1, len(tab)):
if distance(tab[i], depart) < min_dist :
point = tab[i]
min_dist = distance(point, depart)
return point
if __name__ == '__main__':
# Exemples de l'énoncé
print(distance((1, 0), (5, 3)) == 5.0)
print(distance((1, 0), (0, 1)) == 1.4142135623730951)
print(plus_courte_distance([(7, 9), (2, 5), (5, 2)], (0, 0)) == (2, 5))
print(plus_courte_distance([(7, 9), (2, 5), (5, 2)], (5, 2)) == (5, 2))
# Exemples supplémentaires
print(distance((1, 0), (2, 0)) == 1.0)
print(distance((0, 2), (0, 1)) == 1.0)
print(plus_courte_distance([(1, 1), (2, 2), (3, 3)], (1, 3)) == (2, 2))
print(plus_courte_distance([(1, 1), (3, 3)], (1, 3)) == (1, 1))