====== Exercices - Algorithmes ====== {{ .:algorithme:algorithme.exercices.eleves.pdf |Version imprimable}} ==== Exercice 1 ==== Un point est sur une grille, * sa position est donnée par ses coordonnées $(x; y)$ avec des axes évidents : * l'axe $x$ pointe vers la droite, * l'axe $y$ pointe vers le haut, * la position initiale du point est toujours $(0; 0)$, * les instructions disponibles consistent à déplacer le point vers la gauche, la droite, le haut, le bas, * dans tous les cas **dites les coordonnées du point en fin d'algo**. == algo a) == DÉBUT haut 1 droite 2 bas 3 FIN == algo b) == DÉBUT RÉPÉTER 10 FOIS haut 1 droite 2 bas 3 FIN haut 5 FIN == algo c) == DÉBUT TANT QUE y du point < 100 RÉPÉTER haut 3 droite 5 FIN gauche 9 FIN == algo d) == DÉBUT POUR i ALLANT DE 1 À 10 FAIRE SI i pair ALORS haut i SINON droite i FIN FIN FIN > **Remarque :** Ces algorithmes précédent font toujours la même chose. Ils n'ont pas d'entrées. ==== Exercice 2 ==== La [[https://fr.wikipedia.org/wiki/Logo_(langage)|Logo]] est un langage de programmation pédagogique dans lequel on anime la pointe d'un crayon qui dessine. Le crayon commence à la position (0,0) et il est orienté vers l'Est (droite). Il peut avancer et tourner à gauche ou à droite. Que font les programmes suivants ? == algo a) == DÉBUT avancer de 100 tourner gauche de 90 degrés avancer de 100 tourner gauche de 90 degrés avancer de 100 tourner gauche de 90 degrés avancer de 100 tourner gauche de 90 degrés FIN == algo b) == DÉBUT RÉPÉTER 6 FOIS avancer de 100 tourner à droite de 60 degrés FIN FIN == algo c) == DÉBUT RÉPÉTER 3 FOIS RÉPÉTER 3 fois avancer de 100 tourner à droite de 120 degrés FIN tourner à droite de 120 degrés FIN FIN ==== Exercice 3 ==== Que font les deux algorithmes suivants ? ENTRÉES n, entier > 0 DÉBUT Soit t = 0, POUR i ALLANT DE 1 À n FAIRE ajouter i à t FIN RENVOYER t FIN ENTRÉES n, entier > 0 DÉBUT POUR i ALLANT DE 2 À n-1 FAIRE SI i est diviseur de n ALORS RENVOYER non FIN FIN RENVOYER oui FIN ==== Exercice 4 ==== On suppose que l'on peut utiliser un ensemble d'éléments, par exemple quelque chose comme $\left\lbrace 1, 14, 25, 8, 17\right\rbrace$. Il est notamment possible de parcourir cet ensemble pour en lire les éléments un à un. ENTRÉES ens, un ensemble DÉBUT soit n = 0 POUR CHAQUE élément e DE ens FAIRE ajouter 1 à n FIN RENVOYER n FIN - Que renvoie l'algorithme pour ''%%ens = {1, 14, 25, 8, 17}%%'' ? - Que renvoie l'algorithme en général ? - Dans le cas où ''%%ens%%'' ne contient que des nombres, écrivez un algorithme semblable qui renvoie le total des éléments de ''%%e%%''. - Dans le cas où ''%%ens%%'' ne contient que des nombres, écrivez un algorithme semblable qui renvoie la valeur maximum de ''%%ens%%''. Précisez la précondition dans ce cas. > **Remarque :** Cette structure permettant le parcours de tous les éléments d'un ensemble n'est pas présente dans tous les langages de programmation. Elle est par exemple absente en C. C'est en revanche la forme unique choisie pour la boucle ''%%POUR%%'' de Python. ==== Exercice 5 : Zune ==== [[https://fr.wikipedia.org/wiki/Zune|Zune]] est le nom donné par Microsoft à son logiciel de gestion et de lecture de fichiers musicaux dans les baladeurs du même nom, commercialisé entre 2006 et 2011. Le 31 décembre 2008, une grande partie des Zune de première génération a subi une panne critique bloquant le démarrage du lecteur. Le problème venait du module de mise à jour, contenant une conversion de date. ENTRÉE jours: représente le nombre de jour à partir du 1er janvier 1980 (jour 1) SORTIE année, jour: paire fournissant l'année et et le jour dans l'année par ex: pour 14/01/1981, jours = 380 et la fonction doit renvoyer 1981, 14 DÉBUT soit année = 1980 TANT QUE jours > 365 RÉPÉTER SI année bissextile ALORS SI jours > 366 ALORS enlever 366 à jours ajouter 1 à année FIN SINON enlever 365 à jours ajouter 1 à année FIN FIN RENVOYER année, jours FIN - Pourquoi l'application a-t-elle subi une panne le 31/12/2008 ? - Pourquoi pas avant ? - Que faudrait-il changer pour éviter le problème ?