Algorithmique - LYCÉE PAUL DUEZ

publicité
Algorithmique
En l'an 2132, une planète habitée a été découverte aux confins de la galaxie, et baptisée
Algoréa. Dix ans plus tard, vous êtes envoyé(e) en mission autour de cette planète dans le
but d'établir un tout premier contact avec ses habitants. Malheureusement, la comète Hal
a percuté votre vaisseau alors que vous vous approchiez d'Algoréa. Vous avez été
contraint(e) de vous éjecter en urgence dans une capsule de sauvetage. Vous atterrissez
sur la planète avec pour seul bagage un robot de maintenance.
Isolé(e) sur ce globe lointain, vous allez donc rencontrer ses habitants, découvrir leurs
coutumes et créer des liens afin d'entamer une relation pacifique en attendant que la
prochaine mission vienne vous récupérer. Vous allez pour cela profiter des capacités de
votre robot ! Celui-ci est accompagné d'un manuel, qui vous sera bien utile dans votre
parcours. Ce robot est capable d'imprimer du texte, d'afficher des caractères sur un écran,
de se déplacer et de bouger des objets.
T. Sautiere / France IOI
I.
Introduction
Avez-vous déjà ouvert un livre de recettes de cuisine ? Avez-vous déjà déchiffré un mode d’emploi traduit
directement du coréen pour faire fonctionner un magnétoscope ou un répondeur téléphonique réticent ?
Si oui, sans le savoir, vous avez déjà exécuté des algorithmes.
Plus fort : avez-vous déjà indiqué un chemin à un touriste égaré ? Avez-vous fait chercher un objet à
quelqu’un par téléphone ? Ecrit une lettre anonyme stipulant comment procéder à une remise de
rançon ? Si oui, vous avez déjà fabriqué – et fait exécuter – des algorithmes.
Comme quoi, l’algorithmique n’est pas un savoir ésotérique réservé à quelques rares initiés touchés par
la grâce divine, mais une aptitude partagée par la totalité de l’humanité. Donc, pas d’excuses…
Algorithme : Un algorithme est une suite finie de règles à appliquer dans un ordre déterminé à un
nombre fini de données pour arriver avec certitude, en un nombre fini d’étapes, à un certain résultat et
cela, indépendamment des données.
Programme : Un programme informatique est une suite d’instructions ou séquence d’instructions.
C’est la réalisation informatique d’un ou plusieurs algorithmes. Il dépend du langage.
Compilateur et compilation : Le compilateur est un programme qui traduit un code écrit dans un
langage de programmation en langage dit "machine", compréhensible par l’ordinateur. La compilation
est le fait de traduire un programme afin que l’ordinateur le comprenne.
Langage interprété : Un langage interprété est converti en instructions propres à la machine au fur
et à mesure de son exécution.
Mot-clé : Un mot-clé est une composante du langage et fait partie de sa grammaire qui comprend
également les opérateurs numériques.
En Python :
Liste obtenue à l’aide du programme Python suivant :
Instruction : Ce terme est assez vague et dépend en général du langage. On peut considérer qu’une
instruction est une expression syntaxiquement correcte pour un langage donné.
II.
Les outils
Tu auras besoin de feuilles et crayon, car avant de te jeter sur un PC tu dois apprendre
à réfléchir sur l’algorithme que tu veux construire avant d’en rédiger un programme dans le
langage choisi.
Nous utiliserons scratch : https://scratch.mit.edu/projects/editor/?tip_bar=getStart
Le langage Python : https://www.jetbrains.com/pycharm-edu/
Et surtout ta calculatrice Ti premium CE ou 82 Advance
III. Les conventions d’écriture d’un algorithme en pseudo-code.
La notation appelée « pseudo-code », ressemble à un langage de programmation authentique dont on
aurait évacué la plupart des problèmes de syntaxe. Ce pseudo-code est susceptible de varier légèrement
d’un livre (ou d’un enseignant) à un autre. C’est bien normal : le pseudo-code, encore une fois, est
purement conventionnel ; aucune machine n’est censée le reconnaître. Donc, chaque cuisinier peut faire
sa sauce à sa guise, avec ses petites épices bien à lui, sans que cela prête à conséquence.
Comme je n’ai pas moins de petites manies que la majorité de mes semblables, le pseudo-code que vous
découvrirez dans les pages qui suivent possède quelques spécificités mineures qui ne doivent qu’à mes
névroses personnelles.
Rassurez-vous cependant, celles-ci restent dans les limites tout à fait acceptables.
En tout cas, personnellement, je les accepte très bien.
# Il est essentiel de commenter son algorithme, pour en améliorer sa compréhension.
DEBUT
Allez tout droit jusqu’au prochain carrefour
# Instruction
SI la rue à droite est autorisée à la circulation ALORS # Structure conditionnelle
Tourner à droite
Avancer
Prenez la deuxième à gauche
SINON # En vert nous écrivons les mots clés de notre langage pseudo-code
Continuez jusqu’à la prochaine rue à droite
Prenez cette rue
Prenez la première à droite
FIN_SI
FIN
VARIABLE Temp TYPE_ENTIER # Déclaration des variables utilisées et de leur type.
DEBUT
ECRIRE "Entrez la température de l’eau :" # SORTIE
LIRE Temp # Affectation externe. # ENTREE
SI Temp ≤ 0 ALORS
# TRAITEMENT
ECRIRE "C’est de la glace" # SORTIE
SINON # TRAITEMENT
SI Temp < 100 ALORS
# TRAITEMENT
ECRIRE "C’est du liquide" # SORTIE
SINON
ECRIRE "C’est de la vapeur" # SORTIE
FIN_SI
FIN_SI
FIN
Les mots clés, du langage pseudo-code, utilisés dans ce document :
DEBUT
FIN
SI
ALORS
PAS
FAIRE
FIN_POUR
TANT_QUE
SOUS_PROGRAMME
FIN_SI
SELON
VARIABLE(S)
ECRIRE
JUSQU_A
LIRE
RETOURNER
A
DE
PREND_LA_VALEUR CONSTANTE
SINON
FIN_TANT_QUE
REPETER
POUR
Les types de données que nous allons manipuler :
TYPE_ENTIER TYPE_REEL TYPE_BOOLEEN TYPE_CHAINE
# On précèdera les commentaires nécessaires à la compréhension d’un algorithme par le symbole dièse.
IV. Introduction : Découverte de l’algorithmique
Défi n°1
Sur l'étroit chemin qui mène à la montagne, vous parvenez à une énorme porte qui vous empêche de
passer. Les villageois vous ont prévenu que la clé de cette porte demeure dans le fourré qui se trouve
juste à côté. Celui-ci est organisé selon des cases avec des pièges et des buissons, dont on vous a fourni
le plan.
Cependant, vous n'êtes pas sûr que le plan soit tout à fait exact et vous redoutez les pièges du fourré.
Vous décidez donc d'envoyer votre robot chercher la clé pour vous.
Ce que doit faire votre algorithme :
Votre algorithme doit diriger votre robot dans la grille suivante :
Le robot
clé
se trouve initialement à l'entrée du fourré et doit atteindre la case où se trouve la
sans passer par les cases où se trouvent des buissons infranchissables
contiennent un piège
ni celles qui
. Vous n'avez pas besoin de programmer le chemin retour.
Pour déplacer le robot dans le fourré, nous proposons les quatre sous-programmes suivants :
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐡𝐚𝐮𝐭()
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐛𝐚𝐬()
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
Méthode de recherche d’un algorithme(IOI) :
Lisez bien le sujet, et reformulez-le.
Faites la liste des dimensions du sujet.
Cherchez une bonne représentation visuelle du problème.
Générez des exemples, et résolvez-les entièrement à la main.
Décrivez la solution naïve, puis essayez de l'améliorer.
Simplifiez le problème, puis généralisez-les solutions obtenues.
Changez de point de vue, en envisageant les algorithmes classiques.
Appliquez cette méthode à tous les sous-problèmes rencontrés.
Mon algorithme du défi 1 :
https://www.dropbox.com/s/h4no8nqmwjpziov/laby.png?dl=0
A vous de construire dans Scratch ce
module qui vous permettra de
déplacer votre robot dans le
labyrinthe en respectant les
contraintes.
https://www.dropbox.com/s/lrklrc63vc8n1mt/robot.png?dl=0
On appelle ce morceau de code un sous-programme (ou
fonction ou procédure). On peut découper un problème
en plusieurs sous problèmes pour faciliter sa
résolution.
Si tu as trop de difficultés à recopier ce programme tu peux le
télécharger ici :
https://www.dropbox.com/s/pog37uf6r4r138b/Defi1.sb2?dl=0
Créez un sous-programme solution qui permet de simuler une solution au problème.
Défi n°2
Vous avancez prudemment sur une corniche le long d'une falaise ; vous devez accéder au sommet de la
paroi.
Vous tombez finalement sur un renfoncement. Au fond de cette petite grotte se trouve un magnifique
empilement de quatre gros disques de pierre ! En déplaçant cette pile de disques sur la corniche, vous
pourrez l'escalader et atteindre le haut de la falaise.
Structure actuelle de la grotte
Résultat recherché
L'empilement est malheureusement très lourd, même pour votre robot : celui-ci ne peut porter qu'un
seul disque à la fois. De plus, il semble évident qu'un disque ne pourra pas supporter un disque plus
gros que lui. Moyennant cela, il va vous falloir reformer l'empilement à l'entrée de la grotte, dans un
espace très exigu.
Ce que doit faire votre algorithme :
On peut considérer qu'il y a trois zones dans la grotte :
Zone 1 : le fond, où se trouvent les quatre cylindres, empilés du plus large au plus étroit ;
Zone 2 : le centre, où vous pouvez placer temporairement des disques les uns au-dessus des autres ;
Zone 3 : l'entrée de la grotte, où vous devez reformer l'empilement complet.
Le but est de déplacer tous les disques de la zone 1 à la zone 3 en respectant ces deux règles :
On ne peut déplacer qu'un disque à la fois, car ils sont très lourds ;
On ne peut jamais poser un disque sur un disque plus petit que lui, car sinon l'empilement s'effondrerait !
Le robot peut exécuter cette procédure (instruction) :
Déplacer (𝑧𝑜𝑛𝑒𝑆𝑜𝑢𝑟𝑐𝑒 , 𝑧𝑜𝑛𝑒𝐷𝑒𝑠𝑡𝑖𝑛𝑎𝑡𝑖𝑜𝑛)
Lorsqu'il la reçoit, le robot prend le disque se situant au sommet de la zone désignée par 𝑧𝑜𝑛𝑒𝑆𝑜𝑢𝑟𝑐𝑒 et
le place au sommet de la zone désignée par 𝑧𝑜𝑛𝑒𝐷𝑒𝑠𝑡𝑖𝑛𝑎𝑡𝑖𝑜𝑛 (au sol si la zone est vide).
Pour identifier une zone, écrivez à la place de 𝑧𝑜𝑛𝑒𝑆𝑜𝑢𝑟𝑐𝑒 et 𝑧𝑜𝑛𝑒𝐷𝑒𝑠𝑡𝑖𝑛𝑎𝑡𝑖𝑜𝑛 le numéro de la zone
concernée.
𝑧𝑜𝑛𝑒𝑆𝑜𝑢𝑟𝑐𝑒 et 𝑧𝑜𝑛𝑒𝐷𝑒𝑠𝑡𝑖𝑛𝑎𝑡𝑖𝑜𝑛 sont les paramètres du sous-programme Déplacer.
Serez-vous capable de réaliser un programme scratch qui permet, comme pour le défi n°1,
de tester les déplacements des disques dans la grotte en respectant les contraintes ?
https://www.dropbox.com/s/33xevlbu2wz14f2/grotte.png?dl=0
https://www.dropbox.com/s/ikfrfo1e55t2e48/disques.png?dl=0
On pourra utiliser le logiciel GIMP pour modifier les images si cela est nécessaire :
http://www.gimpfr.org/news.php
Mon algorithme du défi 2 :
Le défi 3 : noté en devoir maison
Vous voici arrivé(e) tout en haut de la montagne. Vous allez enfin pouvoir libérer le chef du village !
Vous tombez des nues lorsque vous l'apercevez en train de discuter tranquillement avec le Grand
Sorcier. Loin de s'être fait kidnapper par ce dernier, il l'a rejoint pour préparer une mixture en vue de
la célébration qui a lieu dans quelques jours.
La mixture en question est composée de trois ingrédients à mélanger en proportions parfaitement
exactes : 5 volumes d'huile, 4 volumes d'eau, et 3 volumes d'un ingrédient secret. Le chef et le Grand
Sorcier disposent de deux tonneaux non gradués de contenances 5 litres et 3 litres, avec lesquels ils
pourront facilement doser l'huile et l'ingrédient secret. Mais il leur manque le tonneau de 4 litres car le
chef l'a oublié au village !
Si l'on transfère le contenu d'un tonneau dans l'autre, jusqu'à avoir vidé le premier ou rempli le second,
par le calcul, on peut savoir précisément combien d'eau se trouve dans chacun des deux tonneaux. Ainsi,
vous vous dites qu'il doit bien y avoir un moyen d'utiliser les tonneaux disponibles pour mesurer
exactement 4 litres d'eau. Vous utilisez votre robot pour chercher la solution.
Ce que doit faire votre algorithme :
Vous vous trouvez devant une source d'eau qui jaillit de la montagne, et vous disposez de deux tonneaux
vides de capacités 5 litres et 3 litres. Écrivez un algorithme qui effectue une série de transvasements
permettant d'obtenir exactement 4 litres d'eau dans le plus grand tonneau.
Arrêtez-vous bien dès que le grand tonneau contient exactement 4 litres.
Pour doser l'eau dans les tonneaux, vous disposez de ces trois instructions :
𝐑𝐞𝐦𝐩𝐥𝐢𝐫(𝐭𝐨𝐧𝐧𝐞𝐚𝐮)
𝐕𝐢𝐝𝐞𝐫(𝐭𝐨𝐧𝐧𝐞𝐚𝐮)
𝐓𝐫𝐚𝐧𝐬𝐟é𝐫𝐞𝐫(𝐭𝐨𝐧𝐧𝐞𝐚𝐮𝐒𝐨𝐮𝐫𝐜𝐞 , 𝐭𝐨𝐧𝐧𝐞𝐚𝐮𝐃𝐞𝐬𝐭𝐢𝐧𝐚𝐭𝐢𝐨𝐧)
Pour identifier un tonneau à l'emplacement de 𝑡𝑜𝑛𝑛𝑒𝑎𝑢, 𝑡𝑜𝑛𝑛𝑒𝑎𝑢𝑆𝑜𝑢𝑟𝑐𝑒 ou 𝑡𝑜𝑛𝑛𝑒𝑎𝑢𝐷𝑒𝑠𝑡𝑖𝑛𝑎𝑡𝑖𝑜𝑛, utilisez
sa contenance : 3 ou 5.
Quand on transvase un tonneau dans l'autre, on s'arrête lorsque le tonneau source est vide ou lorsque
le tonneau destination est plein à ras bord. Ainsi, après chaque opération, on peut savoir exactement
combien de litres d'eau se trouvent dans les deux tonneaux.
V.
Répétition d’instructions
VARIABLES Truc, Trac TYPE_ENTIER
DEBUT
POUR Truc DE 1 A 15 PAS 1 FAIRE
ECRIRE "Il est passé par ici"
Algorithme
POUR Trac DE 1 A 6 PAS 1 FAIRE
ECRIRE "Il repassera par-là"
Programme Ti Basic :
https://www.dropbox.c
om/s/52gl47utvyu0vce/
FOR.8xp?dl=0
FIN_POUR
FIN_POUR
FIN
Programme langage Python :
https://www.dropbox.com/s/l6lh
vb528di6v1w/BoucleFor.py?dl=0
Défi n°4
Vous avez remarqué un rituel assez étrange : tous les trois jours, les villageois passent la soirée à
parsemer d'une sorte de gros grain de maïs le long de l'allée centrale du village. Le lendemain, le grain
a disparu, mais l'allée est pleine de ce qui ressemble à de petites mottes de terre noire que les villageois
ramassent. L'un des villageois vous explique que le grain est une offrande aux Borloks, de gros animaux
qui leur laissent ces « mottes » en échange : ce que vous preniez pour des mottes de terre sont en fait des
bouses de Borloks !
Vous êtes pris(e) de nausées en apprenant qu'ils les utilisent pour fabriquer le Goma, cette sorte de pain
noir qu'ils vous ont servi à chaque repas depuis votre arrivée… Tout en cachant votre dégoût de peur de
vexer les villageois, vous décidez d'enquêter sur la composition exacte du Goma. Vous vous proposez
donc pour aider à ramasser les bouses de Borloks qui jonchent l'allée.
Ce que doit faire votre algorithme :
L'allée centrale du village peut être représentée comme une série de 17 cases, dont la plupart
contiennent une bouse de Borlok :
Le robot se trouve initialement dans la case de gauche. Il doit se déplacer case par case en allant vers la
droite, et ramasser sur chaque case la bouse qui s'y trouve. Enfin, votre robot doit déposer tout ce qu'il
a ramassé dans la boîte située sur la 17e case, tout à droite.
Votre algorithme ne doit pas faire plus d'une dizaine de lignes.
Pour résoudre ce problème, vous allez devoir utiliser les procédures :
𝐀𝐥𝐥𝐞𝐫_𝐚_𝐠𝐚𝐮𝐜𝐡𝐞 ()
𝐀𝐥𝐥𝐞𝐫_𝐚_𝐝𝐫𝐨𝐢𝐭𝐞 ()
𝐑𝐚𝐦𝐚𝐬𝐬𝐞𝐫_𝐮𝐧𝐞_𝐛𝐨𝐮𝐬𝐞 ()
𝐃é𝐩𝐨𝐬𝐞𝐫_𝐥𝐞𝐬_𝐛𝐨𝐮𝐬𝐞𝐬()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Mon algorithme du défi 4 :
Serez-vous capable de réaliser un programme scratch qui permet de vérifier que votre
algorithme est correct ?
Défi n°5
Alors que vous cherchez un endroit tranquille pour vous reposer, vous remarquez dans une rue une
personne âgée qui avance lentement tout en portant sur sa tête un grand récipient rempli d'eau. Vous
décidez de lui venir en aide, et de programmer votre robot pour qu'il aille aider cette personne à
transporter l'eau jusqu'à sa maison.
Ce que doit faire votre algorithme :
Votre algorithme doit diriger le robot dans la rue schématisée ci-dessous :
La rue est représentée par 33 cases entre deux murs de briques. Votre robot se trouve au départ sur la
3e case. Votre algorithme doit le déplacer jusqu'à l'endroit où se trouve la personne âgée, au récipient
d'eau en bleu, puis afficher précisément le texte « Bonjour, laissez-moi vous aider » (avec un retour à la
ligne à la fin de la phrase). Ensuite, il doit ramasser le récipient qui se trouve sur cette même case, et
avancer de 32 cases pour le déposer à la maison. Il ne doit à aucun moment se déplacer sur les cases
contenant un mur.
Votre algorithme ne doit pas faire plus d'une vingtaine de lignes.
Pour résoudre ce problème, le robot va devoir effectuer les procédures suivantes :
𝐀𝐥𝐥𝐞𝐫_𝐚_𝐠𝐚𝐮𝐜𝐡𝐞 ()
𝐀𝐥𝐥𝐞𝐫_𝐚_𝐝𝐫𝐨𝐢𝐭𝐞 ()
𝐑𝐚𝐦𝐚𝐬𝐬𝐞𝐫_𝐥𝐞_𝐫é𝐜𝐢𝐩𝐢𝐞𝐧𝐭 ()
𝐃é𝐩𝐨𝐬𝐞𝐫_𝐥𝐞_𝐫é𝐜𝐢𝐩𝐢𝐞𝐧𝐭()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Mon algorithme du défi 5 :
Serez-vous capable de réaliser un programme scratch qui permet de vérifier que votre
algorithme est correct ?
Défi n°6
Vous explorez les ruines de la cité de Machak, toute proche du village, quand tout à coup un énorme
rocher dévale les marches de la pyramide au pied de laquelle vous vous trouvez. Vous n'avez que le
temps de vous jeter à terre alors que le rocher vous passe juste au-dessus. Vous apercevez alors avec
horreur qu'un colosse descend à toute vitesse dans votre direction. À votre grand soulagement, le colosse
passe à côté de vous et s'excuse de vous avoir effrayé(e). Il récupère ensuite le rocher et commence à
escalader la pyramide pour remonter le rocher tout en haut. Alors qu'il est sur le point d'arriver en haut,
il perd prise et le rocher dévale de nouveau la pyramide…
En redescendant, le colosse vous explique que, même si c'est sans espoir, il doit continuer sans relâche
à essayer de poser le rocher au sommet de la pyramide pour ne pas être puni par les dieux. Vous décidez
de l'aider pendant quelque temps afin d'en apprendre plus sur cette malédiction.
Ce que doit faire votre algorithme :
Programmez votre robot pour qu'il mène le rocher tout en haut des 21 marches de la pyramide et
redescende ensuite tout en bas. Par exemple, si la pyramide ne faisait que deux marches de haut, votre
robot devrait effectuer le trajet illustré ci-dessous : haut, droite, haut, droite, gauche, bas, gauche, bas.
Pour résoudre ce problème, vous allez devoir utiliser les procédures suivantes :
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐡𝐚𝐮𝐭()
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐛𝐚𝐬()
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Mon algorithme du défi 6 :
Défi n°7
Lors d'une randonnée en montagne aux alentours du village, vous entendez parler du mont Kailash, un
endroit hautement sacré depuis des millénaires. Ce mont est considéré comme le centre spirituel de la
planète ; de nombreuses personnes viennent y effectuer un pèlerinage. Ce pèlerinage consiste à faire
108 fois le tour de la montagne, afin d'être lavé de toutes ses impuretés. Le mont est très grand, et
chaque tour complet requiert 52 km de marche.
Beaucoup de gens ne peuvent pas faire le pèlerinage car cela impose de porter beaucoup de matériel
(tente, vêtements, nourriture), ce que peu de personnes ont la force de faire. Vous proposez l'aide de
votre robot, qui portera une bonne masse de matériel, ce qui permettra à bien plus de fidèles de se
joindre au voyage !
Ce que doit faire votre algorithme :
Votre robot doit faire 108 fois le tour du chemin vert représenté ci-dessous, en tournant dans le sens des
aiguilles d'une montre.
Le robot se trouve initialement en bas à gauche. Chaque case représente 1 km, donc pour faire un tour,
le robot doit se déplacer successivement de 13 km dans chacune des 4 directions.
Pour résoudre ce problème, vous allez devoir utiliser les procédures suivantes :
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐡𝐚𝐮𝐭()
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐛𝐚𝐬()
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Mon algorithme du défi 7 :
Le défi 8 : noté en classe
Par cette belle journée d'automne, vous accompagnez les villageois qui partent faire les vendanges. Vous
remarquez tout de suite un homme faisant de manière répétitive des allers-retours entre les cueilleurs
et la charrette qui doit être remplie à ras bord avant la fin de la journée. Cet homme tombe de fatigue
et vous lui proposez de le relayer pendant une petite heure. Bien évidemment, vous allez utiliser votre
robot pour effectuer cette tâche à votre place.
Ce que doit faire votre algorithme :
Le champ est représenté ci-dessous :
Le robot est initialement tout à gauche, là où se trouve un grand tas de raisins. Il devra, 20 fois :
Ramasser des raisins pour remplir la hotte de ramassage ;
Se rendre à la charrette (le panier sur le dessin) ;
Déposer le contenu de la hotte ;
Revenir au point de départ.
Pour résoudre ce problème, vous allez devoir utiliser les procédures suivantes :
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
𝐑𝐚𝐦𝐚𝐬𝐬𝐞𝐫_𝐥𝐞𝐬_𝐫𝐚𝐢𝐬𝐢𝐧𝐬()
𝐃é𝐩𝐨𝐬𝐞𝐫_𝐥𝐞𝐬_𝐫𝐚𝐢𝐬𝐢𝐧𝐬()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Le défi 9 : noté en devoir maison
C'est enfin l'heure du Grand Événement ! Le chef du village ouvre la grande porte dans la falaise et vous
découvrez avec stupéfaction un superbe palais. Les villageois apportent alors toutes leurs offrandes à la
divinité qui habite ce palais : des fruits, du goma, du vin, et même un borlok. Heureusement que les
portes ont été ouvertes à temps, sinon la divinité se serait vengée en détruisant tout le village.
Le chef vous prend alors à l'écart et vous explique son problème. L'onguent qu'il a préparé avec le Grand
Sorcier aurait dû être étalé au sol dans tout le palais, car les capacités hallucinogènes de ce mélange
sont nécessaires à l'apparition de la divinité. Il a pris du retard et, comme il n'a pas le temps de l'étaler,
il souhaiterait que vous l'aidiez. Pour cela, il vous fournit un plan du palais.
Ce que doit faire votre algorithme :
Le palais est un grand carré de taille 10×10, et le robot se trouve au départ dans le coin en bas à gauche,
comme représenté ci-dessous :
Votre robot doit passer une et une seule fois dans chacune des pièces, puis se retrouver dans sa case de
départ.
Pour résoudre ce problème, vous allez devoir :
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐡𝐚𝐮𝐭()
𝐀𝐥𝐥𝐞𝐫_𝐞𝐧_𝐛𝐚𝐬()
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
𝐔𝐭𝐢𝐥𝐢𝐬𝐞𝐫 𝐮𝐧𝐞 𝐛𝐨𝐮𝐜𝐥𝐞 𝐏𝐨𝐮𝐫
Serez-vous capable de réaliser un programme scratch qui permet de vérifier que votre
algorithme est correct ?
VI. Calculs et découverte des variables
Défi n°10
Lors du cours d'astronomie que le professeur donne aux élèves, il leur explique le principe des éclipses,
puis il leur indique la date de la prochaine éclipse totale sur Algoréa. Vous connaissez donc la date de
l'éclipse ainsi que la date actuelle et vous vous demandez dans combien de jours aura donc lieu cette
éclipse. Notez que ces deux dates sont exprimées en nombre de jours du calendrier algoréen.
Ce que doit faire votre algorithme :
Vous savez que l'éclipse aura lieu le 12581e jour et que la date actuelle est le 11937 e jour. Votre
algorithme doit calculer et afficher le nombre de jours qu'il faudra patienter avant de pouvoir admirer
l'éclipse.
Pour additionner deux nombres, on va les joindre avec le symbole +, comme en maths ! Ainsi, nous pouvons
afficher le résultat d'une somme : ECRIRE 2 + 3
Défi n°11
Les élèves ne semblent pas à l'aise avec votre robot : ce n'est pas un être humain, ce n'est pas un animal
non plus… ils sont donc très intrigués, voire même parfois un peu inquiets. Afin de les rassurer, vous
souhaitez que votre robot distribue 3 bonbons à chaque élève. Pour cela, vous avez besoin de calculer le
nombre de bonbons à acheter.
Ce que doit faire votre algorithme :
L'école est formée de 4 classes, constituées respectivement de 25, 30, 27 et 22 élèves. Cependant, 8 élèves
sont absents aujourd'hui. Sachant que chaque élève présent doit recevoir 3 bonbons, écrivez un
algorithme qui calcule puis affiche le nombre total de bonbons nécessaires.
Mon algorithme du défi 10 :
Mon programme en Python
Ou Ti Basic
Mon algorithme du défi 11 :
Mon programme en Python
Ou Ti Basic
Défi n°12
À la fin d'une course d'endurance, les élèves d'une classe sont épuisés. Leur enseignant leur parle de
l'algoréathlon, un exercice d'endurance connu sur toute la planète. Il s'agit d'enchaîner 2 km de natation,
34 km de cyclisme et 6 km de course à pied en un jour, puis de le refaire un deuxième jour, et encore un
troisième jour.
Les élèves se demandent quelle distance a été parcourue après chaque jour. Vous profitez de l'occasion
pour faire intervenir votre robot.
Ce que doit faire votre algorithme :
L'algoréathlon se constitue de trois étapes à effectuer chaque jour : 2 km de natation, 34 km de cyclisme
et 6 km de course à pied.
Sachant qu'un sportif répète ces trois étapes pendant 3 jours de suite, vous devez afficher la distance
totale qu'il a parcourue à la fin du 1er jour, à la fin du 2e jour, puis à la fin de l'algoréathlon complet.
Afin de rendre l'affichage convivial sur l'écran du robot, vous souhaitez mettre les trois valeurs sur une
même ligne, avec une espace entre chaque valeur et la suivante.
Important : pour écrire cet algorithme, vous devez mémoriser la distance parcourue en un jour en lui
donnant un nom, puis utiliser ce nom pour calculer les trois réponses. Appuyez-vous sur les explications
ci-dessous.
Mémoriser des informations
Supposons que l'on souhaite écrire un algorithme qui affiche la distance qui séparait la Terre et Mars le
27 août 2003 (55 758 000 km), puis la distance à parcourir par la lumière pour faire l'aller-retour depuis
la Terre (le double). On pourrait utiliser les instructions suivantes :
𝐄𝐂𝐑𝐈𝐑𝐄 55758000
𝐄𝐂𝐑𝐈𝐑𝐄 2 ∗ 55758000
Cela fonctionnera parfaitement bien. Toutefois, si l'on veut afficher ces informations pour un autre jour,
alors que la distance entre les deux planètes a changé, il faudra modifier l’algorithme à deux endroits
différents, puisque l'on y a écrit deux fois la distance 55 758 000.
Pour éviter de devoir faire des modifications en double, on va utiliser une variable, appelée distance,
pour représenter la valeur 55 758 000. On peut alors exprimer notre algorithme de cette façon :
𝐕𝐀𝐑𝐈𝐀𝐁𝐋𝐄 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 𝐓𝐘𝐏𝐄_𝐄𝐍𝐓𝐈𝐄𝐑 # Déclaration d’une variable et de son type
𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 𝐏𝐑𝐄𝐍𝐃_𝐋𝐀_𝐕𝐀𝐋𝐄𝐔𝐑 55758000 # Instruction d’affectation
𝐄𝐂𝐑𝐈𝐑𝐄 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒
𝐄𝐂𝐑𝐈𝐑𝐄 2 × 𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒
Cet algorithme est un peu plus long, mais offre deux avantages :


