Le strict essentiel pour décrocher le 10 en NSI
Cet outil ne couvre pas tout le programme — il couvre ce qui tombe le plus souvent à l'écrit, dans l'ordre de rentabilité. La logique : maximiser les points faciles (SQL, POO) avant de gratter le reste.
Chaque module = un mini-cours + un QCM corrigé + des exercices guidés (réponses à révéler) + une fiche « à retenir ». Les pourcentages indiquent la fréquence d'apparition estimée dans les annales 2021-2025.
! Comment utiliser ce site
Tu bloques vite ? Normal. La règle : ne lis jamais une correction sans avoir essayé d'abord. Sur chaque QCM, clique ta réponse avant de voir l'explication. Sur chaque exercice, écris ta réponse sur papier, PUIS déplie la solution. C'est en te trompant maintenant que tu retiens pour le jour J.
Les 3 exercices de l'écrit sont tous obligatoires (plus de choix depuis 2023). Mais tu peux viser ~80% des points sur SQL et POO (les plus faciles et les plus répétitifs), et ~30-40% sur le reste. Ça te place mécaniquement autour de 10.
# Les 6 modules, par priorité
« Moins probable » ne veut pas dire « impossible ». Un thème rare peut constituer un exercice entier (= ~33% de la note d'écrit). Ces 6 modules couvrent l'essentiel, mais si tu as le temps, jette quand même un œil aux tris et aux systèmes d'exploitation. Et garde en tête : ces % sont des estimations issues des annales, pas une garantie.
01 Bases de données & SQL ≈ 85% des sujets
C'est le module le plus rentable de toute l'épreuve. Les questions reviennent presque à l'identique chaque année. Une fois les 6 mots-clés en tête, tu réponds quasi mécaniquement.
Une base relationnelle, c'est quoi ?
Une base de données = un ensemble de tables (aussi appelées relations). Pense à un classeur tableur :
- Une table = une feuille (ex : Eleve, Classe)
- Une ligne = un enregistrement (un élève précis)
- Une colonne = un attribut (nom, âge…)
La colonne qui identifie de façon unique chaque ligne. Deux élèves peuvent s'appeler « Martin », mais leur id diffère.
PRImaire = PRIvée : elle n'appartient qu'à UNE seule ligne.
Une colonne qui pointe vers la clé primaire d'une autre table. C'est le « fil » qui relie deux tables entre elles.
étrangère = elle vient d'ailleurs : elle voyage vers une autre table.
Les 6 mots-clés, dans l'ordre obligatoire
« SELECT — FROM — WHERE — GROUP BY — HAVING — ORDER BY »
Astuce pour l'ordre : « Sache Filtrer Where, Groupe Habilement, Ordonne ». Et retiens surtout : SELECT … FROM … WHERE = le trio de base, qui suffit pour 90% des questions.
| Mot-clé | Rôle | Traduction mentale |
|---|---|---|
SELECT | quelles colonnes afficher | « je veux voir… » |
FROM | dans quelle table | « …dans le tableau… » |
WHERE | condition de filtrage | « …mais seulement si… » |
ORDER BY | trier le résultat | « …et range-moi ça » |
GROUP BY | regrouper pour compter | « …par paquets » |
JOIN … ON | relier deux tables | « …en croisant 2 tables » |
Fiche réflexe : reconnaître la question → recracher le motif
| Tu vois dans l'énoncé… | Tu écris… |
|---|---|
| « afficher / quels sont » | SELECT … FROM … |
| « dont / qui ont / tel que » | WHERE |
| « toutes les infos » | SELECT * |
| « trier / classer / ordonner » | ORDER BY (+ ASC ↑ / DESC ↓) |
| « combien / nombre de » | COUNT(*) |
| « pour chaque » | GROUP BY |
| condition sur un comptage | HAVING (pas WHERE !) |
| infos dans 2 tables | JOIN … ON cléÉtr = cléPrim |
| « ajouter » | INSERT INTO … VALUES … |
| « modifier » | UPDATE … SET … WHERE … |
| « supprimer » | DELETE FROM … WHERE … |
ASC = ASCenseur qui monte ↑ (croissant) · DESC = DEScente ↓ (décroissant)
Texte → réflexe : « combien » → COUNT · « pour chaque » → GROUP BY
Un UPDATE ou un DELETE SANS WHERE modifie/supprime TOUTE la table. Les correcteurs vérifient systématiquement la présence du WHERE.
Le JOIN — la recette en 3 temps
C'est la seule partie un peu technique, mais elle tombe très souvent. Le motif est toujours identique :
SELECT Eleve.nom, Classe.nom
FROM Eleve
JOIN Classe ON Eleve.id_classe = Classe.id;
1️⃣ FROM table1 → 2️⃣ JOIN table2 → 3️⃣ ON cléÉtrangère = cléPrimaire
« ON relie les deux bouts du fil. » Le ON, c'est toujours cléÉtrangère = cléPrimaire.
? QCM — teste tes réflexes
Base utilisée : Livre(id, titre, annee, prix). Clique une réponse pour voir la correction.
✎ Exercices guidés
Base : Livre(id, titre, annee, id_auteur, prix) · Auteur(id_auteur, nom, nationalite) · Emprunt(id_emprunt, id_livre, date)
📌 À retenir — SQL
- Ordre obligatoire :
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY SELECT *= toutes les colonnes ·COUNT(*)= compter les lignes- Texte entre guillemets simples (
'française'), nombres sans guillemets (> 2000) - WHERE filtre AVANT le regroupement · HAVING filtre APRÈS (condition sur un COUNT)
- JOIN = relier 2 tables sur
cléÉtrangère = cléPrimaire - Toujours un
WHEREdans UPDATE et DELETE, sinon toute la table y passe - ASC = croissant ↑ · DESC = décroissant ↓
02 Programmation orientée objet ≈ 75% des sujets
Depuis 2023, la POO est presque partout. Bonne nouvelle : on te demande surtout de compléter du code fourni, pas d'inventer. Une fois le « squelette » d'une classe compris, tu le reconnais dans tous les sujets.
L'idée : ranger des données ET leurs actions ensemble
Une classe est un moule. Un objet (ou instance) est ce qu'on fabrique avec le moule. Exemple : la classe Chien est le concept ; Rex et Médor sont deux objets fabriqués à partir de ce moule.
Classe = moule à gâteaux. Objet = le gâteau. Un seul moule, autant de gâteaux qu'on veut, chacun avec ses propres caractéristiques.
Le squelette à connaître par cœur
class Chien:
def __init__(self, nom, age): # le constructeur
self.nom = nom # attribut
self.age = age # attribut
def aboyer(self): # méthode
return "Wouf !"
rex = Chien("Rex", 3) # instanciation
print(rex.nom) # accès attribut → Rex
print(rex.aboyer()) # appel méthode → Wouf !
Constructeur : la méthode __init__, appelée automatiquement à la création de l'objet.
Attribut : une variable attachée à l'objet (self.nom).
Méthode : une fonction définie dans la classe (elle prend toujours self en 1er paramètre).
Instance / instancier : un objet créé / l'action de le créer (Chien("Rex", 3)).
1. Toute méthode commence par def et prend self en premier.
2. Tout attribut s'écrit self.qqch à l'intérieur de la classe.
3. Le constructeur s'appelle toujours __init__ (deux underscores de chaque côté).
Oublier self en paramètre d'une méthode · écrire nom au lieu de self.nom dans la classe · oublier les parenthèses à l'appel d'une méthode (rex.aboyer au lieu de rex.aboyer()).
L'encapsulation (souvent une question de cours)
Idée : regrouper les données (attributs) et les fonctions qui agissent dessus (méthodes) dans un même objet, et y accéder via des méthodes plutôt que directement. On parle de getter (lire un attribut) et setter (le modifier).
class CompteBancaire:
def __init__(self, solde):
self.solde = solde
def get_solde(self): # getter : lire
return self.solde
def deposer(self, montant): # setter : modifier
self.solde = self.solde + montant
? QCM — POO
✎ Exercices guidés
📌 À retenir — POO
- Classe = moule, objet = ce qu'on fabrique avec
- Le constructeur s'appelle toujours
__init__(self, …) - Attribut =
self.nom· Méthode = fonction avecselfen 1er paramètre - Instancier = créer un objet :
rex = Chien("Rex", 3) - Accès :
objet.attributetobjet.methode()(parenthèses !) - Encapsulation : getter (lire) + setter (modifier) les attributs
03 Récursivité & structures linéaires ≈ 70% des sujets
La récursivité fait peur mais repose sur un schéma toujours identique. Et les piles/files sont des structures simples avec un vocabulaire à connaître. Ensemble, ils apparaissent dans 2 sujets sur 3.
Récursivité : une fonction qui s'appelle elle-même
Toute fonction récursive a exactement deux parties :
- Le cas de base : la condition d'arrêt (sinon ça tourne à l'infini)
- Le cas récursif : la fonction s'appelle elle-même sur un problème plus petit
Chaque poupée en contient une plus petite, jusqu'à la plus petite qu'on ne peut plus ouvrir (= cas de base). Sans cette dernière poupée, on ouvrirait à l'infini.
def factorielle(n):
if n == 0: # cas de base
return 1
else: # cas récursif
return n * factorielle(n - 1)
Devant N'IMPORTE quel exercice de récursivité, écris d'abord ce gabarit, puis remplis les trous :
def f(n):
if # condition d'arrêt :
return # valeur simple
else:
return # … f(plus petit) …
Les piles (LIFO) et les files (FIFO)
Pile (stack) : dernier entré, premier sorti — comme une pile d'assiettes. On ajoute/retire par le haut.
File (queue) : premier entré, premier sorti — comme une file d'attente. On ajoute d'un côté, on retire de l'autre.
Pile = LIFO = Last In First Out → pile d'assiettes (tu prends celle du dessus).
File = FIFO = First In First Out → file à la boulangerie (premier arrivé, premier servi).
| Structure | Ajouter | Retirer | Image |
|---|---|---|---|
| Pile (LIFO) | empiler / push | dépiler / pop | 🍽️ assiettes |
| File (FIFO) | enfiler / enqueue | défiler / dequeue | 🥖 file d'attente |
? QCM — Récursivité & piles/files
✎ Exercices guidés
📌 À retenir — Récursivité & structures
- Récursivité = cas de base (arrêt) + cas récursif (appel sur plus petit)
- Sans cas de base → boucle infinie → erreur
- Pile = LIFO (dernier entré, premier sorti) : empiler / dépiler
- File = FIFO (premier entré, premier sorti) : enfiler / défiler
- Réflexe : écris d'abord le squelette
if base … else … f(plus petit)
04 Arbres binaires ≈ 65% des sujets
Très fréquent depuis 2023, souvent couplé avec POO et récursivité. Le cœur : le vocabulaire, les 3 parcours et la recherche dans un ABR.
Le vocabulaire (questions de cours faciles)
Nœud : un élément de l'arbre · Racine : le nœud tout en haut · Feuille : un nœud sans enfant · Arbre binaire : chaque nœud a au plus 2 enfants (gauche / droit).
Taille : nombre total de nœuds · Hauteur : nombre de niveaux (longueur du plus long chemin racine→feuille).
Un arbre en info est à l'envers : la racine est en haut, les feuilles en bas. Binaire = 2 branches max par nœud.
Les 3 parcours en profondeur (ça tombe presque à chaque fois)
Préfixe : racine AVANT (Racine → Gauche → Droite)
Infixe : racine AU MILIEU (Gauche → Racine → Droite)
Postfixe : racine APRÈS (Gauche → Droite → Racine)
PRÉfixe = racine en PREmier · INfixe = racine IN (dedans, au milieu) · POSTfixe = racine en POST (après, à la fin).
Bonus : un parcours infixe d'un ABR donne les valeurs dans l'ordre croissant. ⭐
L'arbre binaire de recherche (ABR)
Pour chaque nœud : tout ce qui est à GAUCHE est plus petit, tout ce qui est à DROITE est plus grand. C'est ce qui rend la recherche rapide (on élimine la moitié à chaque étape).
class Noeud:
def __init__(self, valeur):
self.valeur = valeur
self.gauche = None
self.droite = None
? QCM — Arbres
✎ Exercices guidés
📌 À retenir — Arbres binaires
- Racine en haut, feuilles en bas · binaire = 2 enfants max
- Hauteur = nb de niveaux · Taille = nb de nœuds
- Préfixe (R-G-D) · Infixe (G-R-D) · Postfixe (G-D-R)
- Parcours infixe d'un ABR = valeurs triées croissantes
- ABR : gauche < nœud < droite
- Les parcours s'écrivent presque toujours de façon récursive
05 Réseaux & routage ≈ 55% des sujets
Beaucoup de questions de cours = des points à prendre sans écrire une ligne de code. Le cœur attendu : adressage IP et les deux protocoles de routage RIP et OSPF.
Adresse IP & masque
Adresse IP : identifiant d'une machine sur le réseau (ex : 192.168.1.10).
Masque de sous-réseau : sépare la partie « réseau » de la partie « machine ». Avec /24, les 24 premiers bits identifient le réseau.
Les 2 protocoles de routage à connaître
| RIP | OSPF | |
|---|---|---|
| Critère choisi | nombre de sauts (routeurs traversés) | coût des liens (lié au débit) |
| Type | vecteur de distance | état de liens |
| Choisit… | le chemin le plus court (moins de sauts) | le chemin le plus rapide (meilleur débit) |
| Limite | max 15 sauts | plus complexe, plus efficace |
RIP compte les sauts (R-I-P → « Routes : I count Pas » = je compte les pas). Il prend la route avec le moins d'étapes, même si elle est lente.
OSPF regarde le débit (« Open Shortest Path First ») → il prend la plus rapide, même avec plus d'étapes.
RIP peut choisir une route lente si elle a moins de sauts. OSPF, lui, peut préférer une route avec plus de routeurs si le débit total est meilleur. L'exercice oppose presque toujours ces deux choix sur un même schéma.
? QCM — Réseaux
✎ Exercices guidés
📌 À retenir — Réseaux
- IP = identifiant machine · masque
/24= 24 bits pour le réseau - RIP = nombre de sauts (le plus court), max 15 sauts
- OSPF = coût/débit des liens (le plus rapide)
- Piège : RIP ≠ OSPF peuvent choisir des routes différentes sur le même réseau
- Table de routage : pour chaque destination, le prochain routeur (next hop)
06 Graphes ≈ 35% · en hausse
Quasi absents en 2021-2022, ils sont devenus fréquents depuis 2024. Le cœur : les deux représentations (matrice / liste d'adjacence) et les deux parcours (BFS / DFS).
Vocabulaire
Sommet (ou nœud) : un point du graphe · Arête : un lien entre deux sommets · Graphe orienté : les liens ont un sens (flèches) · Non orienté : les liens vont dans les deux sens.
Les 2 représentations
Matrice d'adjacence : un tableau 2D où M[i][j] = 1 s'il y a une arête de i vers j, sinon 0.
Liste d'adjacence : un dictionnaire où chaque sommet pointe vers la liste de ses voisins. Ex : {'A':['B','C'], 'B':['A']}.
Matrice = tableau de cases (0/1), pratique pour vérifier vite si 2 sommets sont reliés.
Liste = carnet d'adresses : chaque sommet a la liste de ses voisins.
Les 2 parcours
BFS (parcours en largeur) : on explore niveau par niveau, autour du sommet de départ. Utilise une FILE.
DFS (parcours en profondeur) : on s'enfonce le plus loin possible avant de revenir. Utilise une PILE (ou la récursivité).
BFS = Breadth (largeur) = File (FIFO) · DFS = Depth (profondeur) = Pile (LIFO).
Astuce : BFS et Boulangerie (file) ↔ DFS et Dessous de la pile.
? QCM — Graphes
✎ Exercices guidés
📌 À retenir — Graphes
- Sommet + arête · orienté (flèches) vs non orienté
- Matrice d'adjacence :
M[i][j]=1si arête · Liste : dico de voisins - BFS = largeur = FILE (FIFO) · DFS = profondeur = PILE (LIFO)
- Le choix de la structure (file/pile) détermine le type de parcours
📅 Ton planning sur 10 jours
Calibré pour ~1-2h par jour. La logique : on bétonne d'abord les modules les plus rentables (SQL, POO), puis on grignote le reste, et on garde les 2 derniers jours pour des sujets complets en conditions réelles.
Mieux vaut maîtriser 4 modules à fond que survoler les 6. Si tu prends du retard, sacrifie Graphes et Réseaux avant SQL et POO. Jamais l'inverse.
SQL — le cours + les réflexes
Lis le module SQL en entier, apprends les 6 mots-clés et la fiche réflexe. Fais le QCM.
module 01~1h30SQL — les exercices + le JOIN
Refais les exercices guidés sans regarder. Insiste sur GROUP BY/HAVING et le JOIN.
module 01JOINPOO — le squelette
Apprends le squelette d'une classe par cœur. Recopie-le 3 fois de mémoire. QCM + 2 exercices.
module 02__init__POO — compléter du code + révision SQL
Exercices POO restants. Puis 20 min de révision flash SQL (les réflexes).
module 02+ révision 01Récursivité & piles/files
Le squelette récursif + LIFO/FIFO. C'est le jour le plus technique : prends ton temps.
module 03Arbres binaires
Vocabulaire + les 3 parcours (mnémo PRÉ/IN/POST) + ABR. QCM + exercices.
module 04Réseaux (par-cœur) + révision POO
RIP vs OSPF, adressage. Beaucoup de cours = points faciles. Puis révision flash POO.
module 05+ révision 02Graphes + révision récursivité
Représentations + BFS/DFS (réutilise file/pile du module 03). Révision flash récursivité.
module 06+ révision 03SUJET BLANC en conditions réelles
Un sujet d'annale complet, 3h30 chrono (ou découpé en 2 fois). Métropole 2024 ou 2025.
annalechronoCorrection + révision des « À retenir »
Corrige ton sujet blanc, repère tes erreurs. Relis les 6 fiches « À retenir ». Au lit tôt !
bilanfichesLis les 3 exercices dans les 5 premières minutes. Commence par celui qui te rassure le plus (effet de confiance). Sur chaque question SQL/POO, applique tes réflexes sans réfléchir. Garde ~1h pour l'exercice le plus dur. Et ne laisse jamais une question de cours vide : il y a souvent des points à gratter juste en récitant une définition.