Activité n°2 : algorithmes, programmes et langages. Objectif : comprendre le lien entre un algorithme et les opérations élémentaires de l’ordinateur. Compétence travaillée : Concevoir et réaliser une solution informatique en réponse à un problème. Dérouler l’exécution d’une séquence d’instructions simples de type langage machine. Capacité à acquérir : Comprendre un algorithme simple et expliquer ce qu’il fait. Programmer un algorithme. Voici deux programmes : Programme n°1 écris en langage machine pour le Dauphin : 0101 0000 0001 0100 0101 0001 0001 0100 1000 0001 0000 0011 Programme n°2 écris en Python3 : a=3 b=7 print("A vous de jouer") x = int(input()) y = int(input()) if (x == a) and(y == b) : print("Coulé") else : if (x == a) or (y == b) : print("En vue") else : print("A l'eau") Voici un algorithme, dit « de Delphe » : Soit un nombre entier N Soit un nombre entier M égal à N. Enlever 1 à N : c’est la nouvelle valeur de N Ajouter N à M : c’est la nouvelle valeur de M. Recommencer jusqu’à ce que N soit nul. Document 1 : algorithme et programme Muhammad al-Khwarizmi (783 – 850), dans son ouvrage « le livre de l’addition et de la soustraction d’après le calcul indien » présente la numération décimale dite « en base dix » et les algorithmes permettant d’effectuer des opérations sur les nombres décimaux. Le mot algorithme est d’ailleurs dérivé de son nom et le mot algèbre vient du titre d’un de ses livres. Un algorithme est un procédé de résolution d’un problème donné. Il existe de très nombreux algorithmes, comme celui de la division euclidienne, l’addition à retenue, les algorithmes de tri par fusion ou par sélection, etc. Statue d’al-Khwarizmi Le plus ancien algorithme connu date de près de 2000 ans av. J-C : il s’agit d’une procédure des ingénieurs babyloniens pour calculer le volume d’une citerne. D’autres sont aujourd’hui l’objet de recherches intenses pour les élaborer, concernant les nombres premiers notamment. Un algorithme une fois mis au point théoriquement, il faut passer des étapes écrites « sur le papier » à l’écriture d’un programme, dans un langage donné, qui exécutera l’algorithme sur une machine. Il existe plusieurs milliers de langages de programmation possibles pour programmer un algorithme donné. Tablette babylonienne décrivant un algorithme de calcul de 2 Document 2 : langages de bas niveau et langages de haut niveau. A l’échelle élémentaire du transistor, le processeur d’un ordinateur exécute des opérations logiques élémentaires sur les bits, du type NON, ET,OU, etc, et à l’échelle des portes logiques, des additions, des soustractions, etc. Ces opérations lui sont commandées par des instructions également codées en binaire. Il est donc très malaisé de communiquer directement avec un ordinateur dans son « langage ». Il existe donc différents langages plus proches des langages humains. Les Exemples d’une instruction langages qui manipulent directement la mémoire RAM, les registres et les instructions de base du processeur sont dits « langages de bas niveau ». Le En langage machine : langage de plus bas niveau est l’Assembleur. Il dispose d’un nombre limité d’instructions simples. Ces instructions sont ensuite codées en langage machine, 0101 0000 0000 0101 on parle « d’assemblage ». Chaque famille de processeur possède son propre En assembleur : assembleur. MOVE #H’5, A A l’autre extrémité se trouvent les langages de haut niveau, comme les langages Python3, JAVA, PHP, etc. Ils ressemblent fortement à l’anglais courant et sont En python 3 : beaucoup plus clairs pour un programmeur, mais nécessitent une « traduction » x=5 très complexe. Pour passer des langages informatiques aux instructions codées en binaire, il faut un « traducteur ». Comme pour les langues, il y a deux types de traductions : une traduction simultanée, appelée « interprétation » en informatique, et une traduction différée, appelée « compilation ». Cette tâche est dédiée à des programmes, qui font la traduction du langage de haut niveau vers l’assembleur. Un interpréteur, un peu comme un traducteur lors d’une conversation entre un Anglais et un Japonais par exemple, va transformer directement les phrases du locuteur Anglais en Japonais. En informatique, on dit qu’il transforme un « code source » en « entrées-sorties » et affiche des « messages d’erreurs » s’il y a des mots qu’il ne comprend pas. Cependant, l’interpréteur ne fait pas la traduction inverse : il ne transforme pas du japonais en anglais… Un compilateur fonctionne tout autrement. A l’instar d’un traducteur qui traduit un livre en Anglais en un livre en Japonais, le compilateur va transformer le code source, en JAVA par exemple, en un programme en Assembleur. Le compilateur génère donc un autre programme, appelé « programme compilé », qui sera ensuite assemblé pour être exécuté. Certains langages sont conçus pour être compilés : C, C++, JAVA par exemple. D’autres sont interprétés : c’est le cas de Python ou de Javascript. La différence majeure est qu’un programme compilé est « portable », c’est-à-dire qu’il peut être exécuté (en théorie) directement sur n’importe quel ordinateur, alors qu’un programme interprété dépend de son interpréteur pour s’exécuter. D’après www.wikipedia.org. Document 3 : ligne de commande, script et IDE Le langage Python 3 s’exécute à l’aide d’un programme appelé interpréteur. L’interpréteur permet de travailler directement en ligne de commande. Une instruction est alors directement exécutée. Python en ligne de commande Ecran d’accueil de IDLE Pour écrire un programme complet, appelé script, il faut recourir à un éditeur de textes, comme par exemple wordpad ou notepad. Ouverture de l’éditeur de script à partir de l’écran d’accueil Avec le langage Python3, comme dans les autres langage de haut niveau, il est plus aisé de recourir à un logiciel appelé « environnement de développement » (IDE en anglais) qui regroupe à la fois l’éditeur de texte et l’interpréteur. Pour sauvegarder le script Par exemple, avec le logiciel IDLE, on peut ouvrir l’éditeur de text permettant d’écrire les scipts en utilisant l’onglet « New window du menu « File ». Pour exécuter le programme Un tel éditeur de texte dispose d’une coloration syntaxique, qui reconnaît les spécificités du langage. La fenêtre d’exécution du programme Le script peut ensuite être sauvegardé avec l’onglet « Save », puis exécuté avec l’onglet « Run Module » du menu « Run ». Document 4 : les instructions fondamentales en informatique Un programme informatique est une suite d’instructions. Il y a 5 instructions Les instructions : principales : x=3 y = x+3 L’affectation (ou assignation), où une variable v reçoit une sont des instructions d’affectation d’expressions à une variable, x dans le expression e. premier cas, et y dans le second. L’instruction d’entrée, qui interroge le clavier ou la souris, ou tout L’expression : x+3 autre périphérique. n’est pas une instruction. C’est une expression qui réalise une opération avec L’instruction de sortie, qui produit un signal sur un périphérique. l’opérateur + et les opérandes x et 3. Le test, où une instruction ou plusieurs instructions sont conditionnées par la valeur d’une expression booléenne. L’instruction d’entrée : La boucle, qui est une construction répétant une ou plusieurs instructions en fonction d’une expression booléenne. Lorsque plusieurs instructions semblables sont enchaînées, elles réalisent une séquence. Une séquence est une suite d’instructions liées entre elles. Un programme informatique, quelle que soit sa complexité, peut être vu comme un assemblage de ces cinq instructions, qui interagissent entre elles. a = input() affecte la valeur entrée au clavier à la variable a. Pour que a soit un entier, il faut écrire : a = int(input()) Document 6 : tutoriel et manuel Python Comme de nombreux langages informatiques, il existe de nombreux tutoriel expliquant les bases du langage, ainsi que les fonctionnalités avancées. Pour Python, le tutoriel du site du zéro : www.siteduzero.com est relativement bien adapté. De même, un site est dédié au manuel de référence Python3, à l’adresse : Feuille de route 1. Expliquer ce que fait le programme n°1. 2. Quels sont les types d’instructions données dans le programme n°2 ? 3. L’état de l’exécution du programme n°2 après les lignes 1 et 2 est représenté de la façon suivante : a b 3 7 Qu’est-ce que l’état de l’exécution d’un programme ? Indiquer les états suivants de l’exécution du programme n°2. 4. Que fait l’algorithme dit « de Delphe » ? 5. Programmer l’algorithme proposé avec le langage Python3. 6. Comment vérifier que le programme réalise correctement l’algorithme ? Pour aller plus loin. Voici un programme écris avec l’assembleur du Dauphin : valeur Code de de PC l’instruction en base 16 0 50 1 14 2 51 3 14 4 70 5 00 6 12 7 00 8 0E 9 2C A 81 B 10 C 00 D 04 E 03 Instruction en assembleur MOVE #H’14,A MOVE #H’14,B COMP #H'00, A JUMP,EQ H’00E DEC A ADD A,B JUMP H'004 HALT Expliquer ce que fait ce programme et programmez-le en Python3 Modifier ce programme en Python3 afin qu’il puisse recevoir un nombre au clavier. Ecrire un programme en Python3 qui calcule approximativement la valeur de la transition énergétique susceptible d’être provoquée par un photon dont l’utilisateur rentre la longueur d’onde en nm. Compléter ce programme afin d’afficher également la gamme de couleur du photon s’il est dans le visible. Une légende de l’Inde raconte que je jeu d’Echec a été inventé par un vieux sage. Le Roi, pour le récompenser, lui demanda ce qu’il souhaitait. Le vieux sage demanda alors la récompense suivante : « Pose un grain de riz sur la première case de mon jeu. Pose deux grains de riz sur la deuxième case, puis quatre grains sur la troisième, et continue ainsi jusqu’à la dernière case. Je veux comme récompense le nombre de grains sur cette dernière case. » Ecrire un programme en Python3 qui calcule le nombre de grains de riz sur chaque case du jeu (en admettant qu’on puisse effectivement les poser sur la case). Peut-on dire du code génétique qu’il s’agit d’un programme ?