Aller au contenu

Sciences de l'ingénieur (spécialité) · TerminaleBac

Programmation événementielle : exercices corrigés de Terminale SI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Un programme événementiel est défini par ses réactions aux événements (clic, frappe, déplacement de souris, changement d'état d'une variable) 5.
  • Sa structure type : une boucle principale en deux parties, l'une détecte les événements, l'autre les gère 5.
  • Il s'oppose à la programmation séquentielle, où les instructions s'enchaînent dans un ordre fixé à l'avance 5.
  • Pour chaque exercice : repère les événements, l'état mémorisé, le gestionnaire associé, puis suis l'ordre de traitement.
  • Un gestionnaire doit rester court : pendant qu'il s'exécute, les autres événements attendent.

Comment utiliser ces exercices

Ces exercices portent sur la programmation événementielle, au programme du chapitre « Modéliser et résoudre : information » de la spécialité Sciences de l'ingénieur en Terminale. Ils s'enchaînent par difficulté croissante : les premiers servent à reconnaître les notions, les derniers demandent de raisonner sur le comportement d'un système entier. L'épreuve de spécialité s'appuie sur le programme de Terminale, et les notions de Première peuvent y être mobilisées 2. Ce que tu vois ici te prépare donc à lire un énoncé, à repérer ce qui déclenche une action et à prévoir ce que fait le programme.

Les exercices

Exercice 1 Repérer les événements

★☆☆Environ 8 min

Une application commande le store d'une terrasse depuis un écran. Voici six situations observées pendant son fonctionnement :

  • a. l'utilisateur clique sur le bouton « Monter » ;
  • b. une fonction calcule 12 * 3 ;
  • c. l'utilisateur saisit une consigne au clavier ;
  • d. la souris se déplace au-dessus du bouton « Stop » ;
  • e. une variable passe de 0 à 1 ;
  • f. une boucle for parcourt une liste de 10 valeurs.

1. Lesquelles sont des événements au sens de la programmation événementielle ?

2. Justifie pour chacune des situations écartées.

Indice 1

Relis la définition : un événement vient de l'opérateur ou d'un changement d'état, pas du déroulement normal d'un calcul.

Indice 2

Demande-toi pour chaque ligne : est-ce que quelque chose d'extérieur la déclenche, ou est-ce le programme qui l'exécute simplement ?

Voir la correction pas à pas
  1. Rappelle ce qui compte comme événement : une action de l'opérateur (clic, saisie au clavier, déplacement de souris) ou un changement d'état de variable 5.

  2. Teste a : un clic sur un bouton est une action de l'opérateur. C'est un événement.

  3. Teste c : la saisie au clavier est citée parmi les événements. C'est un événement.

  4. Teste d : le déplacement de la souris en est un aussi, même si le programme choisit de l'ignorer ensuite. C'est un événement.

  5. Teste e : un changement d'état de variable fait partie des événements possibles 5. C'est un événement.

  6. Écarte b et f : ce sont des instructions ordinaires, exécutées quand le programme les atteint. Rien d'extérieur ne les déclenche, elles relèvent d'un déroulement séquentiel.

Les événements sont a, c, d et e. Les situations b et f sont de simples instructions. Le réflexe à garder : un événement se détecte, une instruction s'exécute.

Exercice 2 Compter les passages dans la boucle

★☆☆Environ 8 min

Une interface de supervision tourne selon le schéma d'une boucle principale : une première partie détecte les événements, une seconde les gère. Pendant 10 secondes, l'opérateur effectue 3 clics, 12 frappes de touche et 5 déplacements de souris. Chaque événement détecté est géré exactement une fois.

1. Combien d'événements la partie « gestion » traite-t-elle sur ces 10 secondes ?

2. Quelle partie de la boucle repère qu'une touche vient d'être pressée ?

Indice 1

Chaque événement détecté donne lieu à une seule gestion : il suffit d'additionner.

Indice 2

Pour la question 2, souviens-toi du rôle de chacune des deux parties de la boucle.

Voir la correction pas à pas
  1. Rappelle la structure : la boucle principale comporte une section qui détecte les événements et une section qui les gère 5.

  2. Liste les événements de la période : 3 clics, 12 frappes, 5 déplacements.

  3. Additionne, puisque chacun est géré une fois : 3+12+5=203 + 12 + 5 = 20.

  4. Réponds à la question 2 : c'est la section de détection qui repère la frappe ; la section de gestion n'intervient qu'ensuite pour réagir.

La partie gestion traite 20 événements. Le nombre d'événements dépend de l'opérateur, pas du programme : voilà pourquoi on parle d'un programme qui réagit.

