Académique Documents
Professionnel Documents
Culture Documents
Chapitre 6
http://ow.ly/2xxkI
Chapitre 6
Programmation et langages
La programmation consiste crer une squence d'instructions pour un ordinateur afin qu'il
puisse rsoudre un problme ou excuter une tche.
partir de ce chapitre, on supposera que le lecteur matrise le langage Python 3.
Didier Mller
6-1
novembre 2014
Programmation et langages
Il reste utilis dans le cadre d'optimisations, mais a t supplant en popularit par les langages
plus accessibles de troisime gnration.
La troisime gnration utilise une syntaxe proche de l'anglais. Proposs autour de 1960, ces
langages ont permis un gain norme en lisibilit et en productivit. Ils ne dpendent plus du
processeur, comme c'tait le cas des gnrations prcdentes, mais d'un compilateur2 spcifique du
processeur. L'ide de portabilit3 des programmes tait lance.
La plupart des langages de programmation actuels sont de troisime gnration. On trouve dans
cette catgorie tous les grands langages : Ada, Algol, Basic, Cobol, Eiffel, Fortran, C, C++, Java,
Perl, Pascal, Python, Ruby, ... Cette gnration couvre d'ailleurs tant de langages qu'elle est souvent
subdivise en catgories, selon le paradigme4 particulier des langages.
Les langages de quatrime gnration, abrgs L4G, souvent associe des bases de donnes,
se situent un niveau au-dessus, en intgrant la gestion de l'interface utilisateur 5 et en proposant un
langage moins technique, plus proche de la syntaxe naturelle.
Ils sont conus pour un travail spcifique : gestion de base de donnes (Microsoft Access, SQL),
production graphique (Postscript), cration d'interface (4D).
La cinquime gnration de langages sont des langages destins rsoudre des problmes
l'aide de contraintes, et non d'algorithmes crits. Ces langages reposent beaucoup sur la logique et
sont particulirement utiliss en intelligence artificielle. Parmi les plus connus, on trouve Prolog,
dont voici un exemple :
frre_ou_soeur(X,Y) :- parent(Z,X), parent(Z,Y), X \= Y.
parent(X,Y) :- pre(X,Y).
parent(X,Y) :- mre(X,Y).
mre(trude, sally).
pre(tom, sally).
pre(tom, erica).
pre(mike, tom).
Ce qui signifie que Sally et Erica sont surs. En effet, Sally et Erica ont le mme pre (Tom).
6-2
novembre 2014
L'informatique au lyce
Chapitre 6
Il existe environ
2500 langages de
programmation,
certains tant trs
gnraux (C, Java),
d'autres hyperspcialiss.
Par exemple,
RobotProg permet
de dplacer un
robot virtuel, R est
un langage pour la
statistique, etc.
Par comparaison,
on recense environ
6800 langues
humaines parles
et/ou crites de par
le monde.
Ada
with Ada.Text_IO;
use Ada.Text_IO;
procedure Bonjour is
begin -- Bonjour
Put("Hello world!");
end Bonjour;
Didier Mller
6-3
novembre 2014
Programmation et langages
BASIC est un
acronyme pour
Beginner's Allpurpose Symbolic
Instruction Code.
Il a t conu la
base en 1963 par
John George
Kemeny et
Thomas Eugene
Kurtz.
cseg segment
assume cs:cseg, ds:cseg
org 100h
main proc
jmp debut
mess db 'Hello world!$'
debut:
mov dx, offset mess
mov ah, 9
int 21h
ret
main endp
cseg ends
end main
BASIC
10 PRINT "Hello world!"
20 END
C
#include <stdio.h>
Invent au dbut
des annes 1970
avec UNIX, C est
devenu un des
langages les plus
utiliss.
C++
#include <iostream>
Bjarne Stroustrup
a dvelopp C++ au
cours des annes
1980. Il s'agissait
d'amliorer le
langage C.
Fortran (FORmula
TRANslator) est
utilis dans les
applications de
calcul scientifique.
Java a t cr par
Sun Microsystems,
et prsent
officiellement le
23 mai 1995.
JavaScript est un
langage de
programmation de
scripts utilis dans
les pages web
interactives .
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}
FORTRAN 77
PROGRAM BONJOUR
WRITE (*,*) 'Hello world!'
END
Java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Javascript
document.write("Hello world!");
Python 1 et 2
print "Hello world!"
Python 3
print("Hello world!")
Didier Mller
6-4
novembre 2014
L'informatique au lyce
Chapitre 6
Didier Mller
6-5
novembre 2014
Programmation et langages
Exemple
La machine de Turing qui suit possde un alphabet {0, 1}, 0 tant le blanc . On suppose que le
ruban contient une srie de 1, et que la tte de lecture/criture se trouve initialement au-dessus du 1
le plus gauche. Cette machine a pour effet de doubler le nombre de 1, en intercalant un 0 entre les
deux sries. Par exemple, 111 deviendra 1110111 . L'ensemble d'tats possibles de la machine
est {e1, e2, e3, e4, e5} et l'tat initial est e1. La table d'actions est la suivante :
tat courant
e1
e2
e3
e4
e5
Symbole lu
Symbole crit
Mouvement
Nouvel tat
(Arrt)
Droite
e2
Droite
e2
Droite
e3
Droite
e3
Gauche
e4
Gauche
e4
Gauche
e5
Gauche
e5
Droite
e1
L'excution de cette machine pourrait tre par exemple (la position de la tte de lecture/criture
sur le ruban est inscrite en caractres gras et rouges) :
tape
tat
Ruban
e1
11
e2
01
e2
010
e3
0100
e4
0101
e5
0101
e5
0101
e1
1101
e2
1001
10
e3
1001
11
e3
10010
12
e4
10011
13
e4
10011
14
e5
10011
15
e1
16
11011
(Arrt)
6-6
novembre 2014
L'informatique au lyce
Chapitre 6
Exercice 6.1
Construisez les machines de Turing suivantes :
1. Une machine qui crit 0 1 0 1 0 1 0 ... sur un ruban blanc.
2. Une machine qui multiplie par 2 son entre binaire crite sur le ruban.
3. Une machine qui ajoute 1 son entre binaire crite sur le ruban.
Pour les questions 2 et 3, on suppose que la tte de lecture/criture est positionne sur le symbole
le plus gauche.
6.3. Pseudo-code
En programmation, le pseudo-code est une faon de dcrire un algorithme en respectant certaines
conventions, mais sans rfrence un langage de programmation en particulier. L'criture en pseudocode permet de dvelopper une dmarche structure, en oubliant temporairement la syntaxe
rigide d'un langage de programmation.
6.3.1. Conventions
Il n'existe pas de convention universelle pour le pseudo-code. Afin de bien se comprendre dans la
suite de ce cours, nous adopterons celle dcrite ci-dessous.
Nom de l'algorithme
Par exemple : Calcul de la date de Pques
Donnes d'entres
Par exemple : Anne > 1582
Rsultat en sortie
Par exemple : Date de Pques pour l'anne donne
Bloc pour :
POUR i ALLANT DE d f FAIRE
instruction
...
FIN POUR
Didier Mller
6-7
novembre 2014
Programmation et langages
Bloc si :
SI condition ALORS
instruction-si-vrai
...
SINON
instruction-si-faux
...
FIN SI
Tableau :
A[i] : l'lment de rang i dans le tableau A, on suppose les tableaux numrots partir de 0.
Chaine de caractres :
"string" (entre guillemets)
Affectation :
a := 10
Fonction :
FONCTION nom(paramtres)
instruction
...
RETOURNER rsultat
Procdure :
PROCEDURE nom(paramtres)
instruction
...
rsultat
6.3.2. En pratique
Le pseudo-code doit tre suffisamment prcis pour que quelqu'un d'autre l'ayant lu sans
connatre l'algorithme soit capable de le coder.
L'objectif est d'avoir le pseudo-code le plus simple possible, afin de le coder facilement et
sans bug. Le pseudo-code d'un petit algorithme prend en gnral une douzaine de lignes.
Pour un problme plus complexe, il faut compter jusqu' 20 ou 25 lignes.
Prvoyez assez de place pour faire tenir tout le pseudo-code sur une mme page.
Lorsqu'on commence crire le pseudo-code, on ne sait pas encore prcisment ce qui va
venir ensuite. Il est judicieux de laisser des lignes blanches rgulirement pour pouvoir
ajouter des choses ensuite tout en gardant quelque chose de propre.
Pour rendre compte visuellement des imbrications des boucles, indentez vers la droite le
corps des boucles et des fonctions. Sur le papier, on peut ajouter de grandes barres verticales
pour faire ressortir encore plus les diffrents blocs d'instructions.
Didier Mller
6-8
novembre 2014
L'informatique au lyce
Chapitre 6
permut := 1
TANT QUE permut = 1 FAIRE
permut := 0
POUR i ALLANT DE 0 n-2 FAIRE
SI A[i] > A[i+1] ALORS
echanger A[i] et A[i+1]
permut := 1
FIN SI
FIN POUR
FIN TANT QUE
6.4.1. Compilation
Certains langages sont compils . En toute gnralit, la compilation est l'opration qui
consiste transformer un langage source en un langage cible. Dans le cas d'un programme, le
compilateur va transformer tout le texte reprsentant le code source du programme, en code
comprhensible pour la machine, appel code machine.
Dans le cas de langages compils, ce qui est excut est le rsultat de la compilation. Une fois
effectue, l'excutable obtenu peut tre utilis sans le code source.
6.4.2. Interprtation
D'autres langages ne ncessitent pas de phase spciale de compilation. La mthode employe
pour excuter le programme est alors diffrente. Le programme entier n'est jamais compil. Chaque
ligne de code est compile en temps rel par un programme. On dit de ce programme qu'il
interprte le code source. Par exemple, Python est un langage interprt.
Cependant, ce serait faux de dire que la compilation n'intervient pas. L'interprte produit le code
machine, au fur et mesure de l'excution du programme, en compilant chaque ligne du code source.
Didier Mller
6-9
novembre 2014
Programmation et langages
6.5. Paradigmes
En informatique, un paradigme est une une faon de programmer, un modle qui oriente notre
manire de penser pour formuler et rsoudre un problme.
Certains langages sont conus pour supporter un paradigme en particulier (Smalltalk et Java
supportent la programmation oriente objet, tandis que Haskell est conu pour la programmation
fonctionnelle), alors que d'autres supportent des paradigmes multiples ( l'image de C++, Common
Lisp, OCaml, Python, Ruby ou Scheme).
Niklaus Wirth
Exemple
Edsger Wybe
Dijkstra
Dans certains langages anciens comme le BASIC, les lignes de programmation portent des
numros, et les lignes sont excutes par la machine dans l'ordre de ces numros. Dans tous ces
langages, il existe une instruction de branchement, note aller en pseudo-code, instruction qui
envoie directement le programme la ligne spcifie. Inversement, ce type de langage ne comporte
pas d'instructions comme Fin Tant Que , ou Fin Si , qui ferment un bloc.
Prenons l'exemple d'une structure Si Alors Sinon
Programmation Structure
Si condition Alors
instructions 1
Sinon
instructions 2
FinSi
1000
1100
1110
1120
1190
1200
1210
1220
1400
Les programmeurs dcomposent leur code en procdures ne dpassant gure 50 lignes, afin
d'avoir le programme en entier sous leurs yeux.
Une procdure, aussi appele routine, sous-routine, module ou fonction, contient une srie
d'tapes raliser. N'importe quelle procdure peut tre appele n'importe quelle tape de
l'excution du programme, incluant d'autres procdures, voire la procdure elle-mme (rcursivit).
Didier Mller
6-10
novembre 2014
L'informatique au lyce
Chapitre 6
Exercice 6.2
Expliquez cette description de Python, tire de Wikipdia :
Python est un langage de programmation interprt multi-paradigme. Il favorise la
programmation imprative structure, et oriente objet.
Didier Mller
6-11
novembre 2014
Programmation et langages
6.6.1. L'affectation
Une affectation est une opration qui permet d'attribuer une valeur une variable. Pour expliquer
ce qui se passe lors d'une affectation, il faut imaginer qu'il existe, dans un recoin de l'ordinateur, une
case mmoire appele x. L'instruction x=t consiste remplir la case x avec la valeur de l'expression
t. Si x contenait dj une valeur, celle-ci est crase.
Exemples
Aprs l'affectation x=3, la variable x contiendra la valeur 3.
Aprs y=4+x, la variable y contiendra la valeur 7.
Affectation et comparaison
Il ne faut pas confondre l'affectation avec la comparaison. Par exemple, la comparaison x==3
permet de savoir si oui ou non la valeur de la variable x est 3. Dans la plupart des langages, on
diffrencie ces deux oprations. En Python, l'affectation est exprime par un = , tandis que la
comparaison est exprime par == . D'autres langages (Pascal par exemple) utilisent
respectivement les oprateurs := et = .
Incrmentation / dcrmentation
Il arrive frquemment que l'on doive incrmenter (ou dcrmenter) une variable, c'est--dire
augmenter (ou diminuer) sa valeur d'une ou plusieurs units. Dans ce cas, on peut utiliser
l'instruction x=x+17. Voici ce qui se passe : on prend la valeur contenue dans x, on y ajoute 1, puis
on remet le nouveau rsultat dans la variable x.
L'instruction x=x+1 est tellement frquente qu'il existe souvent des raccourcis : x+=1 (Python)
ou x++ (C, Mathematica).
6-12
novembre 2014
L'informatique au lyce
Chapitre 6
On peut enchaner autant d'instructions sinon si que l'on veut : seule la premire dont la
condition sera vrifie sera excute. On peut gnralement associer une clause sinon qui ne sera
excute que si aucune clause sinon si n'a t vrifie.
SI Test 1 ALORS
Instruction 1
SINON SI Test 2 ALORS
Instruction 2
FIN SI
Instruction 3
Le grand danger est ce qu'on appelle des boucles infinies, c'est--dire des boucles qui ne finissent
jamais. Cela arrive quand la condition est toujours satisfaite, typiquement quand on oublie
d'incrmenter un compteur. Voici une boucle qui crira une infinit de 0, car on a oubli
d'incrmenter x :
x=0
while x<10:
print(x)
Boucles imbriques
Il est tout fait possible, et parfois ncessaire, d'imbriquer une boucle dans une autre boucle. Par
exemple, imaginons que l'on veuille crire toutes les heures et minutes d'une journe. Cela
commencera par 0 heure 0 minute, 0 heure 1 minute, 0 heure 2 minutes, ..., 0 heure 59 minutes, 1
Didier Mller
6-13
novembre 2014
Programmation et langages
heure 0 minute, 1 heure 1 minute, ... On voit qu'une premire boucle parcourra les heures, tandis que
la deuxime parcourra les minutes, et que l'on incrmentera l'heure seulement quand 60 minutes
seront passes. Voil ce que cela donnera en Python 3 :
h=0
while h<24:
m=0
while m<60:
print(h,"heure(s) ",m,"minute(s)")
m+=1
h+=1
Exercice 6.3
crivez en Python un programme qui imprimera les tables de multiplication de 1 10.
Compteur
Un compteur permet de raliser une boucle associe une variable entire qui sera incrmente
(ou dcrmente) chaque itration.
POUR compteur DE 0 A fin
Instruction 1
FIN POUR
Instruction 2
En BASIC :
FOR i = depart TO fin instruction NEXT i
Didier Mller
6-14
novembre 2014
L'informatique au lyce
Chapitre 6
En Pascal :
for i := depart to fin do instruction;
En C :
Itrateur
Un itrateur est un objet qui permet de raliser une boucle parcourant tous les lments contenus
dans une structure de donnes (par exemple une liste).
POUR CHAQUE valeur DANS collection
Instruction 1
FIN POUR CHAQUE
Instruction 2
Exemple en Python :
for animal in ["chat", "chien", "poule"] :
print(animal)
Didier Mller
6-15
novembre 2014
Programmation et langages
Ce programme crira 3 5. On voit bien que les deux n sont des variables diffrentes, puisque
l'instruction n=3 n'a pas modifi la valeur de l'autre n. Le n de la deuxime ligne est une variable
locale la procdure ecrire, tandis que celui de la cinquime ligne est une variable locale.
Modifions lgrement ce programme :
def ecrire():
n += 3
print(n,end=' ')
n=5
ecrire()
print(n)
Ce programme produira une erreur, car le n local dans la procdure crire n'a pas t initialis.
Pour finir avec cet exemple, le programme ci-dessous donnera comme rsultat 3 3. La ligne
global n signale que n est la variable globale initialise dans le programme principal. Il ne s'agit
donc plus d'une variable locale. Il n'y a l plus qu'une seule variable n.
def ecrire():
global n
n = 3
print(n,end=' ')
n=5
ecrire()
print(n)
Passage de paramtres
On peut passer des paramtres une procdure ou une fonction sous forme d'une liste de
paramtres formels entre parenthses. A l'intrieur du corps de la procdure, les paramtres sont des
variables locales.
Il ne faut pas redclarer le nom des paramtres dans la section des dclarations locales. Voici un
exemple en Pascal8, qui calcule xn (navement) :
var n : integer;
function puissance(x:real; n:integer) : real;
var p:real;
begin
p:=1;
while n>0 do
begin
p:=p*x;
n:=n-1
end;
puissance:=p
end;
begin
n:=3;
writeln('Pi au cube =',puissance(3.14159,n));
writeln(n) (*la valeur de n n'a pas t modifie*)
end.
C'est la valeur du paramtre qui est pass la procdure. Si la valeur est modifie l'intrieur de
la procdure, la modification n'est pas rpercute la sortie de la procdure. On appelle ce type de
passage de paramtre un passage par valeur.
8
En Pascal, toutes les variables doivent tre dclares, ce qui n'est pas le cas en Python, o les variables viennent au monde en se voyant
assigner une valeur et sont automatiquement dtruites lorsqu'elles se retrouvent hors de porte.
Didier Mller
6-16
novembre 2014
L'informatique au lyce
Chapitre 6
Dans certains langages, il est possible de passer des variables comme paramtres. On appelle cela
un passage par variable ou passage par rfrence. Toute modification du paramtre dans la fonction
appele entrane alors la modification de la variable passe en paramtre.
Voici un autre programme en Pascal, qui change les valeurs de deux variables :
var x,y : real;
Remarquez bien le
mot-clef var entre
les parenthses qui
fait toute la
diffrence.
Le rsultat sera 5 0, alors que l'on s'attendait plutt 5 5. Cela vient du fait que le type entier est
immutable.
Par contre :
def ecrire(x):
x[0]=5
# on modifie le 1er lment de la liste x
print(x[0],end=' ')
x=[0,1,2,3,4]
ecrire(x)
print(x[0])
produira 5 5, car une liste est mutable. D'une manire gnrale, il vaut mieux viter les effets de
bords, afin d'avoir un programme plus lisible.
En informatique, une fonction est dite effet de bord si elle modifie un tat autre que sa valeur de retour.
Didier Mller
6-17
novembre 2014
Programmation et langages
Sources
[1] Pixel, Diagram and history of programming languages ,
<http://merd.sourceforge.net/pixel/language-study/diagram.html>
[2] Wikipdia, Langages de programmation ,
<http://fr.wikipedia.org/wiki/Langage_de_programmation>
[3] Wikipdia, Programmation informatique , <http://fr.wikipedia.org/wiki/Programmation>
[4] Wikipdia, Machine de Turing , <http://fr.wikipedia.org/wiki/Machine_de_Turing>
[5] Wikipdia, Paradigme (programmation) ,
<http://fr.wikipedia.org/wiki/Paradigme_(programmation)>
[6] Wikipdia, Machine de Turing , <http://fr.wikipedia.org/wiki/Machine_de_Turing>
Didier Mller
6-18
novembre 2014