Le passage en Terminale : raisonner avec plusieurs notions
En Première, on découvre des outils. En Terminale, on apprend de plus en plus à choisir lesquels conviennent. Un graphe représente un réseau ; une file aide à l’explorer ; une métrique définit ce qu’on appelle un « meilleur » trajet.
Ce sont ces liens qui rendent la matière passionnante, mais qui peuvent aussi dérouter lorsque les bases restent isolées. Mon rôle est d’aider l’élève à construire une représentation claire du problème avant de passer à une requête, une démonstration ou un programme.
Pour les élèves actuellement en Terminale, l’objectif est le bac NSI 2027, à l’écrit et à la pratique. Les réseaux et les systèmes d’exploitation méritent la même attention que les arbres ou Python.
Le programme complet de NSI Terminale
Ces six rubriques couvrent les contenus du programme annexé au BO spécial du 25 juillet 2019 (nouvel onglet), avec leurs capacités attendues et plusieurs précisions sur les limites du programme. Les notions de Première restent des appuis indispensables.
Chapitre 1 · Programme officiel
Histoire : comprendre l’évolution de l’informatique
Les choix techniques d’aujourd’hui ont une histoire. La séparation entre logiciel et matériel, par exemple, n’a rien d’évident quand on découvre une machine.
- Repères et rôles du logiciel et du matériel
- Compléter les repères de Première, situer événements et protagonistes, et comprendre comment les rôles respectifs des logiciels et des matériels ont évolué. Ce travail traverse l’ensemble du programme.
Comprendre et pratiquer ce domaine
Tous les cours et exercices de Terminale ↗Retrouver ce chapitre dans le programme officiel (PDF, page 3) (nouvel onglet)
Chapitre 2 · Programme officiel
Structures de données : choisir la bonne représentation
Un historique de navigation, une file d’attente et une carte de métro ne se manipulent pas de la même façon. La structure choisie rend certains traitements simples et d’autres coûteux.
- Interface et implémentation
- Décrire les opérations offertes par une structure, indépendamment de la façon dont elle est construite. Comparer plusieurs implémentations d’une même structure, par exemple une file avec un tableau ou avec deux piles.
- Classes, attributs, méthodes et objets
- Définir une classe, créer des objets et utiliser leurs données et opérations. L’héritage et le polymorphisme ne font pas partie des aspects abordés par ce programme.
- Listes, piles et files
- Reconnaître les opérations caractéristiques et choisir entre liste, pile LIFO et file FIFO. Une pile restitue d’abord le dernier élément ajouté ; une file respecte l’ordre d’arrivée.
- Dictionnaires, clés et indices
- Différencier l’accès par indice et l’accès par clé. Comparer la recherche dans une liste et dans un dictionnaire, en reliant l’organisation aux traitements attendus.
- Arbres et arbres binaires
- Modéliser une hiérarchie ; reconnaître racine, nœuds, feuilles et sous-arbres gauche et droit. Calculer taille et hauteur, en annonçant la convention choisie pour la hauteur.
- Graphes
- Distinguer sommets, arêtes et arcs, graphes orientés et non orientés. Passer entre dessin, matrice d’adjacence et listes de successeurs ou prédécesseurs. Le choix d’une représentation dépend de ce que l’on veut faire.
Comprendre et pratiquer ce domaine
- Structures de données : interface et implémentation
- Programmation objet : classes, objets, attributs et méthodes
- Listes comme structures abstraites et listes chaînées
- Les piles : comprendre le fonctionnement LIFO
- Les files : comprendre le fonctionnement FIFO
- Dictionnaires : accès par clé et choix d’une structure
- Arbres et arbres binaires : représenter une hiérarchie
- Modéliser une situation avec un graphe
- Représenter un graphe en machine
Retrouver ce chapitre dans le programme officiel (PDF, page 4) (nouvel onglet)
Chapitre 3 · Programme officiel
Bases de données : des liens, des contraintes et des requêtes
Une médiathèque ne peut pas modifier le nom d’un lecteur dans des centaines de lignes sans risque. Le modèle relationnel organise les faits pour limiter incohérences et répétitions.
- Modèle relationnel
- Comprendre relations, attributs, domaines, clés primaires, clés étrangères et schémas relationnels. Identifier les contraintes de domaine, d’unicité et de référence qui donnent de la cohérence aux données.
- Structure, contenu et anomalies
- Distinguer le schéma d’une base de ses enregistrements. Repérer redondances et anomalies d’insertion, de mise à jour ou de suppression.
- Rôle d’un SGBD
- Expliquer la persistance, la gestion d’accès simultanés, l’efficacité des requêtes et la sécurisation des accès. Le fonctionnement interne détaillé de ces services n’est pas demandé.
- Interroger avec SQL
- Construire et expliquer
SELECT,FROM,WHEREetJOIN. Utiliser au besoinDISTINCT,ORDER BYet des agrégations commeCOUNT; le programme prévoit leur usage sans GROUP BY ni HAVING. - Modifier avec SQL
- Insérer, mettre à jour ou supprimer des données avec
INSERT,UPDATEetDELETE, en tenant compte des contraintes. Oublier unWHEREdans une mise à jour peut changer toutes les lignes.
Comprendre et pratiquer ce domaine
- Comprendre le modèle relationnel
- Clés primaires, clés étrangères et contraintes d’intégrité
- Concevoir une base et repérer les anomalies
- Le rôle d’un système de gestion de bases de données
- SQL : sélectionner, filtrer et trier des résultats
- SQL : comprendre et écrire des jointures
- SQL : compter et calculer avec les agrégations
- SQL : insérer, modifier et supprimer des données
Retrouver ce chapitre dans le programme officiel (PDF, page 5) (nouvel onglet)
Chapitre 4 · Programme officiel
Architectures, systèmes d’exploitation et réseaux
Pourquoi deux programmes peuvent-ils se bloquer mutuellement ? Pourquoi un routeur ne choisit-il pas toujours le chemin qui traverse le moins de machines ? Ces questions se résolvent avec des modèles et des schémas.
- Systèmes sur puce (SoC)
- Reconnaître les composants intégrés et expliquer l’intérêt de leur regroupement en vitesse et en consommation : calcul, mémoire, interfaces, graphisme ou gestion d’énergie. Le smartphone fournit un exemple concret.
- Processus et ressources
- Décrire la création et l’ordonnancement de processus, observer les processus actifs ou en attente et comprendre la gestion des ressources par le système. Un programme stocké et un processus en cours d’exécution sont deux notions différentes.
- Interblocage
- Expliquer une situation où des processus attendent chacun une ressource détenue par un autre. Dessiner les dépendances permet souvent de comprendre le blocage plus vite qu’un long texte.
- Routage RIP et OSPF
- Lire une table de routage et déterminer la route d’un paquet selon la métrique : nombre de sauts pour RIP, coût des routes pour OSPF. Faire le lien avec la recherche de chemins dans un graphe.
- Chiffrement et HTTPS
- Distinguer chiffrement symétrique à clé partagée et asymétrique à clé publique/clé privée. Expliquer comment une méthode asymétrique permet de sécuriser l’échange d’une clé ensuite utilisée pour une communication symétrique. Les détails de négociation SSL ne sont pas exigés.
Comprendre et pratiquer ce domaine
- Les systèmes sur puce : comprendre les SoC
- Processus et gestion des ressources
- L’ordonnancement des processus
- Les interblocages : comprendre et éviter un blocage mutuel
- Tables de routage et protocole RIP
- Le protocole OSPF et le coût des routes
- Le chiffrement symétrique
- Le chiffrement asymétrique
- HTTPS : combiner chiffrement symétrique et asymétrique
Retrouver ce chapitre dans le programme officiel (PDF, page 6) (nouvel onglet)
Chapitre 5 · Programme officiel
Langages et programmation : puissance, organisation et limites
Savoir programmer inclut aussi savoir ce qu’un programme ne peut pas décider, comment organiser plusieurs fichiers et comment anticiper les erreurs.
- Programme comme donnée
- Comprendre qu’un compilateur, un interpréteur ou un autre outil peut lire et transformer un programme comme n’importe quelle autre donnée.
- Calculabilité et décidabilité
- Comprendre que la calculabilité ne dépend pas du langage utilisé et expliquer, sans formalisme lourd, pourquoi le problème de l’arrêt est indécidable. Il ne s’agit pas seulement d’un manque de puissance des ordinateurs.
- Récursivité
- Écrire et analyser une fonction qui s’appelle elle-même, identifier le cas de base et montrer comment les appels s’en rapprochent. Déplier les appels puis remonter les résultats évite de confondre exécution et écriture.
- Modularité
- Utiliser bibliothèques et API avec leur documentation, créer et documenter des modules simples. Une interface claire permet de réutiliser une partie sans connaître tous ses détails internes.
- Paradigmes impératif, fonctionnel et objet
- Reconnaître plusieurs façons de décrire une résolution et choisir une approche adaptée. Un même langage et même un programme peuvent combiner plusieurs paradigmes.
- Bugs, tests et spécifications
- Repérer erreurs de types, effets de bord, accès hors tableau, conditions incomplètes, mauvaises inégalités, flottants et noms trompeurs. Réutiliser spécifications, assertions, documentation et jeux de tests pour prévenir autant que corriger.
Comprendre et pratiquer ce domaine
- Un programme est aussi une donnée
- Calculabilité, décidabilité et problème de l’arrêt
- La récursivité : comprendre les appels et les résultats
- Modules, bibliothèques, API et documentation
- Paradigmes impératif, fonctionnel et objet
- Mutabilité, références et effets de bord
- Déboguer et fiabiliser un programme complexe
Retrouver ce chapitre dans le programme officiel (PDF, page 7) (nouvel onglet)
Chapitre 6 · Programme officiel
Algorithmique : parcourir, décomposer, mémoriser
La bonne stratégie dépend du problème. Explorer un labyrinthe, retrouver un nom et comparer des séquences invitent à des méthodes différentes.
- Arbres binaires et arbres binaires de recherche
- Calculer taille et hauteur ; dérouler parcours préfixe, infixe, suffixe et en largeur. Rechercher et insérer une clé dans un ABR. L’équilibre de l’arbre conditionne la rapidité de la recherche.
- Parcours de graphes
- Parcourir en profondeur ou en largeur, chercher un chemin et repérer des cycles. Suivre les sommets visités est essentiel pour ne pas tourner indéfiniment.
- Diviser pour régner
- Découper un problème, résoudre les sous-problèmes puis combiner les réponses. Le tri fusion permet d’étudier cette stratégie et son coût en n log₂ n dans le pire cas.
- Programmation dynamique
- Éviter de recalculer plusieurs fois les mêmes sous-problèmes en conservant leurs résultats. Le rendu de monnaie ou l’alignement de séquences donnent des exemples ; discuter aussi la mémoire utilisée.
- Recherche textuelle et Boyer-Moore
- Comprendre la recherche d’un motif dans un texte et l’intérêt de préparer des informations sur ce motif pour effectuer des décalages. L’analyse détaillée du coût de Boyer-Moore n’est pas exigible.
- Coûts en temps et en mémoire
- Comparer ordres de grandeur linéaire, logarithmique, quadratique et n log₂ n. Expliquer à quelles hypothèses ces coûts se rapportent, plutôt que de réciter une complexité sans contexte.
Comprendre et pratiquer ce domaine
- Calculer la taille et la hauteur d’un arbre
- Parcourir un arbre binaire
- Arbres binaires de recherche : rechercher et insérer
- Parcourir un graphe en profondeur : DFS
- Parcourir un graphe en largeur : BFS
- Chercher des chemins et détecter des cycles
- Diviser pour régner
- Le tri fusion
- La programmation dynamique
- Recherche textuelle et algorithme de Boyer-Moore
- Coûts en temps et en mémoire
Retrouver ce chapitre dans le programme officiel (PDF, page 8) (nouvel onglet)
Un vrai problème : atteindre les stations d’un réseau
Dans le réseau ci-dessous, combien de liaisons faut-il au minimum pour aller de A à chacune des autres stations ? Pour cette première question, on ignore les coûts écrits sur les liens : chaque liaison compte pour un pas.
À vous de jouer
Explorez le réseau en largeur
Choisissez le départ, puis traitez un sommet à la fois. Suivez la file FIFO et la découverte des distances.
def distances(graphe, depart):
distance = {depart: 0}
file = [depart]
tete = 0
while tete < len(file):
sommet = file[tete]
tete = tete + 1
for voisin in graphe[sommet]:
if voisin not in distance:
distance[voisin] = distance[sommet] + 1
file.append(voisin)
return distance
graphe = {
"A": ["B", "C"], "B": ["A", "D"],
"C": ["A", "E"], "D": ["B", "E"],
"E": ["C", "D"], "F": []
}Préconditions : chaque sommet possède une entrée dans le dictionnaire, les voisins sont des sommets du graphe et le départ existe. tete évite de retirer physiquement le premier élément du tableau.
À chercher : pourquoi cette file donne-t-elle des distances minimales en nombre de liaisons ? À quel moment marque-t-on un sommet comme découvert ? Que devient F ?
Dérouler le parcours en largeur
La file commence avec A. On découvre B et C à distance 1, puis D et E à distance 2. Dans l’ordre des voisins donné, le traitement suit A, B, C, D, E.
Le résultat est {"A": 0, "B": 1, "C": 1, "D": 2, "E": 2}. F est absent : il est inaccessible depuis A, et non situé à distance 0.
La propriété FIFO fait traiter tous les sommets d’une couche avant la suivante. Le premier chemin découvert vers un sommet possède donc un nombre minimal de liaisons. On inscrit sa distance dès sa découverte, avant de l’ajouter à la file, pour éviter les ajouts répétés liés aux cycles.
Cette justification repose sur des liaisons de même poids. Elle ne permet pas de conclure sur le coût total d’un chemin pondéré.
Même réseau, autre objectif : RIP ou OSPF ?
Reprenons le dessin en tenant cette fois compte des coûts. Pour atteindre E depuis A, on peut passer par C ou par B puis D.
| Trajet | Liaisons traversées | Somme des coûts |
|---|---|---|
| A → C → E | 2 | 10 + 10 = 20 |
| A → B → D → E | 3 | 1 + 1 + 1 = 3 |
À chercher : quelle route correspond au critère du plus petit nombre de sauts ? Laquelle minimise le coût fourni ?
À vous de jouer
Le meilleur chemin dépend du critère
Modifiez le coût des liaisons et comparez RIP et OSPF. Les nombres de sauts restent identiques.
Comparer les deux choix sans écrire de code
Avec le critère de nombre de sauts associé à RIP, le premier trajet est préférable : 2 liaisons au lieu de 3. Avec les coûts fournis pour un raisonnement de type OSPF, le second est préférable : coût 3 au lieu de 20.
Dans un sujet, on utilise les métriques et les tables données. Il ne faut pas remplacer « coût minimal » par « le moins de routeurs possible », ni supposer qu’un coût correspond toujours à une distance géographique.
La structure est la même, mais la question change la solution. C’est exactement pourquoi je fais expliciter le critère avant de lancer un calcul.
SQL : une jointure raconte une relation
Imaginons Auteur(id, nom) et Livre(id, titre, annee, id_auteur). Livre.id_auteur référence Auteur.id. Nous cherchons les titres des livres de l’auteur nommé Ada, publiés à partir de 2020.
SELECT Livre.titre
FROM Livre
JOIN Auteur ON Livre.id_auteur = Auteur.id
WHERE Auteur.nom = 'Ada'
AND Livre.annee >= 2020;Avant d’écrire la requête, on peut dessiner la relation entre les deux tables. Cela aide à comprendre pourquoi on relie la clé étrangère à la clé primaire, plutôt que les deux colonnes appelées id par simple ressemblance de nom.
À vous de jouer
Faites parler cette petite base
Choisissez un auteur, une date et une jointure. Les données sont fictives ; deux auteurs portent volontairement le nom Ada.
Ce qu’il faut savoir expliquer
SELECT choisit l’information affichée. La jointure associe chaque livre à son auteur grâce aux clés. WHERE filtre les associations qui respectent les deux conditions.
Dans un modèle où plusieurs auteurs peuvent porter le même nom, la requête peut sélectionner plusieurs personnes : l’unicité du nom n’est pas garantie par une clé primaire portant sur l’identifiant. Repérer cette hypothèse fait partie du raisonnement sur les données.
Projets, explications et préparation du bac
Le programme réserve au moins un quart du temps à la démarche de projet. Concevoir, documenter, tester, coopérer et argumenter font partie de l’apprentissage ; la NSI ne se résume pas à une série d’exercices de syntaxe.
Pour le bac, nous travaillons aussi les raisonnements sur papier : choisir une structure, suivre un parcours, lire une table de routage, justifier une clé ou expliquer un chiffrement. À la pratique, nous apprenons à nous approprier le document et les interfaces fournis.
Le guide du bac NSI 2027 détaille les réflexes propres à chaque famille de questions, avec des exercices et des corrections.
Comment commencer ?
Faisons connaissance
Un échange gratuit de 15 minutes pour parler de vos objectifs et choisir un premier point de travail.
Un premier cours pour avancer
Nous partons d’une difficulté concrète, à votre rythme. Le premier cours est satisfait ou remboursé.
Les séances se déroulent en visio, avec un ordinateur, un micro et une connexion internet. Nous convenons ensemble du rythme qui vous convient.
On fait le point ensemble ?
15 minutes pour parler de votre niveau, de vos objectifs et du prochain pas.
Réserver mon appel gratuit