Algorithmique
L’algorithmique Présence des algorithmes dès l’école primaire dans l’enseignement des mathématiques dans beaucoup « d’objets » usuels Objectifs pour le lycée Préciser et formaliser la notion d’algorithme Étudier certaines notions sous un angle nouveau -dès l’école primaire dans l’enseignement des mathématiques : algorithmes opératoires, mise en œuvre de démonstrations, recherche de la médiane, résolutions de problèmes d’arithmétiques élémentaires, problème de construction (cercle circonscrit) -dans beaucoup « d’objets » usuels, y compris les calculatrices : de plus en plus utilisent des algorithmes (ordinateurs, automates, répondeur téléphonique, machines à laver, réseaux téléphoniques…), des programmes agencent la succession désirée de tâches élémentaires) Dans un tel contexte, il est essentiel que les élèves soient suffisamment familiarisés avec le type particulier de démarche que nécessite l’algorithmique. Par ailleurs, l’utilisation des ordinateurs et des calculatrices s’est développée dans l’enseignement. Ces outils fonctionnent comme des boîtes noires et l’introduction de l’algorithmique devrait aider les élèves à en appréhender le fonctionnement en apprenant quelques concepts simples avec des prémisses clairement exposées et des règles peu nombreuses. 2
Algorithmique (objectifs pour le lycée) familiariser les élèves avec les grands principes d’organisation d’un algorithme : gestion des entrées-sorties affectation d’une valeur mise en forme d’un calcul. formaliser des algorithmes simples en langage naturel traduire des algorithmes sur tableur ou dans un langage de programmation (calculatrice ou logiciel) dans le cadre du programme, construire un algorithme pour résoudre un problème, c’est non seulement trouver une méthode de calcul d’une solution à ce problème, mais écrire cette méthode sous forme d’une suite d’instructions élémentaires : affectations de variables (initialisation ou calcul), branchements (condition ou boucle itérée), affichages. Le but est de rendre les élèves capables de concevoir par eux-mêmes quelques algorithmes simples et de comprendre ce que produisent certains algorithmes plus complexes. Outre son intérêt culturel, cet apprentissage présente également un objectif pédagogique important, convergeant avec l’objectif poursuivi par le travail à réaliser sur la logique. Il s’agit d’apprendre aux élèves à imaginer ou à suivre le déroulement d’une suite d’instructions en fonction de conditions logiques. 3
Les idées importantes Il faut distinguer l’algorithmique de la programmation : il n’est pas judicieux de commencer sur ordinateur. L’apprentissage doit être étalé sur l’année. Il serait souhaitable d’intégrer l’écriture d’algorithmes dans tous les domaines du programme. L’algorithmique n’est pas un chapitre à part. L’introduction de chaque nouvel élément (variable, boucle, itération, etc.) devrait apparaître lors de la résolution de problèmes pour lesquels les démarches habituelles sont malcommodes ou peu performantes. L’ordinateur (ou la calculatrice) peut être utilisé dès la première séance, en conclusion du travail L’étude d’algorithmes doit être proposée régulièrement, pour résoudre des problèmes simples, sans que l’algorithmique ne fasse l’objet d’un enseignement isolé. 4
Les instructions en algorithmique Instructions élémentaires entrée, sortie, affectation, calcul Instructions conditionnelles Si….alors……(sinon….) Instructions itératives la boucle « tant que ….faire » la boucle « pour (variable) de ….à … faire » 5
Algorithmes et langages Écrire un algorithme qui donne la somme des entiers de 1 à n Le langage naturel Pour calculer la somme des entiers de 1 à n , on part de 1 puis on calcule 1+2, puis 1+2+3, et on continue ainsi jusqu’à 1+2+3+….+n. Le langage algorithmique Entrée : Saisir n Traitement : Affecter à S la valeur 0 Pour i variant de 1 à n Affecter à S la valeur S+i Sortie: Afficher S Le langage naturel se fait avec des phrases, qui expliquent la procédure suivie, avec éventuellement des expressions plus élaborées comme "tant que...faire". L'idée étant de décrire ce qui va être construit, avec des exigences très larges sur la syntaxe, un mélange de phrases et d'expressions plus "techniques". Le langage algorithmique, davantage codifié, reste cependant aisé à comprendre. Il fait apparaître la structure du programme et permet la traduction facile dans un langage de programmation. Il convient de ne pas être exigeant dans la syntaxe et de ne pas pénaliser les élèves pour des maladresses. Cependant le professeur se doit de rester précis et rigoureux. Une initiation intéressante est proposée dans le document de Jean Pierre Ferrier sur le site académique. Le langage de programmation est un langage codifié qui dispose d’un compilateur permettant son exécution sur machine. Quand on commence à définir les variables, on est déjà dans un début de lanage de programmation, la preuve, c'est que pour certains langages, ce n'est pas nécessaire. Le choix d’un langage de programmation est laissée à l’initiative des équipes d’établissement. La calculatrice semble indispensable. Elle apporte de la souplesse dans l’utilisation. Il convient de ne en rester à la calculatrice: Algobax ou Python pou Scilab ou Xcas. Le langage de programmation
Algorithmes et langages Écrire un algorithme qui donne la somme des entiers de 1 à n Algobox Python n=int(input("Saisir le nombre n ")) S=0 for i in range(n+1): S=S+i print("La somme des entiers de 1 à ",n, " est égale à ",S)
Le langage « naturel » L’instruction d’affectation : - on préférera les formulations Affecter à x la valeur 12 Affecter à x la valeur x+1 (la variable x reçoit la valeur de l’expression de l’expression x+1 - on réservera aux langages de programmation x := 12 x:=x+1 x = 12 x =x+1 x 12 x x+1 12 x x+1 x L’instruction d’affectation: elle a pour but d’affecter à une variable la valeur d’une expression. La variable x reçoit la valeur 12 On peut insister sur l’importance des mots En entrée : saisir (ou lire) En sortie : afficher (ou écrire) L’initialisation est dans le traitement Affecter à (une variable) quelque chose 8
L’algorithmique Ressources : Le site de Jean-Pierre Ferrier Accessible à partir du site académique, rubrique « espace de l’inspection/dossiers et animation : Algorithmique en terminale L Le document d’accompagnement du cycle terminal de la série L (août 2005) En téléchargement sur le site académique, rubrique « BO, programmes/programmes puis paragraphe « les programmes en place au lycée)
L’évaluation (document ressource) Les modalités fondamentales de l’activité algorithmique : analyser le fonctionnement ou le but d’un algorithme existant ; modifier un algorithme existant pour obtenir un résultat précis ; créer un algorithme en réponse à un problème donné. L’évaluation des pratiques en algorithmique peut s’organiser autour d’une évaluation par compétences qui ne conduira pas nécessairement à une note spécifique chiffrée. Les activités donnant lieu à l’évaluation des compétences en algorithmiques peuvent évidemment également servir de support à l’évaluation d’autres compétences, notamment celles qui sont liées à la résolution de problèmes : savoir modéliser, s’engager dans une recherche, communiquer, vérifier… 10
Les compétences visées (document ressource) comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. 11
Les compétences visées (document ressource) Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. Entrée : Saisir trois nombres a, b et c Traitement : Calculer (a+b+c)/3 Affecter à M la valeur trouvée Sortie : Afficher M Expliquer en une phrase ce que fait cet algorithme 12
Les compétences visées (document ressource) Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. Entrée : Saisir trois nombres a, b et c Traitement : Calculer (a+b+c)/3 Affecter à M la valeur trouvée Sortie : Afficher M Modifier cet algorithme afin qu’il permette de calculer la moyenne de trois notes a, b et c affectées des coefficients 1,2 et 3 et qu’il signale si le résultat est ou non supérieur à 10. 13
Les compétences visées (document ressource) Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. On veut écrire un algorithme qui permette de calculer la moyenne de trois notes a, b et c affectées des coefficients 1,2 et 3. et qui signale si le résultat est ou non supérieur à 10. Compléter : Entrée : Traitement : Sortie : 14
Les compétences visées (document ressource) Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. Un examen comporte trois épreuves de coefficients respectifs 1, 2 et 3. Un étudiant est reçu à l’examen si sa moyenne est supérieure ou égale à 10. Écrire un algorithme qui renvoie l’information « l’étudiant est reçu » ou l’information « l’étudiant n’est pas reçu » à la saisie des trois notes. 15
Les compétences visées (document ressource) Un examen comporte trois épreuves de coefficients respectifs 1, 2 et 3. Un étudiant est reçu s’il obtient une moyenne supérieure ou égale à 10, il est recalé s’il obtient strictement moins de 8 et il doit passer un oral si sa moyenne est comprise entre 8 et 10. On veut écrire un algorithme qui renvoie le résultat de l’examen à la saisie des trois notes. L’algorithme suivant convient-il ? Entrée : saisir a,b,c Traitement : M= a+2*b+3*c/6 si (M-8)*(M-10)<=0 afficher « oral » si M>=10 afficher « reçu » sinon afficher « recalé » Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. 16
Les compétences visées (document ressource) Être capable de … comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. Un examen comporte trois épreuves de coefficients respectifs 1, 2 et 3. Un étudiant est reçu s’il obtient une moyenne supérieure ou égale à 10, il est recalé s’il obtient moins de 8 et il doit passer un oral si sa moyenne est comprise entre 8 et 10. On veut écrire un algorithme qui renvoie le résultat de l’examen à la saisie des trois notes. Exécuter l’algorithme suivant en utilisant Algobox. Entrée : saisir a,b,c Traitement : M= (a+2*b+3*c)/6 si M<8 afficher « recalé» si M>=10 afficher « reçu » sinon afficher « oral » 17
Évaluation d’une production d’élève (document ressource) Critère Excellent Bon Moyen Insuffisant Respect des bons usages Le but visé par l’algorithme est explicité, des commentaires précisent le déroulement. Les variables ont des noms bien choisis. Aucune erreur De petits détails sont négligés. Le but est difficile à déterminer Des détails manquent, mais le programme tente quand même d’accomplir ses fonctions essentielles Ne répond pas au problème posé. Objectif impossible à déterminer Correction du code L’algorithme fonctionne. Fonctionne correctement dans tous les cas. Fonctionne pour des données (entrées) standard mais échecs mineurs sur des cas particuliers. Échoue pour des données (entrées) standard, mais pour une raison mineure Échoue pour des données (entrées) standard, pour une raison importante Interface utilisateur (entrées, sorties) Elle est claire et commode Aucune faute 1-3 fautes mineures Plus de trois fautes mineures ou une faute majeure Plus d’une faute majeure 18
Déterminer tous les nombres entiers naturels égaux à la somme des cubes de leurs chiffres. 19
Déterminer tous les nombres entiers naturels égaux à la somme des cubes de leurs chiffres. 1 ) Ecrire un algorithme permettant de trouver tous les nombres inférieurs à 9999 solutions du problème. 2) Calculer 5 x 93 .En déduire qu’il n’existe pas de nombre N à 5 chiffres qui soit égal à la somme des cubes de ses chiffres. Existe-t-il des nombres de plus de 5 chiffres solutions du problème ? 3) A l’aide d’une calculatrice ou d’un logiciel déterminer tous les nombres solutions du problème. 4) Déterminer tous les nombres égaux à la somme des puissances quatrièmes de leurs chiffres. L’algorithmique permet de développer un mode de raisonnement rarement utilisé jusque là : on montre que le nombre de solutions au problème est fini, on détermine un majorant des solutions et on explore tout ce qui est en dessous à l’aide d’un algorithme de balayage systématique. 2) 5 x 93 = 2916, le nombre ne peut pas être à la fois plus grand que 9999 et plus petit que 2916. Pour 6 chiffres, 7 chiffres, etc la situation est la même car le nombre N est minoré par un nombre qui est multiplié par 10 à chaque étape et majoré par un nombre auquel on ajoute 729 à chaque étape. La démonstration rigoureuse, (comparaison d’une suite géométrique et d’une suite arithmétique) par une récurrence n’est pas au programme mais on peut comprendre ce qui se passe, notamment en majorant 93 par 1000. 4) Cette question peut être un prolongement.
Compétences visées comprendre et analyser un algorithme préexistant ; modifier un algorithme pour obtenir un résultat particulier ; analyser la situation : identifier les données d’entrée, de sortie, le traitement...; mettre au point une solution algorithmique : comment écrire un algorithme en « langage courant » en respectant un code, identifier les boucles, les tests, des opérations d’écriture, d’affichage... ; valider la solution algorithmique par des traces d’exécution et des jeux d’essais simples ; adapter l’algorithme aux contraintes du langage de programmation : identifier si nécessaire la nature des variables... ; valider un programme simple. Analyser la situation : il faut comprendre qu’il faudra recourir à la numération en base 10, introduire les chiffres m, c, d, u, exprimer le nombre en fonction d’eux. Mettre au point une solution algorithmique : Comprendre l’imbrication des boucles correspondant aux quatre chiffres (il serait plus naturel de tenter une boucle « pour n de 0 à 9999 ») Placer le test au bon endroit : Adapter l’algorithme au langage : on demande explicitement d’utiliser un langage.
Variables m, c, d, u, N, S nombres entiers naturels Traitement pour m allant de 0 à 9 pour c allant de 0 à 9 pour d allant de 0 à 9 pour u allant de 0 à 9 affecter la valeur 1000m+100n+10d+u à N affecter la valeur m3+c3+d3+u3 à S Si N=S Afficher N On pourrait limiter le balayage à « m allant de 0 à 3 » car on sait que N est majoré par 2916. Cette question pourrait venir en fin d’exercice : comment améliorer l’algorithme pour qu’il soit plus rapide. Un autre aménagement de l’exercice consisterait à ne pas limiter a priori les solutions à des nombres à quatre chiffres. On pourrait chercher pour 1, 2, 3… chiffres. Le logiciel Algobox montre vite ses limites : d’une part il faut à chaque fois tout réécrire car on ne peut pas insérer une boucle autour d’une autre, d’autre part à partir de 6 chiffres il bloque, cela dépasse le niveau de briques impliquées qu’il semble supporter. Cette limite du logiciel pourrait justifier aux yeux des élèves la nécessité de limiter l’exploration.
Version Algobox
Version LARP Même programmation que pour Algobox. Une différence : le test d’égalité n’exige pas le double signe =
Version python Version scilab