Corrigé du sujet de bac ES Pondichery 2015 (algorithme)

lundi 20 avril 2015
par  Alain BUSSER

Le sujet est ici. L’exercice 2 « obli/L » portait sur une suite arithmético-géométrique :

Un apiculteur souhaite étendre son activité de production de miel à une nouvelle région. En juillet 2014, il achète 300 colonies d’abeilles qu’il installe dans cette région.
Après renseignements pris auprès des services spécialisés, il s’attend à perdre 8% des colonies durant l’hiver. Pour maintenir son activité et la développer, il a prévu d’installer 50 nouvelles colonies chaque printemps.

Une nouveauté de ce sujet est qu’il n’est plus nécessaire, pour comprendre l’algorithme, de savoir que la perte de 8% correspond à une multiplication par 0,92 puisque le calcul, tel que décrit dans l’algorithme, est

C prend la valeur C − C×0,08 + 50

Mais Sophus sait soustraire un pourcentage donc le problème ne se pose pas avec Sophus. L’algorithme de l’énoncé demande de boucler avec cette condition :

Tant que C < 400

Puisque C désigne visiblement le nombre de colonies, on en déduit que le but de cet algorithme est de savoir au bout de combien d’années l’apiculteur aura dépassé les 400 colonies. Alors, autant faire cette traduction sophusienne :

Nom dans le sujet Nom dans Sophus
n années
C colonies

L’algorithme se traduit alors ainsi en Sophus [1] :

colonies devient nouvelle Variable 300
années devient nouvelle Variable 0
Tant que colonies.valeur < 400
    diminuer colonies de 8 pourcents
    augmenter colonies de 50
    incrémenter années
montrer années

Mais l’exercice était plus d’algorithmique « papier-crayon » que de programmation, alors il y avait un tableau à remplir, dans lequel on devait donner successivement les valeurs des deux variables ainsi que le test de comparaison avec 400. Pour constituer un tel tableau dans Sophus, on va effectuer les opérations suivantes :

  • créer des listes, sous la forme de crochets vides (ce ne sont pas des variables Sophus, juste des tableaux de JavaScript) [2] ;
  • à chaque passage dans la boucle, empiler dans ces tableaux les valeurs courantes des variables Sophus [3]. Par exemple le nombre actuel de colonies est colonies.valeur et non colonies [4] ;
  • Tout à la fin, on affiche (« montrer ») toute la pile d’un coup, ce qui évite de multiplier les affichages.

Voici les noms des tableaux :

Nom du tableau Signification
test valeurs de vérité de la proposition "C<400"
valeurDeC nombre actuel de colonies
valeurDeN temps écoulé, en années

Le script qui donne les trois lignes du tableau :

test devient [ ]
valeurDeC devient [ ]
valeurDeN devient [ ]
colonies devient nouvelle Variable 300
années devient nouvelle Variable 0
Tant que colonies.valeur < 400
    diminuer colonies de 8 pourcents
    augmenter colonies de 50
    incrémenter années
    test.empiler colonies.valeur<400
    valeurDeC.empiler colonies.valeur
    valeurDeN.empiler années.valeur
montrer test
montrer valeurDeC
montrer valeurDeN

Et le tableau obtenu [5] :

Il y a moins de 400 colonies c’est vrai c’est vrai c’est vrai c’est vrai c’est faux
nombre de colonies 326 349,92 371,926 392,172 410,799
années passées 1 2 3 4 5

Représentation graphique de la suite

Sophus n’a pas de capacité graphique mais alcoffeethmique, si ; voici la représentation graphique de la suite en question :

Le script CoffeeScript pour avoir ce graphique

c=300
suite=[c]
for n in [1..50]
    c*=.92
    c+=50
    suite.push c
dessineSuite suite, 50, 300, 700, 2, "red"

01020304050300400500600700


Question 3

L’apiculteur espère doubler son nombre initial de colonies. Il voudrait savoir combien d’années il lui faudra pour atteindre cet objectif.

Pour répondre à cette question, il suffit de changer la valeur du seuil dans l’algorithme du début. Au cas où on aurait du mal à savoir quel est le double de 300, on peut tenter cet algorithme :

seuil = nouvelle Variable 300
doubler seuil
montrer seuil

On sait maintenant comment modifier l’algorithme du début :

colonies devient nouvelle Variable 300
années devient nouvelle Variable 0
Tant que colonies.valeur < 600
    diminuer colonies de 8 pourcents
    augmenter colonies de 50
    incrémenter années
montrer années

interpréteur en ligne

Pour tester les scripts, les copier-coller ci-dessous puis expérimenter avec :

sophus

Interpréteur Sophus

Sortie en français


[1colonies n’est pas un nombre mais une variable Sophus. Alors le test échoue si on cherche à comparer colonies avec 400. On doit donc comparer colonies.valeur avec 400.

[2on peut comparer ces tableaux à des piles de serviettes à la cantine, sauf qu’ici ce ne sont pas des serviettes mais des nombres ou des propositions logiques

[3comme on pose une serviette sur le tas de serviettes

[4qui n’est pas un nombre mais une variable dont la valeur est un nombre : Penser à l’image des tiroirs qui ne sont pas égaux à leur contenu...

[5On remarque que la proposition « il y a moins de 400 colonies » n’a pas la même valeur de vérité au cours du temps : Il s’agit donc de logique temporelle.


Documents joints

PDF - 114.7 kio

Erreur d’exécution plugins/auto/sarkaspip/v4.1.0/noisettes/document/inc_images_jointes.html

Commentaires