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))