NSI Exo 1 (1)

Identification

Infoforall

Sujets Exo 1 de l'épreuve pratique (1)


La NSI comporte deux épreuves en Terminale :

  1. Une épreuve théorique de 3h30 sur table notée sur 12 et comportant un choix de 5 exercices. Après lecture rapide des exercices (30 minutes au maximum), il vous restera 3h pour en réaliser 3, soit environ 1h par exercice. Chaque exercice est noté sur 4.
  2. Une épreuve pratique de 1h et notée sur 8 pendant laquelle vous aurez à programmer et à interagir avec l'examinateur. Il s'agit donc autant d'une épreuve de programmation qu'un oral. Les sujets sont connus à l'avance mais vous tirez le votre au sort juste avant l'épreuve. Chaque sujet comporte deux exercices :
    1. Un exercice de création pure où on vous demande de réaliser une fonction à partir des spécifications fournies (4 points)
    2. Un exercice guidé (4 points)

A l'heure actuelle, la banque de sujets comporte 30 sujets.

1 - Sujet 01 - Recherche et glouton

Ancien sujet 08 de 2021.

A - Thèmes

  • String
  • Tableaux dynamiques (implémentés via le type list de Python), notamment l'utilisation de append().
  • Récursivité
  • Algorithme glouton (ou méthode gloutonne)
  • Rendu de monnaie (un "classique")

B - Lien local vers le sujet

En cas de panne du site officiel : sujet pdf - exo2 - zip des 2

C - Remarques sur le sujet

Attention EXO 2: le texte du sujet utilise la variable pieces mais sur la première ligne du programme fourni, on trouve Pieces. Pensez à remettre une minuscule.

D - De l'aide ?

Vraiment aucune difficulté particulière : il suffit de se souvenir qu'un string est itérable, comme un tableau.

On peut donc utiliser la fonction native len et la notation crochets+indice pour obtenir un caractère particulier dans le string.


On rappelle que la méthode gloutonne consiste à faire un choix optimal localement de façon à réduire la taille du problème total.

Ici le choix est de toujours rendre la pièce de plus grande valeur d'abord.

Si on doit rendre 60 cents avec des pièces de 50 cents, 20 cents et 10 cents, on choisit donc localemnet de rendre 50 cents.

On a donc réduit la taille du problème puisqu'il ne reste que 10 cents à rendre. Comment faire ? En faisant un choix encore local : on rend la plus grande pièce possible disponible. Ici 10.

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

2 - Sujet 02

Ancien sujet 09.

A - Thèmes

  • Tableaux dynamiques (dont la méthode append())
  • Tableaux de tableaux
  • Triangle de Pascal (un "classique")

B - Lien local vers le sujet

En cas de panne du site officiel : sujet pdf - exo2 - zip des 2

C - Remarques sur le sujet

-

D - De l'aide ?

La seule difficulté vient du fait que chaque élément du tableau est un tuple : l'indice 0 contient la note et l'indice 1 contient le coefficient.

Il faudra donc faire la somme de chaque note associée à son coefficient pour obtenir la somme totale et la somme des coefficients.

Une fois calculées ces deux sommes, il suffit de renvoyer le total divisé par la somme des coefficients.


L'exercice 2 est plus compliqué que la moyenne des autres sujets : il faut bien comprendre que append() modifie le tableau en place en lui rajoutant une nouvelle case.

Vous pourriez gagner en compréhension en tapant le tableau ainsi :

0 1 2 3 4 5 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

On voit bien que chaque case i de l'étage x+1 correspond aux cases i-1 et i de l'étage x (sauf pour les cases extrêmes qui contiennent toujours 1).

On découpe la création d'un nouveau tableau Ck encodant la ligne en trois parties :

  1. Création d'un nouveau tableau ne contenant que [1].
  2. Calcul et rajout avec append() des cases intermédiaires en utilisant le tableau encodant la ligne du dessous et ses cases i-1 et i.
  3. Rajout de la dernière case pour cette ligne : un [1].

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

3 - Sujet 03

4 - Sujet 04

5 - Sujet 05

6 - Sujet 06

7 - Sujet 07

Ancien sujet 11

A - Thèmes

  • Convertion binaire par la méthode de la division par deux
  • Tableaux dynamiques (type list de Python avec les méthodes append() et reverse() ici)

B - Lien local vers le sujet

En cas de panne du site officiel : sujet pdf - exo2 - zip des 2

C - Remarques sur le sujet

Pas facile.

D - De l'aide ?

On réalise des divisions par deux successives
CLIQUER SUR L'IMAGE pour ANIMER ou STOPPER

Il suffit donc d'une boucle TANT QUE et on rajoute les restes à la fin d'un tableau dynamique.

Une fois qu'on a fini, il ne reste qu'à inverser les éléments dans le tableau, soit à la main, soit en utilisant la méthode reverse() qui modifie le tableau en place. Attention, cette méthode renvoie donc None.


Le principe du tri à bulles basé sur le maximum consiste à partir de la gauche et d'inverser la case actuelle avec la case à sa droite si la droite à droite est plus petite : de cette façon, on déplace progressivement les grandes valeurs vers la droite.

La plus grande va inévitablement se retrouver tout à droite.

On recommence ensuite en partant de l'indice 0 mais on ne va que jusqu'à l'avant-dernière...

