La programmation au brevet des collèges 2018

mercredi 26 septembre 2018
par  Alain BUSSER

Le retour des programmes de calcul permet de mettre le flow programming en situation.

Pondichéry

Le sujet comportait, en exercice 4, un programme de calcul, et en exercice 5, un calcul de π par la méthode de Monte-Carlo.

Exercice 4

En fait il y avait deux programmes de calcul et l’objet de l’exercice était essentiellement la recherche des nombres donnant le même résultat avec ces deux programmes.

Programme A
• Choisir un nombre
• Soustraire 3
• Calculer le carré du résultat obtenu
Programme B
• Choisir un nombre
• Calculer le carré de ce nombre
• Ajouter le triple du nombre de départ
• Ajouter 7

Avant de réutiliser Sofus pour programmer A et B en calcul formel, on va d’abord montrer, sur ces deux programmes, comment mettre en œuvre flow974

Préliminaires

Lorsqu’on démarre flow974, il y a déjà une fonction, dont on n’a pas besoin pour ce corrigé. On a donc un peu de nettoyage préliminaire à faire (clic droit sur un bloc puis remove node pour l’enlever, pour ne garder qu’un des nombres présents [1]. On en profite pour ajouter un affichage pour connaître le « résultat des programmes » ; du point de vue fonctionnel, il suffit d’utiliser la fonction identité qui ne modifie rien mais affiche sa valeur. On a donc laissé un nombre, et, si on effectue un clic droit sur la partie vide du plan de travail, le menu qui apparaît alors permet, parmi les fonctions, de choisir l’identité :

Une fois que c’est fait, l’identité est en jaune parce qu’elle vient juste d’être sélectionnée, et il reste encore à effectuer un branchement :

Pour cela, on clique sur la sortie du nombre et, sans lâcher le bouton gauche de la souris, on mène celle-ci vers l’entrée de la fonction :

Une fois qu’on est arrivé et que le bouton gauche de la souris a été lâché, le branchement est effectué :

On s’en rend compte parce que la modification du nombre en entrée se répercute immédiatement à la sortie.

1. Corinne

Le programme A modélise une fonction, que l’on va noter A(x) par la suite : Il est clair, selon l’énoncé, que le nombre obtenu en sortie dépend du nombre choisi en entrée, et c’est exactement ce que signifie le mot « fonction ».
Pour programmer proprement, on se propose de créer une fonction, ce qui se fait en cliquant quelque part entre l’entrée et la sortie, et en naviguant dans le menu apparu, jusqu’à trouver la fonction générique. Comme c’est une fonction, elle se trouve parmi les fonctions.

Mais elle va se nommer « module » après sa création :

Pour la programmer et la renommer, il suffit alors de cliquer sur le bouton “Edit”, ce qui fait entrer dans la fonction.

Une fonction se doit d’avoir une entrée : clic gauche puis choix de celle-ci dans “fonctions” :

Une fonction se doit aussi d’avoir une sortie :

Comme l’étape suivante est de « soustraire 3 » on insère un module de soustraction. Il est dans les opérations :

C’est à l’entrée qu’on soustrait 3, d’où ce branchement :

Mais que soustraire ? Un nombre !

Et ce nombre est 3 :

Enfin il faut calculer le carré du résultat :

Après les branchements nécessaires, le contenu du module A(x) est le suivant :

Au passage on a renommé le module en haut. Après avoir cliqué sur “Enregistrer le module” on est de retour au plan de travail, et là on peut brancher le nombre choisi à l’entrée de A(x) et la sortie de A(x) à l’identité qui sert d’affichage :

On vérifie en positionnant l’entrée sur 1, que Corinne obtient bien 4 en sortie (à droite de l’écran) :

2. Tidjane

Pour répondre à la question de Tidjane, il faut créer un nouveau module nommé B(x) et commencer par y placer le module « carré » puisqu’on a besoin du carré du nombre de départ.

Mais on ne trouve pas de module « triple ». Qu’à cela ne tienne, on va en créer un !
On va donc créer une fonction à l’intérieur d’une fonction : On la nomme « triple » et voici son contenu :

En effet le triple d’un nombre, c’est le produit de 3 par ce nombre.

Avec ce module on peut facilement faire le programme B(x) :

Ci-dessus la partie en jaune correspond à l’expression « ajouter le triple du nombre de départ ». Ce module B(x) permet de répondre à la question de Tidjane : Le nombre trouvé est 17.

3. Lina

La formule saisie est =B3^2+3*B3+7

Pour étoffer un peu cette partie, on propose un prolongement : On verra dans la partie 4 que le but final de l’exercice est de savoir pour quel nombre choisi en entrée, les deux programmes A et B donnent le même résultat. Ce n’est pas difficile en flow programming : il suffit de mettre les deux modules A(x) et B(x) sur un même plan de travail, et d’y injecter le même nombre :

Si le nombre x est au moins 1, B(x) est plus grand que A(x) :

Si le nombre x est négatif ou nul, B(x) est plus petit que A(x) :

Comme les nombres ne prennent que des valeurs entières, on n’a ici que la même information donnée par le tableur : La solution de l’équation A(x)=B(x) est quelque part entre 0 et 1. Ceci dit, dans l’exercice, tous les nombres qui interviennent dans les questions 1, 2 et 3 étant entiers, il faut aller jusqu’à la résolution de l’équation dans la question suivante, pour comprendre que dans cet exercice, « nombre » signifie « réel » et pas nécessairement « entier ».

Pour gagner en précision, on peut ajouter un module de division par 10 au nombre d’entrée, et explorer la situation avec une précision accrue :

4. Zoé

Le vocabulaire de Sofus n’est pas très similaire à celui de l’énoncé ; notamment

  • Quand on soustrait 3, il faut dire à qui on soustrait 3 ;
  • Lorsqu’on calcule un carré, il faut dire quel est le nombre à élever au carré ;
  • Lorsqu’on finit un calcul, il faut dire quoi faire du résultat : L’afficher !
  • Et il faut savoir que si le nombre de départ s’appelle « x », son triple s’écrit « 3×x »

Mais on s’y fait vite. Avec l’aide de Sofus, Zoé

  • prouve que le programme A donne bien x²-6x+9 :

  • trouve que le programme B donne x²+3x+7 :

  • résout l’équation x²-6x+9=x²+3x+7 :

Annexe

Comme Python est de plus en plus un langage de programmation fonctionnelle, voici, à titre de comparaison avec les flow-programmes ci-dessus, les fonctions A et B programmées en Python :

def A(x):
    x -= 3
    x **= 2
    return x
def B(x):
    def triple(nombre):
            return 3*nombre
    y = x**2
    y += triple(x)
    y += 7
    return y

Exercice 5

La question 1 portait sur le théorème de Pythagore : Un triangle rectangle était d’ailleurs dessiné sur la copie d’écran de Scratch. La question 2 était une question de cours, portant sur la définition d’un disque. Mais la question 3 s’est montrée très synthétique, en associant le test sur la distance et le calcul de celle-ci par Pythagore. Le script aurait pu être simplifié en laissant Scratch effectuer le calcul de distance et en faisant un dessin à la place. En effet tout lutin de Scratch connaît la distance le séparant d’un autre lutin, et peut s’estampiller sur la scène.

Préparation

Dans Sofus, la tortue numéro 1 peut connaître à quelle distance se trouve la tortue numéro 0. On commence donc par créer la tortue 0, qui restera à l’origine ; puis on cache les deux tortues :

Le script, avec la tortue 0 placée à l’origine du repère, est quand même plus simple que celui de l’énoncé :

Avec SofusPy

On remarque que le script de l’énoncé ne comprend aucun affichage de la variable score et qu’il est fait allusion aux « lignes 5, 6 et 7 du programme » donc à de la programmation textuelle.

En reprogrammant le script avec SofusPy, on obtient ce genre de blocs :

Pas très différents de ceux de l’énoncé. Mais SofusPy donne automatiquement la version Python, laquelle (après quelques retouches comme remplacer les « 0 » par des pointillés) ressemble à ceci :

Et là, on a bien des lignes de programme et pas des blocs à compter...

Nuage de points

Une petite variante du programme simplifié permet de dessiner en rouge les points à l’intérieur du disque et en bleu les autres :

On obtient alors ce genre de nuage de points :

La variable score possède alors une signification : C’est le nombre de points rouges dans le nuage.

Avec SofusPy, les couleurs n’étant pas encore implémentées, on peut faire le choix de ne dessiner le point que lorsque la variable score est incrémentée et affichée sa valeur à la fin du script. Celui-ci peut être copié-collé vers SofusPy :

from turtle import * ; from math import *; from random import *
score = 0; reset()
for _ in range(120):
    setposition(randint(-100, 100), randint(-100, 100))
    Carre_de_OF = xcor()**2 + ycor()**2
    distance = sqrt(Carre_de_OF)
    if distance < 100:
        score = score + 1
        dot(10)
setposition(120,0)
write(score)

Il produit ce genre de dessin où on devine, en pointillés, le disque de rayon 100 (la tortue est à droite, en forme de chevron) :

USA

Le sujet comportait deux exercices de programmation : Le 4 avec des dessins de carrés par Scratch et le 5, avec un dessin de frise par « un logiciel de géométrie dynamique ».

Exercice 4

L’exercice 4 démarre par la définition d’une procédure « carré ». Le côté du carré est une variable globale côté, comme le montre la version Python ci-dessous, obtenue avec la version péï de SofusPy, et plus précisément la deuxième ligne de la fonction [2] carré() : « global côté » qui explique à Python le caractère global de cette variable.

La définition en Blockly est très similaire :

La différence essentielle est que Scratch met le stylo en position d’écriture sans préciser quelle est cette position, alors que Sofus baisse le stylo, la tortue étant vue d’au-dessus, et devant donc baisser son stylo pour que celui-ci laisse une trace de ses mouvements.

Le script principal montre aussi deux petites différences entre Scratch et Sofus :

  • Alors que Scratch met côté à 40, Sofus met 40 dans côté. Ce qui est également suggéré par le pseudocode côté ← 40
  • Alors que Scratch ajoute à côté 20, Sofus augmente côté de 20

Par ailleurs il est rappelé dans l’énoncé que s’orienter à 90 (sans unité !) « signifie qu’on se dirige vers la droite » (qui « on » ? Quelle droite ?)

Question 1

La question 1 porte sur un programme de calcul avec répétition, puisque seule la valeur de la variable côté est considérée. On peut donc ne laisser que les transformations de celle-ci :

La question a porte sur une affectation (initialisation) et la réponse est donc 40, à lire dans le script ; la question b trouve sa réponse dans l’affichage du script ci-dessus :

60
80
100
120

Question 2

Le réglage de l’épaisseur du stylo est une fonction experte de Scratch, on peut donc s’étonner de sa présence alors même que « l’enseignement de l’informatique au cycle 4 n’a pas pour objectif de former des élèves experts, ni de leur fournir une connaissance exhaustive d’un langage ou d’un logiciel particulier ».

Ceci dit, le seul endroit dans la boucle où il ne faut pas mettre le bloc d’augmentation de l’épaisseur du crayon, est avant le bloc carré.

Question 3

La programmation fonctionnelle n’est pour autant pas totalement absente de ce sujet puisque, même si la variable côté est globale, elle est argument de la fonction avancer et l’avant-dernier bloc du nouveau script est traduit en Python (voir ci-dessous) par avancer de (côté + 30). La notation parenthésée montre que avancer de est une fonction, et que son argument n’est plus la valeur actuelle de la variable côté mais la somme côté+30.

Le nouveau script

donne ceci

soit le dessin 3. Le dessin 2 est à écarter parce qu’il n’y a pas les levers de stylo, et le dessin 1 pour une raison plus subtile : Après avoir dessiné un carré, la tortue a tourné en tout de 360° et est donc à nouveau sur l’axe des abscisses, ce qui est incompatible avec le dessin 1.

Version Python

from turtle import *
def carre():
    global cote
    pendown()
    for _ in range(4):
        forward(cote)
        left(90)
    penup()
reset()
setposition(-200, 0)
cote = 40
for _ in range(4):
    carre()
    forward(cote + 30)
    cote = cote + 20

Le pseudocode de la procédure principale est

téléporter la tortue vers (-200, 0)
côté ← 40
pour _ allant de 0 à 3
   carre( )
   avancer de (côté + 30)
   côté ← côté + 20

fin du pour


Exercice 5

Le logiciel de géométrie dynamique choisi, est, ici, CaRMetal, parce qu’il permet de programmer la construction de la frise en français.

Dessin du motif 1

Un moyen simple d’avoir un triangle isocèle par script est de donner des coordonnées aux sommets d’icelui :

a = Point("A",0,1);
b = Point("B",0,-1);
c = Point("C",-3,0);
Polygone("motif1","A,B,C");

Mais pour être complet il faudrait fixer les sommets A, B et C, sinon, sous l’effet du Monkey, le triangle ne restera pas isocèle (l’effet est néanmoins intéressant).

Le motif 2

La transformation est la symétrie d’axe (AB), mais une translation aurait aussi pu faire l’affaire :

d = SymétrieAxiale("D",Droite("l1","A","B"),"C");
Cacher("l1");
Polygone("motif2","A,B,D");

La première ligne signifie simplement que D est le symétrique de C par rapport à la droite (AB), mais au passage cette droite a été nommée l1 pour pouvoir, à la ligne 2, la cacher.

La translation

Voici le script engendrant la frise, on peut aisément y lire le vecteur de la translation, même si on ne connaît pas par cœur la syntaxe des CaRSCripts :

répéter 4 fois {
        a = Translation("C","B",a);
        b = Translation("C","B",b);
        c = Translation("C","B",c);
        d = Translation("C","B",d);
        Polygone("_a,_b,_c");
        Polygone("_a,_b,_d");
}

On voit que le script a bien engendré la frise de l’énoncé :

Le pseudocode

En mettant CaRMetal en mode pseudo-code, les effets des translations successives se voient mieux :

répéter 4 fois {
   a ⟵ Translation("C","B",a);
   b ⟵ Translation("C","B",b);
   c ⟵ Translation("C","B",c);
   d ⟵ Translation("C","B",d);
}

Étranger

Le sujet comprenait un programme de calcul dans l’exercice 1 (la troisième question d’un « vrai ou faux justifié ») et un programme Scratch à compléter dans l’exercice 6 (la partie B).

Exercice 1

Encore un programme de calcul bourré d’implicites (à qui ajouter 5 ? à qui soustraire 9 ?) :

Choisir un nombre;
Ajouter 5;
Multiplier le résultat obtenu par 2;
Soustraire 9.

On devait dire si la fonction ainsi programmée coïncide avec 2x+1 (x étant le nombre choisi au départ). La réponse affirmative est donnée par Sofus :

Python

Pour aller plus loin, on peut aussi utiliser SymPy (calcul formel sous Python), qui possède une variable n de type formel, laquelle peut être utilisée comme valeur initiale du nombre, et l’affichage final de cette variable donne bien 2n+1 :


Exercice 6

Cet exercice n’est pas une bonne publicité pour Scratch : On dit que le robot est orienté vers le haut alors qu’il doit effectuer des parcours horizontaux dans le champ ; et le « costume » choisi pour le robot dans l’illustration ne le montre pas vu de haut, alors que son tracé est donné en vue aérienne.

On ne sait pas si les élèves doivent dessiner des blocs ou seulement écrire du texte, en tout cas on leur demande clairement d’« écrire un programme simple », même si c’est dans des définitions de fonctions.

Voici le corrigé avec Sofus :

Python

Le jour où un maraîcher voudra programmer un robot pour désherber ses tomates, il est peu probable qu’il le programme en Scratch. Python ayant plus le vent en cote, voici le script produit par SofusPy à partir des blocs ci-dessus :

from turtle import *
def Motif_montant():
    forward(80)
    right(90)
    forward(1)
    right(90)
def Motif_descendant():
    forward(80)
    left(90)
    forward(1)
    left(90)
for count in range(24):
    Motif_montant()
    Motif_descendant()
forward(64)

Asie

Un exercice 3 très western avec le dessin dune étoile de sheriff (enfin, à 5 branches).

Remarque : L’énoncé commence par « Arthur doit écrire un programme avec Scratch » ce qui, une deuxième fois, montre que « programmation visuelle par blocs » signifie, quoique de façon officieuse, « Scratch et rien d’autre ». Étant donné que de façon officielle il ne fallait pas former des experts sur un outil particulier, on peut extrapoler au lycée, en imaginant que le langage Python, quoique non annoncé officiellement, sera présent et cité explicitement au bac dans les années qui viennent.

Question 1 : Pour dessiner l’étoile à 5 branches, il faut boucler 5 fois, ce qui n’est pas vraiment surprenant :

On remarque que Sofus, en épurant le script, permet de concentrer l’attention des élèves sur ce qui constitue le cœur du sujet et ne pas les distraire par des considérations hors sujet comme les effets de l’effaçage, les manipulations de stylo ou l’orientation par défaut du lutin/tortue...

Question 2 : Comme chaque branche de l’étoile est faite de deux parcours de 80 pixels chacun, le préimètre s’obtient en multipliant par 5 la somme 80+80. Là encore, pas de grosse surprise.

Question 3 : Pour dessiner l’étoile 2 fois plus grande, il faut que chaque longueur soit doublée, ce qui n’est pas vraiment surprenant non plus :

Métropole-Réunion

Le sujet est intéressant ici, pour 2 raisons : L’exercice 5 et son programme de calcul ; et l’exercice 6 avec un dessin fait avec Scratch.

Exercice 5

Le programme de calcul est si court qu’on se demande si ça vaut le coup de le placer dans un module de ce genre :

La réponse est oui : Le nombre en entrée est manipulable en dehors du module alors que les autres (variables locales du point de vue de la programmation fonctionnelle) sont constants du point de vue extérieur. L’affichage du résultat par flow974 se fait en utilisant une fonction identité :

On y lit la réponse à la question 1, mais une exploration plus poussée révèle qu’aucune entrée entière ne donne 30 en sortie. On passe donc à Sofus pour la suite :

Énoncé

Le programme est celui-ci :

• Choisir un nombre
• Multiplier ce nombre par 4
• Ajouter 8
• Multiplier le résultat par 2

On devine que c’est à la nouvelle valeur du nombre qu’on doit ajouter 8 ; encore un implicite...

Question 1

Traduit en Sofus, le programme donne ceci (version question 1) :

Du coup le nombre n’est plus un nombre mais une variable. Ce qui est normal puisqu’il varie...

Question 2

Pour résoudre la question 2, on décide, comme dans la suite du sujet, de nommer « x » le nombre choisi au départ :

On apprend au passage que le programme implémente une fonction affine, à savoir 8x+16. Ce résultat sera utile par la suite.

Pour résoudre l’équation, on écrit celle-ci en ajoutant « =30 » à l’expression obtenue, puis en résolvant l’équation obtenue :

Question 3

En développant 2(4x+8) on retrouve bien 8x+16 vus à la question précédente. Il reste alors à entrer B :

puis le développer :

Question 4

  • Il y a un gros manque dans l’énoncé à ce stade : Il n’est pas précisé dans quel ensemble on a choisi le nombre de départ. Si on cherche quand le résultat est nul, on constate que la proposition est vraie si l’ensemble ne contient aucun nombre inférieur à -2 :

La réponse est donc oui si le nombre de départ est entier naturel,non s’il est entier relatif, ou réel. On dit que N est un modèle de la proposition, alors que R n’en est pas un. Ce qui manquait à cet énoncé c’est donc la précision sur le modèle dans lequel on travaillait.

  • Là encore, on ignore, àla seule lecture de l’énoncé, si l’entier est naturel ou relatif. À moins que la divisibilité des entiers relatifs soit au programme de collège, on supposera donc que le nombre est naturel. Auquel cas la division par 8 donne encore un entier naturel ce qui conclut favorablement à la question :


Exercice 6

L’exercice consistait à dessiner des carrés et des triangles homothétiques avec ces fonctions :

Le script épuré (notamment de l’affectation, inévitable avec Scratch mais pas avec Sofus), donne ceci :

Ce script étant complet, donne un corrigé des questions 1 et 2 (hormis les coordonnées du lutin, qui se calculent par une division de 300 par 6 ; la difficulté n’est pas insurmontable). Pour la question 3, le rapport d’homothétie se calcule en soustrayant 1/3 à 1 et le rapport des aires, en calculant le carré d’une fraction. Là encore, il ne devrait pas y avoir de difficulté majeure.

Polynésie

Le sujet se clôt par un exercice comportant un programme de calcul. L’énoncé laisse un peu perplexe, avec « un script saisi par Alice dans un logiciel d’algorithmique ». En effet, un algorithme est défini comme « une suite finie et non ambiguë d’opérations ou d’instructions permettant de résoudre un problème », et là, on a du mal à imaginer un problème dont la solution serait fournie par le script d’Alice. Ensuite, le premier bloc du script demande au lutin d’attendre, ce qui n’est peut-être pas l’action la plus efficace pour résoudre un problème. Une fois l’attente terminée, le lutin envoie un message à tous, c’est-à-dire à lui-même vu qu’apparemment il est seul. Puis il modifie trois variables Nombre, Résultat1 et Résultat2 de manière un peu imprévisible (on dirait un mélange de modifications et d’affectations par des expressions algébriques). On proposera donc ici de tout faire comme programme de calcul (en fait, deux programmes en un) et plutôt que faire demander un nombre par un lutin, affecter directement le Nombre par 3 ou x selon la question.

Question 1

Puisqu’Alice a choisi la valeur 3, autant initialiser le Nombre à la valeur 3 :

Comme la variable Résultat1 dépend de la valeur initiale de Nombre, le programme de calcul représente de fait une fonction numérique (antécédent : Nombre, image : Résultat1) et l’image de 3 par cette fonction est 81.

Pour Résultat2, il en est de même :

Question 2 : Généralisation

Il suffit, dans un premier temps, de remplacer le nombre 3 par la lettre x dans les scripts précédents :

Question a

La fonction évoquée ci-dessus est du second degré :

Il s’agit de la fonction 4x²+12x+9 comme on peut d’ailleurs le retrouver en développant et réduisant (2x+3)².

Question b

De fait, le Résultat2 dépend du Nombre par la même fonction du second degré :

Question c : Quand est-ce que le Résultat2 vaut 9 ?

Si, comme dans les questions a et b, on appelle x la valeur initiale du Nombre, la valeur finale de Résultat2 est 4x²+12x+9. Cette expression est une expression (si si !). La fonction à laquelle il est fait allusion dans les questions a et b est une liaison entre les expressions x et 4x²+12x+9. Mais on peut également, à partir de l’exrpession 4x²+12x+9, fabriquer une équation en lui accolant « =9 » :

La question c demande ni plus ni moins que de résoudre cette équation.

Résolution de l’équation

Il suffit, au lieu d’afficher l’équation, d’afficher ses solutions :

Il semble, à vue de nez, que les deux solutions pourraient s’écrire plus simplement, en utilisant le fait que sqrt(144)=12. Les termes complexes sont donc respectivement 12/8=3/2 et son opposé. Les deux solutions sont donc -3/2-3/2=-3 et -3/2+3/2=0. Mais si le calcul formel de Sofus laisse un peu à désirer sur les équations du second degré, on peut retrouver plus facilement ces solutions, en constatant que dans l’équation, le terme +9 est présent dans les deux membres, et en choisissant de s’en passer, en enlevant le bloc « augmenter Résultat2 de 9 ». Cela aboutit à l’équation 4x²+12x=0 dont on aperçoit immédiatement que 0 est une solution. Alors on simplifie encore l’équation en divisant par x la valeur de Résultat2 ce qui donne la seconde solution :

Septembre

En Polynésie, Scratch (ou quelque chose de ressemblant) était utilisé pour résoudre une équation par balayage :


Une personne pratique le vélo de piscine depuis plusieurs années dans un centre aquatique à raison de deux séances par semaine. Possédant une piscine depuis peu, elle envisage d’acheter un vélo de piscine pour pouvoir l’utiliser exclusivement chez elle et ainsi ne plus se rendre au centre aquatique.
• Prix de la séance au centre aquatique : 15 €.
• Prix d’achat d’un vélo de piscine pour une pratique à la maison : 999 €.

Le but de l’exercice était de savoir à partir de combien de semaines l’achat du vélo deveint rentable. Avec ce genre de script :

On remarque que la boucle « jusqu’à » a été préférée à l’omniprésente « tant que », ce qui pour ce genre de problème, élimine Python.

Suggestion d’amélioration

Avec des noms de variables plus parlants le script devient plus compréhensible :

Ceci dit, la question était justement de deviner le rôle joué par la variable x dans le script de l’énoncé.


Le sujet de Métropole-Réunion-Antilles-Guyane comportait deux exercices sur la programmation : Le 5 avec des tracés de rectangles par Scratch, et le 6 avec un programme de calcul représenté par un graphe orienté, donc totalement propice à une approche par flow974.

Exercice 5

On remarque que le tracé d’un rectangle est effectué par une procédure (« définition de blocs ») et que les dimensions du rectangle sont des variables globales. Cela s’éloigne d’expériences menées avec Logo où les dimensions étaient fournies à la procédure.

Les dimensions du rectangle sont les variables globales longueur et largeur.

Question 2


Lorsque l’on exécute le programme, quelles sont les coordonnées du point d’arrivée et dans quelle direction est-on orienté ?

On constate une prise de distance par rapport au chat qui est devenu « on » et peut donc très bien être une tortue. C’est le choix qui est fait ici puisqu’on utilise Sofus avec sa concision accrue par rapport à Scratch.

L’orientation de la tortue est la même qu’au départ :

Quand à ses coordonnées, elles aussi sont redevenues celles du départ, comme on le voit si on dessine un repère :

Homothétie

Pour faire varier les variables, on utilise (dans l’énoncé) des expressions algébriques (produits) et des affectations :

Par exemple, pour augmenter la valeur de la longueur,

  • on lit sa valeur actuelle longueur
  • on calcule le produit de cette valeur par 1,3 (longueur×1,3)
  • on remplace le contenu de longueur par le produit effectué.

En terminale voire après, cette suite d’opérations est compliquée. Il est intéressant de comparer avec la version Sofus :

De fait, c’est probablement parce que Scratch n’a pas d’équivalent de « multiplier par » que la version avec expressions algébriques a été choisie dans l’énoncé, à en juger par le choix fréquent de « augmenter de » dans d’autres sujets : On fait au mieux avec ce qu’on a, et les affectations par expressions algébriques ne sont pas forcément ce qu’ily a de mieux.

Sofus permet même de donner un aspect statistique à l’homothétie :

Exercice 6

La version flow974 ressemble quand même beaucoup à l’énoncé :

Comment on a fait

Dans flow974, il faut un nombre (celui que l’on choisit, que l’on positionnera à 1 selon la consigne), un « module » implémentant la fonction B, et un affichage (en l’occurrence une fonction identité qui affiche son entrée). Une fois le nombre créé (à gauche ci-dessous) on a cliqué sur « fonction » pour voir apparaître le module lequel s’appelle, pour l’instant, « module » :

En cliquant sur « edit » on peut renommer le module (B, pour des raisons qui apparaitront plus bas) et mettre dedans, une entrée (« x » par cohérence avec la suite de l’exercice) et une sortie. Mais le premier bloc dont on a besoin est le triple de x, et du coup il faut à nouveau, à l’intérieur de B, créer un module qui s’appellera triple. Son entrée est nommée nombre et sa sortie triple [3]. Comme le triple du nombre est son produit par 3, on ajoute le nombre 3 et un multiplicateur :

En enregistrant ce module, on aperçoit ceci :

Comme on aura aussi besoin, plus tard, de doubler le nombre, on répète les opérations ci-dessus, avec la multiplication pa 2 cette fois-ci :

Une fois enregistré ce nouveau module, on complète avec les additions et soustractions nécessaires et la sortie :

Enfin, on enregistre le module B et il suffit de modifier la valeur de x pour lire celle du nombre envoyé en sortie :

Sofus et le calcul formel

La programmation du programme de calcul avec Sofus permet aussi de vérifier que, si le nombre choisi est 1, on récupère -15 en sortie :

Mais si, au lieu de 1, on laisse « x », on a l’expression formelle du nombre de sortie, en fonction de x :

Comme le développement de l’expression B donne le même résultat que le programme de calcul, on a la réponse à la question 2 :

Et même, de façon similaire, la réponse à la question 3 :


[1La première étape de chacun des programmes A et B est de « choisir un nombre »

[2en réalité cette fonction est une procédure, puisqu’il n’y figure pas de ligne commençant par return. De plus elle n’a pas d’antécédent puisque les parenthèses sont vides.

[3Abréviation pour triple du nombre, le nom triple désigne également autre chose, àsavoir la fonction qui, au nombre, associe son produit par 3.


Documents joints

PDF - 127.9 ko
PDF - 127.9 ko
PDF - 127.9 ko
PDF - 127.9 ko

Commentaires

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 28 novembre 2018, 14h-18h, PTU, Saint-Denis, salle S23.6.
- Mercredi 13 février 2019, 14h-18h, campus du Tampon.
- Mercredi 6 mars 2019, 14h-18h, PTU, Saint-Denis, salle S23.6.
- Mercredi 10 avril 2019, 14h-18h, campus du Tampon.

Colloque EDIM-IREM

- Mercredi 5 juin 2019, 9h-12h et 14h-17h, Saint-Denis.

Fête de la science

- Du 10 au 18 novembre 2018. Thème : « Idées reçues ».

Semaine des mathématiques et congrès MATh.en.JEANS

- Du 25 au 31 mars 2019. Thème : « Jouons ensemble aux mathématiques ».


Brèves

Notation au bac

lundi 11 décembre 2017

Une nouvelle notation sera pratiquée à partir de la session 2018 pour les algorithmes au bac. Elle est décrite avec de nombreux exemples, ici.

Décès de Roger Mohr

mardi 27 juin 2017

On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

Statistiques

Dernière mise à jour

mercredi 10 octobre 2018

Publication

797 Articles
Aucun album photo
138 Brèves
11 Sites Web
140 Auteurs

Visites

1013 aujourd'hui
1289 hier
2516069 depuis le début
42 visiteurs actuellement connectés