Exercice 3 Un compteur piloté par deux boutons

★☆☆Environ 10 min

Une variable n vaut 0 au départ. Deux gestionnaires sont associés à deux boutons :

def clic_plus():
    global n
    n = n + 1

def clic_moins():
    global n
    n = n - 2

L'opérateur clique 7 fois sur « plus » et 3 fois sur « moins », dans un ordre quelconque. La variable peut devenir négative.

1. Quelle est la valeur finale de n ?

2. L'ordre des clics change-t-il le résultat final ?

3. Imagine qu'on ajoute la règle « n ne descend jamais sous 0 ». Donne une suite de clics où l'ordre devient important.

Indice 1

Chaque clic sur « plus » ajoute 1, chaque clic sur « moins » retire 2 : calcule l'effet cumulé de chaque bouton.

Indice 2

Pour la question 3, cherche une suite qui commence par « moins » avec n = 0.

Voir la correction pas à pas
  1. Identifie les deux événements et leur gestionnaire : un clic sur « plus » modifie l'état n de +1, un clic sur « moins » le modifie de −2. Le programme est défini par ces réactions 5.

  2. Calcule l'effet des 7 clics « plus » : 7×1=77 \times 1 = 7.

  3. Calcule l'effet des 3 clics « moins » : 3×(−2)=−63 \times (-2) = -6.

  4. Additionne à la valeur de départ : 0+7−6=10 + 7 - 6 = 1.

  5. Question 2 : sans plancher, les modifications s'additionnent, et l'addition ne dépend pas de l'ordre. Le résultat est donc toujours 1.

  6. Question 3 : avec le plancher à 0, la suite « moins, puis plus » donne 0 puis 1, alors que « plus, puis moins » donne 1 puis 0 (le résultat −1 est ramené à 0). L'ordre compte désormais.

La valeur finale est 1. Dès qu'un gestionnaire contient une condition (un plancher, un mode), l'ordre d'arrivée des événements peut changer l'état final : c'est pourquoi on trace toujours l'état pas à pas.

Exercice 4 Interroger en boucle ou réagir ?

★★☆Environ 12 min

Un système surveille un bouton d'appel. Deux solutions sont comparées sur une durée de 60 s.

  • Solution A (séquentielle) : le programme teste l'état du bouton toutes les 0,5 s, en boucle.
  • Solution B (événementielle) : une fonction est appelée uniquement quand le bouton est pressé.

L'opérateur appuie 4 fois sur le bouton pendant ces 60 s, et chaque appui est détecté par exactement un test dans la solution A.

1. Combien de tests la solution A effectue-t-elle au total ?

2. Combien de ces tests ne détectent rien ?

3. Combien de fois le gestionnaire de la solution B s'exécute-t-il ?

Indice 1

Le nombre de tests est la durée divisée par la période d'interrogation.

Indice 2

Les tests inutiles sont ceux qui ne tombent pas sur un appui : retire les 4 appuis détectés.

Voir la correction pas à pas
  1. Calcule le nombre de tests de la solution A : 600,5=120\dfrac{60}{0{,}5} = 120.

  2. Retire les tests qui ont détecté un appui : 120−4=116120 - 4 = 116 tests ne détectent rien.

  3. Pour la solution B, le gestionnaire ne s'exécute qu'à la réception d'un événement : il s'exécute 4 fois 5.

  4. Compare : la solution A relève du déroulement séquentiel, auquel s'oppose la programmation événementielle 5. Ici, le programme événementiel se définit par ses réactions, pas par une vérification permanente.

La solution A fait 116 tests inutiles sur 120 ; la solution B réagit 4 fois, juste quand il le faut. Attention à ne pas conclure que A est « fausse » : elle marche, mais elle consomme du temps de calcul pour rien.

Exercice 5 Thermostat et pas à pas

★★☆Environ 14 min

Un thermostat mémorise une consigne consigne = 19.0 (en °C). Trois gestionnaires existent :

def touche_plus():
    global consigne
    consigne = consigne + 0.5

def touche_moins():
    global consigne
    consigne = consigne - 0.5

def clic_reset():
    global consigne
    consigne = 19.0

L'opérateur déclenche, dans cet ordre : plus, plus, plus, moins, reset, moins, moins.

1. Dresse le tableau des valeurs successives de consigne.

2. Quelle est la valeur finale ?

3. Pourquoi l'événement reset rend-il inutiles les quatre premiers événements ?

Indice 1

Construis un tableau à deux colonnes : événement reçu, valeur de la consigne après le gestionnaire.

