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 2 des EP 2021, exercice 1)

Programmer la fonction moyenne :

  • prenant en paramètre un tableau d'entiers tab (type list),
  • renvoyant la moyenne de ses éléments si le tableau est non vide,
  • déclenchant une erreur si le tableau est vide.
Solution

Un code possible:

def moyenne(tab):
    """
    tab: de type list, les éléments de tab sont de type int.
    renvoie un flottant, moyenne des éléments de tab.
    déclenche une erreur si tab est vide.
    """
    assert tab != [], "Erreur (liste vide)"
    s = 0 # contiendra la somme des éléments de tab
    for x in tab:
        s += x
    return s/len(tab)

Exemples:

>>> moyenne([2,3,4])
3.0
>>> moyenne([])
AssertionError: Erreur (liste vide)

Exercice (sujet 2 des EP 2021, exercice 2)

On considère un tableau d'entiers tab (type list) dont les éléments sont des 0 ou des 1. On se propose de trier ce tableau selon l'algorithme suivant : à chaque étape du tri, le tableau est constitué de trois zones consécutives, la première ne contenant que des 0, la seconde n'étant pas triée et la dernière ne contenant que des 1.

les zones

Tant que la zone non triée n'est pas réduite à un seul élément, on regarde son premier élément :

  • si cet élément vaut 0, on considère qu'il appartient désormais à la zone ne contenant que des 0 ;

  • si cet élément vaut 1, il est échangé avec le dernier élément de la zone non triée et on considère alors qu’il appartient à la zone ne contenant que des 1.

Dans tous les cas, la longueur de la zone non triée diminue de 1.

Compléter sous Python en la complétant la fonction tri suivante :

def tri(tab):
    # i est le premier indice de la zone non triée, j le dernier indice.
    # Au début, la zone non triée est le tableau entier.
    i = ...
    j = ...
    while i != j :
        if tab[i] == 0:
            i= ...
        else :
            tab[i] = .....
            tab[j] = .....
            j = ...
    ...

Exemple:

>>> tri([0,1,0,1,0,1,0,1,0])
[0, 0, 0, 0, 0, 1, 1, 1, 1]
Solution
def tri(tab):
    i= 0
    j= len(tab)-1
    while i != j :
        if tab[i] == 0:
            i = i+1
        else :
            tab[i] = tab[j]
            tab[j] = 1
            j = j-1
    return tab