Troisième, programme français à Montréal • Exercices corrigés
Exercices corrigés : algorithmique et Scratch au brevet (Troisième)
Ces quinze exercices corrigés couvrent l'algorithmique et la programmation avec Scratch en troisième, au format des exercices posés chaque année au brevet. Ils s'adressent aux élèves du Lycée Marie de France et du Collège Stanislas à Montréal.
Le fil de la série : au brevet, on ne PROGRAMME pas, on LIT. Chaque question se répond en simulant le script ligne par ligne, et la seule difficulté réelle est de savoir quelle valeur porte chaque variable à chaque tour.
Trois pièges reviennent d'un exercice à l'autre et le corrigé les désigne à chaque fois : une affectation ÉCRASE l'ancienne valeur, donc l'ordre de deux affectations n'est jamais indifférent ; dix exemples concordants ne démontrent rien, seule l'algèbre démontre ; et une boucle reˊpeˊterjusqu′aˋ peut ne jamais s'arrêter.
Série autocorrigéeTape tes réponses et vérifie-les question par question : la page te dit juste ou faux avant d'ouvrir la correction. Avec un compte, chaque bonne réponse du premier coup rapporte des points, et tes réponses justes restent remplies quand tu reviens.
•Un script s'exécute de haut en bas. Pour prévoir ce qu'il produit, on écrit un tableau avec une colonne par variable et une ligne par tour de boucle.
•mettrevaˋ… est une AFFECTATION : le calcul de droite est fait avec les anciennes valeurs, puis le résultat écrase le contenu de v.
•Deux affectations échangées ne donnent pas le même programme : mettreaaˋb puis mettrebaˋa perd définitivement l'ancienne valeur de a.
•reˊpeˊterjusqu′aˋceque… teste la condition AVANT chaque tour ; si le corps de la boucle ne fait pas progresser la variable testée, la boucle est infinie.
•Un script qui donne le même résultat sur dix essais ne prouve rien : la démonstration passe toujours par le calcul littéral, en appelant x le nombre choisi.
•Identités remarquables utiles ici : (a+b)2=a2+2ab+b2, (a−b)2=a2−2ab+b2 et a2−b2=(a+b)(a−b).
•Pour tracer un polygone régulier à n côtés, le lutin tourne de n360∘ à chaque sommet ; l'angle intérieur, lui, vaut n(n−2)×180∘ et ne sert PAS au tracé.
•Le PGCD de deux entiers ne change pas quand on remplace le plus grand par leur différence : c'est ce qui fait fonctionner l'algorithme d'Euclide par soustractions.
•Une hausse de t pour cent revient à multiplier par 1+100t ; n hausses successives reviennent à multiplier par (1+100t)n, et non par 1+100nt.
•Vérification systématique : on recalcule toujours la dernière ligne du tableau ET l'avant-dernière, car c'est exactement là que se décide l'arrêt d'une boucle.
Partie A : les bases (/50)
Exercice 1 : Échanger deux variables
Une affectation n'est pas une égalité : le calcul écrit à droite est effectué avec les valeurs actuelles, puis le résultat ÉCRASE l'ancien contenu de la variable.
Le script ci-dessous n'utilise que deux variables, et pourtant il produit un effet que l'on croit souvent impossible sans une troisième.
Scratch
quand le drapeau vert est cliqué
mettre a à 12
mettre b à 5
mettre a à a + b
mettre b à a - b
mettre a à a - b
dire a
1) Recopiez et complétez un tableau donnant a et b après chacune des cinq affectations.
2) Que dit le lutin ? Que vaut alors b ?
3) Que fait ce script, en une phrase ?
4) Démontrez-le en appelant x la valeur initiale de a et y celle de b.
5) Un élève propose de remplacer les trois dernières affectations par mettreaaˋb puis mettrebaˋa. Que produit sa version ?
6) Écrivez une version correcte utilisant une troisième variable temp.
Voir la correction
Réponses
1)a=17, b=12, puis a=5
2)5 ; b=12
3)Échange des deux variables
4)a=y et b=x
5)a=5 et b=5 : 12 perdu
6)temp ← a ; a ← b ; b ← temp
1)
On suit ligne par ligne. Après mettreaaˋ12 : a=12. Après mettrebaˋ5 : a=12, b=5. Après mettreaaˋa+b : a=12+5=17 et b=5. Après mettrebaˋa−b : b=17−5=12, et a vaut toujours 17. Après mettreaaˋa−b : a=17−12=5. Le tableau final donne donc a=5 et b=12.
2)
Le lutin dit 5, et b vaut 12. Autrement dit, chaque variable contient maintenant la valeur que l'autre contenait au départ.
3)
Ce script ÉCHANGE le contenu des deux variables, sans utiliser de variable supplémentaire. C'est un procédé classique en programmation, où la mémoire disponible peut être limitée.
4)
Au départ a=x et b=y. Après la première affectation, a=x+y et b=y. Après la deuxième, b=(x+y)−y=x, et a vaut encore x+y. Après la troisième, a=(x+y)−x=y. On obtient donc a=y et b=x pour TOUTES les valeurs de départ, et pas seulement pour 12 et 5 : c'est bien un échange. Le calcul littéral fait ici exactement ce que l'essai numérique ne peut pas faire, démontrer au lieu de constater.
5)
Sa version détruit une information. Après mettreaaˋb, la variable a vaut 5 et l'ancienne valeur 12 n'existe plus nulle part. La deuxième instruction mettrebaˋa recopie alors 5 dans b : on obtient a=5 et b=5. Les deux variables portent la même valeur, et 12 est définitivement perdu. C'est l'erreur la plus courante sur les affectations, et elle vient de lire mettreaaˋb comme l'égalité a=b, qui, elle, serait symétrique.
6)
mettretempaˋa, puis mettreaaˋb, puis mettrebaˋtemp. La variable temp conserve la valeur de a avant qu'elle ne soit écrasée, ce qui permet de la restituer ensuite. Contrôle avec 12 et 5 : temp=12, puis a=5, puis b=12 ✓, le même résultat qu'à la question 2. Cette version est plus lisible et fonctionne aussi sur des textes, alors que la version de l'énoncé exige des nombres, puisqu'elle additionne et soustrait.
Coche ici les exercices faits ou à revoir : un compte gratuit, sans mot de passe, retient tes coches et tes réponses justes d'une visite à l'autre, te dit quel chapitre attaquer ensuite et te permet de demander l'exercice qui te manque. Crée ton espace, un courriel suffit.
Exercice 2 : Un script, une fonction
Un script qui prend un nombre et en renvoie un autre définit une FONCTION. On note ici f la fonction qui, au nombre saisi, associe le nombre annoncé par le lutin.
Scratch
quand le drapeau vert est cliqué
demander "Choisis un nombre" et attendre
mettre x à réponse
mettre y à (x - 4) * (x + 4)
dire y
1) Calculez f(0), f(4), f(−4) et f(10).
2) Développez l'expression (x−4)(x+4) et reconnaissez l'identité remarquable utilisée.
3) Déterminez tous les antécédents de 0 par f.
4) Déterminez l'antécédent de −16 par f.
5) Pour quelles valeurs saisies le lutin annonce-t-il un nombre négatif ?
6) Le lutin peut-il annoncer −20 ? Justifiez.
Voir la correction
Réponses
1)−16 ; 0 ; 0 ; 84
2)x2−16
3)−4 et 4
4)0
5)−4<x<4
6)Non : minimum −16
1)
f(0)=(0−4)(0+4)=(−4)×4=−16. f(4)=(4−4)(4+4)=0×8=0. f(−4)=(−4−4)(−4+4)=(−8)×0=0. f(10)=(10−4)(10+4)=6×14=84. Deux entrées différentes, 4 et −4, donnent donc la même sortie 0 : une fonction a parfaitement le droit de faire cela, alors qu'un antécédent, lui, n'est pas toujours unique.
2)
(x−4)(x+4)=x2+4x−4x−16=x2−16. C'est l'identité a2−b2=(a+b)(a−b) lue de droite à gauche, avec a=x et b=4. Le script calcule donc x2−16, et l'on peut vérifier les résultats de la question 1 avec cette forme : 0−16=−16 ✓, 100−16=84 ✓.
3)
Résoudre f(x)=0 revient à résoudre (x−4)(x+4)=0. Un produit est nul si et seulement si l'un de ses facteurs est nul, donc x−4=0 ou x+4=0, c'est-à-dire x=4 ou x=−4. Il y a donc DEUX antécédents de 0, ce que la question 1 laissait déjà voir. La forme factorisée est ici bien plus commode que la forme développée : c'est elle qu'il faut garder pour résoudre.
4)
Résoudre x2−16=−16 donne x2=0, donc x=0 : c'est l'unique antécédent de −16. On utilise cette fois la forme DÉVELOPPÉE, parce que l'équation n'est plus « produit égal à zéro ». Savoir choisir entre les deux formes selon la question posée est exactement ce que teste le brevet.
5)
Le lutin annonce un nombre négatif quand x2−16<0, c'est-à-dire x2<16. Cela se produit pour −4<x<4, c'est-à-dire pour tous les nombres strictement compris entre −4 et 4. On peut aussi raisonner sur la forme factorisée : le produit (x−4)(x+4) est négatif quand ses deux facteurs sont de signes contraires, ce qui n'arrive qu'entre −4 et 4. Contrôle : f(3)=9−16=−7<0 ✓ et f(5)=25−16=9>0 ✓.
6)
NON. Comme x2 est toujours positif ou nul, x2−16 est toujours supérieur ou égal à −16 : le plus petit nombre que le lutin puisse annoncer est −16, obtenu pour x=0. La valeur −20 est donc hors d'atteinte, et l'équation x2−16=−20, qui donnerait x2=−4, n'a aucune solution. Un script ne peut pas produire n'importe quelle sortie, et repérer ce minimum évite de chercher longtemps une solution qui n'existe pas.
Exercice 3 : Un script qui teste si un triangle est rectangle
Ce script applique la réciproque du théorème de Pythagore. Les deux triangles de la figure ont pour côtés 3, 4, 5 pour le premier et 4, 5, 6 pour le second.
Scratch
quand le drapeau vert est cliqué
demander "le plus grand côté ?" et attendre
mettre c à réponse
demander "un autre côté ?" et attendre
mettre a à réponse
demander "le dernier côté ?" et attendre
mettre b à réponse
si c * c = a * a + b * b alors
dire "rectangle"
sinon
dire "pas rectangle"
1) Que dit le lutin si l'on saisit 5, puis 3, puis 4 ?
2) Que dit-il si l'on saisit 6, puis 4, puis 5 ? Détaillez le calcul.
3) Que dit-il si l'on saisit 13, puis 5, puis 12 ?
4) Un élève saisit 8, puis 17, puis 15. Que répond le lutin, et pourquoi cette réponse est-elle fausse ?
5) Proposez une modification du script qui corrige ce défaut.
6) Le script accepte la saisie 10, 2, 3. Pourquoi est-ce un problème ?
Voir la correction
Réponses
1)Rectangle
2)Pas rectangle : 36=41
3)Rectangle
4)Pas rectangle : saisie fausse
5)Tester les trois égalités
6)Aucun triangle possible
1)
Le lutin dit « rectangle ». En effet c×c=5×5=25 et a×a+b×b=9+16=25 : les deux membres sont égaux, donc la condition est vraie. D'après la réciproque du théorème de Pythagore, le triangle 3-4-5 est bien rectangle, et son angle droit est opposé au plus grand côté.
2)
Le lutin dit « pas rectangle ». Le calcul donne 6×6=36 d'un côté et 16+25=41 de l'autre : 36=41, la condition est fausse. L'écart n'est que de 5, ce qui montre qu'un triangle peut ressembler beaucoup à un triangle rectangle sans en être un : l'œil ne décide jamais, seul le calcul décide.
3)
Le lutin dit « rectangle », car 13×13=169 et 25+144=169 ✓. Le triplet 5-12-13 est, avec 3-4-5, l'un des deux triplets que l'on rencontre le plus souvent au brevet ; les reconnaître fait gagner du temps.
4)
Le lutin répond « pas rectangle », car il calcule 8×8=64 d'une part et 289+225=514 d'autre part. Or le triangle de côtés 8, 15, 17 EST rectangle, puisque 172=289 et 64+225=289 ✓. La réponse est donc fausse, et la faute n'est pas dans le triangle mais dans la SAISIE : l'élève a entré 8 comme plus grand côté alors que c'est le plus petit. Le script fait confiance à l'utilisateur sans rien vérifier, ce qui est le défaut le plus courant des programmes.
5)
Il suffit de ne plus demander à l'utilisateur de repérer le plus grand côté. Une solution consiste à tester les trois égalités possibles : la condition devient sic∗c=a∗a+b∗boua∗a=b∗b+c∗coub∗b=a∗a+c∗c. Une autre consiste à ranger les trois valeurs par ordre croissant avant le test, en réutilisant l'échange de variables de l'exercice 1. Dans les deux cas, le programme devient indépendant de l'ordre de saisie, ce qui est exactement ce qu'on attend d'un test correct.
6)
Parce qu'il n'existe AUCUN triangle de côtés 10, 2 et 3 : l'inégalité triangulaire n'est pas respectée, puisque 2+3=5 est inférieur à 10. Le script répond pourtant « pas rectangle », comme si la question avait un sens. Un bon programme devrait d'abord vérifier que la somme des deux plus petits côtés dépasse le plus grand, et refuser la saisie sinon. Répondre à une question qui n'a pas de sens est aussi grave que répondre faux.
Exercice 4 : L'algorithme d'Euclide par soustractions
Ce script remplace à chaque tour le plus grand des deux nombres par leur différence, jusqu'à ce qu'ils deviennent égaux.
Scratch
quand le drapeau vert est cliqué
mettre a à 156
mettre b à 60
répéter jusqu'à ce que a = b
si a > b alors
mettre a à a - b
sinon
mettre b à b - a
dire a
1) Recopiez et complétez le tableau des valeurs de a et b à chaque tour.
2) Que dit le lutin ?
3) Que calcule ce script ? Vérifiez votre réponse par une décomposition en facteurs premiers.
4) Utilisez ce résultat pour rendre la fraction 15660 irréductible.
5) Que se passe-t-il si l'on saisit a=24 et b=24 au départ ?
6) Que se passe-t-il si l'on saisit a=0 et b=7 ?
Voir la correction
Réponses
1)Cinq tours
2)12
3)Plus grand diviseur commun
4)135
5)24 immédiatement
6)Boucle infinie
1)
On applique la règle tour par tour. Départ : a=156, b=60. Tour 1 : a>b, donc a=156−60=96. Tour 2 : a=96−60=36. Tour 3 : maintenant a<b, donc b=60−36=24. Tour 4 : a>b, donc a=36−24=12. Tour 5 : a<b, donc b=24−12=12. Les deux valeurs sont égales, la boucle s'arrête. Le tableau comporte donc cinq lignes, et il faut à chaque tour REGARDER lequel des deux nombres est le plus grand avant de soustraire.
2)
Le lutin dit 12, la valeur commune de a et de b à la sortie de la boucle.
3)
Ce script calcule le PGCD des deux nombres de départ, c'est-à-dire leur plus grand diviseur commun. Vérification par les facteurs premiers : 156=22×3×13 et 60=22×3×5. Les facteurs communs sont 22 et 3, donc le PGCD vaut 4×3=12 ✓. L'algorithme fonctionne parce qu'un diviseur commun à deux nombres divise aussi leur différence : soustraire ne perd donc aucun diviseur commun, mais fait décroître les nombres jusqu'à les rendre égaux.
4)
On divise le numérateur et le dénominateur par le PGCD, 12 : 15660=156÷1260÷12=135. La fraction est irréductible, car 5 et 13 sont deux nombres premiers distincts, donc leur seul diviseur commun est 1. Diviser par un diviseur commun plus petit, par exemple 4, aurait donné 3915, qui est simplifiée mais pas irréductible : seul le PGCD garantit d'aller au bout en une seule fois.
5)
La condition a=b est vraie AVANT le premier tour, donc la boucle n'est pas exécutée du tout et le lutin dit 24 immédiatement. C'est cohérent, puisque le PGCD d'un nombre avec lui-même est ce nombre. Cela illustre une propriété importante de reˊpeˊterjusqu′aˋceque : le test précède le corps, donc une boucle peut faire zéro tour.
6)
Le programme ne s'arrête JAMAIS. Comme a=0 est plus petit que b=7, c'est b qui est remplacé par b−a=7−0=7 : b ne change pas, a non plus, et la condition a=b reste fausse indéfiniment. On a une boucle infinie, qui bloque le programme. C'est le défaut classique des boucles conditionnelles, et il rappelle qu'un algorithme doit prévoir les cas limites : le plus grand diviseur commun de 0 et 7 existe, il vaut 7, mais cette version par soustractions ne sait pas le trouver. Un cas particulier oublié par le programmeur devient un plantage.
Exercice 5 : Compléter un script : la rosace de douze carrés
Le script ci-dessous trace la rosace de la figure : douze carrés identiques, tous issus du même point, chacun étant l'image du précédent par une rotation de centre ce point.
Une valeur a été effacée dans le dernier bloc.
Scratch
quand le drapeau vert est cliqué
aller à x: 0 y: 0
stylo en position d'écriture
répéter 12 fois
répéter 4 fois
avancer de 60
tourner de 90 degrés vers la droite
tourner de ... degrés vers la droite
1) Quelle valeur manque dans le dernier bloc ? Justifiez.
2) Combien de fois le bloc avancerde60 est-il exécuté ? Quelle est la longueur totale du trait tracé ?
3) Le lutin revient-il à son point de départ à la fin du script ? Et retrouve-t-il sa direction initiale ?
4) On remplace la valeur manquante par 40. La figure se referme-t-elle sur elle-même ?
5) Avec un angle de 40 degrés, combien de répétitions faudrait-il pour que la rosace se referme ?
6) Quelle est la plus grande distance atteinte par le lutin depuis le centre de la rosace ?
Voir la correction
Réponses
1)30°
2)48 fois ; 2 880 pas
3)Oui et oui
4)Rosace de 9 carrés
5)9 répétitions
6)602≈84,9 pas
1)
Il manque 30 degrés. Les douze carrés se partagent un tour complet autour du point de départ, donc la rotation entre deux carrés voisins vaut 12360=30∘. C'est le même calcul que pour un polygone régulier, mais appliqué cette fois à un motif entier et non à un côté.
2)
Le bloc est à l'intérieur des deux boucles, donc il est exécuté 12×4=48 fois. La longueur totale tracée vaut 48×60=2880 pas. Le stylo n'est jamais relevé, donc tout ce que parcourt le lutin est dessiné.
3)
OUI dans les deux cas. Chaque boucle intérieure ramène le lutin à son point de départ, puisqu'un carré est une figure fermée ; les rotations de 30 degrés, elles, ne le déplacent pas. Le lutin est donc toujours au centre entre deux carrés, ce qui explique que les douze carrés aient tous un sommet commun. Quant à la direction, il a tourné 4×90=360 degrés par carré, plus 12×30=360 degrés au total pour les rotations : soit un nombre entier de tours, il regarde donc bien dans sa direction de départ.
4)
Elle se referme, mais pas comme prévu. Avec 40 degrés répétés douze fois, le lutin tourne de 12×40=480 degrés, c'est-à-dire un tour complet plus 120 degrés. Les neuf premiers carrés forment déjà une rosace complète, puisque 9×40=360 ; les trois derniers, tracés après ce tour complet, repassent exactement sur les trois premiers. On voit donc une rosace régulière de NEUF carrés, dont trois sont tracés deux fois, et non une rosace de douze. Une rosace ne se referme que si le produit du nombre de répétitions par l'angle vaut un nombre entier de tours.
5)
Il faudrait 40360=9 répétitions, ce qui donnerait une rosace de neuf carrés. Vérification : 9×40=360 ✓. Plus généralement, avec un angle α qui divise 360, le nombre de carrés d'une rosace complète vaut α360.
6)
Le point le plus éloigné du centre est le sommet du carré opposé au point de départ, c'est-à-dire l'extrémité de la diagonale. Un carré de côté 60 a pour diagonale 602+602=7200=602≈84,9 pas, d'après le théorème de Pythagore. La rosace tient donc dans un disque de rayon environ 85 pas, largement à l'intérieur de la scène qui va de −180 à 180 en ordonnée.
Partie B : problèmes et raisonnement (/50)
Exercice 6 : Deux scripts, un seul résultat
Deux élèves écrivent chacun un script pour le même exercice. Le premier recopie l'énoncé mot à mot, le second affirme avoir trouvé « beaucoup plus court ».
Scratch
SCRIPT 1
mettre r à (x + 5) * (x + 5) - (x - 5) * (x - 5)
SCRIPT 2
mettre s à 20 * x
1) Calculez r et s pour x=3, puis pour x=−7.
2) Quelle conjecture formulez-vous ?
3) Démontrez-la en développant les deux carrés.
4) Démontrez-la une seconde fois en utilisant a2−b2=(a+b)(a−b).
5) Comptez les opérations effectuées par chaque script. Lequel est le plus rapide ?
6) Pour quelle valeur de x le résultat vaut-il 100 ? Peut-il valoir 7 ?
Voir la correction
Réponses
1)60 et 60 ; −140 et −140
2)r=s=20x
3)20x
4)(2x)×10=20x
5)5 opérations contre 1
6)x=5 ; x=0,35
1)
Pour x=3 : r=(3+5)2−(3−5)2=82−(−2)2=64−4=60, et s=20×3=60. Pour x=−7 : r=(−2)2−(−12)2=4−144=−140, et s=20×(−7)=−140. Attention au carré d'un nombre négatif, qui est POSITIF : écrire (−2)2=−4 fausse tout l'exercice.
2)
Les deux scripts semblent donner le même résultat, égal à 20 fois le nombre choisi. Deux essais concordants ne prouvent rien, mais ils indiquent quoi démontrer.
3)
On développe séparément : (x+5)2=x2+10x+25 et (x−5)2=x2−10x+25. La différence vaut (x2+10x+25)−(x2−10x+25)=x2+10x+25−x2+10x−25=20x. Le point délicat est le signe : soustraire une parenthèse change le signe de CHACUN de ses termes, ce qui transforme −10x en +10x. Les deux scripts calculent donc bien la même chose, pour toute valeur de x.
4)
On reconnaît une différence de deux carrés avec a=x+5 et b=x−5. Alors a2−b2=(a+b)(a−b)=((x+5)+(x−5))×((x+5)−(x−5))=(2x)×(10)=20x ✓. Cette seconde démonstration tient en une ligne et ne développe aucun carré : reconnaître l'identité remarquable AVANT de développer est ce qui fait gagner du temps au brevet.
5)
Le script 1 effectue deux additions ou soustractions pour former x+5 et x−5, deux multiplications pour les carrés et une soustraction finale, soit 5 opérations. Le script 2 en effectue une seule. Le second est donc cinq fois plus économique, pour un résultat rigoureusement identique. C'est exactement ce que sert à faire le calcul littéral : simplifier une expression avant de la calculer, que ce soit à la main ou par un programme.
6)
On résout 20x=100, donc x=5. Vérification avec le script 1 : (5+5)2−(5−5)2=100−0=100 ✓. Le résultat peut aussi valoir 7 : il suffit de prendre x=207=0,35, et le script accepte parfaitement les nombres décimaux. Toute valeur est donc atteignable, ce qui n'était pas le cas de la fonction de l'exercice 2, qui ne descendait jamais sous −16.
Exercice 7 : Un seuil de croissance
La population d'une ville est de 12000 habitants et augmente de 8 pour cent par an. Le script cherche au bout de combien d'années elle dépassera 20000 habitants.
Scratch
quand le drapeau vert est cliqué
mettre population à 12000
mettre annee à 0
répéter jusqu'à ce que population > 20000
mettre population à population * 1.08
mettre annee à annee + 1
dire annee
1) Pourquoi multiplier par 1,08 correspond-il à une hausse de 8 pour cent ?
2) Complétez le tableau des populations, arrondies à l'unité, pour les sept premières années.
3) Que dit le lutin ?
4) Un élève affirme qu'il suffit de diviser : 12000×0,0820000−12000, soit environ 8,3, donc 9 ans. Pourquoi se trompe-t-il ?
5) De quel pourcentage la population a-t-elle augmenté au total sur ces sept années ?
6) On remplace la condition par population>24000. Que dit alors le lutin ?
Voir la correction
Réponses
1)1+1008
2)… 19 042 ; 20 566
3)7
4)Hausses composées
5)≈71,4 %
6)10
1)
Augmenter de 8 pour cent, c'est ajouter 1008=0,08 fois la valeur de départ, donc obtenir 1×p+0,08×p=1,08p. Le nombre 1,08 s'appelle le coefficient multiplicateur, et c'est lui qui permet d'enchaîner plusieurs hausses par de simples multiplications.
2)
On multiplie chaque ligne par 1,08. Année 1 : 12960. Année 2 : 13997. Année 3 : 15117. Année 4 : 16326. Année 5 : 17632. Année 6 : 19042. Année 7 : 20566. C'est bien à la septième année que le seuil de 20000 est franchi, la sixième restant en dessous avec 19042 habitants.
3)
Le lutin dit 7. Il faut lire les DEUX dernières lignes du tableau pour être sûr : la sixième année donne 19042, qui ne dépasse pas 20000, donc un septième tour est effectué, et il porte la population à 20566, qui dépasse le seuil. La boucle s'arrête alors, avec annee=7.
4)
Parce qu'il traite la hausse comme si elle était toujours calculée sur la population de DÉPART, 12000, soit 960 habitants chaque année. En réalité, la hausse de la deuxième année porte sur 12960 et vaut donc 1037 habitants, celle de la troisième porte sur 13997, et ainsi de suite : les hausses grossissent, donc le seuil est atteint plus vite. Son raisonnement donne 9 ans au lieu de 7 : il oublie que les pourcentages successifs se MULTIPLIENT et ne s'additionnent pas. Coût de l'erreur : deux ans d'écart sur une prévision, c'est-à-dire une décision d'urbanisme prise trop tard.
5)
La population est passée de 12000 à 20566 habitants, donc elle a été multipliée par 1,087≈1,714 : la hausse totale est d'environ 71,4 pour cent. Ce n'est PAS 7×8=56 pour cent, et l'écart de plus de quinze points vient entièrement du fait que chaque hausse s'applique au total déjà augmenté. Vérification directe : 1200020566−12000≈0,714 ✓.
6)
Il faut poursuivre le tableau. Année 8 : 22211. Année 9 : 23988, encore en dessous de 24000, de justesse. Année 10 : 25907. Le lutin dit donc 10. Ce cas montre l'intérêt de garder deux décimales pendant les calculs : arrondir la neuvième année à 24000 aurait conduit à répondre 9, alors que la valeur exacte, 23988,1, reste strictement inférieure au seuil.
Exercice 8 : Cinq affirmations à corriger
Chacune des cinq affirmations suivantes est FAUSSE. Dites pourquoi et donnez l'énoncé correct.
1) « Pour échanger deux variables, il suffit d'écrire mettreaaˋb puis mettrebaˋa. »
2) « Une boucle reˊpeˊterjusqu′aˋcequea=b finit toujours par s'arrêter. »
3) « Un script qui donne le même résultat pour dix valeurs testées donnera toujours ce résultat. »
4) « Le bloc nombrealeˊatoireentre1et6 donne un résultat différent à chaque exécution, donc le script contient une erreur. »
5) « Pour tracer un polygone régulier à n côtés, le lutin doit tourner de n(n−2)×180 degrés à chaque sommet. »
Voir la correction
Réponses
1)Il faut une variable auxiliaire
2)Non : boucle infinie possible
3)Des essais ne prouvent rien
4)L'aléatoire doit varier
5)Tourner de n360
1)
FAUX. Énoncé correct : « il faut une variable auxiliaire, ou bien la suite de trois affectations de l'exercice 1 ». Avec la version proposée, la première instruction écrase a, dont l'ancienne valeur est alors définitivement perdue : partant de a=12 et b=5, on obtient a=5 puis b=5. Les deux variables finissent égales au lieu d'être échangées.
2)
FAUX. Énoncé correct : « cette boucle s'arrête si le corps fait effectivement évoluer a ou b vers l'égalité ». Contre-exemple vu à l'exercice 4 : avec a=0 et b=7, l'instruction mettrebaˋb−a laisse b inchangé, la condition reste fausse et le programme tourne indéfiniment. Une boucle conditionnelle n'offre aucune garantie d'arrêt, contrairement à reˊpeˊternfois.
3)
FAUX. Énoncé correct : « des essais concordants ne font que suggérer une conjecture ; seule une démonstration par le calcul littéral établit un résultat ». Contre-exemple célèbre : le script qui calcule n2−n+41 donne un nombre PREMIER pour toutes les valeurs de n de 0 à 40, par exemple 1601 pour n=40. Mais pour n=41, il donne 412−41+41=412=1681, qui est divisible par 41 : la propriété tombe exactement à la quarante et unième valeur. Quarante essais réussis n'avaient donc rien prouvé du tout.
4)
FAUX. Énoncé correct : « ce bloc doit précisément donner des résultats différents, c'est son rôle ». Un générateur aléatoire sert à simuler le hasard : c'est parce qu'il varie qu'on peut simuler 60 lancers de dé et comparer les fréquences obtenues à la probabilité théorique. Un programme qui donnerait toujours le même tirage serait, lui, inutilisable.
5)
FAUX, la formule donnée est celle de l'angle INTÉRIEUR. Énoncé correct : « le lutin tourne de n360 degrés ». Pour un hexagone régulier, la formule fausse donnerait 64×180=120 degrés, alors que le lutin doit tourner de 6360=60 degrés. Les deux angles sont supplémentaires, puisque 120+60=180 : le lutin arrive dans le prolongement du côté et se rabat, il tourne donc de l'angle extérieur. Avec 120 degrés, la somme des rotations vaudrait 720 degrés, soit deux tours, et le lutin repasserait deux fois sur un triangle au lieu de tracer un hexagone.
Exercice 9 : Problème : le remplissage d'un récipient
Un récipient de 4,5 litres se remplit à débit constant. Le script simule le remplissage minute par minute. Le graphique donne le volume pour les six premières minutes seulement.
Scratch
quand le drapeau vert est cliqué
mettre volume à 0
mettre temps à 0
répéter jusqu'à ce que volume >= 4500
mettre volume à volume + 250
mettre temps à temps + 1
dire temps
1) Lisez sur le graphique le volume atteint après 6 minutes, puis donnez le débit en millilitres par minute.
2) Le volume est-il proportionnel au temps ? Justifiez.
3) Que dit le lutin à la fin du script ? Justifiez par un calcul.
4) À quel instant le récipient est-il à moitié plein ?
5) On remplace volume≥4500 par volume>4500. Que dit alors le lutin ?
6) Le récipient présente une fuite de 30 mL par minute. Combien de minutes faut-il alors pour le remplir ?
Voir la correction
Réponses
1)1 500 mL ; 250 mL/min
2)Oui
3)18
4)9 minutes
5)19 : débordement
6)21 minutes
1)
Le graphique donne 1500 mL après 6 minutes. Le débit vaut donc 61500=250 mL par minute, ce que confirme le script, où chaque tour ajoute 250 à la variable volume.
2)
OUI. Les points sont alignés avec l'origine, et le quotient du volume par le temps vaut 250 à chaque relevé : 1250=2500=61500=250 ✓. C'est la signature d'une situation de proportionnalité, et 250 en est le coefficient.
3)
Le lutin dit 18. En effet 4,5 litres valent 4500 mL, et il faut 2504500=18 tours de boucle pour les atteindre. Au dix-huitième tour, le volume vaut exactement 4500 : la condition volume≥4500 est alors vraie, puisque l'inégalité est large, et la boucle s'arrête.
4)
La moitié de 4500 mL vaut 2250 mL, atteints au bout de 2502250=9 minutes. C'est bien la moitié du temps total, ce qui n'est vrai que parce que le remplissage est proportionnel : avec un débit variable, la moitié du volume ne serait pas atteinte à la moitié du temps.
5)
Le lutin dit 19. Avec l'inégalité STRICTE, la valeur 4500 atteinte au dix-huitième tour ne suffit plus à arrêter la boucle : un dix-neuvième tour est effectué, portant le volume à 4750 mL, ce qui ferait déborder le récipient de 250 mL. Un seul symbole change, et le programme passe d'un remplissage exact à un débordement : c'est la raison pour laquelle les conditions de seuil se relisent toujours deux fois.
6)
Chaque minute, le récipient gagne 250 mL et en perd 30 : le débit NET vaut 250−30=220 mL par minute. Il faut donc 2204500≈20,45 minutes, c'est-à-dire 21 tours de boucle, puisqu'une minute ne se coupe pas en deux dans ce script. Au vingtième tour le volume vaut 4400 mL, encore insuffisant, et au vingt et unième il vaut 4620 mL ✓. On remarque que la fuite ne représente que 12 pour cent du débit mais rallonge le remplissage de trois minutes : c'est le débit net, et non le débit d'arrivée, qui commande tout.
Exercice 10 : Problème : la suite de motifs
Les motifs ci-dessous sont construits en croix : le motif de numéro n possède un carreau central et quatre branches de n carreaux chacune.
Le script doit annoncer le nombre de carreaux du motif dont on saisit le numéro. Une expression a été effacée.
Scratch
quand le drapeau vert est cliqué
demander "numéro du motif ?" et attendre
mettre n à réponse
mettre carreaux à ...
dire carreaux
1) Comptez les carreaux des motifs 1, 2 et 3.
2) Quelle expression faut-il écrire dans le bloc effacé ? Justifiez.
3) Combien de carreaux comptent le motif 10 et le motif 25 ?
4) Existe-t-il un motif de 100 carreaux ? Justifiez.
5) Écrivez le script qui, à partir du nombre de carreaux, retrouve le numéro du motif. Testez-le avec 61.
6) Le périmètre du motif n, compté en côtés de carreaux, vaut 8n+4. Vérifiez-le sur les trois motifs dessinés, puis trouvez le motif de périmètre 100.
Voir la correction
Réponses
1)5, 9, 13
2)4*n+1
3)41 et 101
4)Non : 4n+1 impair
5)Motif 15
6)Motif 12
1)
Motif 1 : 5 carreaux. Motif 2 : 9 carreaux. Motif 3 : 13 carreaux. On peut compter directement sur la figure, ou raisonner : un carreau central plus quatre branches de même longueur.
2)
Il faut écrire 4∗n+1. La justification vient de la construction elle-même, pas de la suite des nombres : il y a 4 branches de n carreaux, soit 4n carreaux, auxquels s'ajoute le carreau CENTRAL, qui n'appartient à aucune branche. Contrôles : 4×1+1=5 ✓, 4×2+1=9 ✓, 4×3+1=13 ✓. Remarquer seulement que l'on ajoute 4 à chaque fois ne suffirait pas à justifier la formule, cela ne dirait pas d'où vient le +1.
NON. Le nombre 4n+1 est toujours IMPAIR, puisque 4n est pair et qu'on lui ajoute 1 : aucun motif ne peut donc compter un nombre pair de carreaux, et 100 est pair. On peut aussi le voir en résolvant 4n+1=100, qui donne n=499=24,75 : ce n'est pas un entier, donc aucun motif ne convient. L'argument de parité est plus rapide et se transporte à toutes les questions du même genre.
5)
Il faut inverser l'opération : à partir de c carreaux, on retire d'abord le carreau central puis on partage en quatre branches, ce qui donne le bloc mettrenaˋ(c−1)/4. Test avec 61 : 461−1=460=15, c'est donc le motif 15. Vérification par le premier script : 4×15+1=61 ✓. L'ordre des opérations est imposé par l'inverse du programme direct : soustraire AVANT de diviser, car le programme direct multipliait avant d'ajouter.
6)
Motif 1 : le contour de la croix compte 12 côtés, et 8×1+4=12 ✓. Motif 2 : 20 côtés, et 8×2+4=20 ✓. Motif 3 : 28 côtés, et 8×3+4=28 ✓. La formule se justifie ainsi : les 4n+1 carreaux offrent 4(4n+1)=16n+4 côtés au total, mais chacun des 4n contacts entre deux carreaux voisins en cache DEUX, d'où 16n+4−8n=8n+4. Enfin, 8n+4=100 donne 8n=96 et n=12 : c'est le motif 12, qui compte 4×12+1=49 carreaux. On note que le périmètre grandit deux fois plus vite que le nombre de carreaux, ce qui est le contraire de ce qui se passe pour un carré plein.
Partie C : les classiques (/50)
Exercice 11 : Le nombre mystère
Le script choisit un nombre entier au hasard entre 1 et 100. Le joueur propose des nombres, et le lutin répond « plus grand » ou « plus petit » jusqu'à ce que le joueur trouve.
Scratch
quand le drapeau vert est cliqué
mettre mystère à nombre aléatoire entre 1 et 100
mettre essais à 0
répéter jusqu'à ce que réponse = mystère
demander "Ton nombre ?" et attendre
ajouter 1 à essais
si réponse < mystère alors
dire "plus grand" pendant 1 secondes
si réponse > mystère alors
dire "plus petit" pendant 1 secondes
dire essais
1) Le nombre mystère est 37. Le joueur propose 50, puis 25, puis 37. Que dit le lutin après 50, après 25, et quel nombre d'essais annonce-t-il à la fin ?
2) Un joueur propose toujours le milieu de l'intervalle qui reste possible. Montrez qu'il trouve toujours en 7 essais au plus.
3) Pourquoi 6 essais ne suffisent-ils pas toujours ?
4) Avec des nombres de 1 à 1000, combien d'essais faut-il au plus avec cette stratégie ?
5) Quelle est la probabilité de trouver le nombre mystère du premier coup en proposant un nombre au hasard ?
Voir la correction
Réponses
1)« plus petit », « plus grand » ; 3 essais
2)27=128≥100
3)26=64<100
4)10 essais
5)0,01
1)
Après 50 : 50 est plus grand que 37, le lutin dit « plus petit ». Après 25 : il dit « plus grand ». Au troisième essai, la boucle s'arrête et le lutin annonce 3 essais. Le piège est de lire « plus petit » comme une description de la proposition : le lutin indique dans quel sens chercher.
2)
Chaque essai au milieu élimine au moins la moitié des nombres encore possibles. En partant de 100 nombres, il en reste au plus 50 après un essai, puis 25, 12, 6, 3, 1 : au septième essai, un seul nombre reste possible, et c'est le bon. On retient que 27=128 dépasse 100.
3)
Avec 6 essais, on ne peut distinguer que 26=64 cas, moins que les 100 nombres possibles : pour certains nombres mystères, il restera encore deux candidats après six essais.
4)
Il faut la plus petite puissance de 2 qui dépasse 1000 : 210=1024. Dix essais suffisent. Dix fois plus de nombres ne demandent que trois essais de plus : c'est la force de la recherche par dichotomie.
5)
Un nombre sur 100 équiprobables : 1001=0,01.
Le fil : couper l'intervalle en deux à chaque essai fait décroître les possibilités comme des puissances de 2.
Exercice 12 : Une liste et sa moyenne
Le script range cinq notes dans une liste nommée notes, puis parcourt la liste pour en calculer la moyenne. On saisit, dans l'ordre, 12, 15, 9, 14 et 10.
Scratch
quand le drapeau vert est cliqué
supprimer tous les éléments de la liste notes
répéter 5 fois
demander "note ?" et attendre
ajouter réponse à notes
mettre somme à 0
mettre i à 1
répéter longueur de notes fois
ajouter élément i de notes à somme
ajouter 1 à i
dire somme / longueur de notes
1) Combien d'éléments la liste contient-elle ? Que vaut l'élément 3 ?
2) Que vaut somme à la fin de la seconde boucle ?
3) Que dit le lutin ?
4) Un élève déplace le bloc mettreiaˋ1 à l'intérieur de la seconde boucle. Que dit alors le lutin avec ces cinq notes ? Et avec les notes 15, 12, 9, 14, 10 ?
5) Pour trouver la plus grande note, on part de max= élément 1 et, pour chaque élément, on remplace max si l'élément est plus grand. Quelle valeur trouve-t-on ? Pourquoi ne faut-il pas partir de max=0 si les valeurs peuvent être négatives ?
Voir la correction
Réponses
1)5 éléments ; élément 3 : 9
2)60
3)12
4)12 par hasard, puis 15
5)15 ; partir du premier élément
1)
La liste contient 5 éléments, dans l'ordre de saisie : 12 ; 15 ; 9 ; 14 ; 10. L'élément 3 est 9.
2)
La boucle ajoute l'élément i puis augmente i : 12+15+9+14+10=60.
3)
560=12.
4)
Si i est remis à 1 à chaque tour, la boucle ajoute cinq fois l'élément 1. Avec ces notes : 5×12=60, et le lutin dit encore 12, la bonne réponse, par pur hasard, parce que la première note est égale à la moyenne. Avec 15 en premier : 5×15=75 et le lutin dit 15 au lieu de 12. Un test qui réussit ne prouve pas qu'un script est juste.
5)
On trouve 15. Partir de 0 marcherait ici, mais si toutes les valeurs étaient négatives, par exemple des températures, aucune ne dépasserait 0 et le script annoncerait 0, qui n'est pas dans la liste. Partir du premier élément garantit une réponse qui appartient à la liste.
Le fil : on suit les variables tour par tour, et l'on choisit des tests qui peuvent faire échouer le script, pas seulement le confirmer.
Exercice 13 : Un bloc personnalisé : des carrés emboîtés
On a créé un bloc personnalisé carreˊ qui reçoit une longueur co^teˊ et trace un carré de ce côté. Le script principal l'utilise cinq fois, en partant toujours du même point et dans la même direction.
Scratch
définir carré (côté)
répéter 4 fois
avancer de côté
tourner de 90 degrés vers la droite
quand le drapeau vert est cliqué
aller à x: 0 y: 0
s'orienter à 90
stylo en position d'écriture
mettre taille à 20
répéter 5 fois
carré (taille)
ajouter 20 à taille
1) Quelle est la longueur du côté du plus petit carré ? Du plus grand ?
2) Quelle distance totale le lutin parcourt-il, stylo baissé ?
3) Que vaut la variable taille à la fin du script ?
4) Quelle est l'aire du plus grand carré, en pas carrés ? Par combien l'aire du plus petit est-elle multipliée pour obtenir celle du plus grand ?
5) On remplace ajouter20aˋtaille par mettretailleaˋtaille∗2. Quelle est la longueur du côté du dernier carré tracé ?
Voir la correction
Réponses
1)20 et 100 pas
2)1 200 pas
3)120
4)10 000 ; aire ×25
5)320 pas
1)
taille vaut 20 au premier appel, puis 40, 60, 80 et 100 : le plus petit carré a 20 pas de côté, le plus grand 100.
2)
Chaque carré fait parcourir quatre fois son côté : 4×(20+40+60+80+100)=4×300=1200 pas. Les carrés se superposent en partie le long de deux côtés, mais le lutin, lui, parcourt bien toute cette distance.
3)
taille est augmentée APRÈS chaque carré, y compris après le cinquième : elle vaut 120 à la fin, alors qu'aucun carré de 120 n'a été tracé. Le piège est de répondre 100.
4)
100×100=10000 pas carrés. Le côté est multiplié par 5, donc l'aire par 52=25 : 400×25=10000 ✓.
5)
Les côtés deviennent 20, 40, 80, 160 et 320 : le dernier carré a 320 pas de côté. Il sort très probablement de la scène, qui ne mesure que 480 pas sur 360.
Le fil : un bloc personnalisé exécute le même tracé avec une valeur différente à chaque appel ; on suit la variable pour savoir quelle valeur il reçoit.
Exercice 14 : Problème : simuler 600 lancers de dé
Le script simule 600 lancers d'un dé équilibré et compte les 6 obtenus. Il annonce la fréquence des 6.
Scratch
quand le drapeau vert est cliqué
mettre six à 0
répéter 600 fois
mettre dé à nombre aléatoire entre 1 et 6
si dé = 6 alors
ajouter 1 à six
dire six / 600
1) Combien de 6 peut-on espérer sur 600 lancers ?
2) Lors d'une exécution, le lutin dit 0,17. Combien de 6 ont été obtenus ?
3) Une seconde exécution donne 0,155. Le script est-il faux ?
4) On modifie le script pour lancer deux dés à chaque tour et compter les sommes égales à 7. Vers quelle fréquence doit-on s'attendre, au millième ?
5) Un élève remplace les deux dés par un seul bloc nombrealeˊatoireentre2et12. Quelle fréquence des 7 obtiendra-t-il alors, au millième ? Pourquoi sa simulation est-elle fausse ?
Voir la correction
Réponses
1)100
2)102
3)Non : fluctuation
4)61≈0,167
5)111≈0,091 : faux
1)
La probabilité d'un 6 vaut 61, donc on peut espérer 6600=100 six.
2)
0,17×600=102 six.
3)
Non. Chaque exécution tire de nouveaux nombres au hasard, et la fréquence fluctue autour de 61≈0,167 : 102 puis 93 six sur 600 lancers sont des résultats ordinaires. Un script qui donnerait toujours la même fréquence serait au contraire suspect.
4)
La somme 7 s'obtient avec 6 couples sur 36 : fréquence attendue 366=61≈0,167.
5)
Le bloc donne l'un des 11 entiers de 2 à 12 avec la même probabilité : la fréquence des 7 tournera autour de 111≈0,091. C'est faux, parce que les sommes de deux dés ne sont PAS équiprobables : 7 est six fois plus fréquent que 2. Une simulation doit reproduire l'expérience, pas seulement l'ensemble des résultats possibles.
Le fil : une simulation donne une fréquence qui fluctue autour de la probabilité, à condition de reproduire fidèlement l'expérience.
Exercice 15 : Problème : la suite de Syracuse
On choisit un entier n supérieur ou égal à 1. S'il est pair, on le divise par 2 ; s'il est impair, on le multiplie par 3 et on ajoute 1. On recommence jusqu'à obtenir 1, et le script compte les étapes.
Scratch
quand le drapeau vert est cliqué
demander "Nombre de départ ?" et attendre
mettre n à réponse
mettre étapes à 0
répéter jusqu'à ce que n = 1
si n modulo 2 = 0 alors
mettre n à n / 2
sinon
mettre n à 3 * n + 1
ajouter 1 à étapes
dire étapes
1) Déroulez le script pour n=6. Combien d'étapes annonce le lutin ?
2) Déroulez-le pour n=7. Combien d'étapes, et quelle est la plus grande valeur atteinte ?
3) Combien d'étapes pour n=16 ? Pourquoi est-ce si rapide ?
4) Que dit le lutin si l'on saisit 1 ?
5) Pour n=27, le script s'arrête après 111 étapes. Peut-on affirmer qu'il s'arrête pour tout entier de départ ?
Voir la correction
Réponses
1)8 étapes
2)16 étapes ; 52
3)4 étapes
4)0
5)Non : conjecture ouverte
1)
6→3→10→5→16→8→4→2→1 : huit étapes, le lutin dit 8.
2)
7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2→1 : seize étapes. La plus grande valeur atteinte est 52. Partir d'un nombre plus grand ne garantit pas d'arriver plus vite ou plus lentement : 7 demande deux fois plus d'étapes que 6.
3)
16→8→4→2→1 : quatre étapes. 16=24 est une puissance de 2 : on ne rencontre que des nombres pairs, divisés par 2 à chaque étape.
4)
La condition d'arrêt n=1 est vraie dès le départ : la boucle ne s'exécute pas, et le lutin dit 0.
5)
Non. Des essais, même sur des milliards d'entiers, ne démontrent rien pour TOUS les entiers. Personne n'a jamais démontré que la suite atteint toujours 1 : c'est une conjecture, célèbre et toujours ouverte. Rien n'exclut, en l'état des connaissances, un entier pour lequel le script tournerait sans fin.
Le fil : dérouler un script, c'est suivre la variable étape par étape ; mais aucun nombre d'exécutions ne remplace une démonstration.
Il manque quelque chose dans cette série ?Un type d'exercice que ton prof donne, un énoncé qui te bloque, une erreur repérée : dis-le-moi, je lis chaque demande.
L'envoi passe par ton espace gratuit : c'est ce qui me permet de te répondre et de te prévenir quand l'exercice est ajouté. Un courriel suffit, pas de mot de passe. Crée ton espace.
Pas envie de créer un compte ? Écris-moi directement.
Votre enfant perd les points de l'exercice d'algorithmique au brevet ?
Contactez-moi pour une première séance. L'exercice de programmation du brevet ne demande aucune connaissance nouvelle : il se gagne entièrement avec la méthode du tableau de valeurs, qui s'apprend en une séance et se rentabilise ensuite sur les fonctions et les équations.