Indice 2

Observe ce que fait clic_reset : il écrase la valeur, sans tenir compte de l'ancienne.

Voir la correction pas à pas
  1. Pars de l'état initial : consigne = 19,0.

  2. Traite les événements un à un, dans l'ordre d'arrivée : plus → 19,5 ; plus → 20,0 ; plus → 20,5 ; moins → 20,0.

  3. Traite reset : la consigne est réaffectée à 19,0, quelle que soit sa valeur précédente.

  4. Traite les deux derniers : moins → 18,5 ; moins → 18,0.

  5. Réponds à la question 3 : le gestionnaire de reset remplace la valeur au lieu de la modifier. L'état avant lui n'a donc plus d'influence sur la suite.

La consigne finale est 18,0 °C. Un gestionnaire qui remplace l'état (affectation) efface l'historique, alors qu'un gestionnaire qui modifie l'état (ajout) en tient compte : repère toujours lequel des deux tu as devant toi.

Exercice 6 La file d'attente des événements

★★☆Environ 14 min

Quatre événements arrivent presque en même temps, à l'instant t=0t = 0, dans l'ordre : un clic (gestionnaire de 15 ms), une saisie clavier (40 ms), un déplacement de souris (25 ms) puis un clic sur « Stop » (10 ms). On suppose que le traitement d'un événement n'est pas interrompu par un autre : ils sont traités un par un, dans l'ordre d'arrivée.

1. À quel instant le traitement du clic sur « Stop » commence-t-il ?

2. À quel instant se termine-t-il ?

3. Que penser de ce délai si « Stop » doit arrêter un moteur ?

Indice 1

Le traitement d'un événement ne démarre que quand le précédent est terminé : additionne les durées des événements qui le précèdent.

Indice 2

Pour la question 3, compare la durée du gestionnaire « Stop » (10 ms) au temps d'attente avant son départ.

Voir la correction pas à pas
  1. Pose l'hypothèse : un traitement n'est pas interrompu par l'arrivée d'un autre événement 5. Les gestionnaires se suivent donc sans chevauchement.

  2. Cumule les durées avant « Stop » : 15+40+25=8015 + 40 + 25 = 80 ms. Le traitement de « Stop » commence à t=80t = 80 ms.

  3. Ajoute la durée de son gestionnaire : 80+10=9080 + 10 = 90 ms. Il se termine à t=90t = 90 ms.

  4. Interprète : l'ordre de traitement impose 80 ms d'attente avant même de commencer l'arrêt. Pour un ordre de sécurité, c'est lent : on cherche à raccourcir les gestionnaires qui précèdent ou à placer l'arrêt en tête.

  5. Retiens que cette approche ne dit rien sur la durée réelle des gestionnaires : ces valeurs sont des données de l'énoncé, que l'on mesurerait sur le système.

Le clic sur « Stop » est pris en compte à t=80t = 80 ms et son traitement s'achève à 90 ms. Le temps de réaction d'un système événementiel se calcule en additionnant les durées des événements qui passent avant.

Exercice 7 Le gestionnaire qui bloque

★★★Environ 15 min

Dans une application de suivi de capteurs, un gestionnaire clic_exporter contient une boucle qui écrit un fichier et dure 2 s. Pendant ce temps, des événements de saisie arrivent à raison de 5 par seconde. On suppose que le traitement d'un événement n'est pas interrompu par un autre.

def clic_exporter():
    for ligne in donnees:      # boucle longue, 2 s au total
        ecrire(ligne)

1. Combien d'événements de saisie se sont accumulés quand clic_exporter se termine ?

2. Quel symptôme l'utilisateur observe-t-il pendant ces 2 s ?

3. Propose une manière de corriger le problème sans supprimer la fonction d'export.

Indice 1

Les événements qui arrivent pendant le gestionnaire ne sont pas traités tout de suite : ils attendent.

Indice 2

Pour la question 3, pense à découper le travail en petits morceaux plutôt qu'en un seul long traitement.

Voir la correction pas à pas
  1. Rappelle la règle : tant qu'un gestionnaire s'exécute, il n'est pas interrompu par un autre événement 5. Les saisies sont mises en attente.

  2. Calcule l'accumulation : 2×5=102 \times 5 = 10 événements en attente à la fin de l'export.

  3. Décris le symptôme : l'interface semble figée, car la section de gestion ne reprend la main qu'à la fin du gestionnaire ; les 10 saisies sont traitées d'un coup ensuite.

  4. Choisis une correction : découper l'export en lots courts (par exemple 100 lignes par appel) et relancer le lot suivant par un nouvel événement, afin que les saisies passent entre deux lots.

  5. Vérifie la cohérence : chaque lot est un petit gestionnaire, la boucle principale peut alors détecter et traiter les saisies entre deux lots.

