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.

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.

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, WHERE et JOIN. Utiliser au besoin DISTINCT, ORDER BY et des agrégations comme COUNT ; 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, UPDATE et DELETE, en tenant compte des contraintes. Oublier un WHERE dans une mise à jour peut changer toutes les lignes.

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.

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.

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.

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.

Un réseau à deux chemins de A vers EA est relié à B et C. B à D. C à E. D à E. Les coûts A-B, B-D et D-E valent 1 ; A-C et C-E valent 10. F est isolé.1111010ABCDEF
Les nombres sur les liens sont des coûts. Compter les liens et additionner leurs coûts répond à deux questions différentes.
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.

Deux critères, deux choix de route
TrajetLiaisons traverséesSomme des coûts
A → C → E210 + 10 = 20
A → B → D → E31 + 1 + 1 = 3

À chercher : quelle route correspond au critère du plus petit nombre de sauts ? Laquelle minimise le coût fourni ?

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.

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 ?

01

Faisons connaissance

Un échange gratuit de 15 minutes pour parler de vos objectifs et choisir un premier point de travail.

02

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