Aller au contenu

Epreuve pratique

L'une des épreuves de terminale en spécialité NSI est une épreuve pratique (vous êtes devant un ordinateur et devez coder des programmes).
Une partie des exercices lors de cette épreuve se limite au programme de première et vous pouvez donc d'ores et déjà vous y entraîner.

Exercice (sujet 1 des EP 2021, exercice 1)

Programmer la fonction recherche, prenant en paramètre un tableau non vide tab (type list) d'entiers et un entier n, et renvoyant 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.

Exemple:

>>> recherche([5, 3],1)
2
>>> recherche([2,4],2)
0
>>> recherche([2,3,5,2,4],2)
3
Solution

Un code possible:

def recherche(tab, n):
    """
    tab: type list
    n: type int
    renvoie l'indice de la dernière occurrence de n dans tab si n est présent dans tab
    renvoie la longueur de tab si n n'est pas présent dans tab
    """
    resultat = len(tab)
    for k, x in enumerate(tab):
        if  x == n:
            resultat = k
    return resultat

Exercice (sujet 1 des EP 2021, exercice 2)

On souhaite programmer une fonction donnant la distance la plus courte entre un point de départ et les points d'une liste.

  • 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.

On rappelle que la distance d entre deux points du plan de coordonnées (x ; y) et (x' ; y') est donnée par la formule d = \sqrt{(x-x')^2+(y-y')^2\ }.

On importe la fonction racine carrée (sqrt) du module math de Python.

On dispose d'une fonction distance et d'une fonction plus_courte_distance :

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((..........)**2 + (...........)**2) 


def test_plus_courte_distance():
    assert plus_courte_distance([(7, 9), (2, 5), (5, 2)], (0, 0)) == (2, 5), "erreur"


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 = ........................
    for i in range (1, ............):
        if distance(tab[i], depart) ................. :
            point = ......................
            min_dist = ..........................
    return point

Compléter le code.

Solution
from math import sqrt  # import de la fonction racine carrée


def distance(point1, point2):
    """ Calcule et renvoie la distance entre deux points. """
    x1, y1 = point1[0], point1[1]
    x2, y2 = point2[0], point2[1]
    return sqrt((x1-x2)**2 + (y1-y2)**2) 


def test_plus_courte_distance():
    assert plus_courte_distance([(7, 9), (2, 5), (5, 2)], (0, 0)) == (2, 5), "erreur"


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