10 événements s'empilent pendant l'export. La règle de conception à retenir : un gestionnaire doit rester court, sinon il gèle tout le reste du programme.

Exercice 8 Concevoir la commande d'un portail

★★★Environ 20 min

Un portail automatique est commandé par un programme événementiel. Les sources d'événements sont : la télécommande (bouton « ouvrir/fermer »), un capteur d'obstacle, deux capteurs de fin de course (portail entièrement ouvert, entièrement fermé).

1. Dresse la liste des événements et décris en une phrase le gestionnaire de chacun.

2. Quelle variable d'état le programme doit-il mémoriser pour que le bouton « ouvrir/fermer » ait la bonne action ?

3. On mesure que chaque gestionnaire dure 8 ms. Combien d'événements par seconde le système peut-il traiter au maximum, en les traitant un par un ?

4. Pourquoi le gestionnaire du capteur d'obstacle doit-il être particulièrement court ?

Indice 1

Pour la question 2, le même bouton déclenche deux actions différentes selon la situation du portail.

Indice 2

Pour la question 3, convertis 1 seconde en millisecondes avant de diviser.

Voir la correction pas à pas
  1. Liste les événements : appui sur la télécommande, détection d'obstacle, fin de course « ouvert », fin de course « fermé ». Ce sont des changements d'état du système qui déclenchent des réactions, et le programme se définit par elles 5.

  2. Associe les gestionnaires : télécommande → lancer l'ouverture ou la fermeture selon l'état ; obstacle → arrêter le moteur ; fin de course ouvert → couper le moteur et passer l'état à « ouvert » ; fin de course fermé → couper le moteur et passer l'état à « fermé ».

  3. Identifie l'état à mémoriser : une variable etat valant « ouvert », « fermé », « en ouverture » ou « en fermeture ». Sans elle, le même bouton ne saurait pas quoi faire.

  4. Calcule le débit maximal : 1 000 ms÷8 ms=1251\,000 \text{ ms} \div 8 \text{ ms} = 125 événements par seconde, puisque les traitements ne se chevauchent pas 5.

  5. Justifie la question 4 : un événement d'obstacle arrive parmi d'autres ; plus les gestionnaires qui le précèdent sont longs, plus l'arrêt du moteur est retardé. Un gestionnaire d'obstacle court, qui ne fait que couper le moteur, limite ce délai.

Le système traite au plus 125 événements par seconde. Dans une conception réelle, on repère d'abord les événements et l'état à mémoriser, puis on garde des gestionnaires courts, surtout ceux qui touchent à la sécurité.

Les questions qu'on se pose

Comment savoir si un énoncé relève de la programmation événementielle ?

Cherche ce qui déclenche les actions. Si le programme réagit à des clics, des frappes, des déplacements de souris ou des changements de variable, et se définit surtout par ces réactions, c'est du événementiel 5. Si les instructions s'enchaînent dans un ordre fixé d'avance, sans attendre quoi que ce soit, c'est de la programmation séquentielle, à laquelle l'événementiel s'oppose 5.

Faut-il un langage particulier pour écrire un programme événementiel ?

Non. La programmation événementielle peut être réalisée dans n'importe quel langage ; elle est seulement plus facile à écrire dans un langage de haut niveau 5. Certains environnements de développement génèrent même automatiquement le code des tâches récurrentes de gestion des événements 5. À l'épreuve, c'est le raisonnement qui est évalué : quels événements, quel état, quel gestionnaire.

Sources

Programme visé : Bulletin officiel spécial n°8 du 25 juillet 2019 — Sciences de l'ingénieur, classe terminale · education.gouv.fr

  1. Bulletin officiel spécial n°8 du 25 juillet 2019 — Sciences de l'ingénieur, classe terminale, education.gouv.fr. Consulté le 7 novembre 2026.
  2. Éduscol STI — Épreuve de l'enseignement de spécialité Sciences de l'ingénieur (classe de Terminale), eduscol.education.fr. Consulté le 7 novembre 2026.
  3. Éduscol STI — Programme Sciences de l'ingénieur (réforme 2019), eduscol.education.fr. Consulté le 7 novembre 2026.
  4. Bulletin officiel n°24 du 11 juin 2015 — Enseignement de spécialité SI (classe terminale S), education.gouv.fr. Consulté le 7 novembre 2026.
  5. Programmation événementielle, Wikipédia. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page