L'exercice d'algorithmique au Baccalauréat : sessions de septembre 2018

Résumé de l'épisode précédent :

Fin 2017, l'inspection générale recommandait

  • de ne plus mettre d'affichage dans les algorithmes
  • de ne plus mettre d'instruction d'entrée de données dans les algorithmes
  • de noter l'affectation par une flèche vers la gauche
  • de définir les variables dans l'énoncé, en dehors de l'algorithme, et d'y poser des questions comme «quelle est la valeur de telle variable à la fin de l'exécution de l'algorithme ?»

Cette recommandation a été peu suivie au BTS 2018 mais assez largement au bac 2018, comme on l'a vu dans un article précédent. Dans l'épisode d'aujourd'hui, on va voir dans quelle mesure la recommandation a été suivie lors de la session de septembre. Les algorithmes du bac seront rédigés avec l'outil pseudo-code de CaRMetal, lequel présente ces différences minimes par rapport à la rédaction directe de l'algorithme:

  • On bénéficie de la coloration syntaxique qui fournit, en quelque sorte, des sujets en couleur
  • Les algorithmes sont exécutables et on a, en prime, la réponse à la question, en plus du sujet en couleur
  • Les sous-structures (instructions répétées en boucle par exemple) sont indentées (reculées, en l'ocurrence, de 3 espaces) ce qui permet de considérer le pseudocode de CaRMetal comme une transition entre le pseudocode et Python, qui utilise une syntaxe similaire.

nomVar

Bac ST2S:

Là encore, aucun algorithme, la série ST2S semble être la seule à être privée d'algorithmes pour l'instant. Ce dont les élèves ne se plaignent pas trop, d'ailleurs.

Bac STMG: 

En Polynésie, on vend des téléviseurs, et on cherche à connaître l'impact de la publicité sur les ventes. Pour cela, on incrémente la variable x (désignant, comme son nom l'indique, la durée de la campagne publicitaire) jusqu'à ce que la variable y (désignant, comme son nom l'indique, la probabilité qu'une personne connaisse la marque du téléviseur) dépasse le seuil de 0,75.