Au bout de deux tours, les deux dernières cases contiennent donc les deux plus grandes valeurs.

L'animation de Wikipédia est assez parlante :

Sorting bubblesort anim
Simpsons contributor, CC BY-SA 3.0 Wikimedia Commons

La version numéro deux qu'on vous demande ensuite consiste à faire l'inverse : on déplace progressivement les minimums vers la gauche.

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

8 - Sujet 08

A - Thèmes

  • String
  • Tableaux dynamiques (implémentés via le type list de Python), notamment l'utilisation de append().
  • Récursivité
  • Algorithme glouton (ou méthode gloutonne)
  • Rendu de monnaie (un "classique")

B - Lien local vers le sujet

En cas de panne du site officiel : SUJET 08 version locale

C - Remarques sur le sujet

Attention EXO 2: le texte du sujet utilise la variable pieces mais sur la première ligne du programme fourni, on trouve Pieces : la majuscule a certainement été provoquée par un éditeur de texte jugeant qu'un début de texte doit commencer par une majuscule. Pensez à remettre une minuscule.

Attention BIS EXO 2: le sujet comporte par contre une coquille. La méthode append modifie un tableau dynamique sur place mais ne renvoie rien. Il faut donc apporter cette modification :

1 2
# INSTRUCTION DANS LE PROGRAMME version 2021 return rendu_glouton(arendre - p, solution.append(...),i)

Les lignes pour remplacer la précédente :

1 2 3
# MODIFICATION PROPOSEE solution.append(...) # on modifie solution en place return rendu_glouton(arendre - p, solution, i) # on renvoie juste l'adresse de solution

D - De l'aide ?

Vraiment aucune difficulté particulière : il suffit de se souvenir qu'un string est itérable, comme un tableau.

On peut donc utiliser la fonction native len et la notation crochets+indice pour obtenir un caractère particulier dans le string.


On rappelle que la méthode gloutonne consiste à faire un choix optimal localement de façon à réduire la taille du problème total.

Ici le choix est de toujours rendre la pièce de plus grande valeur d'abord.

Si on doit rendre 60 cents avec des pièces de 50 cents, 20 cents et 10 cents, on choisit donc localemnet de rendre 50 cents.

On a donc réduit la taille du problème puisqu'il ne reste que 10 cents à rendre. Comment faire ? En faisant un choix encore local : on rend la plus grande pièce possible disponible. Ici 10.

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

9 - Sujet 09

A - Thèmes

  • Tableaux dynamiques (dont la méthode append())
  • Tableaux de tableaux
  • Triangle de Pascal (un "classique")

B - Lien local vers le sujet

En cas de panne du site officiel : SUJET 09 version locale

C - Remarques sur le sujet

Attention EXO 1: le calcul de l'exemple est faux. Le résultat est de 12.5 sur cette moyenne.

D - De l'aide ?

La seule difficulté vient du fait que chaque élément du tableau est un tuple : l'indice 0 contient la note et l'indice 1 contient le coefficient.

Il faudra donc faire la somme de chaque note associée à son coefficient pour obtenir la somme totale et la somme des coefficients.

Une fois calculées ces deux sommes, il suffit de renvoyer le total divisé par la somme des coefficients.


L'exercice 2 est plus compliqué que la moyenne des autres sujets : il faut bien comprendre que append() modifie le tableau en place en lui rajoutant une nouvelle case.

On découpe la création d'un nouveau tableau Ck encodant la ligne en trois parties :

  1. Création d'un nouveau tableau ne contenant que [1].
  2. Calcul et rajout avec append() des cases intermédiaires en utilisant le tableau encodant la ligne du dessous et ses cases i-1 et i.
  3. Rajout de la dernière case pour cette ligne : un [1].

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

10 - Sujet 10

A - Thèmes

  • Recherche de maximum
  • Tableaux statiques
  • Piles
  • Tableaux dynamiques
  • Déversement d'une pile dans une autre pile pour inverser les éléments

B - Lien local vers le sujet

En cas de panne du site officiel : SUJET 10 version locale

C - Remarques sur le sujet

Remarque EXO 1: on ne vous demande pas de gérer le tableau vide mais uniquement un tableau d'entiers.

Remarque EXO 2 : le print() n'est là que pour vous montrer ce que contient votre pile. Lors de l'utilisation de cette fonction en production, il faudrait bien évidemment le supprimer. On notera également qu'utiliser t2 = list(t1) revient à faire une copie peu profonde : si les données contenues dans le tableau sont mutables, on pourra modifier le contenu de l'un en modificant le contenu de l'autre. En réalité, cela revient à faire une copie par compréhension. Le jour du bac, préférez t2 = [v for v in t1]

D - De l'aide ?

La seule difficulté vient du fait qu'il faut penser à mémoriser le maximum et la position du maximum.

Comme l'indice doit correspondre à la première occurrence, il faut faire attention à l'inégalité utilisée.


Rien de particulier.

On notera juste que :

  • Pour "gagner" du temps, on manipule directement le tableau dynamique plutôt que de passer par des fonctions d'interface
  • Il faut penser à inverser la pile T3. Pour cela, on la déverse dans une nouvelle pile qu'on nomme T2 en fin de programme.

E - Correction

Evitez de la regarder avant d'avoir fini... : exo1 et exo2

Article publié le 30 01 2022
Dernière modification : 30 01 2022
Auteur : ows. h.