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.