Pour faire l'exercice avec CaRMetal, on rajoute dans la figure, un script (onglet JavaScript) puis on coche les cases permettant de programmer en français. Ensuite on écrit à la première ligne, le mot pseudo-code. Après cela, la programmation est aisée, et le programme s'écrit directement en pseudo-code :

  1. Entrer au clavier le texte x <- 0 pour initialiser la variable x
  2. Entrer au clavier le texte y <- 0 pour initialiser la variable y
  3. Cliquer dans le menu en bas à droite, sur Tant que pour voir apparaître la trame d'une boucle tant que. Modifier sa condition pour qu'elle devienne y<0.75 et remplacer les i par des x pour avoir x <- x+1.
  4. Remplacer les pointillés (sans modifier l'indentation) en entrant le texte y <- 9*x/(10*x+40)
  5. puis couper-coller la ligne avec x ⟵ x+1 pour la placer au-dessus de celle sur y, pour optimiser la ressemblance avec l'énoncé. Pour la même raison, ajouter en bas (sans indentation cette fois-ci)  le texte fin Tant que.
  6. Hors algo mais pas hors sujet, l'affichage de la valeur finale de x, en cliquant sur Affichage puis en remplaçant le texte affiché par x.

On se retrouve avec ce script et la réponse à la question, obtenue en cliquant sur le feu vert:

 

Hormis les première et dernière ligne, on a donc un algorithme très ressemblant avec celui de l'énoncé, et on peut répondre tranquillement à la question a (la valeur finale de x est 20) mais pas à la question b (que signifie ce 20 ?). Cette variante permettrait de mieux comprendre le lien entre l'algorithme et le problème considéré:

On objectera qu'avec cette version la question b devient trop facile pour évaluer la compétence modéliser au bac STMG. Nous contre-objecterions alors que nommer des variables d'une manière plus compréhensible que x et y, est une bonne habitude de programmation, et qu'il n'est pas totalement ridicule de donner de bonnes habitudes de programmation en bac technologique... 

Dans la suite de cet article, on omettra de répéter les étapes détaillées de la construction des algos/pseudo-codes et on se refèrera, sauf exception,  à ce sujet plutôt typique des attendus du bac.

 Aux Antilles on  s'inquiète de la croissance exponentielle de la population française. On modélise celle-ci par une suite géométrique de raison 1,005. Le terme général de la suite représente la population française, on le note U (comme popUlation) Le nombre d'années écoulées depuis 2017 est noté N (comme nénufar) . Ceci dit, l'énoncé est un peu original, puisqu'on donne les lignes à rajouter dans l'algorithme incomplet, et il s'agit essentiellement de savoir où placer chacune des briques manquantes.

On demande «qu’après exécution, la variable N contienne le rang de l’année recherchée». Admettons. Mais si au lieu de s'appeler N la variable s'était appelée rang ou année la question aurait-elle été vraiment trop simple au bac STMG où il n'est pas certain qu'on passe beaucoup de temps à programmer? Au fait, sur la signification du rang N, on nous dit au début que «on admet que la population française augmente de 0,5 % par an à partir de l’année 2012 et jusqu’en 2030». De fait, N est initialisé à 0 et non à 2012... 

Avec cet exemple précis, on se propose de comparer avec la version Sofus (ou plus précisément SofusPy):

 

Le sujet de métropole s'intéressait à l'augmentation de la production d'énergies renouvelables laquelle production se note U (comme ubiquité). Mais ce n'est pas tout, la variable U contient en fait les termes successifs de la suite un «la production mondiale des énergies renouvelables, en milliard de TEP, pendant l’année (2015+n)». Le rang du terme un est donc noté n dans l'énoncé mais K (comme Kojak) dans l'algorithme.

 Certes, sur les calculatrices les plus courantes (vous savez, celles fabriquées au Texas ou au Japon), les noms de variables d'une seule lettre comme K ou U ont le mérite d'exister (enfin, disons qu'elles existent...)
Mais selon l'évolution naturelle (des programmes) il serait attendu que "la fonction crée l'organe", et pas l'inverse.

L'énoncé pense aux candidats pauvres qui n'ont pas de calculatrice programmable (ou les moyens de la programmer) : «Après exécution de cet algorithme, la variable K contient la valeur 39». L'utilisation de la calculatrice n'était donc nullement nécessaire et les noms de variables compatibles avec icelle, non plus !

Gageons alors que ce problème, dans un futur bac STMG, pourrait ressembler à ceci :

Après exécution de ce script Python, la variable année contient la valeur 2054:

	renouvelables = 1.82
	année = 2015
	while renouvelables < 4.84:
		renouvelables *= 1.026
		année += 1

Interpréter, dans le contexte de l'exercice, cette valeur ainsi que le contenu de la variable renouvelables.

Le prix de l'essence à la pompe aurait baissé et cette baisse exponentielle ferait l'objet d'un exercice.

Bac STL

Le sujet portait sur une salutaire baisse de la consommation d'eau (des petits gestes suffisent, comme mettre moins d'eau dans le pastis). La consommationne ne baisse que dans une ville, et bien entendu, elle s'appelle u (comme Marseille)... Or il advient que, en 2017, u est égal à 50 (m3 par habitant de la ville). On souhaite savoir

  • à partir de quelle année u sera inférieure à 47 (demandez pas pourquoi)
  • à partir de quand la consommation totale (cumulée) sera supérieure à 500.

Comme de bien entendu, l'année en cours est représentée par une variable n laquelle ne vaut d'ailleurs pas l'année en cours mais sa différence avec l'année 2017. Utiliser une variable appelée année et initialisée à 2017 aurait été trop simple, sans doute.

Bref, pour savoir quelle est l'année à partir de laquelle les habitants sont enfin devenus raisonnables en économisant 6% de leur consommation initiale:

 

Et pour savoir à partir de quand la consommation totale aura dépassé 500 m3 par habitant:

Noter que dans les nouveaux programmes de section technologique, cet algorithme de sommation figure de façon explicite.

Bac STI2D

 En Polynésie, on apprend que «La consommation de soins et de biens médicaux (CSBM) en France comprend les soins hospitaliers, les soins ambulatoires (médecins, dentistes, auxiliaires médicaux, laboratoires d’analyse, thermalisme), les transports sanitaires, les médicaments et les autres biens médicaux (optique, prothèses, petit matériel et pansements).» On comprend que les 4 lettres CSBM aient été choisies, par souci de concision, pour désigner tout ça. Sauf que ces 4 lettres étaient apparemment 3 de trop et on a préféré désigner la CSBM par la lettre ... V (comme Vitalité sans tabac). Et comme l'algorithme a pour but de répondre à la question «En quelle année la CSBM dépassera-t-elle les 300 milliards d’euros ?», on imagine bien qu'il faudra une autre variable que CSBM, pardon, V, pour stocker l'année en cours, et cette variable s'appelle, évidemment, année N. 

Ceci dit, on a encore un peu de temps devant nous:

En métropole, une base nautique a subi une pollution au benzène (on est tombé sur un bec). «La toxicité du benzène par inhalation conduit le responsable à fermer la base nautique afin de préserver la santé des usagers». Mais il est hélas trop tard, la toxicité a eu raison de la logique de dénomination des variables, puisque la concentration en benzène ne s'appelle ni c comme concentration ni b comme benzène, mais u. L'autre variable est notée n (comme "nombre de jours ", mais on peut considérer que c'était jours qui était important et que la variable aurait pu/dû s'appeler jours). Avec ça, il faut attendre plus de 2 mois pour un retour à la normale :

nomVar2

Bac ES

En Polynésie, ni l'algorithme ni le nom des variables ne brillent par leur originalité: le capital de Mme Durand est noté U et le nombre d'années écoulées est noté N. Même si ce n'est pas capital, on se propose ici de donner des noms un peu plus parlants aux variables de l'algorithme:

Aux Antilles, on se lance dans les produits bio, mais on n'a toujours pas de variable bio. «Dans les algorithmes ci-dessous, N est un entier, donné par l’utilisateur, qui désigne le nombre d’années écoulées depuis l’année 2012 et U un nombre réel qui désigne le chiffre d’affaires en 2012+ N.»

Ceci dit, le sujet comporte une certaine originalité, puisque la boucle est bornée et que la notion de variable intervient de manière assez subtile. Avec une variable de trop

ou une affectation de trop

 Mais la bonne version de l'algorithme est donnée et on peut connaître le chiffre d'affaires de cette start-up bio:

 En métropole, un algorithme est donné dans le QCM. En le lisant on comprend que v est le terme général d'une suite géométrique et S la somme des termes, mais pour quelque raison étrange, «On affecte 3 à la variable N» dans l'énoncé et non dans l'algorithme lui-même. Le FBI recherche activement à quel moment la variable N varie, et suppute que N serait en réalité une constante. Quoiqu'il en soit, voici la valeur finale de S, qui est demandée dans l'exercice, sans que l'on sache ce que représente ce nombre:

Bac S

 Aux Antilles, on s'est cru en ST2S puisqu'il n'y a pas d'algorithme. En métropole par contre, il y avait un algorithme dans chacune des questions «obligatoire» et «spécialité».

En obli, on considère une suite croissante qui tend vers l'infini et on voudrait savoir quand elle dépasse un seuil de un million. C'est pas bouleversant d'originalité.
Pour cela il fallait compléter cet algorithme:

Le sujet de spé est plus original, ne serait-ce que parce qu'il comprend non seulement des affichages mais aussi une entrée de donnée. C'est tout de même osé ! Puisque l'exercice demandait de tester la perfection de 6 entiers, on pouvait faire varier N tout seul dans une boucle au lieu de l'entrer au clavier :

En conclusion, la session de septembre 2018 du bac se résume à ces principes:

  1. Il n'existe que deux variables, N et U sont leurs noms.
  2. Il n'existe qu'un seul algorithme, consistant à dépasser un seuil S.
  3. Au cas où le principe 1 ne saurait être appliqué (seuil ou somme), on est exceptionnellement autorisé à utiliser une troisième variable. Dans ce cas elle s'appelle S.

Voici des extraits du prochain programme de lycée:

En Seconde: «Déterminer la première puissance d’un nombre positif donné supérieure ou inférieure à une valeur donnée.» (recherche de seuil sur des suites géométriques)

En première (enseignement général): «Calcul de termes d’une suite, de sommes de termes, de seuil.»

En première (enseignement technologique): «Déterminer le rang à partir duquel les termes d'une suite sont supérieurs ou inférieurs à un seuil donné, ou aux termes de même rang d'une autre suite.»

Ainsi, hormis le fait que «le langage utilisé est Python» (mais «on utilise le symbole ←  pour désigner l’affectation dans un algorithme écrit en langage naturel» alors CaRMetal reste un précurseur), ces activités préfigurent bien de ce que sera l'exercice d'algorithmique au bac 2021 et après, et leur programmation avec CaRMetal est un bon exercice (parce que vite fait) pour préparer le bac en question.

rentrc3a9e

 Source : Martin Vidberg, vidberg.blog.lemonde.fr