seance_2_langages_programmes ( PDF

publicité
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 ?
Téléchargement