Si l'on veut modifier la distance, on n'aura qu'une seule valeur à modifier dans notre algorithme ;
La valeur porte un nom (Encore appelé étiquette), qui permet de comprendre à quoi elle correspond.
Mon algorithme du défi 12 :
Mon programme en Python
Ou Ti Basic
Défi n°13
L'automne ayant été très pluvieux, les Bufo Algo, une espèce locale de crapauds, se sont reproduits en
grand nombre, et les habitants ont constaté que leur nombre doublait chaque semaine ! Leurs
prédateurs naturels, les couleuvres (un type de serpent), sont complètement dépassés !
Avoir trop de crapauds est très gênant (on ne peut plus dormir) ! Les villageois décident donc d'élever
un grand nombre de couleuvres avec lesquelles ils pourront contrôler le nombre de crapauds. Il leur faut
tout d'abord estimer le nombre de crapauds qu'il y aura au cours des semaines qui viennent. Ils vous
demandent votre aide.
Ce que doit faire votre algorithme :
Sachant qu'il y a actuellement 1337 crapauds et que leur nombre double chaque semaine, votre
algorithme devra afficher le nombre de crapauds qu'il y aura dans 12 semaines.
Important : vous devez utiliser une boucle pour calculer le nombre de crapauds.
Défi n°14
C'est la dernière semaine de cours et l'école organise une grande kermesse. L'un des stands, « La foire
aux bonbons », propose un jeu permettant de gagner des bonbons. Le jeu est simple : il faut atteindre le
plus grand nombre de fois possible une cible sans jamais la rater. On peut gagner gros, car plus on
touche la cible, et plus on gagne de bonbons à chaque fois qu'on touche la cible ! Les élèves aimeraient
connaître le nombre de bonbons qu'ils peuvent gagner en fonction du nombre de tirs consécutifs réussis.
Ce que doit faire votre algorithme :
Toucher la cible au premier tir rapporte un bonbon, toucher la cible au deuxième tir rapporte deux
bonbons de plus, la toucher au troisième tir rapporte encore trois bonbons de plus, etc. Écrivez un
algorithme qui affiche sur la première ligne le nombre total de bonbons obtenus si l'on ne réussit qu'1
tir, puis qui affiche sur la deuxième ligne le nombre de bonbons récupérés si l'on réussit 2 tirs de suite,
puis sur la troisième ligne le nombre de bonbons récupérés si l'on réussit 3 tirs de suite, etc. jusqu'à la
valeur que l'on peut récupérer si l'on réussit 50 tirs de suite.
Mon algorithme du défi 13 :
Mon programme en Python
Ou Ti Basic
Mon algorithme du défi 14 :
Mon programme en Python
Ou Ti Basic
Le défi 15 : noté en devoir maison
C'est l'heure du cours de sport et les enfants font une petite course à laquelle vous décidez d'inscrire
votre robot. Le principe est simple : il faut aller chercher le premier anneau, revenir le déposer derrière
la ligne, puis aller chercher le second anneau et le ramener, et ainsi de suite… jusqu'à ce que le dixième
anneau ait été ramené derrière la ligne, le but du jeu étant d'aller le plus vite possible (sans tricher bien
sûr !).
Ce que doit faire votre algorithme :
Votre robot doit partir de la case de gauche, aller chercher les anneaux (les ronds sur fond bleu) dans
l'ordre (de gauche à droite) et les ramener un par un à la case de départ.
Pour résoudre ce problème, vous allez devoir utiliser les procédures :
𝐀𝐥𝐥𝐞𝐫_à_𝐠𝐚𝐮𝐜𝐡𝐞()
𝐀𝐥𝐥𝐞𝐫_à_𝐝𝐫𝐨𝐢𝐭𝐞()
𝐑𝐚𝐦𝐚𝐬𝐬𝐞𝐫_𝐥′𝐚𝐧𝐧𝐞𝐚𝐮()
𝐃é𝐩𝐨𝐬𝐞𝐫_𝐥′𝐚𝐧𝐧𝐞𝐚𝐮()
Le défi 16 : noté en devoir maison
Les enfants de la classe de maternelle décident de construire une très grande tour à l'aide de petits cubes
en bois. Ils savent exactement la forme qu'ils souhaitent pour leur tour, mais ils n'arrivent pas à savoir
s'ils auront suffisamment de cubes pour la construire. Ils vous demandent de les aider à calculer le
nombre de cubes nécessaires.
1. Ce que doit faire votre algorithme :
L'objectif est de construire une tour à l'aide de petits cubes en bois, sachant que
la forme de cette tour consiste en un ensemble de grands cubes placés les uns
au-dessus des autres. La base de la tour est un cube de taille 17×17×17, c'està-dire composé de 17×17×17 = 4 913 petits cubes. Sur ce cube est posé un autre
cube de taille 15×15×15. Au-dessus de ce dernier se trouve un cube de
13×13×13. La tour continue ainsi jusqu'à atteindre le sommet, qui consiste en
un cube de taille 1×1×1.
Exemple d'une tour allant de 1×1×1 cubes à 11×11×11 cubes
Votre algorithme doit calculer et afficher le nombre total de petits cubes
nécessaires pour construire la pyramide. Effectuez les calculs dans l’algorithme
en y intégrant une boucle.
2. Ecrire un programme en langage Python.
Le défi 17 : noté en classe
C'est l'heure du cours de mathématiques et aujourd'hui les enfants vont travailler la multiplication.
Malheureusement, l'institutrice ne retrouve que la petite table de multiplication, qui va jusqu'à 5 fois 5,
mais pas la grande table, qui va jusqu'à 20 fois 20. Elle souhaiterait que vous lui imprimiez une nouvelle
table allant jusqu'à 20 fois 20, pour qu'elle puisse l'afficher au mur.
Voici à quoi ressemble la table de multiplication allant jusqu'à 5 fois 5.
12345
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
1. Écrivez un algorithme qui affiche une table de multiplication allant jusqu'à 20 fois 20.
2. Ecrivez un programme en langage Python que vous devez envoyer par mail à votre professeur de
mathématiques.
VII. Tests et conditions
Conditionner une action
La célèbre attraction du train fou est interdite aux moins de 10 ans. On souhaite écrire un algorithme
qui demande à l'utilisateur son âge et qui, si la personne a moins de 10 ans, affiche le texte « Accès
interdit » ; ce qui peut se rédiger comme cela :
Algorithme
# Attraction du train fou : Algorithme de vérification de l’accès.
𝐕𝐀𝐑𝐈𝐀𝐁𝐋𝐄 âge 𝐓𝐘𝐏𝐄_𝐄𝐍𝐓𝐈𝐄𝐑
𝐃𝐄𝐁𝐔𝐓
𝐋𝐈𝐑𝐄 âge
𝐒𝐈 âge < 10 𝐀𝐋𝐎𝐑𝐒
𝐄𝐂𝐑𝐈𝐑𝐄 "Accès interdit"
𝐅𝐈𝐍_𝐒𝐈
𝐅𝐈𝐍
Programme langage Python :
https://www.dropbox.com/s/lrbq6i
zm99qsd6q/ConditionSi.py?dl=0
Programme Ti Basic :
https://www.dropbox.c
om/s/wc9jv4np60jj617/
SI.8xp?dl=0
Défi n°18
Alors que vous quittez le village, les villageois vous offrent de nombreux cadeaux : provisions, vêtements
chauds, boissons… Vous ne pourrez jamais porter tout cela tout seul ; vous décidez donc de donner une
partie de ces objets à votre robot, après les avoir rassemblés en de gros paquets, tous de même masse.
Aurait-il la force de tout porter ?
Ce que doit faire votre algorithme :
Votre algorithme lira deux entiers : le nombre de paquets et le poids d'un paquet. Si le poids total est
strictement supérieur à 105 kg, votre algorithme devra alors afficher le texte « Surcharge ! ».
Défi n°19
L'auberge dans laquelle vous avez prévu de passer la nuit ce soir propose des tarifs très intéressants,
pour peu que l'on n'arrive pas trop tard. En effet, plus on arrive tôt moins on devra payer. Vous essayez
de construire un programme vous donnant directement le prix à payer en fonction de votre heure
d'arrivée.
Ce que doit faire votre algorithme :
Votre algorithme lira un entier, l'heure d'arrivée, qui sera compris entre 0 et 12 inclus (soit midi à
minuit). Le prix de base est de 10 pièces plus 5 pièces pour toute heure après midi. Il ne peut cependant
pas dépasser 53 pièces. Votre algorithme devra afficher le prix à payer correspondant à l'heure d'arrivée
donnée.
Mon algorithme du défi 18 :
Mon programme en Python
Ou Ti Basic
Mon algorithme du défi 19 :
Mon programme en Python
Ou Ti Basic
Effectuer une action dans le cas opposé
Il arrive que l'on ait besoin de tester une condition puis son contraire. Par exemple, supposons que l'on
souhaite tester si l'on peut ranger tous ses œufs dans une seule boîte de 12 compartiments.
Algorithme
# Ranger des œufs dans une boîte de 12 compartiments.
𝐕𝐀𝐑𝐈𝐀𝐁𝐋𝐄 NombreOeufs 𝐓𝐘𝐏𝐄_𝐄𝐍𝐓𝐈𝐄𝐑
𝐃𝐄𝐁𝐔𝐓
𝐋𝐈𝐑𝐄 NombreOeufs
𝐒𝐈 NombreOeufs ≤ 12 𝐀𝐋𝐎𝐑𝐒
𝐄𝐂𝐑𝐈𝐑𝐄 "Une boîte suffit"
𝐒𝐈𝐍𝐎𝐍
𝐄𝐂𝐑𝐈𝐑𝐄 "Plusieurs boîtes nécessaires"
𝐅𝐈𝐍_𝐒𝐈
𝐅𝐈𝐍
Programme langage Python :
https://www.dropbox.com/s/azj9
tjwcxvf1hd7/SiSinon.py?dl=0
Programme Ti Basic :
https://www.dropbox.c
om/s/7qii26hjfiocnc3/
SISINON.8xp?dl=0
Défi n°20
Vous venez d'apprendre qu'un concert de rock va se dérouler ce soir dans la ville située de l'autre côté
du lac. Vous avez tout juste le temps d'y arriver en prenant le bateau. Cependant, vous n'êtes pas le seul
à vouloir y aller, et il y a une longue queue pour acheter les tickets pour la traversée.
Comme il n'y a qu'une seule personne qui s'occupe à la fois de vendre les tickets et d'aider les gens à
monter sur le bateau, vous vous rendez vite compte que vous allez certainement arriver en retard. La
vente des tickets est particulièrement lente car il faut demander aux gens leur âge pour savoir s'ils
doivent payer plein tarif ou bien tarif réduit.
Vous proposez que votre robot s'occupe de la vente des billets et que la personne responsable du bateau
s'occupe uniquement d'aider les gens à monter sur le bateau. Il va donc vous falloir programmer votre
robot assez vite pour arriver à temps au concert.
Ce que doit faire votre algorithme :
Votre algorithme doit lire l'âge d'une personne et afficher soit « Tarif réduit » si cette personne a
strictement moins de 21 ans, soit « Tarif plein » dans le cas contraire.
Mon algorithme du défi 20 :
Mon programme en Python
Ou Ti Basic
Le défi 21 : noté en devoir maison
Vous avez passé la nuit dans une auberge. Au petit matin, un championnat de tir à la corde y est
organisé. Vous ne souhaitez pas participer, mais l'aubergiste insiste pour que vous soyez impliqué dans
l'événement. Vous décidez alors de vous engager dans les paris qui se font sur les deux équipes qui
concourent.
Le championnat oppose deux équipes, contenant chacune autant de joueurs. Pour donner de l'allure et
pimenter les paris, au début du championnat, tous les joueurs sont présentés, avec leur poids, avant
d'aller tenir leur côté de la corde. Il est d'abord présenté un membre de la première équipe, puis de la
deuxième, puis de la première, puis de la deuxième etc. jusqu'à ce que tous les joueurs soient passés.
Afin de vous faire un premier pronostic, vous calculez le poids total de chaque équipe, avec votre robot.
Ce que doit faire votre algorithme :
Votre algorithme devra lire un premier entier : le nombre de membres 𝑛𝑏𝑀𝑒𝑚𝑏𝑟𝑒𝑠 qui constituent une
équipe. Ensuite, il devra lire les poids (en kilogrammes), au total 𝑛𝑏𝑀𝑒𝑚𝑏𝑟𝑒𝑠 × 2, sachant que le
premier poids est celui d'un joueur de la 1 re équipe, le deuxième poids celui d'un joueur de la 2 e équipe,
le troisième la 1re équipe, le quatrième la 2e équipe, etc.
Après avoir calculé le poids total de chaque équipe, vous devrez afficher le texte « L'équipe X a un
avantage » (en remplaçant X par la valeur 1 ou 2), en considérant qu'une équipe est avantagée si elle a
un poids total supérieur à celui de l'autre.
Vous afficherez ensuite le texte « Poids total pour l'équipe 1 : » suivi du poids de l'équipe 1, puis « Poids
total pour l'équipe 2 : » suivi du poids de l'équipe 2 (voir l'exemple ci-dessous).
On vous garantit que les deux équipes n'auront pas le même poids total.
Le défi 22 : noté en classe
Un festin est organisé pour récompenser tous les gens qui ont participé à la construction d'une nouvelle
palissade autour du village. Pour empêcher de rentrer ceux qui sont restés toute la journée à la plage
au lieu d'aller couper du bois et de planter des piquets, un code secret a été transmis à tous ceux qui ont
le droit d'accéder au festin.
Cependant, personne ne veut se dévouer pour garder l'entrée de la salle des fêtes et y filtrer les accès.
Personne sauf… votre robot, qui a tendance à surchauffer dès qu'on lui demande de participer à une
discussion mondaine ! Programmez donc votre robot pour qu'il ne laisse passer que les gens qui
connaissent le code secret.
Ce que doit faire votre programme :
Votre programme doit lire un entier : le code fourni par l'utilisateur. Si ce code correspond au code secret,
qui est 64 741, alors le programme devra afficher le texte « Bon festin ! ». Sinon, il devra afficher « Allezvous en ! ».
Le défi 23 : noté en devoir maison
Vous venez d'arriver au bord d'un grand lac que vous devez contourner, par un côté ou l'autre, peu
importe. Vous avez réussi à trouver une carte décrivant la position exacte de tous les villages le long de
la route qui longe la rive du lac. Sachant que vous pouvez marcher 50 km dans la journée, vous aimeriez
savoir dans combien de villages différents vous pourriez dormir la nuit prochaine.
Ce que doit faire votre algorithme :
Votre algorithme doit d'abord lire un entier décrivant votre position actuelle sur la route, sous la forme
d'un nombre de kilomètres par rapport au début de la route. Ensuite, il doit lire un entier donnant le
nombre de villages. Pour chaque village, il doit lire un entier décrivant la position de ce village le long
de cette même route. Votre algorithme doit alors afficher le nombre de villages qui se trouvent à une
distance inférieure ou égale à 50 km de votre position actuelle.
Le défi 24 : noté en classe
Vous venez d'arriver au bord d'un grand lac que vous devez contourner, par un côté ou l'autre, peu
importe. Vous avez réussi à trouver une carte décrivant la position exacte de tous les villages le long de
la route qui longe la rive du lac. Sachant que vous pouvez marcher 50 km dans la journée, vous aimeriez
savoir dans combien de villages différents vous pourriez dormir la nuit prochaine.
Ce que doit faire votre algorithme :
Votre algorithme doit d'abord lire un entier décrivant votre position actuelle sur la route, sous la forme
d'un nombre de kilomètres par rapport au début de la route. Ensuite, il doit lire un entier donnant le
nombre de villages. Pour chaque village, il doit lire un entier décrivant la position de ce village le long
de cette même route. Votre algorithme doit alors afficher le nombre de villages qui se trouvent à une
distance inférieure ou égale à 50 km de votre position actuelle.
Défi n°25
L'auberge dans laquelle vous vous arrêtez pour la nuit adapte ses prix en fonction de l'âge du client et
du poids de ses bagages. Les règles ne vous étant pas très claires, vous décidez d'écrire un petit
algorithme qui vous permettra facilement, à vous et à vos compagnons de voyage, de connaître le prix
d'une nuit.
Ce que doit faire votre algorithme :
Une chambre ne coûte rien si on a 60 ans (l'âge de l'aubergiste !) et 5 écus si on a strictement moins de
10 ans. Pour les autres personnes c'est 30 écus plus un supplément de 10 écus si on a au moins 20 kilos
de bagages.
Votre algorithme doit lire deux entiers, l'âge et le poids des bagages de la personne et doit afficher le
prix, sous la forme d'un entier.
Défi n°26
Le village dans lequel vous avez passé la nuit est en pleine effervescence au matin : encore une attaque
de worgs pendant la nuit ! Les worgs sont de redoutables loups qui vivent sur Algoréa et qui s'attaquent
au bétail... et parfois même aux enfants.
C'est décidé, il va falloir construire une grande palissade tout autour du village. Les habitants insistent
pour que cette clôture soit rectangulaire et ait une face au Nord, une au Sud, une à l'Est et une à l'Ouest,
quitte à devoir travailler un peu plus que nécessaire. Ils ont maintenant besoin de votre aide pour savoir
la quantité de bois dont ils vont avoir besoin pour construire cette palissade.
Ce que doit faire votre algorithme :
L’algorithme doit d'abord lire un entier strictement positif correspondant au nombre de maisons.
Ensuite, pour chaque maison, il doit lire la position horizontale (l'abscisse, le "x") et sa position verticale
(l'ordonnée, le "y") de cette maison. Toutes les abscisses et ordonnées sont des entiers compris entre zéro
et 1 million.
L’algorithme doit alors afficher le périmètre de la plus petite clôture rectangulaire englobant toutes les
maisons. Ce rectangle doit avoir ses côtés parallèles aux axes du repère.
Le défi 27 : noté en devoir maison
Vous arrivez dans un village le jour du marché et vous décidez d'en profiter pour faire vos courses pour
le repas du soir. De nombreux marchands vendent la spécialité locale, de délicieuses petites galettes et
vous cherchez à trouver les moins chères. Cependant, la rue principale où a lieu le marché étant très
longue, vous souhaitez ne devoir revenir sur vos pas qu'aussi peu que possible, afin de pouvoir reprendre
la route rapidement.
Ce que doit faire votre algorithme :
Votre algorithme doit lire un entier 𝑛𝑏𝑀𝑎𝑟𝑐ℎ𝑎𝑛𝑑𝑠 (non nul) puis il devra afficher la position de la valeur
la plus petite parmi les 𝑛𝑏𝑀𝑎𝑟𝑐ℎ𝑎𝑛𝑑𝑠 entiers suivants. En cas d'égalité, on prendra la position la plus
grande. Les positions vont de 1 à 𝑛𝑏𝑀𝑎𝑟𝑐ℎ𝑎𝑛𝑑𝑠. Toutes les valeurs sont positives et plus petites que 1
million.
Mon algorithme du défi 26 :
Mon programme en Python
Ou Ti Basic
VIII.
Répétitions conditionnées
Faire la même chose plusieurs fois : le « tant que »
On a parfois besoin de répéter certaines instructions jusqu'à ce qu'un certain changement ce soit produit.
Par exemple, demander un mot de passe 𝒕𝒂𝒏𝒕 𝒒𝒖𝒆 l'utilisateur n'a pas donné le bon.
On a ici utilisé dans la phrase le terme « tant que », ce qui signifie qu'on a bien une condition pour savoir
quand s'arrêter. On ne peut pas utiliser notre boucle « répéter » habituelle, car on ne sait pas combien
de fois l'utilisateur va se tromper !
Algorithme
# Donner le bon mot de passe.
𝐕𝐀𝐑𝐈𝐀𝐁𝐋𝐄𝐒 Secret , MotDePasse 𝐓𝐘𝐏𝐄_𝐄𝐍𝐓𝐈𝐄𝐑
𝐃𝐄𝐁𝐔𝐓
Secret 𝐏𝐑𝐄𝐍𝐃_𝐋𝐀_𝐕𝐀𝐋𝐄𝐔𝐑 123456
MotDePasse 𝐏𝐑𝐄𝐍𝐃_𝐋𝐀_𝐕𝐀𝐋𝐄𝐔𝐑 0
𝐓𝐀𝐍𝐓_𝐐𝐔𝐄 Secret ≠ MotDePasse
𝐄𝐂𝐑𝐈𝐑𝐄 "Tapez le mot de passe ∶ "
𝐋𝐈𝐑𝐄 MotDePasse
𝐅𝐈𝐍_𝐓𝐀𝐍𝐓_𝐐𝐔𝐄
𝐄𝐂𝐑𝐈𝐑𝐄 "Vous avez trouvé! "
𝐅𝐈𝐍
Programme langage Python :
https://www.dropbox.com/s/gvvzb6anaw5x
ue6/TantQue.py?dl=0
Programme Ti Basic :
https://www.dropbox.c
om/s/1pz9rbxyzf755ba
/TANTQUE.8xp?dl=0
Défi n°28
Afin de pouvoir mieux combattre les différentes épidémies, parfois très graves, qui se développent
régulièrement dans la région, le département de médecine de l'université a lancé une grande étude. En
particulier, les chercheurs s'intéressent à la vitesse de propagation d'une épidémie et donc à la vitesse
à laquelle des mesures sanitaires doivent être mises en place.
Ce que doit faire votre algorithme :
Votre algorithme doit d'abord lire un entier, la population totale de la ville. Sachant qu'une personne
était malade au jour 1 et que chaque malade contamine deux nouvelles personnes le jour suivant (et
chacun des jours qui suivent), vous devez calculer à partir de quel jour toute la population de la ville
sera malade.
Défi n°29
Une grande partie du travail de l'administration de l'université, en plus de gérer les enseignants, les
étudiants, les cours… est de veiller au bon fonctionnement de l'université et en particulier à ce que les
comptes soient bien tenus. En particulier il faut, une fois par an, faire un bilan annuel des dépenses.
Toutes les dépenses de l'année ont été enregistrées et classées dans une multitude de dossiers et il faut
maintenant calculer la somme de toutes ces dépenses. Mais personne ne sait exactement combien de
dépenses différentes ont été effectuées durant l'année écoulée !
Ce que doit faire votre algorithme :
Votre algorithme devra lire une suite d'entiers positifs et afficher leur somme. On ne sait pas combien
il y aura d'entiers, mais la suite se termine toujours par la valeur -1 (qui n'est pas une dépense, juste un
marqueur de fin).
Défi n°30
Dans une cité commerçante, il est important que les habitants soient forts en calcul mental afin de
pouvoir négocier leurs prix et choisir les meilleurs produits sans se faire avoir. Le département de
pédagogie de l'université a donc été sollicité afin de mettre au point des exercices stimulants pour les
enfants, qui vont les inciter à travailler leur calcul mental.
Réalisant le potentiel que peut avoir votre robot dans un cadre pédagogique, les chercheurs vous
demandent de mettre au point un algorithme capable de faire jouer de manière automatisée un enfant
au jeu du « c'est plus, c'est moins » : l'enfant doit deviner un nombre secret en faisant des propositions,
et on lui répond chaque fois par « c'est plus » ou « c'est moins », jusqu'à ce qu'il ait trouvé le bon nombre.
L'objectif est bien sûr pour les enfants de trouver le bon nombre le plus rapidement possible !
Ce que doit faire votre algorithme :
Votre algorithme doit d'abord lire un entier, le nombre que l'enfant devra trouver. Ensuite, il devra lire
les propositions du joueur, et afficher à chaque fois le texte « c'est plus » (l'enfant a proposé un nombre
trop petit) ou « c'est moins » (l'enfant a proposé un nombre trop grand) selon les cas, et recommencer
tant que l'enfant n'a pas trouvé le bon nombre.
À la fin, il faudra afficher le texte « Nombre d'essais nécessaires : » puis, à la ligne en dessous, le nombre
d'essais qui ont été nécessaires. On vous garantit que l'enfant finira par trouver la bonne valeur !
Mes algorithmes des défis 28-29-30 :
Le défi 31 : noté en devoir maison
Les habitants adorent les constructions en forme de pyramide ; de nombreux bâtiments officiels ont
d'ailleurs cette forme. Pour fêter les 150 ans de la construction de la ville, le gouverneur a demandé la
construction d'une grande et majestueuse pyramide à l'entrée de la ville. Malheureusement, en ces
périodes de rigueur budgétaire, il y a peu d'argent pour ce projet. Les architectes souhaitent cependant
construire la plus grande pyramide possible étant donné le budget prévu.
Trois exemples de pyramides, de hauteur 1, 2 et 3
Ce que doit faire votre algorithme :
Votre algorithme doit d'abord lire un entier : le nombre maximum de pierres dont pourra être composée
la pyramide. Il devra ensuite calculer la hauteur de la plus grande pyramide qui pourra être construite,
ainsi que le nombre de pierres qui sera nécessaire.
Le défi 32 : noté en classe
Les chimistes de l'université ont mis au point un nouveau procédé de fabrication d'un onguent qui
permet une cicatrisation très rapide des blessures. Ce procédé est cependant très long et nécessite une
surveillance de tous les instants de la préparation en train de chauffer, et ce parfois pendant des heures.
Confier cette tâche à un étudiant n'est pas possible, ils s'endorment toujours ou ne font pas attention…
et cela risque alors d'exploser !
Un dispositif automatique de surveillance de la préparation serait donc intéressant. Celui-ci
surveillerait la température toutes les 15 secondes, et si celle-ci devient anormale alors une alarme
devrait sonner, afin de prévenir tout le monde.
Ce que doit faire votre algorithme :
Votre algorithme devra lire trois entiers : le nombre total de mesures envisagées ainsi que la
température minimum et maximum autorisées. Les entiers suivants seront les différentes températures
relevées au cours du temps.
Tant que les températures relevées restent dans le bon intervalle, votre algorithme devra écrire le texte
« Rien à signaler », mais dès que la température n'est pas bonne il doit écrire le texte « Alerte !! » et
s'arrêter.
Téléchargement