Vous êtes sur la page 1sur 356

Gilles Dowek

Jean-Pierre Archambault, Emmanuel Baccelli, Claudio Cimelli,


Albert Cohen, Christine Eisenbeis, Thierry Viville et Benjamin Wack
Avec la contribution de Hugues Bersini et de Guillaume Le Blanc
Prface de Grard Berry, professeur au Collge de France

Informatique
et sciences du
numrique
dition
spciale Python !

Manuel de spcialit ISN en terminale


Avec des exercices corrigs
et des ides de projets
Gilles Dowek est chercheur Inria, ses travaux portent sur les liens entre le calcul et le raisonnement. Il est laurat du Grand
prix de philosophie de lAcadmie franaise pour son livre Les Mtamorphoses du Calcul.
Jean-Pierre Archambault est professeur agrg de mathmatiques et prsident de lassociation Enseignement public et
informatique (EPI). Claudio Cimelli est inspecteur dacadmie, inspecteur pdagogique rgional en Sciences et techniques
industrielles (STI) et conseiller TICE (technologies de linformation et de la communication pour lenseignement) du recteur
de Crteil. Benjamin Wack est docteur en informatique et professeur agrg de mathmatiques. Emmanuel Baccelli, Albert
Cohen, Christine Eisenbeis et Thierry Viville sont docteurs en informatique et chercheurs Inria. Leurs travaux respectifs
portent sur les rseaux, la construction de programmes effectuant des milliers de calculs en parallle, les limites physiques
du calcul et la simulation du cerveau.
Avec la contribution de Hugues Bersini et Guillaume Le Blanc.

Enfin un vritable manuel dinformatique pour les lycens et leurs professeurs !


Les quatre concepts de machine, dinformation, dalgorithme et de langage sont au cur de linformatique, et lobjet de ce
cours est de montrer comment ils fonctionnent ensemble. En premire partie, nous apprendrons crire des programmes,
en dcouvrant les ingrdients qui les constituent : laffectation, la squence et le test, les boucles, les types, les fonctions et
les fonctions rcursives. Dans la deuxime partie, on verra comment reprsenter les informations que lon veut communi-
quer, les stocker et les transformer textes, nombres, images et sons. On apprendra galement structurer et compresser
de grandes quantits dinformations, les protger par le chiffrement. On verra ensuite que derrire les informations, il y a
toujours des objets matriels : ordinateurs, rseaux, robots, etc., qui font partie de notre quotidien. Enfin, on sinitiera
des savoir-faire utiles au XXIe sicle : ajouter des nombres exprims en base deux, dessiner, retrouver une information par
dichotomie, trier des informations et parcourir des graphes.
Ce cours comporte des chapitres lmentaires et avancs. Chacun contient une partie de cours, des sections de savoir-faire
qui permettent dacqurir les capacits essentielles, et des exercices, nots difficiles pour certains, avec corrig lorsque
ncessaire.

qui sadresse ce livre ?


Ce manuel de cours est destin aux lves de terminale ayant choisi la spcialit Informatique et sciences du numrique au
lyce ; il sappuie sur le langage de programmation Python (version 3). Il sera galement lu avec profit par tous les profes-
sionnels de linformatique, quils soient autodidactes ou non.
Au sommaire
LANGAGES Les ingrdients des programmes Modifier, comprendre, crire et tester un programme Instructions et
expressions Oprations Indenter un programme Boucles Boucles for et while Imbriquer deux boucles Non-termi-
naison Commenter un programme Types Types de base Tableaux (listes) Chanes de caractres Les fonctions
Isoler une instruction Passer des arguments Rcuprer une valeur La rcursivit Fonctions qui appellent des fonc-
tions Fonctions qui sappellent elles-mmes La notion de langage formel Grammaire et smantique REPRSENTER
LINFORMATION Nombres entiers et virgule Compter en base n Caractres et textes ASCII binaire crire une page
en HTML Images et sons Numriser une image Notion de format Tailles de fichier Fonctions bolennes Fonctions
non, et, ou Structurer linformation Persistance des donnes Notion de fichier Organiser des fichiers en une arbo-

ISBN : 978-2-212-13676-0
rescence Liens et hypertextes Hypermnsie Compresser, corriger, chiffrer MACHINES Portes bolennes Temps et Code article : G13676
mmoire Organisation dun ordinateur Rseaux Protocoles Couches Trouver les adresses MAC et IP Dterminer le
chemin suivi par linformation Rgulation du rseau global Robots Composants dun robot Programmer un robot
ALGORITHMES Ajouter deux nombres exprims en base deux Dessiner Formats dimages Transformer les images
Dichotomie Recherche en table Conversion analogique-numrique Trouver le zro dune fonction Trier Tri par slec-
tion et par fusion Efficacit des algorithmes Parcourir un graphe tats et transitions Ides de projets.

Module ISN et codes sources


(Python, C, C++,Java, Javas Cool,
JavaScript, OCaml) disponibles sur
la fiche du livre sur Ouvrage publi avec le concours
www.editions-eyrolles.com de lEPI, la SIF et Inria.
dowek2013 titre 5/07/13 11:03 Page 2

Informatique
et sciences du
numrique
Spcialit ISN en terminale S
Avec des exercices corrigs
et ides de projets
Dans la mme collection

Chez le mme diteur

pII_Dowek-ISN.indd 1 05/07/13 09:48


dowek2013 titre 5/07/13 11:03 Page 1

Gilles Dowek
Jean-Pierre Archambault, Emmanuel Baccelli, Claudio Cimelli,
Albert Cohen, Christine Eisenbeis, Thierry Viville et Benjamin Wack
Avec la contribution de Hugues Bersini et de Guillaume Le Blanc
Prface de Grard Berry, professeur au Collge de France

Informatique
et sciences du
numrique
Spcialit ISN en terminale S
Avec des exercices corrigs
et ides de projets
DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

Ouvrage publi avec le concours


de lassociation EPI Enseignement Public et Informatique,
de la SIF Socit Informatique de France,
et de llnstitut public de recherche en sciences du numrique Inria.

Remerciements Anne Bougnoux (relecture) et Gal Thomas (maquette),


ainsi qu Raphal Hertzog, Pierre Nron, Christine Paulin, Grgoire Pan, Jonathan Protzenko
et Dominique Quatravaux pour leurs tmoignages.

Merci Randall Munroe du site XKCD pour les dessins douverture de partie adapts de langlais
ainsi qu Rmi Cieplicki de www.DansTonChat.com pour nous avoir autoriss utiliser leur logo.

Illustrations de Camille Vorng (cactus, botes, arborescences),


Laurne Gibaud et Bernard Sullerot (circuits logiques, oprations binaires, schmas, labyrinthes)

Photographies douvertures de chapitres


Alan Turing(aimable autorisation de la Sherborne School, merci Rachel Hassall),
John Backus(PIerre.Lescanne, CC-BY-SA-3.0), Grace Hopper(James S. Davis, domaine public),
Gilles Kahn (marcstephanegoldberg Flickr), Gordon Plotkin(merci lui davoir accept de nous fournir une photographie),
John McCarthy (null0 Flickr, CC BY 2.0), Robin Milner(http://www.cl.cam.ac.uk/archive/rm135/),
Dana Scott(Andrej Bauer http://andrej.com/mathematicians), Claude Shannon (Tekniska museet Flickr, CC BY-SA 2.0),
Tim Berners-Lee(Paul Clarke, CC-BY-2.0), Ronald Rivest(carback1, CC BY 2.0),
Adi Shamir (Ira Abramov de Even Yehuda, Israel, CC-BY-SA-2.0), Len Adleman (len adlmen, CC-BY-SA-3.0),
Frances Allen (Rama, CC-BY-SA-2.0-fr), John Von Neumann (LANL, domaine public),
Vinton Cerf et Robert Kahn (Paul Morse, domaine public), Ada Lovelace (Alfred Edward Chalon, domaine public),
Ivan Sutherland (Dick Lyon, CC-BY-SA-3.0), Donald Knuth (Jacob Appelbaum, CC-BY-SA-2.5),
Philippe Flajolet (Luc Devroye, CC-BY-SA-3.0), Joseph Sifakis (Rama, CC-BY-SA-2.0-fr),
Christopher Strachey (http://www.rutherfordjournal.org/article040101.html), Gottlob Frege (inconnu, domaine public),
Muhammad al-Khwarizmi et Samuel Morse (inconnu, domaine public),
Thomas Flowers (http://www.ithistory.org/honor_roll/fame-detail.php?recordID=444 merci lquipe de IT History pour leur
aimable autorisation), Otto Schmitt (http://160.94.102.47/index.htm), Norbert Wiener (Konrad Jacobs, CC-BY-SA-2.0-de)

Autres images
Qui est-ce est un jeu dvelopp par la socit Theora Design (http://theoradesign.com)
et distribu en France par MB (Ides de projets)
La Joconde, tableau de Lonard de Vinci (chapitre 19) et LAnnonciation, tableau de Sandro Botticelli (chapitre 19)
Robolab : par Mirko Tobias Schfer (chapitre 17)
Thyrodectomie assiste par un robot : CHU de Nmes (http://www.chu-nimes.fr/espace-presse-galerie-photos.html) (chapitre 17)
Robot mOway : http://www.moway-robot.com, http://www.adrirobot.it/moway/moway_circuito.htm (chapitre 17)

En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support
que ce soit, sans lautorisation de lditeur ou du Centre Franais dexploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris.
Groupe Eyrolles, 2013, ISBN: 978-2-212-13676-0

Copyright_Dowek.indd 1 05/07/13 09:56


Prface

Lanne 2012 a vu lentre de linformatique en tant quenseignement de spcialit en


classe de terminale scientifique. Cette entre devenait urgente, car linformatique est
dsormais partout. Cre dans les annes 1950 grce une collaboration entre lec-
troniciens, mathmaticiens et logiciens (ces derniers en ayant pos les bases ds
1935), elle na cess dacclrer son mouvement depuis, envahissant successivement
lindustrie, les tlcommunications, les transports, le commerce, ladministration, la
diffusion des connaissances, les loisirs, et maintenant les sciences, la mdecine et
lart, tout cela en crant de nouvelles formes de communication et de relations
sociales. Les objets informatiques sont maintenant par milliards et de toutes tailles,
allant du giga-ordinateur quip de centaines de milliers de processeurs aux micro-
puces des cartes bancaires ou des prothses cardiaques et auditives, en passant par les
PC, les tablettes et smartphones, les appareils photos, ou encore les ordinateurs qui
conduisent et contrlent les trains, les avions et bientt les voitures. Tous fonction-
nent grce la conjonction de puces lectroniques et de logiciels, objets immatriels
qui dcrivent trs prcisment ce que vont faire ces appareils lectroniques. Au XXIe
sicle, la matrise du traitement de linformation est devenue aussi importante que
celle de lnergie dans les sicles prcdents, et linformatique au sens large est
devenue un des plus grands bassins demploi travers le monde. Cela implique que
de nombreux lycens actuels participeront son essor dans lavenir.
Ces jeunes lycens sont bien sr trs familiers avec les appareils informatiss. Mais ce
nest pas pour cela quils en comprennent le fonctionnement, mme sur des plans l-
mentaires pour certains. Une opinion encore fort rpandue est quil ny a pas besoin
de comprendre ce fonctionnement, et quil suffit dapprendre lusage des appareils et
Informatique et sciences du numrique

logiciels. lanalyse, cette opinion apparemment naturelle savre tout fait sim-
pliste, avec des consquences nfastes quil faut tudier de prs. Pour faire un paral-
lle avec une autre discipline, on enseigne la physique car elle est indispensable la
comprhension de la nature de faon gnrale, et aussi de faon plus spcifique au
travail de tout ingnieur et de tout scientifique, cest--dire aux dbouchs naturels
de beaucoup dlves de terminale scientifique. Mais qui penserait quil suffit de
passer le permis de conduire pour comprendre la physique dun moteur ou la mca-
nique une voiture ? Or, nous sommes tous autant confronts linformatique qu la
physique, mme si elle ne reprsente pas un phnomne naturel prexistant ; comme
pour la physique, les ingnieurs et scientifiques devront y tre au moins autant cra-
teurs que consommateurs. Pour tre plus prcis, sous peine de ne rester que des con-
sommateurs serviles de ce qui se cre ailleurs, il est indispensable pour notre futur de
former au cur conceptuel et technique de linformatique tout lve dont le travail
technique sera reli lutilisation avance ou la cration de linformatique du pr-
sent ou du futur. Il est donc bien naturel que la nouvelle formation linformatique
sinaugure en terminale scientifique. Mais elle devra immanquablement ensuite tre
largie dautres classes, car tout lve sera concern en tant que futur citoyen.
Pour tre efficace, toute formation scolaire demande un support adquat. Ce premier
livre va jouer ce rle pour linformatique, en prsentant de faon pdagogique les
quatre composantes scientifiques et techniques centrales de son cur scientifique et
technique : langages de programmation, numrisation de linformation, machines et
rseaux, et algorithmes. Il a t crit par des chercheurs et enseignants confirms,
tous profondment intresss par le fait que les lves comprennent, assimilent et
apprcient les concepts et techniques prsentes. Il insiste bien sur deux points
essentiels : le fait que ces quatre composantes sont tout fait gnriques, cest--dire
valables pour tous les types dapplications, des mga-calculs ncessaires pour tudier
lvolution du climat aux calculs lgers et rapides effectuer dans les micro-puces
enfouies partout, et le fait que les concepts associs resteront valables dans le temps.
En effet, si les applications de linformatique voluent trs vite, son cur conceptuel
reste trs stable, au moins au niveau appropri pour la terminale scientifique. Lensei-
gner de faon adquate est ncessaire autant la comprhension des bases qu tout
approfondissement ultrieur. nen pas douter, cet ouvrage y contribuera.

Grard Berry, directeur de recherche Inria


Professeur au Collge de France,
Membre de lAcadmie des sciences, de lAcadmie des technologies,
et de lAcademia Europaea

VI Groupe Eyrolles, 2013


Table des matires

AVANT-PROPOS .............................................. 1 La boucle while 37


Structure de louvrage 3 SAVOIR-FAIRE crire un programme utilisant
Parcours possibles 4 une boucle while 38
Remerciements 5 SAVOIR-FAIRE Commenter un programme 39
La non-terminaison 40
PREMIRE PARTIE La boucle for, cas particulier de la boucle while 40
LANGAGES............................................. 7 SAVOIR-FAIRE Choisir entre une boucle for
et la boucle while pour crire un programme 42
1. LES INGRDIENTS DES PROGRAMMES................. 9 Ai-je bien compris ? 45
Un premier programme 11
La description du programme 13 3. LES TYPES .................................................... 47
SAVOIR-FAIRE Modifier un programme existant Les types de base 48
pour obtenir un rsultat diffrent 15 SAVOIR-FAIRE Diffrencier les types de base 49
Les ingrdients dun programme 16 Les listes 50
SAVOIR-FAIRE Initialiser les variables 20 SAVOIR-FAIRE Utiliser une liste dans
un programme 52
SAVOIR-FAIRE Comprendre un programme
et expliquer ce quil fait 20 Les listes bidimensionnelles 53
SAVOIR-FAIRE crire un programme 21 Les chanes de caractres 56
SAVOIR-FAIRE Mettre un programme SAVOIR-FAIRE Calculer avec des chanes
au point en le testant 22 de caractres 56
Les instructions et les expressions 23 La mise au point des programmes 57
Les oprations 24 SAVOIR-FAIRE Mettre au point un programme
Lindentation 27 en linstrumentant 58
Ai-je bien compris ? 29 4. LES FONCTIONS (AVANC) ..............................61
Isoler une instruction 62
2. LES BOUCLES ................................................ 31
Passer des arguments 64
La boucle for 32
Rcuprer une valeur 65
SAVOIR-FAIRE crire un programme utilisant
une boucle for 34 SAVOIR-FAIRE crire len-tte dune fonction 66
SAVOIR-FAIRE Imbriquer deux boucles 35 SAVOIR-FAIRE crire une fonction 67
Informatique et sciences du numrique

Les variables globales 68 Une base quelconque 108


Le passage par valeur 72 SAVOIR-FAIRE Trouver la reprsentation en base k
SAVOIR-FAIRE dun entier naturel donn en base dix 108
Choisir entre un passage par valeur SAVOIR-FAIRE Trouver la reprsentation en base dix
et une variable globale 73 dun entier naturel donn en base k 109
Le passage par valeur et les listes 74 La reprsentation des entiers relatifs 109
Ai-je bien compris ? 77 SAVOIR-FAIRE Trouver la reprsentation binaire
sur n bits dun entier relatif donn en dcimal 110
5. LA RCURSIVIT (AVANC)..............................79
SAVOIR-FAIRE Trouver la reprsentation dcimale
Des fonctions qui appellent des fonctions 80 dun entier relatif donn en binaire sur n bits 111
Des fonctions qui sappellent elles-mmes 81 SAVOIR-FAIRE Calculer la reprsentation p
SAVOIR-FAIRE Dfinir une fonction rcursive 83 de loppos dun entier relatif x partir de
Des images rcursives 85 sa reprsentation p, pour une reprsentation
Ai-je bien compris ? 87 des entiers relatifs sur huit bits 111
La reprsentation des nombres virgule 112
6. LA NOTION DE LANGAGE FORMEL (AVANC) .....89
SAVOIR-FAIRE Trouver la reprsentation en base dix
Les langages informatiques
dun nombre virgule donn en binaire 113
et les langues naturelles 90
Ai-je bien compris ? 115
Les anctres des langages formels 91
Les langages formels et les machines 92 8. REPRSENTER DES CARACTRES
La grammaire 93 ET DES TEXTES ............................................ 117
La smantique 95 La reprsentation des caractres 118
Redfinir la smantique 96 La reprsentation des textes simples 119
Ai-je bien compris ? 97 SAVOIR-FAIRE Trouver la reprsentation en ASCII
binaire dun texte 119
DEUXIME PARTIE SAVOIR-FAIRE Dcoder un texte reprsent
INFORMATIONS .................................... 99 en ASCII binaire 119
La reprsentation des textes enrichis 122
7. REPRSENTER DES NOMBRES ENTIERS SAVOIR-FAIRE crire une page en HTML 124
ET VIRGULE ..............................................101 Ai-je bien compris ? 127
La reprsentation des entiers naturels 103
La base cinq 104 9. REPRSENTER DES IMAGES ET DES SONS ....... 129
SAVOIR-FAIRE Trouver la reprsentation en base La reprsentation des images 130
cinq dun entier naturel donn en base dix 104 La notion de format 131
SAVOIR-FAIRE Trouver la reprsentation en base dix SAVOIR-FAIRE Identifier quelques
dun entier naturel donn en base cinq 105 formats dimages 132
La base deux 106 La reprsentation des images en niveaux de gris
SAVOIR-FAIRE Trouver la reprsentation en base et en couleurs 132
deux dun entier naturel donn en base dix 106 SAVOIR-FAIRE Numriser une image sous forme
SAVOIR-FAIRE Trouver la reprsentation en base dix dun fichier 135
dun entier naturel donn en base deux 107 La reprsentation des sons 137

VIII Groupe Eyrolles, 2013


Table des matires

La taille dun texte, dune image ou dun son 138 TROISIME PARTIE
MACHINES ........................................ 179
SAVOIR-FAIRE Comprendre les tailles des donnes
et les ordres de grandeurs 139 13. LES PORTES BOOLENNES ...........................181
SAVOIR-FAIRE Choisir un format appropri Le circuit NON 182
par rapport un usage ou un besoin, Le circuit OU 183
une qualit, des limites 140 Quelques autres portes boolennes 185
Ai-je bien compris ? 141 Ai-je bien compris ? 191
10. LES FONCTIONS BOOLENNES ..................... 143 14. LE TEMPS ET LA MMOIRE ..........................193
Lexpression des fonctions boolennes 144 La mmoire 194
Les fonctions non, et, ou 144 Lhorloge 200
Lexpression des fonctions boolennes Ai-je bien compris ? 203
avec les fonctions non, et, ou 145
SAVOIR-FAIRE Trouver une expression symbolique 15. LORGANISATION DUN ORDINATEUR ...........205
exprimant une fonction partir de sa table 147 Trois instructions 207
Lexpression des fonctions boolennes Le langage machine 208
avec les fonctions non et ou 148 SAVOIR-FAIRE Savoir drouler lexcution
Ai-je bien compris ? 149 dune squence dinstructions 210
Compilation et interprtation 212
11. STRUCTURER LINFORMATION (AVANC)....... 151 Les priphriques 213
La persistance des donnes 152 Le systme dexploitation 214
La notion de fichier 152 Ai-je bien compris ? 216
Utiliser un fichier dans un programme 153
Organiser des fichiers en une arborescence 155 16. LES RSEAUX (AVANC) .............................219
SAVOIR-FAIRE Classer des fichiers Les protocoles 220
sous la forme dune arborescence 157 La communication bit par bit :
Liens et hypertextes 158 les protocoles de la couche physique 222
Lhypermnsie 159 Les rseaux locaux :
Pourquoi linformation est-elle souvent gratuite ? 160 les protocoles de la couche lien 224
Ai-je bien compris ? 163 SAVOIR-FAIRE Trouver les adresses MAC
des cartes rseau dun ordinateur 226
12. COMPRESSER, CORRIGER, CHIFFRER (AVANC) . 165 Le rseau global : les protocoles
Compresser 166 de la couche rseau 226
SAVOIR-FAIRE Utiliser un logiciel SAVOIR-FAIRE Trouver ladresse IP attribue
de compression 168 un ordinateur 227
Compresser avec perte 170 SAVOIR-FAIRE Dterminer le chemin suivi
Corriger 170 par linformation 230
Chiffrer 173 SAVOIR-FAIRE Dterminer ladresse IP
Ai-je bien compris ? 177 du serveur par lequel un ordinateur
est connect Internet 231
La rgulation du rseau global : les protocoles
de la couche transport 232

Groupe Eyrolles, 2013 IX


Informatique et sciences du numrique

Programmes utilisant le rseau : SAVOIR-FAIRE Changer la taille dune image 281


la couche application 234 SAVOIR-FAIRE Fusionner deux images 281
Quelles lois sappliquent sur Internet ? 235 SAVOIR-FAIRE Lisser une image pour liminer ses
Qui gouverne Internet ? 236 petits dfauts et en garder les grands traits 283
Ai-je bien compris ? 237 Ai-je bien compris ? 285

17. LES ROBOTS (AVANC)...............................239 20. LA DICHOTOMIE (AVANC)......................... 287


Les composants dun robot 240 La recherche en table 288
La numrisation des grandeurs captes 242 La conversion analogique-numrique 293
Le contrle de la vitesse : la mthode Trouver un zro dune fonction 294
du contrle en boucle ferme 243 Ai-je bien compris ? 295
Programmer un robot : les actionneurs 244
Programmer un robot : les capteurs 247 21. TRIER (AVANC) ....................................... 297
Le tri par slection 298
SAVOIR-FAIRE crire un programme pour
commander un robot 248 Le tri par fusion 302
Ai-je bien compris ? 250 Lefficacit des algorithmes 307
SAVOIR-FAIRE Sinterroger sur lefficacit
dun algorithme 308
QUATRIME PARTIE
Lefficacit des algorithmes de tri par slection
ALGORITHMES ................................... 253 et par fusion 309
18. AJOUTER DEUX NOMBRES EXPRIMS Ai-je bien compris ? 311
EN BASE DEUX .............................................255
22. PARCOURIR UN GRAPHE (AVANC).............. 313
Laddition 256
La liste des chemins prolonger 314
Laddition pour les nombres exprims
viter de tourner en rond 316
en base deux 257
La recherche en profondeur et la recherche
La dmonstration de correction
en largeur 320
du programme 261
Le parcours dun graphe 321
Ai-je bien compris ? 265
tats et transitions 322
19. DESSINER .................................................267 Ai-je bien compris ? 325
Dessiner dans une fentre 268
SAVOIR-FAIRE Crer une image 268 IDES DE PROJETS ....................................... 327
Dessiner en trois dimensions 270 Un gnrateur dexercices de calcul mental 327
Produire un fichier au format PPM 275 Mastermind 327
Lire un fichier au format PPM 277 Brin dARN 327
Transformer les images 278 Bataille navale 327
SAVOIR-FAIRE Transformer une image en couleurs Cent mille milliards de pomes 327
en une image en niveaux de gris 279 Site de rencontres 327
SAVOIR-FAIRE Augmenter le contraste Tracer la courbe reprsentative dune fonction
dune image en niveaux de gris 279 polynme du second degr 329
SAVOIR-FAIRE Modifier la luminance Grer le score au tennis 329
dune image 280 Automatiser les calculs de chimie 329

X Groupe Eyrolles, 2013


Table des matires

Tours de Hano 329 Algorithme de pledge 335


Tortue Logo 329 Algorithme calculant le successeur
Dessins de plantes 331 dun nombre entier naturel n 335
Langage CSS 331 Le jeu de la vie 335
Calcul sur des entiers de taille arbitraire 331 Une balle 336
Calcul en valeur exacte sur des fractions 331 Gnrateur duvres alatoires 336
Reprsentation des dates et heures 331 Dtecteur de mouvement visuel 336
Transcrire dans lalphabet latin 331 Qui est-ce ? 336
Correcteur orthographique 331 Un joueur de Tic-tac-toe 336
Daltonisme 333 Enveloppe convexe 337
Logisim 333 Chemins les plus courts 337
Banc de registres 333 Utilisation des rseaux sociaux 338
Simuler le comportement dun processeur 333
Utilisation du logiciel Wireshark 335 INDEX ........................................................339

Groupe Eyrolles, 2013 XI


En 1936, soit quelques annes avant la construction des pre-
miers ordinateurs, Alan Turing (1912-1954) et en mme
temps que lui Alonzo Church a tudi les liens entre les
notions dalgorithme et de raisonnement mathmatique.
Cela la men imaginer un procd de calcul, les machines
de Turing, et suggrer que ce procd de calcul puisse tre
universel, cest--dire capable dexcuter tous les algorithmes
possibles.
Avant-propos

Il y a un sicle, il ny avait pas dordinateurs ; aujourdhui, il y en a plusieurs milliards.


Ces ordinateurs et autres machines numriques que sont les rseaux, les tlphones,
les tlvisions, les baladeurs, les appareils photos, les robots, etc. ont chang la
manire dont nous :
concevons et fabriquons des objets,
changeons des informations entre personnes,
gardons trace de notre pass,
accdons la connaissance,
faisons de la science,
crons et diffusons des uvres dart,
organisons les entreprises,
administrons les tats,
etc.
Si les ordinateurs ont tout transform, cest parce quils sont polyvalents, ils permet-
tent de traiter des informations de manires trs diverses. Cest en effet le mme objet
qui permet dutiliser des logiciels de conception assiste par ordinateur, des machines
commande numrique, des logiciels de modlisation et de simulation, des encyclo-
pdies, des cours en ligne, des bases de donnes, des blogs, des forums, des logiciels
de courrier lectronique et de messagerie instantane, des logiciels dchange de
fichiers, des logiciels de lecture de vidos et musique, des tables de mixage numri-
ques, des archives numriques, etc.
Cette polyvalence sillustre aussi par le nombre doutils que les ordinateurs ont
remplac : machines crire, tlphones, machines calculer, tlvisions, appareils
photos, lectrophones, mtiers tisser
Informatique et sciences du numrique

En fait, les ordinateurs sont non seulement capables de traiter des informations de
manires diverses, mais galement de toutes les manires possibles. Ce sont des
machines universelles.
Un procd systmatique qui permet de traiter des informations sappelle un algo-
rithme. Ainsi, on peut parler dalgorithmes de recherche dun mot dans un diction-
naire, dalgorithmes de chiffrement et de dchiffrement, dalgorithmes pour effectuer
des additions et des multiplications, etc.

T Traiter des informations

Traiter des informations signifie appliquer, dune manire systmatique, des oprations des symboles. La
recherche dun mot dans un dictionnaire, le chiffrement et le dchiffrement dun message secret, laddition et
la multiplication de deux nombres, la fabrication des emplois du temps des lves dun lyce ou des pilotes
dune compagnie arienne, le calcul de laire dune parcelle agricole ou encore le compte des points des leves
dun joueur au Tarot sont des exemples de traitements dinformations.

ALLER PLUS LOIN Des algorithmes aussi vieux que lcriture

Il y a quatre mille ans, les scribes et les arpenteurs, en Msopotamie et en gypte, mettaient dj en uvre des
algorithmes pour effectuer des oprations comptables et des calculs daires de parcelles agricoles. La concep-
tion dalgorithmes de traitement de linformation semble remonter aux origines mmes de lcriture. Ds
lapparition des premiers signes crits, les hommes ont imagin des algorithmes pour les transformer.

De manire plus gnrale, un algorithme est un procd systmatique qui permet de


faire quelque chose. Par exemple une recette de cuisine est un algorithme. Ainsi,
mme avant linvention de lcriture, les hommes ont conu et appris des algo-
rithmes, pour fabriquer des objets en cramique, tisser des toffes, nouer des cor-
dages ou, simplement, prparer des aliments.
Le bouleversement survenu au milieu du XXe sicle tient ce que les hommes ont
cess dutiliser exclusivement ces algorithmes la main ; ils ont commenc les faire
excuter par des machines, les ordinateurs. Pour y parvenir, il a fallu exprimer ces
algorithmes dans des langages de programmation, accessibles aux ordinateurs. Ces
langages sont diffrents des langues humaines en ce quils permettent la communica-
tion non pas entre les tres humains, mais entre les tres humains et les machines.
Linformatique est donc ne de la rencontre de quatre concepts trs anciens :
machine,
information,
algorithme,
langage.

2 Groupe Eyrolles, 2013


Avant-propos

Ces concepts existaient tous avant la naissance de linformatique, mais linformatique


les a profondment renouvels et articuls en une science cohrente.

Structure de louvrage
Lobjectif de ce cours est dintroduire les quatre concepts de machine, dinformation,
dalgorithme et de langage, mais surtout de montrer la manire dont ils fonctionnent
ensemble. Quand nous tudierons les algorithmes fondamentaux, nous les exprimerons
souvent dans un langage de programmation. Quand nous tudierons lorganisation des
machines, nous verrons comment elles permettent dexcuter des programmes
exprims dans un langage de programmation. Quand nous tudierons la notion
dinformation, nous verrons des algorithmes de compression, de chiffrement, etc.
Ce livre est donc organis en quatre parties regroupant vingt-deux chapitres, dont
certains dun niveau plus avanc (indiqus par un astrisque) :
Dans la premire partie Langages , nous apprendrons crire des pro-
grammes. Pour cela, nous allons dcouvrir les ingrdients dont les programmes
sont constitus : laffectation, la squence et le test (chapitre 1), les boucles
(chapitre 2), les types (chapitre 3), les fonctions (chapitre 4*) et les fonctions
rcursives (chapitre 5*). Pour finir, nous nous pencherons sur la notion de langage
formel (chapitre 6*). Ds que lon commence matriser ces concepts, il devient
possible de crer ses propres programmes.
Dans la deuxime partie, Informations , nous abordons lune des problmatiques
centrales de linformatique : reprsenter les informations que lon veut communiquer,
stocker et transformer. Nous apprendrons reprsenter les nombres entiers et les
nombres virgule (chapitre 7), les caractres et les textes (chapitre 8), les images et les
sons (chapitre 9). La notion de valeur boolenne, ou de bit, qui apparat dans ces trois
chapitres, nous mnera naturellement la notion de fonction boolenne (chapitre 10).
Nous apprendrons ensuite structurer de grandes quantits dinformations
(chapitre 11*), optimiser la place occupe grce la compression, corriger les erreurs
qui peuvent se produire au moment de la transmission et du stockage de ces informa-
tions, et les protger par le chiffrement (chapitre 12*).
Dans la troisime partie, Machines , nous verrons que derrire les informations, il
y a toujours des objets matriels : ordinateurs, rseaux, robots, etc. Les premiers ingr-
dients de ces machines sont des portes boolennes (chapitre 13) qui ralisent les fonc-
tions boolennes vues au chapitre 10. Ces portes demandent tre compltes par
dautres circuits, comme les mmoires et les horloges, qui introduisent une dimension
temporelle (chapitre 14). Nous dcouvrirons comment fonctionnent les machines que
nous utilisons tous les jours (chapitre 15). Nous verrons que les rseaux, comme les

Groupe Eyrolles, 2013 3


Informatique et sciences du numrique

oignons, sorganisent en couches (chapitre 16*). Et nous dcouvrirons enfin les


entrailles des robots, que nous apprendrons commander (chapitre 17*).
Dans la quatrime partie, Algorithmes , nous apprendrons quelques-uns des
savoir-faire les plus utiles au XXIe sicle : ajouter des nombres exprims en base
deux (chapitre 18), dessiner (chapitre 19), retrouver une information par dicho-
tomie (chapitre 20*), trier des informations (chapitre 21*) et parcourir un graphe
(chapitre 22*).

REMARQUE Chapitres lmentaires et chapitres avancs*

Les chapitres avancs sont nots ici dun astrisque. Il sagit des deux ou trois derniers chapitres de chaque
partie. Ils sont signals en dbut de chapitre.

Chaque chapitre contient trois types de contenus :


une partie de cours ;
des sections intitules Savoir-faire , qui permettent dacqurir les capacits
essentielles ;
des exercices, avec leur corrig lorsque ncessaire.

Exercices difficiles

Les exercices nots dun cactus sont dun niveau plus difficile.

Des encadrs Aller plus loin donnent des ouvertures vers des questions hors-pro-
gramme. Chaque chapitre se conclut par trois questions de cours sous forme
dencadr intitul Ai-je bien compris ? .
Les propositions de projets sont regroupes en fin de manuel.

Parcours possibles
Cet ouvrage peut tre parcouru de plusieurs manires. Nous proposons par exemple
de commencer par les chapitres lmentaires de la partie Informations (7, 8, 9 et 10),
de poursuivre par ceux de la partie Langages (1, 2 et 3), de continuer par les chapitres
avancs de la partie Informations (11 et 12), les chapitres lmentaires de la partie
Algorithmes (18 et 19) et de la partie Machines (13, 14 et 15), et enfin de passer aux
chapitres avancs de la partie Machines (16 et 17), de la partie Langages (4, 5 et 6) et
de la partie Algorithmes (20, 21 et 22).

4 Groupe Eyrolles, 2013


Avant-propos

Il nest pas ncessaire de lire ces chapitres au mme degr de dtails. chaque lve
de choisir les thmatiques quil souhaite approfondir parmi celles proposes, en par-
ticulier par le choix de ses projets.
La seule contrainte est dacqurir assez tt les bases des langages de programmation,
aux chapitres 1, 2 et 3, pour pouvoir crire soi-mme des programmes. Quand on
apprend linformatique, il est en effet important non seulement dcouter des cours et
de lire des livres, mais aussi de mettre en pratique les connaissances que lon acquiert
en crivant soi-mme des programmes, en se trompant et en corrigeant ses erreurs.

Remerciements
Les auteurs tiennent remercier Ali Assaf, Olivier Billet, Manuel Bricard, Stphane
Bortzmeyer, Alain Busser, David Cachera, Vint Cerf, Julien Cervelle, Sbastien
Chapuis, Arthur Charguraud, Sylvain Conchon, S. Barry Cooper, Ariane Delrocq,
Lena Domrse, Raffi Enficiaud, Jean-Christophe Fillitre, Monique Grandbastien,
Fabrice Le Fessant, Philippe Lucaud, Pierre-tienne Moreau, Claudine Noblet,
Franois Prinet, Gordon Plotkin, Franois Pottier, David Roche, Laurent Sartre,
Dana Scott, Adi Shamir, Joseph Sifakis et Grard Swinnen pour leur aide au cours
de la rdaction de ce livre ainsi que lquipe des ditions Eyrolles, Anne Bougnoux,
Laurne Gibaud, Muriel Shan Sei Fan, Gal Thomas et Camille Vorng pour leur
travail ditorial trs cratif et Hugues Bersini et Guillaume Le Blanc qui ont permis
ce manuel dexister dans cette version qui utilise le langage Python.
Merci galement Christine Paulin, Raphal Hertzog, Pierre Nron, Grgoire
Pan, Jonathan Protzenko et Dominique Quatravaux pour leurs tmoignages
vivants.

Groupe Eyrolles, 2013 5


PREMIRE PARTIE

Langages
Dans cette premire partie, nous apprenons crire des
programmes. Pour cela, nous dcouvrons les ingrdients
dont les programmes sont constitus : laffectation, la
squence et le test (chapitre 1), les boucles (chapitre 2),
les types (chapitre 3), les fonctions (chapitre 4*) et les
fonctions rcursives (chapitre 5*). Pour finir, nous nous
penchons sur la notion de langage formel (chapitre 6*).
Ds que lon commence matriser ces concepts, il
devient possible de crer ses propres programmes.
1
John Backus (1924-2007) est lauteur de lun des premiers
langages de programmation : le langage Fortran (1954). Il a
par la suite propos, avec Peter Naur, la notation de Backus
et Naur qui permet de dcrire des grammaires, en particulier
celles des langages de programmation (voir le chapitre 6).

Grace Hopper (1906-1992) est, elle aussi, lauteur dun des


premiers langages de programmation : le langage Cobol
(1959). Avant cela, elle a t lune des premires pro-
grammer le Harvard Mark I de Howard Aiken, lun des tous
premiers calculateurs lectroniques.
Les ingrdients
des programmes

Un ordinateur peut faire bien des choses,


mais il faut dabord les lui expliquer.

Apprendre la programmation, ce nest pas seulement


apprendre crire un programme, cest aussi comprendre
de quoi il est fait, comment il est fait et ce quil fait. Un
programme est essentiellement constitu dexpressions
et dinstructions. Nous introduisons dans ce premier chapitre
les trois instructions fondamentales que sont laffectation
de variables, la squence et le test.
Nous tudions les instructions en observant les
transformations quelles oprent sur ltat de lexcution
du programme, cest--dire sur lensemble des botes
pouvant contenir des valeurs, avec leur nom.
Informatique et sciences du numrique

Un programme est un texte qui dcrit un algorithme que lon souhaite faire excuter
par une machine. Ce texte est crit dans un langage particulier, appel langage de pro-
grammation. Il existe plusieurs milliers de langages de programmation, parmi lesquels
Python, Java, C, Caml, Fortran, Cobol, etc. Il nest cependant pas ncessaire
dapprendre ces langages les uns aprs les autres, car ils sont tous plus ou moins orga-
niss autour des mmes notions : affectation, squence, test, boucle, fonction, etc. Ce
sont ces notions quil importe de comprendre. Dans ce livre, on utilise principalement
le langage Python dans sa version 3. Mais rien de ce qui est dit ici nest propre ce lan-
gage et les lves qui en utilisent un autre nauront aucun mal transposer.

EN PRATIQUE Excuter un programme Python

Pour rdiger un programme, il faut lancer lenvironnement de programmation IDLE de Python qui est une
fentre permettant dexcuter les instructions au fur et mesure quon les tape.

Pour excuter un programme plus long, tels ceux rencontrs dans ce chapitre, on peut ouvrir une fentre
ddition avec la commande New window du menu File et y crire le programme, lenregistrer dans un
fichier dont le nom se termine par .py. et lexcuter avec la commande Run module du menu Run. Le
rsultat apparat lcran dans la fentre o lon a excut les instructions prcdentes.

10 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Un premier programme
Voici un premier petit programme crit en Python :
a = 4
b = 7
print(" 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(" leau")

Quand on excute ce programme, il affiche vous de jouer puis attend que lon tape
deux nombres au clavier. Si ces deux nombres sont 4 et 7, il affiche Coul ; si le premier
est 4 ou le second 7, mais pas les deux, il affiche En vue, sinon il affiche l'eau.

Groupe Eyrolles, 2013 11


Informatique et sciences du numrique

DANS DAUTRES LANGAGES Texas Instruments et Casio


Ce mme algorithme peut sexprimer dans de nombreux langages. titre dexemple, le voici exprim dans le lan-
gage des calculatrices Texas Instruments et Casio. Dans ces deux cas lalgorithme utilis est le mme quen
Python. Les seules diffrences sont dans la manire dexprimer cet algorithme : la variable affecter est situe droite
de la flche pour les calculatrices, linstruction de test est structure par des mots-cls supplmentaires, etc.
Texas Instruments Casio

PROGRAM:BATAILLE ======BATAILLE ======


:4 A 4 A
:7 B 7 B
:Disp " vous de jouer" " vous de jouer"
:Input X ? X
:Input Y ? Y
:If X = A et Y = B If X = A And Y = B
:Then Then "Coul"
:Disp "Coul" Else
:Else If X = A Or Y = B
:If X = A ou Y = B Then "En vue"
:Then Else " leau"
:Disp "En vue" IfEnd
:Else IfEnd
:Disp " leau"
:End
:End

Ce programme permet de jouer la bataille navale, dans une variante simplifie dans
laquelle il ny a quun seul bateau, toujours plac au mme endroit et qui noccupe
quune seule case de la grille. On considre quun bateau est en vue si la case pro-
pose est sur la mme ligne ou la mme colonne que le bateau.
Exercice 1.1
Modifier ce programme afin quil affiche toi de jouer et non vous de jouer.

Exercice 1.2
Modifier ce programme afin que le bateau soit sur la case de coordonnes (6 ; 9).

12 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

La description du programme
Commenons par observer ce programme pour essayer den comprendre la significa-
tion. La premire ligne contient linstruction a = 4. Pour comprendre ce quil se
passe quand on excute cette instruction, il faut imaginer que la mmoire de lordina-
teur que lon utilise est compose dune multitude de petites botes. Chacune de ces
botes porte un nom et peut contenir une valeur. Excuter linstruction a = 4 a pour
effet de mettre la valeur 4 dans la bote de nom a.

Aprs avoir excut cette instruction, on excute b = 7, ce qui a pour effet de mettre
la valeur 7 dans la bote de nom b.

On excute ensuite linstruction print(" vous de jouer"), ce qui a pour effet


dafficher lcran vous de jouer.
On excute ensuite linstruction x = int(input()), ce qui a pour effet dinterrompre
le droulement du programme jusqu ce que lutilisateur tape un nombre au clavier.
Ce nombre est alors mis dans la bote de nom x.
De mme, excuter linstruction y = int(input()) a pour effet dinterrompre le drou-
lement du programme jusqu ce que lutilisateur tape un nombre au clavier. Ce
nombre est alors mis dans la bote de nom y. ce point du programme, les botes de
nom a, b, x et y contiennent chacune un nombre. Les nombres 4 et 7 pour les deux pre-
mires et les deux nombres entrs au clavier par lutilisateur pour les deux dernires.

Groupe Eyrolles, 2013 13


Informatique et sciences du numrique

Lexcution du programme doit alors diffrer selon que les deux nombres donns par
lutilisateur sont 4 et 7 ou non. Si cest le cas, on veut afficher Coul, si ce nest pas le
cas on veut faire autre chose. Cest ce que fait linstruction :
if x == a and y == b:
print("Coul")
else:
if x == a or y == b:
print("En vue")
else:
print(" leau")

Quand on crit cette instruction, il est essentiel de dcaler les lignes 2, 4 et 6 de deux
caractres vers la droite, et les lignes 5 et 7 de quatre caractres en commenant chaque
ligne par des espaces. Cela sappelle indenter cette instruction. Excuter cette instruction
a pour effet de calculer la valeur de lexpression boolenne x == a and y == b, o lop-
ration and est la conjonction et. Cette valeur est True (vrai) quand x est gal a et y est
gal b, ou False (faux) quand ce nest pas le cas. En fonction de la valeur de cette
expression, on excute ou bien linstruction print("Coul") ou bien linstruction :
if x == a or y == b:
print("En vue")
else:
print(" leau")

Cette instruction tant de la mme forme, son excution a pour effet de calculer la
valeur de lexpression boolenne x == a or y == b, o lopration or est la conjonc-
tion ou, et en fonction de la valeur de cette expression dexcuter ou bien linstruction
print("En vue") ou bien linstruction print(" leau").

Dans bien des cas, comme dans cet exemple, on ne veut pas simplement choisir entre
deux instructions mais davantage : ici afficher Coul, En vue ou leau. Une possi-
bilit est dutiliser deux tests successifs. Une autre est dutiliser une construction sp-
ciale : elif. Ainsi, le programme ci-avant peut aussi scrire :
if x == a and y == b:
print("Coul")
elif x == a or y == b:
print("En vue")
else:
print(" leau")

14 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Exercice 1.3
En C, le mme extrait de programme scrit ainsi :

a = 4;
b = 7;
printf(" vous de jouer\n");
scanf("%d",&x);
scanf("%d",&y);
if (x == a && y == b) {
printf("Coul\n");}
else {
if (x == a || y == b) {
printf("En vue\n");}
else {
printf(" l'eau\n");}}

Quelles sont les ressemblances et les diffrences entre Python et C ?

SAVOIR-FAIRE Modifier un programme existant pour obtenir


un rsultat diffrent
Lintrt de partir dun programme existant est quil nest pas toujours ncessaire den com-
prendre le fonctionnement en dtail pour ladapter un nouveau besoin.
Il importe avant tout :
didentifier les parties du programme qui doivent tre modifies et celles qui
sont conserver,
de les modifier en consquence,
ventuellement dadapter les entres et les sorties au nouveau programme,
et, comme toujours, de le tester sur des exemples bien choisis.

Exercice 1.4 (avec corrig)


Le programme suivant permet de calculer le prix toutes taxes comprises dun article,
connaissant son prix hors taxes, dans le cas o le taux de TVA est de 19,6 %.

print("Quel est le prix hors taxes ?")


ht = float(input())
ttc = ht + ht * 19.6 / 100.0
print("Le prix toutes taxes comprises est ",end="")
print(ttc)

Adapter ce programme pour permettre lutilisateur de choisir le taux de TVA.

Mme si lon nest pas un expert en calcul de pourcentages, on identifie facilement quil faut
remplacer le 19.6 de la troisime ligne par un taux quelconque. Pour que ce taux puisse tre

Groupe Eyrolles, 2013 15


Informatique et sciences du numrique

choisi par lutilisateur, il doit tre stock dans une nouvelle bote : appelons-la taux. Le
contenu de cette bote doit tre saisi au clavier. Il faut donc prvoir lentre correspondante.
Voici donc le nouveau programme avec, en gras, les lments ajouts ou modifis :

print("Quel est le prix hors taxes ?")


ht = float(input())
print(" Quel est le taux de TVA ? ")
taux = float(input())
ttc = ht + ht * taux / 100.0
print("Le prix toutes taxes comprises est ",end="")
print(ttc)

Exercice 1.5
En gnral, la bataille navale, un bateau nest en vue que si la case touche est imm-
diatement voisine de celle du bateau. Modifier le premier programme de ce chapitre pour
tenir compte de cette rgle. On pourra traiter le cas o les cases diagonalement adjacentes
au bateau sont en vue et le cas o elles ne le sont pas.

Les ingrdients dun programme


Le programme de bataille navale utilise des instructions de diffrentes formes :
des affectations de la forme v = e o v est une variable et e une expression,
des instructions dentre de la forme v = int(input()) o v est une variable,
des instructions de sortie de la forme print(e) o e est une expression,
des squences de la forme p q (cest--dire p suivi de q) o p et q sont deux instructions,
des tests de la forme :

if e:
p
else:
q

o e est une expression et p et q deux instructions.


La mmoire dun ordinateur est constitue dune multitude de petites botes, un pro-
gramme nutilise en gnral que quelques-unes de ces botes. Chaque bote utilise
par le programme a un nom et contient une valeur.

16 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

T tat de lexcution dun programme

On appelle tat de lexcution dun programme le triplet form par le nombre de botes utilises, le
nom de chacune delles et la valeur quelle contient.

Excuter une instruction a pour effet de transformer cet tat.


Excuter laffectation v = e a pour effet de calculer la valeur de lexpression e
dans ltat courant et de modifier cet tat en mettant cette valeur dans la bote de
nom v. Par exemple, excuter linstruction x = 4 dans ltat produit ltat
(voir ci-dessous). De mme, excuter linstruction x = y + 3 dans ltat pro-
duit ltat .

Excuter linstruction dentre v = int(input()) o v est une variable a pour


effet dinterrompre le droulement du programme jusqu ce que lutilisateur tape
un nombre entier au clavier. Ce nombre est alors mis dans la bote de nom v. Des
instructions similaires, v = float(input()) et v = input() permettent lutilisa-
teur de taper un nombre virgule ou une chane de caractres.
Excuter linstruction de sortie print(e,end="") o e est une expression ne
modifie pas ltat, mais a pour effet de calculer la valeur de lexpression e dans
ltat courant et dafficher cette valeur lcran. Excuter linstruction de sortie
print(e), sans le end="", affiche la valeur de lexpression e puis passe la ligne.
Excuter linstruction de sortie print() naffiche rien mais passe la ligne.
Excuter la squence
p
q

o p et q sont deux instructions a pour effet dexcuter p puis q dans ltat obtenu.
Par exemple, excuter linstruction :
x = 8
y = 9

dans ltat excute linstruction x = 8 ce qui produit ltat puis linstruction


y = 9 ce qui produit ltat .

Groupe Eyrolles, 2013 17


Informatique et sciences du numrique

COMPRENDRE Une instruction compose mais unique

Attention, linstruction :
x = 8
y = 9
est une unique instruction, savoir une squence de deux instructions plus petites :
x = 8
et
y = 9

Excuter le test :
if e:
p
else:
q

o e est une expression et p et q sont deux instructions a pour effet de calculer la


valeur de lexpression e, puis dexcuter linstruction p ou linstruction q, selon que
la valeur de e est True (vrai) ou False (faux). Par exemple, excuter linstruction :
if x < 7:
print("un peu")
else:
print("beaucoup")

dans ltat affiche un peu, car la valeur de lexpression x < 7 dans cet tat est
True. En revanche, excuter cette instruction dans ltat affiche beaucoup.

Une variante du test est le test sans else :


if e:
p

18 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

o e est une expression et p est une instruction. Excuter cette instruction a pour
effet de calculer la valeur de lexpression e, puis dexcuter linstruction p si la valeur
de e est True. Par exemple, excuter linstruction :
if x < 7:
print("un peu")

dans ltat affiche un peu, alors quexcuter cette instruction dans ltat naffiche rien.
Les expressions p et q doivent tre la ligne et deux colonnes droite des mots if et else.
Excuter un programme complet p a pour effet de construire un tat qui contient
une bote pour chaque variable affecte dans le programme p, puis dexcuter
linstruction p dans cet tat. Par exemple, excuter le programme :
a = 4
b = 7
print(" 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(" leau")

a pour effet de crer ltat


puis dexcuter dans cet tat linstruction


a = 4
b = 7
print(" 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(" leau")

Groupe Eyrolles, 2013 19


Informatique et sciences du numrique

SAVOIR-FAIRE Initialiser les variables


Identifier la premire ligne du programme o une variable est utilise. Lorsque lalgorithme
comporte des tests, il peut y avoir plusieurs telles lignes pour la mme variable, en fonction
du rsultat du test. Vrifier que cette premire ligne est toujours une initialisation, cest--dire
quelle donne une valeur la bote de la variable. Une initialisation peut tre rendue difficile
reprer parce quelle demande une saisie au clavier. Enfin, si une initialisation est manquante,
il faut dterminer une valeur dinitialisation cohrente avec la suite du programme et ajouter
linstruction correspondante avant la premire utilisation de la variable.

Exercice 1.6 (avec corrig)


Quel problme peut se poser avec le programme suivant ? Le corriger.

f = f * 1
f = f * 2
f = f * 3
f = f * 4
f = f * 5
print(f)

La variable f, qui sert calculer la factorielle de 5, nest pas initialise et le rsultat sera donc
fauss par la valeur quelle contient par dfaut. Les oprations qui sont effectues sur f sont
toutes des multiplications. Pour que la valeur initiale de f nait pas dinfluence sur ces calculs,
il faut que ce soit 1. On ajoutera donc l'instruction f = 1 au dbut du programme. Cette ini-
tialisation est dailleurs cohrente avec la convention selon laquelle 0 ! = 1.

SAVOIR-FAIRE Comprendre un programme et expliquer ce quil fait


Identifier le rle de chacune des variables utilises. Si ncessaire, drouler la main une ex-
cution du programme en notant ltat de lexcution du programme au fur et mesure.

Exercice 1.7 (avec corrig)


Que fait ce programme ?

a = int(input())
b = int(input())
c = int(input())
d = int(input())
if b == 0 or d == 0:
print("Dnominateur nul interdit !")
else:
print(a * c)
print(b * d)

20 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Il y a ici quatre entres a, b, c et d, et deux sorties qui correspondent aux produits a * c et


b * d. Le premier test indique que ni b ni d ne doivent tre nulles. De tous ces lments, on
dduit que les entres reprsentent sans doute les fractions a / b et c / d, que le programme
calcule le produit de ces deux fractions, lorsquelles existent, et donne nouveau le rsultat sous
la forme dune fraction. On notera que ce qui peut rendre ce programme difficile lire est,
entre autres choses, les noms peu parlants choisis pour les variables. On gagnerait ainsi
renommer a en numerateur1, b en denominateur1, c en numerateur2, et d en
denominateur2.

Exercice 1.8
Que fait ce programme ? Comment devrait-on renommer ses variables ?

a = int(input())
b = int(input())
c = int(input())
d = int(input())
if b == 0 or d == 0:
print("Dnominateur nul interdit !")
else:
print(a * d + c * b)
print(b * d)

Exercice 1.9
Lexcution de linstruction :

x = 4
y = x + 1
x = 10
print(y)

produit-elle laffichage de la valeur 5 ou de la valeur 11 ?

SAVOIR-FAIRE crire un programme


Identifier les entres et les sorties du programme et les variables intermdiaires dont on
aura besoin. Si le programme doit prendre une dcision , une ou plusieurs instructions de
tests sont ncessaires.

Exercice 1.10 (avec corrig)


crire un programme qui, tant donn une quation du second degr, dtermine le
nombre de ses solutions relles et leurs valeurs ventuelles.

Lentre est une quation du second degr a x2 + b + c = 0, fournie sous la forme de


ses coefficients a, b et c. La sortie sera laffichage du nombre de solutions relles et de leurs
valeurs. Le rle du discriminant = b2 - 4ac est ici suffisamment important pour mriter
une variable intermdiaire delta qui stocke sa valeur.

Groupe Eyrolles, 2013 21


Informatique et sciences du numrique

Il faut distinguer trois cas selon le signe du discriminant, ce qui se fait bien entendu laide
de tests.

from math import *

a = float(input())
b = float(input())
c = float(input())
delta = b * b - 4 * a * c
if delta < 0.0:
print("Pas de solution")
elif delta == 0.0:
print("Une solution : ",end="")
print(- b / (2 * a))
else:
print("Deux solutions : ",end="")
print((- b - sqrt(delta)) / (2 * a),end="")
print(" et ",end="")
print((- b + sqrt(delta)) / (2 * a))

On reviendra, page 26, sur la premire ligne du programme from math import *.

Exercice 1.11
Essayer le programme ci-dessus avec les entres a = 1.0, b = 0.0, c = 1.0E-10 et a = 1.0,
b = 0.0, c = -1.0E-10. Montrer quune infime variation sur lun des coefficients permet de
franchir la ligne qui spare les cas o lquation a des solutions des cas o elle nen a pas.
Essayer le programme ci-dessus avec les entres a = 1.0, b = 6.0, c = 9.0 et a = 0.1, b = 0.6,
c = 0.9. Expliquer les rsultats.

SAVOIR-FAIRE Mettre un programme au point en le testant


Pour vrifier si un programme ne produit pas derreur au cours de son excution et sil
effectue rellement la tche que lon attend de lui, une premire mthode consiste ex-
cuter plusieurs fois ce programme, en lui fournissant des entres, appeles tests, qui permet-
tent de dtecter les erreurs ventuelles. Pour quelles jouent leur rle, il faut choisir ces
entres de sorte que :
on sache quelle doit tre la sortie correcte du programme avec chacune de ces entres,
chaque cas distinct dexcution du programme soit parcouru avec au moins un choix
dentres,
les cas limites soient essays : par exemple le nombre 0, la chane vide ou un seul carac-
tre.

22 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Exercice 1.12 (avec corrig)


Proposer un jeu de tests satisfaisant pour le programme de la bataille navale.

Au minimum, il faut vrifier que le bateau est effectivement coul si lon donne les bonnes
coordonnes, mais non coul si lon en donne de mauvaises. Par ailleurs, il faut tester si le
programme affiche correctement En vue, et donc tester au moins une case dans la mme
colonne que le bateau et une case dans la mme ligne. Ces deux derniers tests permettront
galement de vrifier que les instructions conditionnelles du programme sont crites cor-
rectement, et que par exemple il ne suffit pas davoir trouv la bonne ligne pour couler le
bateau. On testera donc le programme sur les entres suivantes, par exemple, avec les rsul-
tats attendus :
(4 ; 7) : Coul,
(1 ; 2) : l'eau,
(4 ; 9) : En vue (mme ligne),
(8 ; 7) : En vue (mme colonne).
On pourrait galement tester ce quil se passe si lon entre une coordonne dcimale ou
une coordonne qui dpasse les limites du tableau de jeu.

Exercice 1.13
Proposer un jeu de tests satisfaisant pour le programme de calcul des solutions relles dune
quation du second degr ci-avant.

Les instructions et les expressions


Laffectation x = y + 3 est une instruction. Elle est compose dune variable x et
dune expression y + 3.

On attribue une valeur chaque expression. Pour les expressions sans variables, comme
(2 + 5) * 3, dont la valeur est 21, la valeur sobtient simplement en effectuant les op-
rations prsentes dans lexpression, dans cet exemple une addition et une multiplication.
La valeur dune expression qui contient des variables, par exemple (2 + x) * 3, se
dfinit de la mme manire, mais dpend de ltat dans lequel on calcule cette valeur.
Par exemple, la valeur de lexpression (2 + x) * 3 dans ltat est 15, alors que celle
de cette mme expression dans ltat est 18.

Groupe Eyrolles, 2013 23


Informatique et sciences du numrique

Exercice 1.14
Les suites de symboles suivantes sont-elles des instructions ou des expressions ?
x
x = y
x = y + 3
x + 3
print(x + 3)
x = int(input())
x == a
x == a and y == b

Exercice 1.15
Dterminer la valeur des expressions suivantes dans ltat .
y + 3

x + 3
x + y
x * x
y == 5
x == 3 and y == 5

Exercice 1.16
Dterminer dans chacun des cas suivants tous les tats tels que :
y 2 vaut 1,
x * x vaut 4,
x + y vaut 1,
ces trois conditions la fois.

Les oprations
Les expressions sont formes en utilisant les oprations suivantes :

+ Addition entire
Soustraction entire
* Multiplication entire
// Quotient de la division euclidienne
% Reste de la division euclidienne
+ Addition dcimale

24 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Soustraction dcimale
* Multiplication dcimale
/ Division dcimale
pow Puissance
sqrt Racine
pi
sin Sinus
cos Cosinus
exp Exponentielle
log Logarithme nprien
abs Valeur absolue
min Minimum
max Maximum
floor Partie entire
random Nombre alatoire dcimal entre 0 et 1, selon la loi uniforme
== gal
!= Diffrent
<= Infrieur ou gal
< Infrieur strictement
>= Suprieur ou gal
> Suprieur strictement
len Longueur dune chane de caractres
s[n] n-ime lment de la chaine de caractres s
chr Prend en argument un entier n et retourne une chane de caractres qui contient un
unique caractre dont le code ASCII (voir le chapitre 8) est n.
ord Fonction inverse de la prcdente, qui prend en argument une chane de caractres s
constitue dun seul caractre et retourne le code ASCII du premier caractre de cette
chane.
+ Concatnation. Sapplique deux chanes de caractres et construit une unique
chane forme de la premire, suivie de la seconde.
not Non
and Et (variante &)
or Ou (variante |)

Groupe Eyrolles, 2013 25


Informatique et sciences du numrique

EN PRATIQUE
Les oprations pow, sqrt, pi, sin, cos, exp, log et floor ne font pas partie du langage Python mais
dune de ses extensions appele math. Il faut donc ajouter au dbut du programme la commande from
math import *, si on veut les utiliser. De mme, utiliser lopration random demande dajouter la
commande from random import *.

ALLER PLUS LOIN Les oprations & et |


Lopration & est une variante de lopration and. La valeur de lexpression t and u est False quand
la valeur de t est False, mme si la valeur de lexpression u nest pas dfinie, alors que la valeur de
lexpression t & u nest pas dfinie quand celle de t ou celle de u nest pas dfinie. Lutilisation du &
permet dviter de calculer la valeur de lexpression u si celle de t est False.
Ainsi lexcution de linstruction :
print(x !=0 & 1/x > 2)
provoque une erreur, quand x est gal 0, mais celle de linstruction :
print(x != 0 and 1/x > 2)
affiche False.
De mme, lopration | est une variante de lopration or. La valeur de lexpression t or u est True
quand la valeur de t est True, mme si la valeur de lexpression u nest pas dfinie, alors que la valeur
de t | u nest pas dfinie quand celle de t ou celle de u nest pas dfinie.

Exercice 1.17
Le but de cet exercice est dcrire un programme qui demande lutilisateur une date com-
prise entre le 1er janvier 1901 et le 31 dcembre 2099 et qui indique le nombre de jours
couls entre le premier janvier 1901 et cette date.
Une bonne approximation de ce nombre est (a 1901) * 365 + (m 1) * 30 + j 1.
Mais il faut lui ajouter deux termes correctifs. Le premier est d au fait que tous les mois ne
font pas trente jours. On peut montrer que ce terme correctif vaut m // 2 quand m est com-
pris entre 1 et 2 et (m + m // 8) // 2 2 quand m est compris entre 3 et 12. Le second est
d aux annes bissextiles. On peut montrer que ce terme correctif vaut (a 1900)//4 1
si a est un multiple de 4 et m est compris entre 1 et 2 et vaut (a 1900)//4 sinon.
crire un programme qui demande lutilisateur trois nombres qui constituent une date
comprise entre le premier janvier 1901 et le 31 dcembre 2099, par exemple 20 / 12 / 1996,
et qui indique le nombre de jours couls entre le premier janvier 1901 et cette date.
crire un programme qui demande lutilisateur deux dates et indique le nombre de
jours couls entre ces deux dates.
Sachant que le premier janvier 1901 tait un mardi, crire un programme qui demande
lutilisateur une date et indique le jour de la semaine correspondant cette date.

Exercice 1.18
En utilisant la fonction random, crire un programme qui simule la loi uniforme sur linter-
valle [a ; b], o a et b sont deux rels donns.

Exercice 1.19
En utilisant la fonction random, crire un programme qui affiche alatoirement pile ou
face de faon quiprobable.

26 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

ALLER PLUS LOIN Les ordinateurs et le hasard


Parmi les oprations de base, on a cit la fonction random, qui renvoie un nombre alatoire compris entre
0 et 1. Si lon sy arrte quelques secondes, lexistence dune telle fonction est contradictoire avec la notion
mme dalgorithme : un processus suffisamment bien dcrit et dtaill pour tre excut sans erreur ni
initiative de la part dune machine ne peut pas mener un rsultat imprvisible et diffrent chaque ex-
cution. Pourtant lintroduction de hasard dans les programmes est indispensable, par exemple pour crer
des situations imprvues dans les logiciels de jeux, mais aussi pour rsoudre certains problmes qui ne
peuvent pas tre rsolus sans une part de hasard, comme on le verra au chapitre 16. La fonction random
ne gnre pas de nombres rellement alatoires, mais les rsultats obtenus sont suffisamment proches de
tirages alatoires pour la plupart des applications qui utilisent ce genre de nombres. Lexercice 2.8 donne
un exemple dun tel gnrateur de nombres pseudo-alatoires.

Lindentation
Lexpression x y + z peut tre construite ou bien avec le signe + et les deux expres-
sions x y et z, ou alors avec le signe et les deux expressions x et y + z. Comme en
mathmatiques, on lve cette ambigut en utilisant des parenthses : on crit la pre-
mire expression (x y) + z et la seconde x (y + z). Et, comme en mathmati-
ques, on dcide que, quand on nutilise pas de parenthses, lexpression x y + z
signifie (x y) + z et non x (y + z).
Un problme similaire se pose avec les instructions, et lambigut est leve en Python non
par lusage de parenthses mais grce lindentation, cest--dire grce au dcalage de cer-
taines lignes vers la droite par lutilisation despaces en dbut de ligne. Ainsi, linstruction
if e:
p
else:
q
r

na pas le mme sens que linstruction :


if e:
p
else:
q
r

Groupe Eyrolles, 2013 27


Informatique et sciences du numrique

Dans le premier cas linstruction r nest excute que si la valeur de lexpression e est
False (faux) ; dans le second cas elle est toujours excute. Lindentation du pro-
gramme joue le rle des parenthses pour les expressions.

EN PRATIQUE Lindentation selon les langages

En Python, lindentation est partie intgrante de la syntaxe. Dans la plupart des autres langages de pro-
grammation, ce sont des accolades qui sont utilises pour lever les ambiguts, lindentation tant alors
facultative.

Exercice 1.20
Quel est le rsultat de lexcution des instructions :

if x == 4:
y = 1
else:
y = 2
z = 3

et

if x == 4:
y = 1
else:
y = 2
z = 3

dans ltat :

Exercice 1.21
Trouver deux programmes qui ne diffrent que par lindentation et dont lexcution est dif-
frente.

Exercice 1.22 (avec corrig)


crire un programme qui affiche le tarif du timbre poser sur une lettre en fonction de son
type et de son poids.
On trouve sur le site web de la Poste le tableau suivant (au 1er octobre 2011) :

28 Groupe Eyrolles, 2013


1 Les ingrdients des programmes

Poids jusqu Lettre verte Lettre prioritaire Ecopli


20 g 0,57 0,60 0,55
50 g 0,95 1,00 0,78
100 g 1,40 1,45 1,00

On peut par exemple considrer que les diffrentes gammes de poids sont des sous-cas dans
chaque type de lettre. Le programme est donc constitu de trois tests correspondant aux
diffrents types de lettres, linstruction excute dans chacun des cas tant elle-mme cons-
titue de trois tests correspondant aux diffrents poids. On dcide de ne rien afficher quand
les entres type et poids ne correspondent pas une catgorie du tableau.

type = input()
poids = int(input())
if type == "verte":
if poids <= 20:
print(0.57)
elif poids <= 50:
print(0.95)
elif poids <= 100:
print(1.40)
elif type == "prioritaire":
if poids <= 20:
print(0.60)
elif poids <= 50:
print(1.00)
elif poids <= 100:
print(1.45)
elif type == "ecopli":
if poids <= 20:
print(0.55)
elif poids <= 50:
print(0.78)
elif poids <= 100:
print(1.00)

Ai-je bien compris ?


Quelles sont les trois instructions prsentes dans ce chapitre et qui permettent
de construire un programme lmentaire ?
Quelle est la diffrence entre une instruction et une expression ?
Comment lexcution dune instruction transforme-t-elle ltat de lexcution
du programme ?

Groupe Eyrolles, 2013 29


2
Gilles Kahn (1946-2006) et Gordon Plotkin (1946-) ont pro-
pos des outils pour dcrire la smantique des langages de
programmation, cest--dire ce quil se passe quand on ex-
cute un programme. Gilles Kahn est aussi lauteur, avec Grard
Huet, du systme Mentor, lun des premiers systmes qui
permet de dfinir de manire compltement formelle des lan-
gages de programmation. On doit Gordon Plotkin des con-
tributions de nombreux domaines de linformatique, en
particulier la dmonstration automatique et la thorie des sys-
tmes concurrents.
Les boucles

Un ordinateur est fait pour effectuer


des calculs longs et rptitifs.

Dans ce chapitre, nous introduisons une nouvelle instruction,


la boucle, qui permet dexcuter une instruction plusieurs
fois. Nous en prsentons deux variantes, la boucle for et la
boucle while. Nous expliquons pourquoi il peut arriver que
lexcution dune boucle ne sarrte jamais.
Informatique et sciences du numrique

Au cours de lexcution dun programme construit avec les instructions prsentes au


chapitre 1, chaque instruction du programme est excute au plus une fois. Par
exemple, au cours de lexcution de linstruction :
x = 1
if x == 2:
y = 3
else:
y = 7

linstruction y = 7 est excute une fois et linstruction y = 3 nest pas excute, mais
aucune instruction nest excute plusieurs fois. Or, bien souvent, on veut effectuer
des calculs dans lesquels certaines instructions sont excutes plusieurs fois.

EXEMPLE Certaines instructions sont excutes plusieurs fois


Pour crire un programme qui affiche le calendrier :
1 janvier 12 janvier 23 janvier
2 janvier 13 janvier 24 janvier
3 janvier 14 janvier 25 janvier
4 janvier 15 janvier 26 janvier
5 janvier 16 janvier 27 janvier
6 janvier 17 janvier 28 janvier
7 janvier 18 janvier 29 janvier
8 janvier 19 janvier 30 janvier
9 janvier 20 janvier 31 janvier
10 janvier 21 janvier
11 janvier 22 janvier
on ne veut pas crire, dans le programme, linstruction print trente et une fois, mais
crire cette instruction une seule fois et faire en sorte quelle soit excute trente et
une fois au cours de lexcution du programme.

Permettre une instruction dtre excute plusieurs fois au cours de lexcution dun
programme est le but dune nouvelle instruction : la boucle.

La boucle for
La premire forme de boucle, prsente dans ce chapitre, est la boucle for. Cest une
instruction de la forme
for i in range(e,e):
p

32 Groupe Eyrolles, 2013


2 Les boucles

o i est une variable, e et e sont des expressions et p est une instruction, appele
corps de cette boucle. Cest elle qui va sexcuter autant de fois que prcis dans la
boucle. Comme dans le cas des tests, le corps dune boucle doit tre indent. Ex-
cuter la boucle
for i in range(e,e):
p

a pour effet dexcuter linstruction p (n - m) fois, o m est la valeur de lexpression e


et n celle de lexpression e, dans des tats dans lesquels la valeur de la variable i est
successivement m, m + 1, , n 1.
Par exemple, excuter la boucle :
for i in range(1,11):
print("all ",end="")
print("tes o ?")

a pour effet dafficher :


all all all all all all all all all all t'es o ?

Excuter la boucle :
for i in range(1,11):
print(i)

a pour effet dafficher


1
2
3
4
5
6
7
8
9
10

En utilisant une boucle for, on peut maintenant crire une instruction qui affiche le
calendrier ci-avant :
for jour in range(1,32):
print(jour,end="")
print(" janvier")

Groupe Eyrolles, 2013 33


Informatique et sciences du numrique

DANS DAUTRES LANGAGES Texas Instruments et Casio


Dans le langage des calculatrices Texas Instruments et Casio les boucles scrivent
ainsi :
Texas Instruments Casio
PROGRAM:COMPTE ======COMPTE ======
:For (I,1,10) For 1 I to 10
:Disp I I
:End Next

SAVOIR-FAIRE crire un programme utilisant une boucle for


Identifier si le compteur doit jouer un rle dans le corps de la boucle. crire le corps de la
boucle. Prvoir une initialisation des variables en amont de la boucle et un post-traitement
en aval.

Exercice 2.1 (avec corrig)


crire un programme qui recueille au clavier les tempratures de 7 jours successifs et calcule
la temprature moyenne de la semaine.

Ici, le compteur de boucle jour ne reprsente que le numro du jour dans la semaine et
nintervient pas dans les calculs. Dans le corps de la boucle, on se contente donc de lire les
tempratures au clavier dans une variable temperature et de faire la somme des nombres
entrs au fur et mesure dans une variable somme. Linstruction correspondante sera donc :

temperature = float(input())
somme = somme + temperature

Pour que la somme calcule soit correcte, il faut penser initialiser la variable somme zro
avant la boucle. Enfin, une fois les 7 tempratures entres, il faut convertir cette somme en
moyenne et lafficher :

somme = 0
for jour in range(0,7):
temperature = float(input())
somme = somme + temperature
print(somme / 7)

Exercice 2.2
Modifier le programme prcdent pour que lutilisateur puisse prciser le nombre de jours
avant de donner les tempratures.

34 Groupe Eyrolles, 2013


2 Les boucles

Exercice 2.3
crire un programme qui calcule et affiche la liste des diviseurs dun nombre entier naturel
entr au clavier.

SAVOIR-FAIRE Imbriquer deux boucles


Quand linstruction excuter lintrieur dune boucle est elle aussi rptitive, le corps de
cette boucle contient une seconde boucle et on dit que ces deux boucles sont imbriques. Les
bornes de la boucle interne dpendent souvent du compteur de la boucle externe.

Exercice 2.4 (avec corrig)


crire un programme qui affiche un calendrier pour une anne entire.

Ce programme doit avoir une structure en boucles imbriques : une anne est constitue de
douze mois et chaque mois est son tour constitu de plusieurs jours. Si tous les mois de
lanne avaient trente jours, il suffirait dcrire le programme suivant :

for mois in range(1,13):


for jour in range(1,31):
print(jour,end="")
print(" / ",end="")
print(mois)

Mais comme les mois ont un nombre de jours variable, il faut, pour chaque mois, dabord
calculer le nombre de jours nbj du mois en fonction de mois, puis utiliser une boucle dont
lindice jour varie de 1 nbj :

for mois in range(1,13):


if mois == 2:
nbj = 28
else:
nbj = 30 + (mois + mois // 8) % 2
for jour in range(1,nbj + 1):
print(jour,end="")
print(" / ",end="")
print(mois)

Exercice 2.5
Combien de points affiche le programme suivant ?

for i in range(0,100):
print(".",end="")
for j in range(0,100):
print(".",end="")
print()

Groupe Eyrolles, 2013 35


Informatique et sciences du numrique

Et celui-ci ?

for i in range(0,100):
for j in range(0,100):
print(".",end="")
print()

Exercice 2.6
crire un programme qui affiche un calendrier pour une anne mais en crivant les mois
janvier , fvrier , etc., et non 1, 2, etc.

Exercice 2.7
crire un programme qui affiche un calendrier qui va du 1er janvier 2001 au 31 dcembre
3000. Attention les annes multiples de quatre sont bissextiles, sauf les annes multiples de
cent qui ne le sont pas, sauf les annes multiples de quatre cents qui le sont. Ainsi, 2100,
2200, 2300, 2500, 2600, 2700, 2900 et 3000 ne sont pas bissextiles mais 2400 et 2800 le sont.
Ajouter ce calendrier le nombre de jours couls depuis le dbut du calendrier.
Ajouter ce calendrier le jour de la semaine.

1 lundi 1 janvier 2001


2 mardi 2 janvier 2001

365241 mardi 30 dcembre 3000
365242 mercredi 31 dcembre 3000

Exercice 2.8 Fabriquer des nombres pseudo-alatoires


La suite de nombres dfinie par rcurrence de la manire suivante :
u0 = 13
un+1 = (16805 un + 1) % 32768
semble alatoire.
crire un programme qui affiche les 10 000 premiers termes de cette suite.
Pour simuler une suite de tirages pile ou face, on observe le neuvime bit (voir le
chapitre 7) de chaque lment de cette suite et on dcrte, lors du i-me tirage, que la
pice est tombe du ct pile si le neuvime bit du nombre ui est un 0, et quelle est
tombe du ct face si cest un 1. crire un programme qui affiche les 10 000 premiers
tirages.
On teste la qualit de ce gnrateur dala en comptant le nombre de fois que la pice
tombe dun ct et de lautre. crire un programme qui simule 10 000 tirages et compte
le nombre de fois que la pice tombe du ct pile.
Quobtient-on si on observe le bit des units au lieu dobserver le neuvime bit ? Expli-
quer pourquoi : montrer que si un est pair alors un+1 est impair et que si un est impair
alors un+1 est pair.
Montrer que, loin dtre rellement alatoire, la suite u est en fait priodique partir
dun certain rang.

36 Groupe Eyrolles, 2013


2 Les boucles

La boucle while
On veut crire un programme qui prend en argument un nombre virgule x sup-
rieur ou gal 1 et qui calcule son logarithme entier.

T Logarithme entier

On appelle logarithme entier elog(x) dun nombre rel x suprieur ou gal 1, le nombre de fois quil faut
le diviser par deux pour obtenir un nombre infrieur ou gal 1. Par exemple, le logarithme entier du nombre
60 000 est 16 car 60 000 / 216, cest--dire 60 000 divis par 2 seize fois est gal 0.915

Ce programme est form dune boucle qui divise x par 2 plusieurs fois, jusqu
obtenir un nombre infrieur ou gal 1, tout en ajoutant 1 un nombre n chaque
division, pour les compter. Quand la boucle est termine, la variable n contient le
nombre recherch. La nouveaut, avec cette boucle, est que, tant que lexcution du
calcul nest pas acheve, il ny a aucun moyen de savoir combien de fois le corps de
cette boucle sera rpt, puisque ce nombre est prcisment le nombre que lon
cherche calculer : le logarithme entier de x. Il est donc difficile dcrire ce pro-
gramme avec une boucle for.
Cest pour cela que lon a introduit, dans les langages de programmation, une autre
forme de boucle : la boucle while. Dans une telle boucle, le choix de continuer ou
non rpter le corps de la boucle nest pas conditionn, comme dans le cas dune
boucle for, par un nombre ditrations fix avant le dbut de lexcution de la boucle,
mais il est fait dynamiquement : avant chaque excution du corps de la boucle, on
teste une condition, si cette condition est vrifie, on excute le corps de la boucle et
on recommence, si elle ne lest pas, lexcution de la boucle est acheve.
Une boucle while est une instruction de la forme
while e:
p

o e est une expression et p est une instruction, appele corps de cette boucle. Ex-
cuter la boucle prcdente a pour effet dexcuter linstruction p plusieurs fois tant
que la valeur de lexpression e est gale True.
Ainsi, on peut programmer le calcul du logarithme entier dun nombre x de la
manire suivante :
n = 0
while x > 1.0:
x = x / 2.0
n = n + 1

Groupe Eyrolles, 2013 37


Informatique et sciences du numrique

DANS DAUTRES LANGAGES Texas Instruments et Casio


Dans le langage des calculatrices la boucle while scrit de la manire suivante :
Texas Instruments Casio
PROGRAM:ELOG ======ELOG ======
:0 N 0 N
:While X > 1 While X > 1
:X/2 X X/2 X
:N+1 N N+1 N
:End WhileEnd

Exercice 2.9
Montrer que si 2n1 < x 2n, alors elog(x) = n. Montrer que le logarithme entier dun
nombre est son logarithme binaire, dfini par log2 (x) = ln(x) / ln(2), arrondi par excs.

SAVOIR-FAIRE crire un programme utilisant une boucle while


Identifier la condition. crire le corps de la boucle. Prvoir une initialisation des variables
en amont de la boucle et un post-traitement en aval.

Exercice 2.10 (avec corrig)


Rechercher une sous-chane dans une chane de caractres.

Comme la fonction Rechercher dun logiciel de traitement de texte, on cherche si une


chane de caractres contient, par exemple, la sous-chane "oui". Pour ce faire on doit
tester si les trois caractres aux positions n, n + 1 et n + 2 de la chane s sont "o", "u" et
"i" jusqu ce quon trouve ces trois caractres, ou que lon atteigne la fin de la chane.

l = len(s)
n = 0
while n <= l - 3 and not (s[n] == "o" and s[n+1] == "u" and s[n+2] == "i"):
n = n + 1
if n > l - 3:
print("pas de oui")
else:
print(n)

Exercice 2.11
On dfinit une suite u de la manire suivante :
u0 = 1000
si un = 1, alors la suite est finie et un est son dernier lment
si un est pair, alors un+1 = un / 2
si un est impair et distinct de 1, alors un+1 = 3 un + 1

38 Groupe Eyrolles, 2013


2 Les boucles

crire un programme qui affiche les termes de la suite u.


Cette suite est-elle finie ?

Exercice 2.12
crire un programme qui dtermine le plus petit multiple commun deux nombres entiers
entrs au clavier.

SAVOIR-FAIRE Commenter un programme


Ds que lon crit un programme de plus dune dizaine de lignes, il est indispensable
dajouter des commentaires dans ce programme, autrement dit des lignes crites en langue
naturelle que la machine ne cherche pas interprter comme des instructions et qui
expliquent le rle des diffrentes parties du programme.
Ces commentaires permettent un programmeur de comprendre un programme crit par
un autre programmeur ou par lui-mme longtemps auparavant.
Pour prciser quune ligne est un commentaire, on la fait prcder dun symbole particulier.
En Python, il sagit dun dise #. Si lon veut crire un commentaire sur plusieurs lignes, il
faut faire prcder chacune dentre elles de ce symbole.
Ces commentaires doivent donner des informations supplmentaires sur le sens du
programme. Inutile de commenter en disant, par exemple ceci est une boucle , mais
expliquer le rle de cette boucle.

Exercice 2.13 (avec corrig)


Reprendre le programme de lexercice 1.9 qui calcule les solutions dune quation du
second degr et le complter pour quil vrifie que les coefficients entrs au clavier dtermi-
nent bien une quation du second degr, autrement dit que a est non nul. Commenter le
programme ainsi obtenu.

# Voici un programme qui rsout lquation du second degr


# a x^2 + b x + c = 0
from math import *

a = float(input())
b = float(input())
c = float(input())
# Test du coefficient dominant
if a == 0.0:
print("Pas une quation du second degr")
else:
# Calcul du discriminant
delta = b * b - 4 * a * c
# Affichage des solutions
if delta < 0.0:
print("Pas de solution")

Groupe Eyrolles, 2013 39


Informatique et sciences du numrique

elif delta == 0.0:


print("Une solution : ",end="")
print(- b / (2 * a))
else:
print("Deux solutions : ",end="")
print((- b - sqrt(delta)) / (2 * a),end="")
print(" et ",end="")
print((- b + sqrt(delta)) / (2 * a))

Exercice 2.14
Commenter le programme de la bataille navale.

La non-terminaison
Avec la boucle while apparat un nouveau comportement possible pour les
programmes : la non-terminaison. Il est possible dcrire une instruction
while e:
p

telle que la valeur de lexpression e soit toujours gale True, si bien que lexcution
de linstruction p se rpte et se rpte, sans que jamais lexcution de la boucle ne se
termine. Un exemple simple est le suivant :
while True:
print("all ",end="")

qui affiche all all all sans jamais sarrter.

La boucle for, cas particulier de la boucle


while
La boucle while, qui permet de choisir dynamiquement si lon continue rpter le
corps de la boucle ou si lon sarrte est un outil plus puissant que la boucle for. En
fait, la boucle for est un cas particulier de la boucle while.

40 Groupe Eyrolles, 2013


2 Les boucles

Linstruction
for i in range(e,e'):
p

peut tre vue comme une manire plus simple dcrire linstruction :
compteur = e
borne = e'
while compteur < borne:
i = compteur
p
compteur = compteur + 1

Par exemple, linstruction :


for i in range(1,11):
print("all ",end="")

peut tre vue comme une manire plus simple dcrire linstruction
compteur = 1
borne = 11
while compteur < borne:
i = compteur
print("all ",end="")
compteur = compteur + 1

et linstruction :
for i in range(1,11):
print(i)

peut tre vue comme une manire plus simple dcrire linstruction :
compteur = 1
borne = 11
while compteur < borne:
i = compteur
print(i)
compteur = compteur + 1

Groupe Eyrolles, 2013 41


Informatique et sciences du numrique

ALLER PLUS LOIN Savoir si un programme se termine ou non


Savoir si un programme se termine ou 3, et ainsi de suite, puis on teste si lun de
non nest pas une chose facile. Par ces couples est une solution de
exemple, quand on excute linstruction : lquation : i * i == 25 * j * j.
s = 4 Quand on essaiera les couples dont la
p = False somme des lments vaut 6, on essaiera
for i in range(1,s): le couple (5 ; 1), qui est une solution de
j = s i lquation, on excutera linstruction p =
if i * i == 25 * j * j: True et lexcution de la boucle while se
p = True
terminera.
on numre tous les couples dentiers
Autrement dit, ce programme numre
strictement positifs (i ; j) dont la
tous les couples dentiers strictement
somme vaut 4, cest--dire les couples (1 ;
positifs (i ; j) et se termine quand il
3), (2 ; 2), (3 ; 1), et on teste si lun de ces
trouve une solution de lquation i * i
couples est une solution de lquation : i
== 25 * j * j.
* i == 25 * j * j.
Comme cette quation a une solution, le
Comme ce nest le cas daucun de ces trois
programme se termine.
couples, linstruction p = True nest jamais
En revanche, si on remplace le nombre 25
excute et la valeur de la variable p reste
par le nombre 2, le programme numre
False.
tous les couples dentiers strictement
De mme, quand on excute linstruction : positifs (i ; j) et se termine quand il
s = 2 trouve une solution de lquation i * i
p = False == 2 * j * j.
while not p:
Comme cette quation na pas de solu-
for i in range(1,s):
j = s i
tion, le programme ne se termine pas.
if i * i == 25 * j * j: Ces deux programmes sont donc trs simi-
p = True laires, puisque lun cherche les solutions
s = s + 1 entires de lquation i * i == 25 * j *
on numre tous les couples dont la j et lautre celles de lquation i * i == 2
somme des lments vaut 2, puis tous les * j * j mais lun se termine et lautre non.
couples dont la somme des lments vaut

SAVOIR-FAIRE Choisir entre une boucle for et la boucle while


pour crire un programme
Si on connat lavance le nombre de rptitions effectuer, la boucle for est toute indi-
que. linverse, si la dcision darrter la boucle ne peut sexprimer que par un test, cest la
boucle while quil faut choisir.

42 Groupe Eyrolles, 2013


2 Les boucles

Exercice 2.15 (avec corrig)


Quelle boucle est adapte lcriture de programmes traitant les problmes suivants :
le calcul du total payer une caisse enregistreuse,
la recherche du jour le plus pluvieux dune anne,
le calcul du primtre dun polygone,
le calcul de la dure dune mission de radio, connaissant ses horaires de dbut et de
fin ?

Une boucle while : on ne sait pas combien il y aura darticles, on ne sarrte que lorsque
le tapis est vide.
Une boucle for : le corps de la boucle doit tre rpt 365 fois exactement.
Cela dpend : si le nombre de cts est connu, une boucle for, sinon, une boucle while
qui sarrte lorsquon est revenu au sommet de dpart.
Il ny a pas besoin de boucle.
Exercice 2.16
crire les programmes proposs dans lexercice prcdent.

Exercice 2.17
crire un programme qui affiche un tableau de valeurs pour la fonction
f : x x 2 x 2
Lutilisateur choisit les bornes de lintervalle sur lequel on calcule ces valeurs, ainsi que le pas
entre deux valeurs.

Exercice 2.18
Dans cet exercice on crit plusieurs versions dun programme qui joue la bataille navale,
autrement dit qui cherche couler un bateau. Comme dans le premier exemple, on suppose
quil ny a quun seul bateau dune seule case, dont la position est connue par lutilisateur.
Programmer lalgorithme naf qui consiste essayer toutes les cases systmatiquement.
Amliorer cet algorithme pour quil sarrte quand il a coul le bateau.
Amliorer cet algorithme pour quil cherche le bateau intelligemment si celui-ci est en
vue, cest--dire dans une case adjacente au dernier essai effectu.
Peut-on encore amliorer cet algorithme pour minimiser le nombre dessais
ncessaires ?

Groupe Eyrolles, 2013 43


Informatique et sciences du numrique

ALLER PLUS LOIN Un langage de programmation petit, mais complet

Maintenant quon a introduit les boucles, on peut construire un petit de langage de programmation qui contient :
laffectation,
la squence,
le test,
et la boucle while.
Ce langage de programmation, bien quil soit trs petit, est complet, ce qui signifie que tous les programmes
que lon peut imaginer peuvent tre exprims dans ce langage.
On a vu que linstruction :
for i in range(e,e') :
p
pouvait tre traduite en linstruction :
compteur = e
borne = e'
while compteur < borne:
i = compteur
p
compteur = compteur+1
qui ne contient que des affectations, des squences et une boucle while. La boucle for nest donc quune
manire plus confortable dcrire des programmes qui pourraient sexprimer dans ce petit langage. De mme,
les instructions qui utilisent les fonctions et la rcursivit quon introduira aux chapitres 4 et 5, pourraient, en
thorie, tre traduites dans ce petit langage, mme si ces traductions sont beaucoup plus complexes que celle
de la boucle for.
De mme que tous les objets qui nous entourent sont forms de trois types de particules : les protons, les neu-
trons et les lectrons, que tous les textes que nous lisons sont forms de vingt-six lettres et de quelques signes
de ponctuation, que toutes les musiques que nous entendons peuvent tre exprimes laide de douze notes,
tous les programmes que nous utilisons peuvent ultimement tre exprims avec ces quatre instructions :
laffectation, la squence, le test et la boucle.

44 Groupe Eyrolles, 2013


2 Les boucles

Ai-je bien compris ?


quoi sert une boucle ?
Quelle est la diffrence entre une boucle for et une boucle while ?
Que signifie quun programme se termine ?

Groupe Eyrolles, 2013 45


3
Robin Milner (1934-2010) est lauteur de lun des premiers
langages de programmation avec des types polymorphes et
implicites : le langage ML. Ce langage est lanctre de nom-
breux langages contemporains en particulier des langages
Caml et Haskell. Par la suite il a dvelopp lun des premiers
langages permettant de dcrire des systmes concurrents,
cest--dire forms de plusieurs processus qui sexcutent en
parallle. Dans son discours de rception du prix Turing, il a
insist sur lautonomie de linformatique, qui nest une partie
daucune autre science.
Les types

Une bote ne sait pas comment


elle sappelle. Cest nous de lui donner
un nom, et une forme.

Dans ce chapitre, nous voyons quil y a diffrents types


de botes. Chaque bote peut contenir un nombre entier,
un nombre virgule, une valeur boolenne, une chane
de caractres ou plusieurs, dans le cas de types
composites tels les listes.
Informatique et sciences du numrique

Les types de base


En Python, comme dans la plupart des langages de programmation, les expressions
sont classes en fonction de leur type :
les expressions, comme 1 + 2, dont la valeur est un nombre entier, comme 3, sont
de type int (integer : nombre entier),
celles comme 1.5 + 1.64, dont la valeur est un nombre virgule, comme 3,14,
sont de type float (floating point number : nombre en notation scientifique),
celles comme 0 < 2, dont la valeur est un boolen, False (faux) ou True (vrai),
sont de type boolean, dans les langages de programmation, on crit en gnral les
boolens False et True et non 0 et 1 pour viter les confusions avec les nombres,
celles, comme "Cou" + "l", dont la valeur est une chane de caractres, comme
"Coul", sont de type str.

Une valeur de type int est exprime selon la mthode vue au chapitre 7 sur un
nombre de bits arbitraires. Les valeurs de type float sont exprimes sur 64 bits selon
la mthode vue au chapitre 7 : 1 bit de signe, 11 bits dexposant, 52 bits de mantisse.
Un boolen est simplement un bit : True est une autre notation pour le bit 1, et False
une autre notation pour le bit 0. Dans une valeur de type str, chaque caractre est
exprim en Unicode, selon la mthode prsente au chapitre 8.
Donner un type chaque expression a plusieurs avantages : dune part, cela permet de
prciser la manire dont les donnes doivent tre exprimes, puisque le nombre entier 7
et le nombre virgule 7,0 sont exprims dune manire trs diffrente (voir le
chapitre 7). Dautre part, les types permettent dviter un certain nombre derreurs : par
exemple lexpression "Coule" + 3 contient une erreur puisque il est impossible dajouter
une chane de caractres et un nombre entier. Les types jouent ici un rle comparable
celui des dimensions en physique o lquation F = m g2 est non seulement fausse, mais
de plus mal forme, car le membre de gauche est exprim en kg m s2 alors que celui de
droite est exprim en kg m2 s4.
On peut changer le type dune expression en la prfixant par le nom dun type, par
exemple, si la valeur de lexpression e est le nombre entier 17, alors celle de lexpres-
sion str(e) est la chane de caractres "17". Si la valeur de lexpression e est le
nombre virgule 4,0, alors celle de lexpression int(e) est le nombre entier 4.
Si la valeur de lexpression e est un nombre virgule, comme 3,6, qui ne correspond pas
un nombre entier, alors la valeur de lexpression int(e) est la partie entire de la
valeur de e, dans cet exemple 3. Attention, cette partie entire est inhabituelle pour les
nombres ngatifs : si la valeur de lexpression e est -3.6, alors celle de int(e) est -3 et
non -4. Il vaut donc mieux utiliser la fonction floor qui, chaque nombre virgule x,
associe un nombre entier qui est la partie entire de x. Ainsi, si la valeur de

48 Groupe Eyrolles, 2013


3 Les types

lexpression e est -3.6, celle de lexpression int(e) est -3 et celle de lexpression


floor(e) est -4.

SAVOIR-FAIRE Diffrencier les types de base


Plusieurs facteurs peuvent dterminer le type donner une variable.
Que reprsente-t-elle ?
Au cours de lexcution de lalgorithme, quelles valeurs peut-elle prendre ?
Quelles oprations ralise-t-on avec cette variable ?

Exercice 3.1 (avec corrig)


Quel est le type appropri pour les variables suivantes :
une variable qui contient le prnom de lutilisateur,
une variable qui contient le nombre de fois que le corps dune boucle for doit tre excut,
une variable qui stocke au fur et mesure le plus grand des nombres quun utilisateur tape
au clavier,
une variable qui permet de traiter diffremment un nombre selon quil est pair ou impair.

On cherche ici stocker une suite de lettres : cest une variable de type str.
Une boucle est videmment excute un nombre entier de fois : cest une variable de
type int.
On ne sait pas a priori quels types de nombres seront taps par lutilisateur et on ne le
matrise pas : il vaut donc mieux prvoir une variable de type float. Cependant, si le
programme est conu de manire naccepter que des nombres entiers en entre, on
donne le type int cette variable.
Une variable de type boolean : on ne sintresse pas ici au nombre lui-mme mais uni-
quement sa parit. On prendra donc par exemple True pour pair et False pour
impair .

Exercice 3.2
En utilisant la fonction random, crire un programme qui gnre de faon quiprobable des
nombres entiers entre 1 et n, o n est un entier donn.

Exercice 3.3
Modifier le programme de bataille navale pour que la position du bateau soit choisie au
hasard chaque excution.

Exercice 3.4 (avec corrig)


Arrondir la variable x au millime prs.
La fonction floor ne garde que la partie entire du nombre virgule donn. Pour garder
les trois premires dcimales, il faut donc les faire passer temporairement dans la partie
entire. Le nombre floor(x * 1000) a donc les chiffres recherchs mais il est 1000 fois
trop grand. Pour retrouver larrondi recherch, il faut donc effectuer sa division dcimale
par 1000. Lexpression recherche est donc floor(x * 1000) / 1000.

Groupe Eyrolles, 2013 49


Informatique et sciences du numrique

Les listes
Jusqu prsent, on a crit des programmes qui utilisent les types int, float et
boolean. Une bote dun tel type contient une valeur forme dun unique nombre ou
dun unique boolen. Dans de nombreuses situations, on a besoin dutiliser des
valeurs qui, comme les textes, les images ou les sons, sont formes de plusieurs nom-
bres ou de plusieurs boolens. Ces valeurs sont dites de type composite. On a com-
menc voir un exemple dun tel type, puisquune valeur de type str est une chane
forme de plusieurs caractres. Dans cette section on va plus loin, en introduisant un
nouveau type composite : un type appel tableau dans de nombreux langages de pro-
grammation, mais list en Python.
Si on veut utiliser une bote qui contient dix nombres entiers, par exemple, les dix
premires dcimales du nombre

on utilise dans le programme une variable t que lon affectera avec une liste.
Toutefois le fait dutiliser une telle variable cre dans ltat non une grande bote dix
cases comme celle-ci, mais une petite bote, qui a une unique case.

Pour ajouter ltat une grande bote, on utilise une nouvelle construction, lalloca-
tion dune liste : [e for i in range(0,e')], par exemple [0 for i in range(0,10)].
valuer cette expression a pour effet dajouter ltat une bote dont le nombre de
cases est la valeur de lexpression e', chaque case contenant la valeur de lexpression e
qui est value autant de fois quil y a de cases dans la bote.

T Liste

Une bote pouvant contenir plusieurs valeurs sappelle une liste.

50 Groupe Eyrolles, 2013


3 Les types

La valeur de lexpression [e for i in range(0,e')] est la rfrence de la liste ajoute


ltat. On peut ensuite utiliser une affectation pour mettre cette valeur dans une
bote de type list avec laffectation
t = [e for i in range(0,e')]

Par exemple laffectation


t = [0 for i in range(0,10)]

produit ltat

Avec cette notion dallocation dune liste apparaissent donc les nouvelles notions de
rfrence dune bote et de bote contenant la rfrence dune autre bote, ce qui est
symbolis par la flche dans le dessin ci-avant.
Les deux dernires constructions qui permettent dutiliser les listes sont laffectation
dune case dune liste et laccs une case dune liste. Si t est le nom dune bote, dont
le contenu est la rfrence dune liste n cases, e est une expression dont la valeur est
un nombre entier p compris entre 0 et n 1 et e' une expression, alors lexcution de
linstruction t[e] = e' a pour effet de remplir la case numro p de cette liste avec la
valeur de lexpression e'. Par exemple, excuter linstruction
t[1] = 4

produit ltat

et excuter linstruction
t[3 2] = 2 + 2

produit naturellement ce mme tat.

Groupe Eyrolles, 2013 51


Informatique et sciences du numrique

Enfin, on accde une case dune liste avec lexpression t[e]. Si t est le nom dune
bote, dont le contenu est la rfrence dune liste n cases et e est une expression
dont la valeur est un nombre entier p compris entre 0 et n 1, alors la valeur de
lexpression t[e] est la valeur contenue dans la case numro p de ce liste. Par
exemple, la valeur de lexpression t[1] dans ltat ci-avant est 4.
Les trois constructions quil est ncessaire de matriser pour utiliser les listes sont donc
lallocation dune liste [e for i in range(0,e')], par exemple [0 for i in
range(0,10)],
laffectation dune case dune liste t[e] = e', par exemple t[1] = 4,
laccs une case dune liste t[e], par exemple t[1].

SAVOIR-FAIRE Utiliser une liste dans un programme


Allouer la liste, en lui donnant une taille adquate.
Utiliser les affectations t[e] = e' et les accs t[e] en veillant ce que la valeur de
lexpression e soit bien comprise entre les bornes 0 et n 1.

Exercice 3.5 (avec corrig)


Construire un rpertoire associant des numros de tlphone des noms.
On utilise deux listes lune contenant les noms et lautre les numros de tlphone, tels que
le numro tel[i] soit le numro de tlphone de la personne dont le nom est nom[i]. Pour
retrouver le numro associ au nom s, on parcourt la liste nom, jusqu trouver un indice i tel
que s soit gal nom[i], puis on affiche le numro correspondant cet indice.

nom = ["" for i in range(0,10)]


tel = ["" for i in range(0,10)]
#Remplissage du rpertoire
nom[0] = "Alice"
tel[0] = "0606060606"
nom[1] = "Bob"
tel[1] = "0606060607"
nom[2] = "Charles"
tel[2] = "0606060608"
nom[3] = "Djamel"
tel[3] = "0606060609"
nom[4] = "tienne"
tel[4] = "0606060610"
nom[5] = "Frdrique"
tel[5] = "0606060611"
nom[6] = "Guillaume"
tel[6] = "0606060612"
nom[7] = "Hector"
tel[7] = "0606060613"
nom[8] = "Isabelle"

52 Groupe Eyrolles, 2013


3 Les types

tel[8] = "0606060614"
nom[9] = "Jrme"
tel[9] = "0606060615"
#Recherche du numro associ au nom s
s = input()
i = 0
while i < 10 and s != nom[i]:
i = i + 1
if i < 10:
print(tel[i])
else:
print("Inconnu")

Exercice 3.6
crire un programme qui lit au clavier une chane de caractres et la traduit en Morse, par
exemple la chane sos se traduit en ... / / ... .

Exercice 3.7
crire un programme qui compte le nombre dlments suprieurs 10 dans une liste
dentiers.

Exercice 3.8
crire un programme qui trouve llment maximal dans une liste dentiers.

Exercice 3.9
On se donne une liste dentiers. crire un programme qui range les lments de cette liste
dans une autre liste, en mettant les lments pairs gauche et les lments impairs
droite. Mme exercice en utilisant une seule liste.

Les listes bidimensionnelles


Pour reprsenter une table double entre, par exemple la table

120 145 87
12 67 89
90 112 83

une possibilit est dutiliser une liste de neuf cases

mais cette manire de faire est malcommode.

Groupe Eyrolles, 2013 53


Informatique et sciences du numrique

On prfre donc, en gnral, reprsenter une telle table par une liste de trois l-
ments dont chaque lment est la reprsentation dune colonne, cest--dire elle-
mme une liste de trois nombres. Une telle liste salloue comme une liste ordinaire.
[[0 for j in range(0,3)] for i in range(0,3)]

Si t est une variable dun tel type, la valeur de la case dabscisse i et dordonne j,
cest--dire de la case de la colonne i et de la ligne j est simplement dsigne par
lexpression t[i][j]. Affecter une case de la liste t se fait simplement par linstruc-
tion
t[i][j] = e

Exercice 3.10
crire un programme qui, laide du triangle de Pascal, calcule les premiers coefficients
binomiaux. On lira au clavier un entier n, puis on remplira une liste bidimensionnelle
dentiers coeffs_bin de sorte que la case coeffs_bin[i][j] contienne le coefficient
i
binomial pour tout i < n et pour tout j i. Les cases pour lesquelles j > i
j
contiendront la valeur 0.

Exercice 3.11
On souhaite crire un programme qui dtermine les bornes de lintervalle de fluctuation au
seuil de 95 % dune loi binomiale de paramtres n et p quon lira au clavier.
crire une version de ce programme qui calcule la loi de probabilit binomiale dans son
intgralit puis dtermine et affiche lintervalle de confiance.
crire une version de ce programme qui dtermine et affiche lintervalle de confiance en
ne calculant la loi de probabilit que jusqu atteindre la borne suprieure de linter-
valle de confiance. Quels calculs conomise-t-on de cette faon ?
Si p est proche de 1, que peut-on dire du programme crit la question 2 ? Proposer une
troisime version pour rendre le programme plus efficace dans ce cas particulier.
Comment dcider sil vaut mieux utiliser le programme crit la question 2 ou celui crit
la question 3 ? crire un programme qui fait ce choix automatiquement.

54 Groupe Eyrolles, 2013


3 Les types

ALLER PLUS LOIN Quest-ce que le calcul formel ?


Comment calculer limage de 5 par la fonc- for i in range(0,4):
tion polynme x 2 x3 + 8 x2 + 7 x + 3 ? print(t[i],end ="")
Une possibilit est de faire de cette fonc- if i != 0:
tion une expression de son programme. print(" x",end="")
if i != 1:
x = 5
print("^",end="")
y = 2 * x * x * x + 8 * x * x + 7 * x + 3
print(i,end="")
print(y)
if i != 3:
ce qui donne le rsultat 488. print(" + ",end="")
Mais, il est aussi possible de reprsenter print()
une fonction polynme du troisime ce qui donne le rsultat
degr par le quadruplet de ses coeffi-
3 + 7 x + 8 x^2 + 2 x^3
cients, cest--dire par une liste.
On peut alors dfinir la fonction poly- et mme calculer sa drive, en utilisant
nme x 2 x3 + 8 x2 + 7 x + 3 ainsi le fait que la drive de xn + 1 est (n + 1)
xn
t = [0 for i in range(0,4)]
t[3] = 2 u = [0 for i in range(0,4)]
t[2] = 8 for i in range(0,3):
t[1] = 7 u[i] = t[i+1] * (i + 1)
t[0] = 3 u[3] = 0
Calculer la valeur de cette fonction en 5 que lon peut son tour afficher
demande un programme un peu plus 7 + 16 x + 6 x^2 + 0 x^3
complexe et on obtient que la fonction x 6 x2 +
x = 5 16 x + 7 est la drive de la fonction x
y = 0 2 x3 + 8 x2 + 7 x + 3. Cette procdure est
c = 1 bien sr valable quelle que soit la fonc-
for i in range(0,4): tion polynme du troisime degr repr-
y = y + t[i] * c sente par la liste t.
c = c * x
Les programmes peuvent donc calculer
print(y)
avec des objets trs divers : des nombres
o la variable c contient les valeurs des et des chanes de caractres bien
puissances successives de x. entendu, mais aussi des expressions sym-
Mais reprsenter cette fonction ainsi boliques comme x x3 + 8 x2 + 7 x + 3.
permet de faire de nombreuses nou-
velles choses, par exemple lafficher

En utilisant la mthode dtaille au chapitre 21, dterminer si la partie du programme


qui prend le plus de temps est celle o lon calcule les coefficients binomiaux ou bien
celle o lon dtermine lintervalle de fluctuation.
En dduire si les diffrentes versions crites dans les questions 1 4 modifient significa-
tivement le temps dexcution de lalgorithme. En admettant que lon nait jamais uti-
liser cet algorithme pour des valeurs de n suprieures 1000, comment peut-on le
rendre plus efficace ?

Groupe Eyrolles, 2013 55


Informatique et sciences du numrique

Les chanes de caractres


Jusqu prsent, on a dfini et manipul le type str comme si ctait un type de base,
alors quil est en fait composite : une chane de caractres est forme de plusieurs
valeurs simples que sont ses diffrents caractres.

SAVOIR-FAIRE Calculer avec des chanes de caractres


Pour comparer des chanes de caractres, on utilise la fonctions == et <= cette dernire
relation comparant deux chanes pour lordre alphabtique.
On concatne deux chanes de caractres avec lopration +.
La longueur dune chane de caractres est obtenue avec la fonction len.
Si e est une expression dont la valeur est une chane de caractres s de longueur n et e'
est une expression dont la valeur est un entier p compris entre 0 et n - 1, alors la valeur
de lexpression e[e'] est une chane de caractres forme dun unique caractre qui est le
p-ime lment de la chane s.
Pour modifier une chane existante, on en extrait les parties appropries, et on recons-
titue une nouvelle chane laide de lopration de concatnation.

Exercice 3.12 (avec corrig)


crire un programme qui demande lutilisateur de taper son prnom et son nom au cla-
vier, puis affiche les initiales correspondantes.
Si le prnom et le nom sont entrs dans deux chanes diffrentes, il suffit dafficher le pre-
mier caractre de chacune de ces chanes.

prenom = input()
nom = input()
print(prenom[0],end="")
print(nom[0])

Mais ce programme ne permet pas de traiter des prnoms composs ou des noms multiples.
Si le prnom et le nom sont entrs dans une seule chane, les initiales sont les premires let-
tres des mots, cest--dire le premier caractre de la chane et ceux qui suivent immdiate-
ment un espace. Il faut donc parcourir cette chane caractre par caractre en recherchant
les espaces, et afficher le caractre suivant ds que lon en trouve un. On ne va en ralit
que jusqu lavant-dernier caractre de la chane, car mme si le dernier caractre est un
espace, il ne peut pas tre suivi dune lettre.

nom = input()
print(nom[0],end="")
for i in range(0,len(nom) - 1):
if nom[i] == " ":
print(nom[i + 1],end="")
print()

56 Groupe Eyrolles, 2013


3 Les types

Cette version est plus gnrale mais aussi plus sensible aux entres mal formes : un espace
mal plac ou un tiret utilis pour sparer des prnoms fausse le rsultat.

Exercice 3.13
crire des programmes qui demandent une chane de caractres au clavier et qui,
respectivement :
comptent le nombre despaces,
comptent le nombre de voyelles,
calculent le score marqu au Scrabble avec cette chane, en comptant 0 point pour les
espaces et les signes de ponctuation,
dterminent la lettre la plus frquente.
Exercice 3.14
crire un programme qui demande une chane de caractres au clavier et la rcrit en reve-
nant la ligne entre chaque caractre.

Exercice 3.15
Chercher sur le Web ce quest la mthode de chiffrement ROT13 et crire un programme
qui demande une chane de caractres au clavier et la chiffre ou la dchiffre selon cette
mthode.

Exercice 3.16
crire un programme qui demande une chane de caractres au clavier et :
la rcrit tout en majuscules,
la rcrit tout en minuscules,
la rcrit en inversant majuscules et minuscules.
Exercice 3.17
Chercher sur le Web ce quest lcriture leet speak et crire un programme qui demande
une chane de caractres au clavier et la rcrit en leet speak.

La mise au point des programmes


Les programmes sont souvent des objets complexes forms de plusieurs milliers,
voire plusieurs millions de lignes et il est peu probable, quand on crit un programme
qui dpasse quelques dizaines de lignes, de ne pas faire derreur. Une erreur dans un
programme peut avoir des consquences dramatiques si ce programme est par
exemple utilis dans le rgulateur de vitesse dune voiture, une centrale nuclaire ou
un robot chirurgical. Cest pourquoi il existe de nombreuses mthodes pour viter les
erreurs dans les programmes. La premire, dj voque au chapitre 1, est de tester
les programmes que lon crit.
Quand on teste un programme et quil ne fait pas ce que lon espre, il faut dter-
miner lendroit o une erreur sest produite. Pour cela on doit instrumenter son pro-

Groupe Eyrolles, 2013 57


Informatique et sciences du numrique

gramme, cest--dire ajouter des instructions de sortie dans le programme, qui


permettent de visualiser ce quil se passe au cours de son excution. On repre ainsi le
moment de lexcution du programme, o une variable prend, pour la premire fois,
une valeur inadquate.

SAVOIR-FAIRE Mettre au point un programme en linstrumentant


Identifier les variables critiques, dont la valeur peut radicalement influencer le compor-
tement du programme. En particulier, le compteur dune boucle for et les variables
intervenant dans la condition dune boucle while sont particulirement importantes
puisquelles conditionnent le nombre de fois que le corps de cette boucle est excut.
Identifier pour chacune de ces variables les endroits cls du programme qui la
concernent : lorsque lon lui affecte une valeur, en dbut ou en fin de boucle, etc.
Insrer un affichage lcran de chaque variable critique aux endroits appropris, en
noubliant pas de prciser de quelle variable on affiche la valeur.

Exercice 3.18 (avec corrig)


Le programme suivant est cens calculer la somme des carrs des n premiers entiers.
Montrer que ce programme est erron laide dun test bien choisi.
Instrumenter ce programme pour dtecter lerreur et la corriger.

n = int(input())
somme = 0
i = 1
while i <= n:
i = i * i
somme = somme + i
i = i + 1
print(somme)

En testant le programme pour n = 0, 1 ou 2, on observe que le rsultat affich est cor-


rect. En revanche, pour n = 3, on devrait trouver 1 1 + 2 2 + 3 3 = 14, or le pro-
gramme affiche 5.
Les variables critiques ici sont i et n qui apparaissent dans la condition de la boucle. On
affiche leur valeurs la fin du corps de la boucle. Pour cela on insre cet endroit les
lignes

print("i vaut ",end="")


print(i,end = "")
print(" n vaut ",end="")
print(n)

On constate alors que i contient 2 la fin de la premire itration, mais 5 la fin de la


deuxime itration et 26 la fin de la troisime. Il y a donc en plus de lincrmentation

58 Groupe Eyrolles, 2013


3 Les types

i = i + 1 une instruction dans le corps de la boucle qui modifie la valeur de i. Une fois ceci
constat, il nest pas difficile dincriminer la ligne i = i * i et de modifier le programme en

n = int(input())
somme = 0
i = 1
while i <= n:
p = i * i
somme = somme + p
i = i + 1
print(somme)

ou en remplaant la boucle while par une boucle for.

Une telle mthode est utilisable sur des programmes de petite taille, mais peut rapide-
ment devenir lourde mettre en place pour de gros programmes : il faut dcider des
variables observer et des points du programme o cela a un intrt, puis modifier le
programme et enfin supprimer les affichages du programme lorsque lon a identifi le
problme. Dans de nombreux environnements de dveloppement logiciel, il existe des
outils spcialiss, les dbogueurs, pour obtenir des informations sur ce quil se passe en
mmoire durant lexcution dun programme, ou bien excuter un programme pas pas.
Outre le test et linstrumentation, il existe de nombreuses autres mthodes de mise
au point des programmes. Dans certains langages, les types permettent de dtecter
des erreurs de faon beaucoup plus pousse quen Python. On peut aussi dmontrer
quun programme vrifie certaines proprits (voir le chapitre 18), ce qui vite en
particulier davoir chercher les erreurs ttons.

Groupe Eyrolles, 2013 59


4
John McCarthy (1927-2011) est lauteur du langage Lisp
(1958), dont la principale construction est la dfinition de
fonctions. Il est aussi lun des inventeurs de la notion de temps
partag, qui permet plusieurs personnes dutiliser un mme
ordinateur en mme temps. Il a crit lun des premiers pro-
grammes jouant aux checs et invent pour cela un algo-
rithme, la mthode alpha-bta, qui permet de jouer non
seulement aux checs, mais aussi de nombreux autres jeux. Il
a aussi t un dfenseur de lide de progrs et de limpor-
tance des mathmatiques dans lducation.
Les fonctions
C HAPITRE AVANC

Pour avoir du style, il faut viter les redites.

Dans ce chapitre, nous introduisons une nouvelle


construction : la dfinition de fonction, qui permet disoler
une instruction qui revient plusieurs fois dans un programme.
Une fonction est dfinie par un nom, par ses arguments
qui porteront les valeurs communiques par le programme
principal la fonction au moment de son appel et
ventuellement une valeur de retour communique
au programme par la fonction en fin dexcution.
Informatique et sciences du numrique

Isoler une instruction


Au cours des chapitres prcdents, on a crit des programmes dans lesquels certaines
instructions revenaient plusieurs fois, parce quon voulait faire plusieurs fois la mme
chose. Voici un exemple de programme prsentant des rptitions :
print("Le vol en direction de ",end="")
print("Tokyo",end="")
print(" dcollera ",end="")
print("9h00")
print("----------------------------------------")
print()
print()

print("Le vol en direction de ",end="")


print("Sydney",end="")
print(" dcollera ",end="")
print("9h30")
print("----------------------------------------")
print()
print()

print("Le vol en direction de ",end="")


print("Toulouse",end="")
print(" dcollera ",end="")
print("9h45")
print("----------------------------------------")
print()
print()

dans lequel linstruction


print("----------------------------------------")
print()
print()

est rpte trois fois. Au lieu de rpter la totalit de cette instruction, on peut lui
donner un nom, par exemple tirerUnTrait, puis la remplacer par ce nom dans le pro-
gramme principal chaque fois quelle est utilise.

T Fonction

Dans les langages de programmation, une fonction est une instruction isole du reste du programme, qui
possde un nom, et qui peut tre appele par ce nom nimporte quel endroit du programme et autant
de fois que lon veut.

62 Groupe Eyrolles, 2013


4 Les fonctions

Pour dfinir la fonction tirerUnTrait, on procde de la faon suivante :


def tirerUnTrait ():
print("--------------------------------------")
print()
print()

et on utilise ensuite cette fonction dans le programme principal, comme si ctait une
instruction du langage :
print("Le vol en direction de ",end="")
print("Tokyo",end="")
print(" dcollera ",end="")
print("9h00")
tirerUnTrait()

print("Le vol en direction de ",end="")


print("Sydney",end="")
print(" dcollera ",end="")
print("9h30")
tirerUnTrait()

print("Le vol en direction de ",end="")


print("Toulouse",end="")
print(" dcollera ",end="")
print("9h45")
tirerUnTrait()

Cette dfinition de fonction se place avant le programme principal, si bien que


lorganisation gnrale du programme est la suivante :
def tirerUnTrait ():
print("------------------------------------")
print()
print()

print("Le vol en direction de ",end="")


print("Tokyo",end="")
print(" dcollera ",end="")
print("9h00")
tirerUnTrait()

print("Le vol en direction de ",end="")


print("Sydney",end="")
print(" dcollera ",end="")
print("9h30")
tirerUnTrait()

Groupe Eyrolles, 2013 63


Informatique et sciences du numrique

print("Le vol en direction de ",end="")


print("Toulouse",end="")
print(" dcollera ",end="")
print("9h45")
tirerUnTrait()

T Corps dune fonction

Linstruction
print("--------------------------------------")
print()
print()
que lon isole par la dfinition de la fonction tirerUnTrait sappelle le corps de cette fonction.

T Appel dune fonction

Linstruction tirerUnTrait() sappelle un appel de la fonction tirerUnTrait. Excuter cette ins-


truction a pour effet dexcuter le corps de la fonction.

Utiliser des fonctions vite les rptitions dans les programmes et rend donc ces der-
niers plus courts et, surtout, plus faciles lire et comprendre : pour comprendre le
programme ci-dessus, il nest pas ncessaire de savoir comment la fonction tirerUnTrait
est dfinie, il suffit de savoir ce quelle fait. Utiliser des fonctions permet aussi dorga-
niser le travail de dveloppement : on peut dcider dcrire le programme principal un
jour et dcrire la fonction tirerUnTrait le lendemain. On peut aussi dcider de confier
lcriture du programme principal un programmeur et lcriture de la fonction
tirerUnTrait un autre. Enfin, si lon veut modifier la longueur du trait tirer ou le
nombre de lignes sautes en dessous de ce trait, il suffit de modifier le corps de la fonc-
tion et non le programme principal chacun des endroits concerns.

Passer des arguments


Le programme ci-prcdent est form de trois blocs qui annoncent chacun lhoraire
dun vol. On peut vouloir aller plus loin dans lorganisation de ce programme et
crire une fonction annoncerUnVol, quil suffirait dappeler trois fois dans le pro-
gramme principal. Cependant, contrairement lexemple de la fonction tirerUnTrait,
ces trois blocs ne sont pas absolument identiques : la destination et lhoraire du vol
diffrent dun cas lautre. Il faut donc paramtrer linstruction que lon isole pour
pouvoir choisir la destination et lhoraire du vol.

64 Groupe Eyrolles, 2013


4 Les fonctions

T Argument dune fonction

On appelle argument formel dune fonction une variable particulire, utilise dans le corps de la fonc-
tion, et dont la valeur est donne dans le programme principal au moment o la fonction est appele.

Dans notre exemple, les arguments doivent reprsenter la destination, que lon
nomme destination, et lhoraire de vol, que lon nomme horaire. On dfinit alors
cette fonction de la manire suivante :
def annoncerUnVol (destination, horaire):
print("Le vol en direction de ",end="")
print(destination,end="")
print(" dcollera ",end="")
print(horaire)
print("--------------------------------------------")
print()
print()

Et le programme principal devient :


annoncerUnVol("Tokyo","9h00")
annoncerUnVol("Sydney","9h30")
annoncerUnVol("Toulouse","9h45")

Excuter une instruction de la forme annoncerUnVol(e,e') a pour effet dvaluer les


deux expressions e et e' et de fabriquer un nouvel tat qui contient une bote pour
chaque variable locale de la fonction (les variables locales dune fonction sont, dune
part, ses arguments formels et, dautre part, les variables affectes dans le corps de
cette fonction), dexcuter le corps de la fonction dans cet tat, puis de revenir ltat
initial. Dans lexemple ci-avant, au moment o lon excute pour la premire fois
linstruction print(destination) du corps de la fonction, la valeur de lexpression
destination est "Tokyo". Lors du deuxime appel, la valeur de lexpression
destination est "Sydney". Et lors du troisime, elle est "Toulouse".

Rcuprer une valeur


Le passage darguments permet donc de communiquer des informations depuis le
programme principal vers une fonction. On veut aussi souvent communiquer des
informations dans lautre sens : depuis une fonction, vers le programme principal.

Groupe Eyrolles, 2013 65


Informatique et sciences du numrique

Par exemple, si lon veut isoler, dans une fonction, linstruction suivante qui calcule le
nombre n de fois que le caractre a apparat dans une chane s :
n = 0
for i in range(0,len(s)):
if s[i] == "a":
n = n + 1

On veut non seulement que le programme principal puisse communiquer la chane


de caractres s la fonction, mais aussi que la fonction puisse communiquer en
retour le nombre n au programme principal. Cela mne crire la fonction suivante :
def nombreDea (s):
n = 0
for i in range(0,len(s)):
if s[i] == "a":
n = n + 1
return n

Lexcution de linstruction return n a pour effet dinterrompre lexcution du corps


de la fonction et de renvoyer la valeur de lexpression n au programme principal.

T Valeur de retour

La valeur produite par une fonction partir de ses arguments, sil en existe une, est appele valeur de retour.

Comme la fonction nombreDea renvoie une valeur, lappel nombreDea("abracadabra"),


dans le programme principal, nest pas une instruction, mais une expression, qui a la
valeur 5. On peut lutiliser, dans une affectation x = nombreDea("abracadabra") par
exemple ou dans un test if nombreDea("abracadabra") < 5: ...
Dans len-tte def annoncerUnVol (destination, horaire): on trouve le nom
annoncerUnVol et les deux arguments formels destination et horaire.

SAVOIR-FAIRE crire len-tte dune fonction


1 Choisir un nom qui indique clairement ce que fait la fonction.
2 Identifier les arguments qui varient lors des diffrents appels de la fonction dans le pro-
gramme principal. Donner un nom chacun de ces arguments.

66 Groupe Eyrolles, 2013


4 Les fonctions

Exercice 4.1 (avec corrig)


crire len-tte dune fonction qui calcule la vitesse moyenne dun mobile connaissant son
temps de parcours et la distance parcourue.

La fonction peut, par exemple, sappeler vitesse.


Les arguments sont tout indiqus : on les appelle, par exemple, temps et distance.
Exercice 4.2
crire len-tte des fonctions suivantes :
Une fonction qui indique sil est possible de construire un triangle avec trois segments
de mesures donnes.
Une fonction qui calcule le plus grand diviseur commun (PGCD) de deux nombres
entiers.
Une fonction qui trace lcran un segment entre deux points.
Une fonction qui crit lcran les initiales dune personne dont on donne le nom com-
plet.

ALLER PLUS LOIN Lordre des arguments

Lordre des arguments na pas dimportance pour la dfinition de la fonction : les en-ttes def
annoncerUnVol (destination, horaire) et def annoncerUnVol (horaire,
destination) permettent de dfinir la mme fonction.
En revanche, lors dun appel cette fonction, lordre des arguments doit tre respect :
annoncerUnVol("Tokyo","9h00") si lon a utilis le premier en-tte, mais
annoncerUnVol("9h00","Tokyo") si lon a utilis le second.

SAVOIR-FAIRE crire une fonction


1 crire len-tte de la fonction.
2 crire le corps de la fonction comme si les arguments taient dj remplis par des valeurs.
3 Ne pas oublier linstruction return, si la fonction renvoie une valeur.
4 Prvoir une excution correcte de la fonction quelle que soit la valeur donne chacun des
arguments, y compris dans des cas que lon na pas forcment anticips dans le cours
normal du programme principal.

Exercice 4.3 (avec corrig)


crire une fonction qui effectue la division dcimale de deux nombres entiers.

T Dfinition dune fonction

La dfinition dune fonction est forme de son en-tte puis de son corps.

Groupe Eyrolles, 2013 67


Informatique et sciences du numrique

On appelle la fonction divisionDecimale. On va appeler les deux arguments


dividende et diviseur. La fonction renvoie la division dcimale.

quotient = dividende / diviseur

On termine cette fonction par linstruction return quotient.


Si lon veut une fonction qui prvoit tous les cas, notamment lorsque le diviseur fourni
est nul, il faut galement renvoyer une valeur, choisie arbitrairement. La fonction peut
donc se prsenter ainsi :

def divisionDecimale (dividende, diviseur):


if diviseur == 0:
quotient = float("inf")
else:
quotient = dividende / diviseur
return quotient

Dans le cas o le diviseur est nul, cette fonction renvoie un flottant particulier : +(voir le
chapitre 7). Cette fonction doit donc tre accompagne dune documentation qui prcise ce
qui se passe dans ce genre de cas. On aurait pu galement faire le choix dafficher un mes-
sage, par exemple print("Erreur : division par 0 interdite.") mais ce dernier ris-
querait dinterfrer avec les autres sorties du programme, et si la fonction est appele plu-
sieurs fois au cours du programme, il ne serait pas directement possible de savoir quel
appel lerreur sest produite.

Exercice 4.4
crire les fonctions suivantes.
Une fonction qui renvoie la plus grande de deux valeurs entires.
Une fonction qui rpte un mme mot un certain nombre de fois au choix.
Une fonction, construite partir de la fonction random, qui tire au sort un nombre
entier entre deux bornes donnes en arguments.
Une fonction qui dcide sil est possible de construire un triangle avec trois segments de
mesures donnes.

Exercice 4.5
crire une fonction qui prend en argument une chane de caractres s et deux entiers i
et j, et renvoie la sous-chane de s comprise entre le caractre numro i inclus et le carac-
tre numro j exclu.

Les variables globales


Isoler linstruction x = 0 dans le programme suivant :
x = 3
x = 5
x = 0

68 Groupe Eyrolles, 2013


4 Les fonctions

x = 7
x = 0
x = 4

mnerait crire une fonction :


def reinitialise ():
x = 0

et le programme principal :
x = 3
x = 5
reinitialise()
x = 7
reinitialise()
x = 4

Cependant, excuter linstruction

reinitialise()

na pas le mme effet quexcuter linstruction

x = 0

En effet, quand on excute linstruction reinitialise() dans ltat

on commence par crer un nouvel tat qui contient une bote de nom x

car la fonction reinitialise() a une variable locale x qui porte par hasard le mme
nom que la variable x du programme principal. On excute dans cet tat linstruction
x = 0, ce qui produit ltat

Groupe Eyrolles, 2013 69


Informatique et sciences du numrique

puis on revient ltat initial

Une manire de rsoudre ce problme est de dclarer la variable x globale .


def reinitialise ():
global x
x = 0

x = 3
x = 5
reinitialise()
x = 7
reinitialise()
x = 4

Les variables utilises dans une fonction sont classes en locales et globales. Sont
locales les arguments formels de la fonction et les variables affectes dans la fonction
qui ne sont pas explicitement dclares globales. Sont globales les autres variables,
cest--dire celles qui ne sont pas un argument formel et qui sont utilises sans tre
affectes ou explicitement dclares globales. Quand on excute une fonction qui,
comme celle-ci, contient une variable globale, on commence par fabriquer un nouvel
tat qui contient dune part une bote pour chaque variable globale, avec la valeur
quelle a dans ltat dans lequel on appelle la fonction, et dautre part, une bote pour
chaque variable locale, on excute le corps de la fonction dans cet tat puis on
revient, non ltat initial, mais un tat qui contient dune part les variables glo-
bales dans la fonction avec la valeur quelles ont dans ltat produit par lexcution du
corps de la fonction, et dautre part, les autres variables de ltat dans lequel on a
appel la fonction avec la valeur quelles avaient au moment de cet appel. Par
exemple, si on excute linstruction reinitialise() dans ltat :

on excute le corps, x = 0 de la fonction reinitialise() dans ltat

70 Groupe Eyrolles, 2013


4 Les fonctions

ce qui produit ltat

puis on construit ltat

Cest donc la mme bote de nom x que lon retrouve dans ces diffrents tats.
Par exemple, dans le programme suivant :
def f (x):
global a
print(2 * x)
a = 2 * x

a = 3
n = 4
f(a + n)

1 On excute le programme principal dans ltat qui contient la variable a et la


variable n.
2 On affecte la valeur 3 la variable a et la valeur 4 la variable n ().
3 Au moment de lappel f(a + n) de la fonction f, on supprime la bote de nom n de
ltat, mais on garde la bote de nom a car a est dclar globale dans la fonction, et
on ajoute une bote de nom x, qui contient la valeur 7 de lexpression a + n ().
4 On excute alors le corps de la fonction, ce qui a pour effet dafficher 14 et
daffecter cette valeur la variable a ().
5 En quittant la fonction pour revenir au programme principal, on supprime la
bote de nom x et on remet la bote de nom n avec le contenu quelle avait avant
lappel de la fonction ().

Groupe Eyrolles, 2013 71


Informatique et sciences du numrique

Le passage par valeur


Dans le programme suivant :
a = 4
b = 7
c = a
a = b
b = c
print(a,end="")
print(" ", end="")
print(b)

lexcution de linstruction :
c = a
a = b
b = c

a pour effet dchanger le contenu des botes a et b. Le contenu initial de la bote a


est 4 et celui de la bote b 7 ; aprs lexcution de cette instruction, le contenu de la
bote a est 7 et celui de la bote b 4. Ainsi le programme affiche :
7 4

Cette opration dchange du contenu de deux botes tant souvent utilise, on peut
vouloir lisoler dans une fonction.
def echange (x,y):
z = x
x = y
y = z

a = 4
b = 7
echange(a,b)
print(a,end="")
print(" ", end="")
print(b)

Toutefois, contrairement au prcdent, ce programme affiche :


4 7

et non :
7 4

72 Groupe Eyrolles, 2013


4 Les fonctions

En effet, lappel de la fonction echange(a,b) dans ltat cre ltat , change le


contenu des botes x et y en utilisant la bote z () et revient ltat initial ().

Le contenu des botes a et b na donc pas chang.


Il faut donc se souvenir que, dans un appel echange(e,e'), on ne passe jamais les
expressions e et e' la fonction echange ; on ne passe que la valeur de ces expressions.
Ces valeurs sont mises dans de nouvelles botes de noms x et y, qui nexistent que le
temps de lexcution du corps de la fonction. Quand les expressions e et e' sont des
variables a et b, cela revient recopier le contenu des botes de noms a et b dans les
botes de noms x et y.

SAVOIR-FAIRE
Choisir entre un passage par valeur et une variable globale
Si une fonction doit utiliser une variable a du programme principal, deux cas sont
distinguer :
Si la fonction nutilise que la valeur contenue dans a sans jamais la modifier, alors cette
valeur peut tre passe en argument la fonction et la variable a peut tre locale au pro-
gramme principal.
Si la fonction doit modifier la valeur contenue dans a, alors la variable a doit tre globale.

Exercice 4.12 (avec corrig)


Dans le programme suivant, quelles sont les expressions passes par valeur ? Quaffiche ce
programme lorsquon lexcute ?

def h (j):
global i
j = j + 1
print(i)
print(j)
k = j + i
i = 5
return k

m = 1
i = 10
print(m)

Groupe Eyrolles, 2013 73


Informatique et sciences du numrique

n = h(m)
print(m)
print(n)
print(i)

Lors de lappel h(m), la valeur 1, contenue ce moment dans la bote m, est passe la
fonction h via largument j. La variable m nest pas modifie, mme par linstruction
j = j + 1 et elle conserve sa valeur 1 jusqu la fin du programme principal.
Ce programme affiche donc :

1 Valeur initiale de m
10 La variable globale i a t initialise 10 dans le programme principal.
2 j prend la valeur 1 de m lors de lappel h, puis on lui ajoute 1.
1 m nest pas modifie par h.
12 n contient la valeur de retour de h, qui a t donne par lexpression
j + i, dans laquelle j valait 2 et i valait 10.
5 On a affect la valeur 5 la variable globale i dans la fonction h.

Exercice 4.13
Pour programmer les fonctions ci-dessous, faut-il plutt utiliser un passage par valeur ou
des variables globales ?
Une fonction qui trace lcran un segment connaissant les coordonnes de ses extrmits.
Une fonction qui remplace un nombre par sa valeur absolue.
Une fonction qui calcule le logarithme entier dun nombre.
Une fonction qui met en majuscules toutes les lettres dune chane de caractres.
Une fonction qui affiche lcran en notation scientifique un nombre donn de type float.

Le passage par valeur et les listes


Contrairement celui de la section prcdente, le programme suivant, qui utilise des
listes, affiche bien 7 4.
def echange (x,y):
z = x[0]
x[0] = y[0]
y[0] = z

a = [0 for i in range(0,2)]
a[0] = 4
b = [0 for i in range(0,2)]
b[0] = 7
echange(a,b)

74 Groupe Eyrolles, 2013


4 Les fonctions

print(a[0],end="")
print(" ",end="")
print(b[0])

En effet, on excute le programme dans ltat . Puis, lallocation des deux listes et
laffectation des variabes a et b et des cases 0 des deux listes produit ltat :

Ensuite, lappel de la fonction echange(a,b) cre deux botes x et y et les remplit avec
la valeur des expressions a et b. Or, la valeur de lexpression a est une rfrence vers la
bote deux cases situe en haut sur la figure et celle de lexpression b est une rf-
rence vers la bote deux cases situe en bas sur la figure. Ainsi, ltat construit
est . Lexcution du corps de la fonction change le contenu des cases x[0] et y[0],
ce qui produit ltat . Et quand, la fin de lexcution du corps de la fonction, les
variables x et y sont supprimes et les variables a et b rtablies avec leur ancienne
valeur, cest--dire les rfrences des deux botes, ltat est produit. La valeur de
lexpression a[0] est donc 7 et celle de lexpression b[0] est 4.
Autrement dit, le contenu des botes de noms a et b est bien recopi dans les botes
de noms x et y au moment de lappel. Nanmoins, les listes elles-mmes ne sont pas
recopies, car les contenus des botes de noms a et b ne sont pas des listes mais des
rfrences de listes.

Groupe Eyrolles, 2013 75


Informatique et sciences du numrique

Exercice 4.14
Reprendre lexplication prcdente dans le cas o les deux variables a et b sont dclares
globales dans la fonction echange.

ALLER PLUS LOIN Les licences logicielles : logiciel libre versus logiciel propritaire

Quand on crit un programme qui est utilis par dautres personnes que soi, on doit prciser ses conditions
dutilisation par un contrat qui sappelle une licence logicielle.
Les programmes ont certains points communs avec dautres biens non rivaux (voir le chapitre 11), comme
les inventions et les uvres de lesprit . Cela explique que le droit des licences ait certains points com-
muns avec le droit des brevets et le droit dauteur. Le droit des brevets et le droit dauteur donnent aux
inventeurs et aux auteurs le monopole de lexploitation de leur cration et les autorisent vendre ce droit
dexploitation. Ils favorisent donc la cration, en permettant aux crateurs de gagner de largent. Cepen-
dant, ils la freinent galement, car ils interdisent dautres dutiliser ces crations et de poursuivre le tra-
vail de leurs auteurs. Cest pour cela que ce monopole dexploitation est toujours limit dans le temps et
que, dans le droit des brevets, linventeur est souvent tenu de rendre terme son invention publique.
Il y a principalement deux formes de licences logicielles : les licences propritaires (ou privatrices) et
les licences libres. Avec une licence propritaire, lauteur donne simplement un droit dutilisation de son
programme. La plupart du temps, il diffuse le code compil de son programme, mais en garde le code
source (voir le chapitre 15) secret. Avec une licence libre, en revanche, il donne le droit ses utilisateurs
non seulement dutiliser son programme, mais aussi den tudier le fonctionnement et de le modifier. Il
diffuse donc la fois le code compil et le code source.
Parmi les licences libres, il y a encore deux types de licences. Les licences contaminantes, comme la
General Public Licence (GPL), imposent, dans le cas de la diffusion du programme modifi, de le dif-
fuser avec la mme licence, afin de faire bnficier les autres des mmes liberts que celles dont on a soi-
mme bnfici. Dautres licences, comme la licence Berkeley Software Distribution (BSD), donnent
la libert de modifier le programme et de diffuser la version modifie sous une licence propritaire.
Les licences libres ont permis un nouveau mode de dveloppement des logiciels, par une dmarche qui a
un certain nombre de points communs avec la recherche scientifique : coopration internationale, publi-
cation, validation par les pairs, libert de critiquer et de modifier, etc., alors que, dans les temps anciens,
Pythagore, par exemple, interdisait ses disciples de divulguer leurs thormes et leurs dmonstrations.
Au-del des programmes, cette nouvelle manire de produire et de diffuser des objets industriels prfigure
peut-tre une volution plus globale de lindustrie, dans un monde dans lequel de plus en plus de biens
industriels sont complexes et immatriels.

76 Groupe Eyrolles, 2013


4 Les fonctions

Ai-je bien compris ?


quoi sert une fonction ?
De quels lments la dfinition dune fonction est-elle compose ?
Comment utilise-t-on une fonction dans un programme ?

Groupe Eyrolles, 2013 77


5
Christopher Strachey (1916-1975) et Dana Scott (1932-)
ont donn une smantique aux dfinitions rcursives : la dfi-
nition f = G(f) nest pas circulaire, mais une dfinition de f
comme point fixe de G. Christopher Strachey est aussi
lauteur dun des premiers programmes jouant aux dames et
de lun des premiers programmes dinformatique musicale.
Avec Michael Rabin, Dana Scott a tudi les systmes tats
et transitions (voir le chapitre 22) non dterministes, cest--
dire dans lesquels plusieurs transitions sont possibles partir
dun mme tat.
La rcursivit
C HAPITRE AVANC

Une dfinition rcursive


est une dfinition rcursive.

Dans ce chapitre, nous voyons quune fonction peut sappeler


elle-mme. Cette construction, alternative celle de boucle,
permet dcrire des programmes courts et lgants.
Informatique et sciences du numrique

Des fonctions qui appellent des fonctions


Au chapitre 4, on a vu que les fonctions permettaient disoler une ou plusieurs ins-
tructions du programme principal. Par exemple, au lieu dcrire le programme :
print("Le vol en direction de ",end="")
print("Tokyo",end="")
print(" dcollera ",end="")
print("9h00")
print("--------------------------------------------")
print()
print()

print("Le vol en direction de ",end="")


print("Sydney",end="")
print(" dcollera ",end="")
print("9h30")
print("--------------------------------------------")
print()
print()

print("Le vol en direction de ",end="")


print("Toulouse",end="")
print(" dcollera ",end="")
print("9h45")
println("--------------------------------------------")
println()
print()

il est possible dcrire le programme :


def annoncerUnVol (destination,horaire):
print("Le vol en direction de ",end="")
print(destination,end="")
print(" dcollera ",end="")
print(horaire)
print("--------------------------------------------")
print()
print()

annoncerUnVol("Tokyo","9h00")
annoncerUnVol("Sydney","9h30")
annoncerUnVol("Toulouse","9h45")

Il est aussi possible disoler linstruction :


print("--------------------------------------------")
print()
print()

80 Groupe Eyrolles, 2013


5 La rcursivit

de la fonction annoncerUnVol et dcrire ce programme ainsi :


def tirerUnTrait ():
print("-------------------------------------------")
print()
print()

def annoncerUnVol (destination,horaire):


print("Le vol en direction de ",end="")
print(destination,end="")
print(" dcollera ",end="")
print(horaire)
tirerUnTrait()

annoncerUnVol("Tokyo","9h00")
annoncerUnVol("Sydney","9h30")
annoncerUnVol("Toulouse","9h45")

o la fonction tirerUnTrait est appele, non depuis le programme principal, mais


depuis le corps de la fonction annoncerUnVol.

Des fonctions qui sappellent elles-mmes


Il est mme possible daller plus loin et dappeler une fonction f, non depuis le corps
dune fonction g, mais depuis le corps de la fonction f elle-mme. Cest, par exemple,
le cas de la fonction suivante :
def puissance (exposant):
if exposant == 0:
return 1
else:
return (2 * puissance(exposant 1))

Le cas le plus simple est celui de lappel puissance(0) qui retourne la valeur 1 sans
avoir besoin de refaire un appel la fonction puissance.

T Fonction rcursive

Une fonction rcursive est une fonction qui sappelle elle-mme.

On peut alors comprendre la valeur retourne par lappel puissance(1) : quand on ex-
cute le corps de la fonction dans un tat dans lequel la bote de nom exposant contient
la valeur 1, on value lexpression 2 * puissance(exposant 1). Comme la valeur de

Groupe Eyrolles, 2013 81


Informatique et sciences du numrique

lexpression exposant est 1, celle de lexpression exposant 1 est 0 et celle de lexpres-


sion puissance(exposant 1) est, comme on la vu, 1. Celle de lexpression
2 * puissance(exposant 1) est donc 2. Lappel puissance(1) retourne donc la valeur 2.

De mme, lappel puissance(2) retourne la valeur 4, lappel puissance(3) retourne la


valeur 8, et ainsi de suite.
Plus gnralement, la valeur retourne par lappel de la fonction puissance avec
largument k + 1 est le double de celle retourne par lappel de la fonction puissance
avec largument k. La valeur retourne par lappel de la fonction puissance avec
largument k est donc 2k.

ATTENTION Prvoir un cas de base

Dans la dfinition dune fonction rcursive, il faut toujours prvoir au moins un cas de base, comme le
cas exposant == 0 dans la dfinition ci-avant, dans lequel la fonction ne sappelle pas elle-mme ;
sinon elle sappellera elle-mme indfiniment.

Cette fonction calcule donc la mme chose que la fonction :


def puissance (exposant):
resultat = 1
for i in range(0,exposant)
resultat = 2 * resultat
return resultat

Toutefois, elle utilise cette possibilit pour une fonction de sappeler elle-mme, au
lieu dutiliser une boucle.
On note que dans la dfinition rcursive de la fonction puissance, la valeur de largu-
ment exposant diminue chaque appel de la fonction et le test effectu au dbut du
corps de la fonction assure que la fonction puissance ne sappelle pas elle-mme au
cours de son excution dans un tat dans lequel la bote de nom exposant contient la
valeur 0. Cette observation fournit la garantie que tout appel la fonction puissance
avec un argument qui est un nombre entier positif exposant se termine aprs exposant
appels. Les fonctions rcursives et celles utilisant des boucles partagent ainsi la mme
proccupation de terminaison.

82 Groupe Eyrolles, 2013


5 La rcursivit

SAVOIR-FAIRE Dfinir une fonction rcursive


1 crire len-tte de la fonction (voir le savoir-faire, page 66, crire len-tte dune fonction ).
2 Vrifier tout dabord que la fonction est adapte une dfinition rcursive, autrement dit
que lon sait calculer une valeur partir dun appel plus simple la mme fonction.
3 Prvoir le ou les cas de base, qui ne ncessitent pas dappel rcursif de la fonction.
4 Dans tous les appels rcursifs, sassurer que les arguments sont plus simples que ceux avec les-
quels la fonction a t appele : nombres plus petits, chanes de caractres plus courtes, etc.
5 Reconstituer correctement la valeur de retour de la fonction partir du rsultat du ou
des appel(s) rcursif(s).

Exercice 5.1 (avec corrig)


crire une fonction rcursive qui calcule le quotient de la division euclidienne dun nombre
entier naturel par un autre, bien entendu sans utiliser lopration / du langage.

Le dividende et le diviseur sont les deux arguments et la valeur de retour est le quotient.
On a donc len-tte :

def quotient (dividende,diviseur)

Une dfinition rcursive est possible : on diminue le dividende chaque appel rcursif
jusqu avoir compt combien de fois il contient le diviseur.
Le cas de base est celui o le dividende est infrieur au diviseur : le quotient est alors
nul. La fonction commence donc par le test :

if dividende < diviseur:


return 0

Dans les autres cas, le dividende est suprieur au diviseur, on retranche le diviseur au
dividende et largument ainsi modifi reste positif. Le diviseur nest pas modifi. La fonc-
tion se termine toujours car le dividende, qui est un entier positif, ne peut pas diminuer
indfiniment.
chaque appel rcursif, on compte une fois le diviseur dans le dividende, le quotient
doit donc augmenter de 1. La fonction scrit donc :

def quotient (dividende,diviseur):


if dividende < diviseur:
return 0
else:
return 1 + quotient (dividende diviseur,diviseur)

Exercice 5.2
Modifier le programme ci-avant pour quil calcule, non le quotient, mais le reste dune divi-
sion euclidienne.

Groupe Eyrolles, 2013 83


Informatique et sciences du numrique

Exercice 5.3
crire une fonction rcursive qui calcule le logarithme entier dun nombre (voir le chapitre 2).

Exercice 5.4
crire une fonction rcursive qui calcule la factorielle dun nombre n! = 1 2 (n
1) n.

Exercice 5.5
crire une fonction rcursive qui calcule le plus grand diviseur commun (PGCD) de deux nom-
bres entiers, en utilisant lalgorithme dEuclide. Dans ce programme, en quoi les arguments de
lappel rcursif sont-ils plus simples que ceux avec lesquels la fonction est appele ?

Exercice 5.6
Programmer rcursivement le calcul du terme de rang n de la suite de Fibonacci dfinie par :
u0 = u1 = 1
un+2 = un + un+1
Quy a-t-il de particulier dans cette fonction rcursive ? Que se passe-t-il si on excute ce
programme pour de grandes valeurs de n, partir de 35 ou 45 selon la machine
utilise ? Expliquer ce phnomne.

ALLER PLUS LOIN Lefficacit des fonctions rcursives

Comme on a pu le voir sur lexemple de la suite de Fibonacci, si les dfinitions rcursives rendent parfois
trs pratiques lcriture dun programme, elles peuvent aussi avoir des consquences trs nfastes sur leur
efficacit. Ainsi, dans notre exemple, pour calculer u10, il faut calculer u9 et u8, mais comme u9 est calcul
rcursivement, pour lobtenir il faut calculer u8 et u7. Le calcul de u8 est donc fait deux fois. On peut mon-
trer de mme que u7 est calcul trois fois, u6 cinq fois, etc.
Cela nest pas un problme inhrent aux fonctions rcursives, cest juste un pige dans lequel on peut faci-
lement tomber quand on en crit une. Il faut dans un tel cas se demander si certains calculs ne sont pas
faits plusieurs fois, et si cest le cas comment lviter. Les solutions habituelles sont de mmoriser, dune
faon ou dune autre, les calculs dj effectus et qui serviront nouveau. Dans le cas de la suite de Fibo-
nacci, il suffit de calculer les termes de la suite dans lordre en se souvenant des deux dernires valeurs
calcules. Avec les fonctions rcursives, on appelle accumulateurs les arguments qui propagent ces
deux valeurs dun appel de la fonction au suivant.
def fib (n,u1,u0):
if n > 1:
return fib(n - 1,u1 + u0,u1)
elif n == 1:
return u1
else:
return u0
Cette fonction permet en ralit de calculer le n-me terme de toute suite vrifiant la mme relation de
rcurrence que la suite de Fibonacci, en spcifiant les valeurs de u0 et u1. Pour le n-me terme de la suite
de Fibonacci elle-mme, il suffit dappeler fib(n,1,1).

84 Groupe Eyrolles, 2013


5 La rcursivit

Des images rcursives


La rcursivit est un outil utile en gomtrie algorithmique et en synthse dimages.
Observons, par exemple, le dessin ci-dessous.

Une manire de le dcrire est de dire quil est form :


dun cercle, en rouge sur la figure ci-aprs,
en haut et droite de ce cercle, de deux cercles tangents de rayon moiti moindre,
en vert sur la figure,
en haut et droite de chacun de ces cercles, de deux cercles tangents de rayon
moiti moindre, en bleu sur la figure,
en haut et droite de chacun de ces cercles, de deux cercles tangents de rayon
moiti moindre,
etc.
Toutefois, une autre manire de le dcrire est de dire quil est form dun cercle, en
rouge sur la figure ci-dessous et de deux copies moiti plus petites du dessin lui-
mme, en vert et en bleu sur la figure.

Cela montre comment crire une fonction rcursive qui dessine cette figure : pour
dessiner une figure dont le plus grand cercle a le centre (x ; y) et le rayon rayon, on
trace dabord ce cercle, puis on appelle rcursivement deux fois la fonction dessiner

Groupe Eyrolles, 2013 85


Informatique et sciences du numrique

en centrant le grand cercle en (x + 3 * rayon // 2 ; y) et en (x ; y - 3 * rayon // 2)


et en lui donnant le rayon rayon // 2.
def dessiner (x,y,rayon):
drawCircle(x,y,rayon,0,0,0)
if rayon > 1:
dessiner(x + 3 * rayon // 2,y,rayon // 2)
dessiner(x,y 3 * rayon // 2,rayon // 2)

Il ne reste plus qu appeler dans le programme principal la fonction


dessiner(200,200,64).

Exercice 5.7
Quel est largument qui assure que cette fonction ne sappelle elle-mme quun nombre fini
de fois ? Avec lappel initial propos, combien dappels rcursifs auront lieu ?

Un dessin plus joli est obtenu en entourant chaque cercle, non pas de deux, mais de
trois dessins plus petits dans des directions qui dpendent de sa position : sil est lui
mme droite dun cercle plus grand, par exemple, alors il est form dun cercle et de
trois dessins situs en haut, en bas et droite, mais pas gauche, de ce cercle. Pour
cela, on fait correspondre un nombre chaque direction : 0 pour gauche, 1 pour
droite, 2 pour haut, 3 pour bas, et on ajoute un argument la fonction.
# Dessin
def dessiner (x,y,rayon,v):
drawCircle(x,y,rayon,0,0,0)
if rayon > 1:
if v != 1:
dessiner(x + 3 * rayon // 2,y,rayon // 2,0)
if v != 0:
dessiner(x - 3 * rayon // 2,y,rayon // 2,1)
if v != 2:
dessiner(x,y - 3 * rayon // 2,rayon // 2,3)
if v != 3:
dessiner(x,y + 3 * rayon // 2,rayon // 2,2)

86 Groupe Eyrolles, 2013


5 La rcursivit

Exercice 5.8
Que reprsente le nouvel argument v dans cette fonction ? Quel nom serait plus explicite
pour cet argument ?

Exercice 5.9
Comment utiliser, sans la modifier, cette dernire fonction pour obtenir le dessin complet
o le cercle central est entour de quatre motifs identiques en haut, en bas, droite et
gauche ?

Ai-je bien compris ?


Quest-ce quune fonction rcursive ?
Quelle autre construction la rcursivit permet-elle souvent de remplacer ?
Que faut-il toujours prvoir dans la dfinition dune fonction rcursive, si on
veut que cette fonction se termine ?

Groupe Eyrolles, 2013 87


6
Lidographie de Gottlob Frege (1848-1925) est le premier
langage formel propos pour exprimer lensemble des math-
matiques. Ce langage a t aujourdhui abandonn, mais il est
lorigine de la thorie des ensembles, de la logique des pr-
dicats et, en grande partie, des langages formels utiliss en
informatique, en particulier des langages de programmation.
Lorigine commune des mots langage , logique et
logiciel nous rappelle les liens entre la logique ltude du
langage mathmatique et linformatique.
La notion
de langage formel
C HAPITRE AVANC

Les langages informatiques sont presque comme


les langues naturelles. Mais pas tout fait.

Dans ce chapitre, hors programme lexception de la section


Redfinir la smantique , nous introduisons la notion
de langage formel, au-del des langages de programmation,
et nous comparons ces langages aux langues naturelles.
Nous prenons lexemple du langage HTML, prsent
au chapitre 8. Ceci nous permet de prsenter les notions
de grammaire et de smantique.
La grammaire dfinit quelles sont les chanes de caractres,
par exemple les programmes, qui sont correctement forms.
La smantique dfinit ce qui se passe quand on utilise un
texte, par exemple quand on excute un programme.
Informatique et sciences du numrique

Aux chapitres 1 5, 15, 8 et 11, nous avons vu plusieurs langages : des langages de
programmation tout dabord, mais aussi, plus brivement, des langages de descrip-
tion de pages web et des langages dinterrogation de bases de donnes. Ces langages
informatiques ont un certain nombre de points communs avec les langues naturelles
comme le franais ou le japonais : ils servent exprimer et communiquer des ides.
Cependant, ils ont aussi un certain nombre de diffrences.

Les langages informatiques


et les langues naturelles
On a vu quun langage de programmation, comme Python, permet dexprimer tous les
algorithmes. Toutefois, il ne permet dexprimer que des algorithmes. On ne peut pas
lutiliser pour crire un roman, un contrat ou une carte postale. Cest donc un langage sp-
cialis. Une langue naturelle, en revanche, peut tre utilise non seulement pour exprimer
des algorithmes, mme si cest souvent de manire imprcise, mais aussi pour crire des
cartes postales, des contrats et des romans : les langues naturelles sont universelles.
Le vocabulaire dune langue naturelle contient plusieurs milliers de mots. Celui dun
langage informatique, par exemple un langage de programmation, nen contient que
quelques dizaines : par exemple if, while, for, global, etc. En revanche, le vocabulaire
dun langage informatique est souvent extensible : en dfinissant une fonction
tirerUnTrait, on ajoute un nouveau mot au langage, souvent avec une porte limite.
Par exemple, la fonction tiretUnTrait ne peut tre utilise que dans un programme
dans lequel elle est dfinie, non dans un autre programme. Et introduire ainsi un nou-
veau mot nest pas possible dans une langue naturelle.
La grammaire des langages informatiques est plus simple, mais plus prcise, que celle
des langues naturelles : un deux-points oubli dans un programme et celui-ci nest
plus correct, alors quil est difficile de trouver une phrase en franais qui serait
incomprhensible cause dun signe de ponctuation oubli. De plus, la frontire
entre les phrases correctes et les phrases incorrectes dans une langue naturelle nest
pas si bien dfinie. Ainsi, la phrase Nous, on y est pas all, mon frre et moi, au
cinma. manifeste une moins grande matrise de la langue que la phrase Ni mon
frre ni moi ne sommes alls au cinma. , mais elle reste comprhensible. En
revanche, il ny a aucune discussion possible sur le fait quun programme soit gram-
maticalement correct ou non, car la correction grammaticale, dans un langage de
programmation, est dfinie par un algorithme.
Enfin, ces langages informatiques appartiennent exclusivement au domaine de
lcrit : une pice de thtre est crite pour tre dite haute voix, pas un programme.

90 Groupe Eyrolles, 2013


6 La notion de langage formel

ALLER PLUS LOIN La grammaire des langues naturelles

La grammaire des langues naturelles est beaucoup plus complexe que celle des langages formels, en par-
ticulier parce quelle tient compte de nombreuses exceptions, homonymie, synonymie, etc. Ainsi, en fran-
ais, la phrase les poules du couvent couvent est correcte.

Les anctres des langages formels


Pour les distinguer des langues naturelles, on appelle langages formels ces langages
artificiels la grammaire simple, mais prcise. Lapparition, avec linformatique, de
ces langages est une tape importante de lhistoire du langage. Certains la comparent
mme linvention de lcriture ou de lalphabet. Cependant, une fois que lon a pris
conscience de la spcificit de ces langages, on peut se demander si certains de leurs
traits ntaient pas dj prsents dans des langages spcialiss plus anciens, en parti-
culier dans ceux utiliss en sciences, en droit et en musique.
Tout dabord, sans cesser dtre une langue naturelle, la langue scientifique prsente
quelques aspects qui rappellent les langages informatiques. Par exemple, elle donne la
possibilit dintroduire de nouveaux mots par des dfinitions. Sil nest pas possible dans
la langue courante de dire On appellera pagneul breton un steak saignant. , puis Je
voudrais manger un pagneul breton. , on peut, dans la langue scientifique, donner
une dfinition : On appellera travail dune force, son produit scalaire avec le dplace-
ment de son point dapplication. , puis utiliser le mot dfini : Le travail dune force
orthogonale au dplacement de son point dapplication est nul. Une fois dfini, le
mot travail a une porte illimite, mais ce nest pas le cas du mot x si on lintroduit
dans une dmonstration mathmatique par la dfinition x = y + 4. Une fois cette
dmonstration acheve, il nest plus possible dutiliser le mot x pour dsigner la valeur
y + 4. De mme, dans le langage juridique, on dbute le texte dun contrat en donnant
lidentit des contractants et en indiquant un mot par lequel ils seront dsigns dans la
suite du contrat. Par exemple, Contrat de location entre les sous-signs, Monsieur
Dupond, demeurant 1, rue Durand, Grenoble, ci-aprs dsign le loueur et Mon-
sieur Durand, demeurant 1, rue Dupond, Grenoble, ci-aprs dsign le locataire .
Bien entendu, cette manire de dsigner Monsieur Dupond et Monsieur Durand
comme le loueur et le locataire a une porte limite au texte de ce contrat.
Cependant, il y a aussi des situations o lon sloigne davantage des langues naturelles
et cre de vritables langages formels, au vocabulaire limit et la grammaire simple
mais prcise. Par exemple, la nomenclature des composs chimiques, la notation musi-
cale et le langage algbrique. Ainsi, dans la nomenclature des composs chimiques, il y
a un chlorure daminomthylpyrimidinylhydroxythylmthythiazolium, mais pas de
chlorure dpagneul breton : seul un nombre restreint de mots peut tre employ dans

Groupe Eyrolles, 2013 91


Informatique et sciences du numrique

ce langage. Comme la nomenclature des composs chimiques, la notation musicale uti-


lise un vocabulaire restreint et une grammaire simple, mais prcise : elle autorise
mettre six croches dans une mesure binaire trois temps, mais pas quatre noires. De
mme, le langage algbrique permet dappliquer la relation < deux expressions, mais
pas la relation < elle-mme : on peut crire x2 < 4, mais pas x2 < <.
Ces langages formels sont relativement rcents : la notation musicale date du XIIIe sicle,
la notation algbrique du XVIe sicle et la nomenclature des composs chimiques du
e
XIX sicle. Avant linvention de la notation algbrique, on crivait les quations en
langue naturelle, par exemple lquation x3 + 3 x2 = 20 scrivait : un cube et trois carrs
font vingt. Nanmoins, ces langages sont tous les trois antrieurs linformatique.

ALLER PLUS LOIN Mlanger langages formels et langues naturelles


Souvent, dans un texte scientifique, on mlange des passages crits dans des langages formels, comme le lan-
gage algbrique, et des passages crits en langue naturelle : Supposons quil existe deux nombres entiers
non nuls et premiers entre eux tels que x2 = 2 y2. Le nombre x2 est pair et, daprs le lemme 1, le nombre x
galement : il existe donc un nombre x tel que x = 2 x. On en dduit (2 x)2 = 2 y2, cest--dire 4 x2 = 2 y2,
do on tire y2 = 2 x2. Le nombre y2 est donc pair et, en utilisant le lemme 1 nouveau, le nombre y gale-
ment. Les nombres x et y sont tous les deux pairs, ce qui est en contradiction avec lhypothse .

La ranon de luniversalit des langues naturelles semble donc tre leur incapacit
exprimer prcisment les choses, ds que lon sintresse un domaine prcis comme
les sciences, le droit ou la musique. Raison pour laquelle les scientifiques, les juristes
ou les musiciens se sont loigns des langues naturelles, parfois par de petits carts,
parfois en crant de vritables langages formels. Lapparition et la gnralisation,
avec linformatique, des langages formels taient donc prpares par le dveloppe-
ment de ces langages spcialiss, plus ou moins formels.

Les langages formels et les machines


Les langages de programmation, et plus gnralement les langages informatiques, sont
soumis une double contrainte. Ils doivent tre utilisables par les tres humains qui cri-
vent les programmes, mais aussi par les machines qui les excutent. Cette seconde con-
trainte explique dans une large partie que ce soient des langages formels. Au dbut de
linformatique, cette seconde contrainte tait prpondrante et seuls existaient les lan-
gages machine, comme celui dcrit au chapitre 15, ce qui rendait lcriture de ces pro-
grammes difficile pour les tres humains, mais dune excution relativement facile pour
les machines. Lhistoire des langages de programmation est celle des efforts entrepris pour
rendre ces langages plus faciles utiliser par les tres humains, tout en gardant la possibi-
lit de les traduire en langage machine, et donc de les faire excuter par des machines.

92 Groupe Eyrolles, 2013


6 La notion de langage formel

Une tendance dans lvolution des langages de programmation est donc de se rap-
procher des langues naturelles. Par exemple, les langages machine nutilisent que des
chiffres, mais les langages volus galement des lettres.
Toutefois, les langues naturelles ne sont pas ncessairement les bons outils pour exprimer
les algorithmes. Ainsi, la manire dcrire les quations en algbre, sest loigne des lan-
gues naturelles, bien avant que lon ait des machines, simplement parce que le langage
algbrique est plus facile utiliser que les langues naturelles pour exprimer des quations
et les rsoudre. De mme, certains langages formels sont peut-tre plus faciles utiliser
que les langues naturelles pour exprimer des algorithmes. La ncessit de rendre les pro-
grammes excutables par des machines nest donc pas lunique raison pour laquelle les
langages de programmation sont des langages formels.

La grammaire
La premire chose dfinir quand on conoit un langage formel, que ce soit un lan-
gage de programmation, un langage de description de pages web ou un langage
dinterrogation de bases de donnes, est sa grammaire. La grammaire dun langage est
un algorithme qui indique si une chane de caractres appartient ce langage ou non.
Par exemple, la grammaire des instructions du langage Python indique que la chane
de caractres x = 1 est une instruction, mais pas la chane de caractres 1 = x. On ne
cherche pas ici dfinir ce qui se passe quand on excute cette instruction, mais uni-
quement si elle est grammaticalement correcte ou non.
Pour dfinir une grammaire, on utilise un langage qui contient :
des symboles pour les lettres du langage, a, b, etc.
des symboles pour des langages, cest--dire des ensembles de chanes de carac-
tres, A, B, L, etc.
les symboles = (gal), | (ou) et (chane vide).
On commence par un exemple simple : le langage L ne contient que deux chanes de
caractres aab et abab. La grammaire de ce langage se dfinit ainsi :
L = aab | abab
Un autre exemple de langage est celui qui contient toutes les chanes de caractres qui ne
sont formes que de a : la chane vide , a, aa, aaa, etc. Sa grammaire se dfinit ainsi :
L= | aL
Cette dfinition signifie quun lment de L est, ou bien la chane vide , ou bien la lettre a,
suivie dun autre lment de L. En effet, les chanes de caractres, non vides, formes unique-
ment de a commencent toutes par un a, suivi dune autre chane forme uniquement de a.

Groupe Eyrolles, 2013 93


Informatique et sciences du numrique

On peut, de mme, dfinir le langage des chanes de caractres formes dun certain
nombre de a, suivis dun certain nombre de b. Par exemple la chane aaabbbbb fait
partie de ce langage mais pas la chane aaabbbab. Pour cela, on dfinit dabord un
langage A qui contient toutes les chanes qui ne sont formes que de a, puis un
langage B qui contient toutes les chanes qui ne sont formes que de b, et enfin le
langage dont les lments sont forms dune chane de A suivie dune chane de B.
A= |aA
B= |bB
L=AB
On peut de mme dfinir ainsi la grammaire des instructions simples en Python. On
suppose que lon a dj dfini le langage V des noms de variables et le langage E des
expressions. Le langage I des instructions se dfinit alors ainsi :
I=V=E
|I
I
| if : E
I
else:
I
| while E:
I
Une instruction est en effet :
une affectation : V = E,
une squence :

I
I
un test :

if E:
I
else:
I
une boucle :

while E:
I

94 Groupe Eyrolles, 2013


6 La notion de langage formel

On peut galement dfinir la grammaire du langage HTML, ou plus exactement de


la partie de ce langage introduite au chapitre 8. On dfinit dabord un langage qui
contient les diverses lettres de lalphabet.
C= a | b | c | d | ...
en excluant les symboles < et >.
Le langage form des suites de tels symboles se dfinit ainsi :
L= | CL
Cependant, un texte en HTML nest pas une simple suite de tels symboles, puisquil
peut aussi contenir des expressions comme <b>un passage important</b>.
On dfinit alors le langage des textes en HTML ainsi :
L = | CL | EL
E = <b>L</b> | <i>L</i> | <p>L</p> | <h1>L</h1> | <h2>L</h2>
| <a href = A>L</a>

o le langage A, qui reste dfinir, est celui des adresses web.


Ainsi, dans le langage E, on introduit les symboles < et > et les diffrentes balises exis-
tantes, mais on assure galement au passage que les balises sont utilises correctement :
toute balise ouverte est referme par la suite et les balises sont correctement imbriques,
cest--dire refermes dans lordre correspondant leur ouverture. Par exemple, cette
grammaire exclut une suite de caractres comme <b><i>erreur</b></i>.

ALLER PLUS LOIN Langages et formats


La notion de langage nest pas trs loigne de la notion de format introduite au chapitre 9. Dans un cas
comme dans lautre, on dfinit un ensemble de rgles qui permettent dexprimer un texte, une image, etc.
Dailleurs, on dit parfois le langage HTML et parfois le format HTML .
On a cependant tendance rserver le mot langage aux suites de symboles exprimes dans un alphabet riche
et avec une grammaire relativement complexe. Ainsi le langage HTML utilise tous les symboles de lalphabet,
qui peuvent eux-mmes tre exprims dans un format : ASCII ou latin-1, alors que le format latin-1 utilise un
alphabet qui se limite aux symboles 0 et 1. De mme, toutes les suites de huit bits sont bien formes en latin-1,
si bien que la grammaire du format latin-1 est trs simple et na que peu dintrt.

La smantique
La grammaire dun langage de programmation dfinit quand une suite de symboles
est un programme bien form dans ce langage ou non, mais pas ce qui se passe quand
on excute ce programme. Ce second volet de la dfinition dun langage de program-

Groupe Eyrolles, 2013 95


Informatique et sciences du numrique

mation est appele sa smantique. Par exemple, le fait que quand on excute linstruc-
tion x = 1 on transforme ltat en mettant la valeur 1 dans la bote de nom x fait
partie de la smantique, et non de la grammaire, du langage Python.
De mme, la smantique du langage HTML dfinit la manire dont un texte crit en
HTML saffiche dans un navigateur.

Redfinir la smantique
En HTML (voir le chapitre 8), les balises <h1> et </h1> dlimitent un titre et les
balises <a> et </a> dlimitent un lien. Concrtement, cela signifie que, dans un navi-
gateur, un passage dlimit par les balises <h1> et </h1> est crit en gros caractres et
un passage dlimit par les balises <a> et </a> est crit en bleu et soulign.
Cela dit, il est possible de modifier cette smantique et de dcider, par exemple, que
les titres doivent tre non seulement en grosses lettres, mais aussi en rouge et centrs
et que les liens doivent tre en vert et surligns. Cela est possible car la smantique de
HTML est elle-mme dfinie dans un langage formel : le langage CSS. Par exemple,
la dfinition CSS suivante :
h1 {Font-Size: 24pt; Color: Red; Text-Align: Center;}
a {Color: Green; Text-Decoration: Overline;}

indique que les titres doivent tre en 24 points, en rouge et centrs, et les liens en vert
et surligns.
Si on crit cette dfinition dans un fichier exemple.css et si lon ajoute len-tte du
fichier HTML, prsent au chapitre 8, la commande :
<link rel="stylesheet" href="example.css" type="text/css"></link>

alors ce texte sera affich dans un navigateur, non sous la forme mais sous la forme .

On peut aussi dfinir en CSS de nouvelles balises <oeuvre> et </oeuvre> :


oeuvre {Font-Style: Italic}

96 Groupe Eyrolles, 2013


6 La notion de langage formel

Le texte :
<oeuvre>L'le mystrieuse</oeuvre> est la fois la suite de
<oeuvre>Vingt mille lieues sous les mers</oeuvre> et des
<oeuvre>Enfants du capitaine Grant</oeuvre>.

saffiche alors dans un navigateur :


L'le mystrieuse est la fois la suite de Vingt mille lieues sous les mers et
des Enfants du capitaine Grant.
exactement comme laurait fait le texte :
<i>L'le mystrieuse</i> est la fois la suite de <i>Vingt
mille lieues sous les mers</i> et des <i>Enfants du capitaine
Grant</i>.

La diffrence est que, si lon dcide aprs coup de souligner les noms des uvres au
lieu de les mettre en italique, il suffit de changer la smantique des balises <oeuvre>
et </oeuvre> :
oeuvre {Text-Decoration: Underline;}

pour que le texte saffiche :


Lle mystrieuse est la fois la suite de Vingt mille lieues sous les mers
et des Enfants du capitaine Grant.
les autres italiques du texte restant des italiques.
Cela permet de dissocier le fond : le texte, dans lequel on indique simplement que
Lle mystrieuse est le titre dune uvre, de la forme : la smantique du langage
HTML, dans laquelle on indique que les titres des uvres doivent tre en italique ou
souligns. La mise en page des textes peut tre ainsi change ad libitum.
Exercice 6.1
Reprendre lune des pages HTML crites au chapitre 8 et lui adjoindre un fichier CSS pour
modifier son aspect.

Ai-je bien compris ?


Quelles sont les principales diffrences entre un langage formel et une langue
naturelle ?
Quelle est la diffrence entre la grammaire et la smantique dun langage ?
quoi sert le langage CSS ?

Groupe Eyrolles, 2013 97


DEUXIME PARTIE

Informations
Dans cette deuxime partie, nous abordons lune des
problmatiques centrales de linformatique : reprsenter les
informations que lon veut communiquer, stocker et
transformer. Nous apprenons reprsenter les nombres
entiers et les nombres virgule (chapitre 7), les caractres et
les textes (chapitre 8), et les images et les sons (chapitre 9).
La notion de valeur boolenne, ou de bit, qui apparat dans
ces trois chapitres, nous mne naturellement la notion de
fonction boolenne (chapitre 10).
Nous apprenons ensuite structurer de grandes quantits
dinformations (chapitre 11*), optimiser la place
occupe grce la compression, corriger les erreurs qui
peuvent se produire au moment de la transmission et du
stockage de ces informations et les protger par le
chiffrement (chapitre 12*).
7
Le livre de laddition et de la soustraction daprs le calcul
indien de Muhammad al-Khwarizmi (783 ?-850 ?), qui pr-
sente la numration dcimale position et des algorithmes
permettant deffectuer les oprations sur les nombres
exprims dans ce systme, a t le vecteur de la diffusion de ce
systme de numration dans le bassin mditerranen. Le mot
algorithme est driv du nom dal-Khwarizmi et le mot
algbre (al-jabr) du titre dun autre de ses livres.
Reprsenter
des nombres
entiers et virgule

Au commencement taient le 0 et le 1, puis nous


crmes les nombres, les textes, les images et les sons.

Dans ce chapitre, nous voyons comment les nombres


sont reprsents dans les ordinateurs avec des 0 et des 1.

Nous introduisons la notion de base, en partant de la


notation dcimale que nous utilisons ordinairement pour
crire les nombres entiers. Nous passons par la base cinq
puis dcrivons la base deux, aussi appele reprsentation
binaire. Nous gnralisons ensuite aux nombres relatifs en
utilisant la notation en complment deux, puis aux nombres
virgule, reprsents par leur signe, leur mantisse et leur
exposant.
Informatique et sciences du numrique

Vus de lextrieur, les ordinateurs et les programmes que lon utilise tous les jours
permettent de mmoriser, de transmettre et de transformer des nombres, des textes,
des images, des sons, etc.
Pourtant, quand on les observe une plus petite chelle, ces ordinateurs ne manipu-
lent que des objets beaucoup plus simples : des 0 et des 1. Mmoriser, transmettre et
transformer des nombres, des textes, des images ou des sons demande donc dabord
de les reprsenter comme des suites de 0 et de 1.
La mmoire des ordinateurs est constitue dune multitude de petits circuits lectro-
niques qui ne peuvent tre, chacun, que dans deux tats (voir le chapitre 14). Comme
il fallait donner un nom ces tats, on a dcid de les appeler 0 et 1, mais on aurait
pu tout aussi bien les appeler A et B, froid et chaud ou faux et vrai. Une telle valeur, 0
ou 1, sappelle un boolen, un chiffre binaire ou encore un bit (binary digit). Un tel cir-
cuit deux tats sappelle un circuit mmoire un bit et son tat se dcrit donc par le
symbole 0 ou par le symbole 1.
Ltat dun circuit, compos de plusieurs de ces circuits mmoire un bit, se dcrit par
une suite finie de 0 et de 1, que lon appelle un mot. Par exemple, le mot 100 dcrit
ltat dun circuit compos de trois circuits mmoire un bit, respectivement dans
ltat 1, 0 et 0.
Exercice 7.1
On imagine un ordinateur dont la mmoire est constitue de quatre circuits mmoire un
bit. Quel est le nombre dtats possibles de la mmoire de cet ordinateur ? Mme question
pour un ordinateur dont la mmoire est constitue de dix circuits mmoire un bit. Et pour
un ordinateur dont la mmoire est constitue de 34 milliards de tels circuits.

Exercice 7.2
On veut reprsenter chacune des sept couleurs de larc-en-ciel par un mot, les sept mots
devant tre distincts et de mme longueur. Quelle est la longueur minimale de ces mots ?

Exercice 7.3
Trouvez trois informations de la vie courante qui peuvent tre exprimes par un boolen.

Exercice 7.4
On considre une box internet avec une diode lectroluminescente, teinte ou allume
selon un motif de 0 et de 1 qui change chaque demi-seconde. Lorsque la box est teinte,
la diode aussi, le motif est 0000000000 Lorsque la box est allume et fonctionne, la diode
est allume en continu, le motif vaut donc 1111111111 Lorsque la box est en panne, le
fournisseur daccs souhaite que la diode clignote selon diffrents motifs en fonction du
type de panne : pas de rseau, rseau satur, facture non paye, etc. On parle ainsi de cli-
gnotement rapide pour le motif 0101010101.
Proposer deux motifs qui pourraient correspondre aux descriptions clignotement
lent et clignotement trs lent .

102 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

Comment peut-on dcrire les motifs suivants, rpts indfiniment : 0000100000 et


0101010000 ?
Comment faut-il procder pour quun motif donn ne saffiche que toutes les dix
secondes ?
Dans une situation o il y aurait deux types de panne en mme temps, comment pour-
rait-on procder pour afficher les motifs correspondant aux deux messages derreurs
diffrents ?

La reprsentation des entiers naturels


Depuis le Moyen ge, on crit les nombres entiers naturels en notation dcimale posi-
tion. Cela signifie que, pour crire le nombre entier naturel n, on commence par ima-
giner n objets, que lon groupe par paquets de dix, puis on groupe ces paquets de dix
objets en paquets de dix paquets, etc. la fin, il reste entre zro et neuf objets isols,
entre zro et neuf paquets isols de dix objets, entre zro et neuf paquets isols de cent,
etc. Et on crit cet entier naturel en notant, de droite gauche, le nombre dobjets
isols, le nombre de paquets de dix, le nombre de paquets de cent, le nombre de
paquets de mille, etc. Chacun de ces nombres tant compris entre zro et neuf, seuls
dix chiffres sont ncessaires : 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Par exemple, lcriture 2359
exprime un entier naturel form de 9 units, 5 dizaines, 3 centaines et 2 milliers.
Le choix de faire des paquets de dix est peut-tre d au fait que lon a dix doigts,
mais on aurait pu tout aussi bien dcider de faire des paquets de deux, de cinq, de
douze, de vingt, de soixante, etc. On crirait alors les nombres entiers naturels en
notation position en base deux, cinq, douze, vingt ou soixante. La notation dci-
male position sappelle donc aussi la notation position en base dix.
En notation binaire, cest--dire en notation position en base deux, le nombre treize
scrit 1101 : de droite gauche, 1 unit, 0 deuzaine, 1 quatraine et 1 huitaine.
Lcriture dun entier naturel en binaire est en moyenne 3,2 fois plus longue que son
criture en base dix, mais elle ne demande dutiliser que deux chiffres : 0 et 1.

T Indiquer la base

Dans ce livre, quand une suite de chiffres exprime un nombre dans une base diffrente de dix, on indique la
base entre parenthses, par exemple : 1101 (en base deux). On souligne aussi parfois un mot pour indiquer
quil exprime un nombre en base deux : 1101. Enfin, on rassemble parfois les bits par groupe de quatre ou de
huit dans les mots trs longs pour quils soient plus faciles lire : 1111111101 est crit 11 1111 1101. Comme
en base dix, ces groupes sont forms de droite gauche.

Groupe Eyrolles, 2013 103


Informatique et sciences du numrique

Exercice 7.5
Un horloger excentrique a eu lide de fabriquer une montre sur laquelle lheure est indi-
que par 10 diodes lectroluminescentes appeles 1 h, 2 h, 4 h, 8 h, 1 min, 2 min, 4 min,
8 min, 16 min et 32 min. Pour connatre lheure, il suffit dajouter la valeur de toutes les
diodes allumes.
Quelle heure est-il quand sont allumes les diodes 1 h, 2 h, 4 h, 1 min, 2 min, 8 min, 16 min
et 32 min ? Quelles sont les diodes allumes 5 h 55 ? Est-il possible de reprsenter toutes
les heures ? Toutes les configurations sont-elles la reprsentation dune heure ?
Comme la mmoire des ordinateurs est constitue de circuits qui ne peuvent tre
chacun que dans deux tats, on peut utiliser chaque circuit de la mmoire pour repr-
senter un chiffre binaire, en identifiant lun de ces tats avec le chiffre binaire 0 et
lautre avec le chiffre binaire 1 on comprend a posteriori pourquoi on a choisi
dappeler ces tats eux-mmes 0 et 1. Le nombre 13 = 1101 est donc reprsent dans
la mmoire dun ordinateur par le mot 1101, cest--dire par quatre circuits respecti-
vement dans les tats 1, 0, 1 et 1.

La base cinq
Pour comprendre comment transformer un entier naturel, crit en base dix, dans une
autre base, on commence par la base cinq, moins particulire que la base deux, sur
laquelle on reviendra plus tard.

SAVOIR-FAIRE Trouver la reprsentation en base cinq dun entier naturel


donn en base dix
Pour crire les entiers naturels en base cinq, on a besoin de cinq chiffres : 0, 1, 2, 3, 4.
Quand on a n objets, on les groupe par paquets de cinq, quon groupe ensuite en paquets de
cinq paquets, etc. Autrement dit, on fait une succession de divisions par 5, jusqu obtenir
un quotient gal 0.

Exercice 7.6 (avec corrig)


Trouver la reprsentation en base cinq de 47.

47 objets se regroupent en 9 paquets et 2 units, puis les 9 paquets se regroupent en


1 paquet de paquets et 4 paquets.
47 = 9 5 + 2 = (1 5 + 4) 5 + 2 = (1 52) + (4 51) + (2 50)
Donc 47 = 142 (en base cinq).

104 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

Exercice 7.7 (avec corrig)


Trouver la reprsentation en base cinq du nombre 944.

On obtient 944 = 12234 (en base cinq).

Exercice 7.8
Trouver la reprsentation en base cinq du nombre 289.

SAVOIR-FAIRE Trouver la reprsentation en base dix dun entier naturel


donn en base cinq
Pour trouver la reprsentation en base dix dun entier naturel donn en base cinq, on utilise
le fait quen base cinq, le chiffre le plus droite reprsente les units, le prcdent les
paquets de 5, le prcdent les paquets de 5 5 = 52 = 25, le prcdent de
5 5 5 = 53 = 125, et ainsi de suite.

Exercice 7.9 (avec corrig)


Trouver la reprsentation en base dix du nombre 401302 (en base cinq).

401302 (en base cinq) = (2 50) + (0 51) + (3 52) + (1 53) + (0 54) + (4 55) = 12702.

Exercice 7.10
Trouver la reprsentation en base dix des nombres 2341 (en base cinq) et 444 (en base cinq).

Groupe Eyrolles, 2013 105


Informatique et sciences du numrique

La base deux
Les nombres exprims en base deux sont plus difficiles lire, car il ny a que deux
chiffres, 0 et 1, mais le principe de la numration en base deux est en tout point simi-
laire celui de la numration en base cinq.

SAVOIR-FAIRE Trouver la reprsentation en base deux


dun entier naturel donn en base dix
Pour crire les nombres en base deux, on a besoin de deux chiffres : 0 et 1. Quand on a n objets, on
les groupe par paquets de deux, quon regroupe eux-mmes en paquets de deux paquets, etc.
Autrement dit, on fait une succession de divisions par 2, jusqu obtenir un quotient gal 0.

Exercice 7.11 (avec corrig)


Trouver la reprsentation en base deux du nombre 11.

On obtient 11 = 1011.

Exercice 7.12
Trouver la reprsentation en base deux du nombre 1000.

Exercice 7.13
Chercher sur le Web la date de la mort de Charlemagne. Trouver la reprsentation en base
deux de ce nombre.

Exercice 7.14
Donner les reprsentations en base deux des nombres 1, 3, 7, 15, 31 et 63. Expliquer le
rsultat.

106 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

SAVOIR-FAIRE Trouver la reprsentation en base dix dun entier naturel


donn en base deux
Pour trouver la reprsentation en base dix dun entier naturel donn en base deux, on utilise le
fait quen base deux, le chiffre le plus droite reprsente les units, le prcdent les paquets
de 2, le prcdent les paquets de 2 2 = 22 = 4, le prcdent de 2 2 2 = 23 = 8, etc.

Exercice 7.15 (avec corrig)


Trouver la reprsentation en base dix du nombre 11111111.

11111111 = (1 20) + (1 21) + (1 22) + (1 23) + (1 24) + (1 25) + (1 26) + (1 27) =


255.

Exercice 7.16
Trouver la reprsentation en base dix du nombre 10010110.

Exercice 7.17
Cest en 11110010000 qua t dmontr le thorme fondamental de linformatique.
Exprimer ce nombre en base dix.

Exercice 7.18
Montrer quavec un mot de n bits on peut reprsenter les nombres de 0 2n1.

T Les octets

Dans la mmoire des ordinateurs les circuits mmoire un bit sont souvent groups par huit : les octets. On uti-
lise souvent des nombres exprims en notation binaire, cest--dire en base deux, sur un, deux, quatre ou huit
octets, soit 8, 16, 32 ou 64 bits. Ceci permet de reprsenter les nombres de 0 1111 1111 = 255 sur un octet, de
0 1111 1111 1111 1111 = 65 535 sur deux octets, de 0 1111 1111 1111 1111 1111 1111 1111 1111
= 4 294 967 295 sur quatre octets et de 0 1111 1111 1111 1111 1111 1111 1111 1111 1111
1111 1111 1111 1111 1111 1111 1111 = 18 446 744 073 709 551 615 sur huit octets.

Exercice 7.19
Pour multiplier par dix un entier naturel exprim en base dix, il suffit dajouter un 0 sa
droite, par exemple, 12 10 = 120. Quelle est lopration quivalente pour les entiers natu-
rels exprims en base deux ? Exprimer en base deux les nombres 3, 6 et 12 pour illustrer
cette remarque.

Exercice 7.20
Quelle est la reprsentation binaire du nombre 57 ? Et celle du nombre 198 ? Soit m un mot
de 8 bits, n lentier naturel reprsent en binaire par le mot m, m le mot obtenu en rempla-
ant dans m chaque 0 par un 1 et chaque 1 par un 0 et n lentier naturel reprsent en
binaire par le mot m. Exprimer n et n comme une somme de puissances de 2, montrer que

Groupe Eyrolles, 2013 107


Informatique et sciences du numrique

n + n = 255. Montrer que la reprsentation binaire du nombre 255 n est obtenue en rem-
plaant dans celle de n chaque 0 par un 1 et chaque 1 par un 0.

Une base quelconque


On peut gnraliser une base quelconque les mthodes vues pour la base cinq et la
base deux.

SAVOIR-FAIRE Trouver la reprsentation en base k dun entier naturel


donn en base dix
Pour crire les entiers naturels en base k, on a besoin de k chiffres. Quand on a n objets, on les
groupe par paquets de k, quon regroupe leur tour en paquets de k paquets, etc. Autrement
dit, on fait une succession de divisions par k, jusqu obtenir un quotient gal 0.

T Base 16

En base seize, on a besoin de 16 chiffres : 0, 1, 2, 3, 4, 5 , 6, 7, 8, 9, puis a (dix), b (onze), c (douze), d (treize),


e (quatorze) et f (quinze).

Exercice 7.21 (avec corrig)


Trouver la reprsentation en base seize du nombre 965.
Rponse : 965 = 3c5 (en base seize)

Exercice 7.22
Trouver la reprsentation en base seize des nombres 6725 et 18 379.

108 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

SAVOIR-FAIRE Trouver la reprsentation en base dix dun entier naturel


donn en base k
Pour trouver la reprsentation en base dix dun entier naturel donn en base k, on utilise le
fait quen base k, le chiffre le plus droite reprsente les units, le prcdent les paquets
de k, le prcdent les paquets de k k = k2, le prcdent les paquets de k k k = k3, etc.

Exercice 7.23 (avec corrig)


Trouver la reprsentation en base dix du nombre 4e2c (en base seize).

4e2c (en base seize) = (12 160) + (2 161) + (14 162) + (4 163) = 20 012.

Exercice 7.24
Trouver la reprsentation en base dix des nombres abcd (en base seize) et 281ef (en base
seize).

Exercice 7.25
Chercher sur le Web ce quest le systme de numration Shadok. Est-ce un systme de
numration position ? Si oui, en quelle base et avec quels chiffres ?

La reprsentation des entiers relatifs


Pour reprsenter les entiers relatifs en notation binaire, on doit tendre la reprsenta-
tion aux nombres ngatifs. Une solution est de rserver un bit pour le signe de lentier
reprsenter et dutiliser les autres pour reprsenter sa valeur absolue. Ainsi, avec des
mots de 16 bits, en utilisant 1 bit pour le signe et 15 bits pour la valeur absolue, on
pourrait reprsenter les entiers relatifs de -111 1111 1111 1111 = -(215 - 1) = -32 767
111 1111 1111 1111 = 215 - 1 = 32 767. Cependant, cette mthode a plusieurs incon-
vnients, lun deux tant quil y a deux zros, lun positif et lautre ngatif.
On a donc prfr une autre mthode, qui consiste reprsenter un entier relatif par
un entier naturel. Si on utilise des mots de 16 bits, on peut reprsenter les entiers
relatifs compris entre -32 768 et 32 767 : on reprsente un entier relatif x positif ou
nul comme lentier naturel x, et un entier relatif x strictement ngatif comme lentier
naturel x + 216 = x + 65 536, qui est compris entre 32 768 et 65 535. Ainsi, les
entiers naturels de 0 32 767 servent reprsenter les entiers relatifs positifs ou nuls,
en vert sur la figure, et les entiers naturels de 32 768 65 535 dcrivent les entiers
relatifs strictement ngatifs, en rouge sur la figure.

Groupe Eyrolles, 2013 109


Informatique et sciences du numrique

Lentier relatif -1 est reprsent comme lentier naturel 65 535, cest--dire par le
mot 1111 1111 1111 1111.
Cette manire de reprsenter les entiers relatifs sappelle la notation en complment deux.
Avec des mots de seize bits, on crit les entiers relatifs compris entre -215 = -32 768 et
215 - 1 = 32 767. Plus gnralement, avec des mots de n bits, on crit les entiers relatifs
compris entre -2n-1 et 2n-1 - 1 :
un entier relatif x positif ou nul compris entre 0 et 2n-1 - 1 est reprsent par
lentier naturel x compris entre 0 et 2n-1 - 1 ;
un entier relatif x strictement ngatif compris entre 2n-1 et 1 est reprsent
par lentier naturel x + 2n compris entre 2n-1 et 2n - 1.
Exercice 7.26
Quels entiers relatifs peut-on reprsenter avec des mots de 8 bits ? Combien sont-ils ?
Mme question avec des mots de 32 bits et 64 bits.

SAVOIR-FAIRE Trouver la reprsentation binaire sur n bits dun entier


relatif donn en dcimal
On a vu que :
Si lentier relatif x est positif ou nul, on le reprsente comme lentier naturel x.
Sil est strictement ngatif, on le reprsente comme lentier naturel x + 2n.

Exercice 7.27 (avec corrig)


Trouver la reprsentation binaire sur huit bits des entiers relatifs 0 et -128.

Lentier relatif 0 est reprsent comme lentier naturel 0 : 0000 0000.


Lentier relatif -128 est reprsent comme lentier naturel -128 + 28 = -128 + 256 = 128 :
1000 0000.

110 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

Exercice 7.28
Trouver la reprsentation binaire sur huit bits des entiers relatif 127 et -127.

SAVOIR-FAIRE Trouver la reprsentation dcimale dun entier relatif donn


en binaire sur n bits
Si cet entier relatif est donn par le mot m, on commence par calculer lentier naturel p
reprsent par ce mot. Si p est strictement infrieur 2n-1, cest lentier relatif reprsent,
sil est suprieur ou gal 2n-1, lentier relatif reprsent est p - 2n.

Exercice 7.29 (avec corrig)


Trouver la reprsentation dcimale des entiers relatifs dont la reprsentation binaire sur
huit bits est 0000 0000 et 1000 0000.
Le mot 0000 0000 reprsente lentier naturel 0 et donc lentier relatif 0. Le mot 1000 0000
reprsente lentier naturel 128 = 27 et donc lentier relatif 128 - 28 = 128 - 256 = -128.

Exercice 7.30
Trouver la reprsentation dcimale des entiers relatifs dont la reprsentation binaire sur
huit bits est 0111 1111 et 1000 0001.

SAVOIR-FAIRE Calculer la reprsentation p de loppos dun entier relatif x


partir de sa reprsentation p, pour une reprsentation des entiers
relatifs sur huit bits
Si lentier relatif x est compris entre 0 et 127, alors il est reprsent sur huit bits par lentier naturel
p = x et son oppos -x est reprsent par lentier naturel p = -x + 28 = -x + 256 = 256 - p.
Si lentier relatif x est compris entre -127 et -1, alors il est reprsent par lentier naturel
p = x + 28 = x + 256 et son oppos -x est reprsent par lentier naturel p = -x = 256 - p.
Donc, sauf quand x = -128, dont loppos nest pas reprsentable sur 8 bits, si un entier
relatif x est reprsent par lentier naturel p, son oppos -x est reprsent par lentier naturel
p = 256 - p = (255 - p) + 1.
Calculer 255 - p = 1111 1111 - p est facile, puisquil suffit, dans la reprsentation binaire
de p, de remplacer chaque 0 par un 1 et chaque 1 par un 0 (voir lexercice 7.20). Il suffit
ensuite dajouter 1 au nombre obtenu.

Exercice 7.31 (avec corrig)


Calculer la reprsentation binaire sur huit bits de lentier relatif 4, puis celle de son oppos.

Lentier relatif 4 est reprsent comme lentier naturel 4 = 0000 0100.

Groupe Eyrolles, 2013 111


Informatique et sciences du numrique

Pour calculer la reprsentation de son oppos, on remplace les 0 par des 1 et les 1 par des 0,
ce qui donne 1111 1011. Puis on ajoute 1, ce qui donne 1111 1100. On peut vrifier que ce
nombre est bien la reprsentation de lentier relatif -4, cest--dire de lentier naturel
-4 + 256 = 252.

Exercice 7.32
Calculer la reprsentation binaire sur huit bits de lentier relatif -16, puis de son oppos.

Exercice 7.33
Montrer que le bit le plus gauche vaut 1 pour les entiers relatifs strictement ngatifs et 0
pour les entiers relatifs positifs ou nuls.

Exercice 7.34
On considre des entiers relatifs sur 3 bits. Dessiner le cercle rouge-vert ci-avant en plaant
les 8 nombres : 0, 1, 2, 3, -1, -2, -3, -4 leur place. Relier les nombres opposs : 1 et -1, 2 et -2,
etc. Quelle est linterprtation gomtrique de la fonction qui chaque nombre associe son
oppos ?

Exercice 7.35
Reprsenter les entiers relatifs 96 et 48 en binaire sur huit bits. Ajouter les deux nombres
binaires obtenus en utilisant lalgorithme de laddition binaire du chapitre 18. Quel est
lentier relatif obtenu ? Pourquoi est-il ngatif ?

Exercice 7.36
Expliquer comment faire une soustraction de deux nombres binaires sur huit bits partir du
calcul de loppos et de lalgorithme de laddition du chapitre 18. Calculer ainsi 15 - 7.

La reprsentation des nombres virgule


Comme la notation dcimale, la notation binaire permet aussi de reprsenter des nom-
bres virgule. En notation dcimale, les chiffres gauche de la virgule reprsentent des
units, des dizaines, des centaines, etc. et ceux droite de la virgule, des diximes, des
centimes, des millimes, etc. De mme, en binaire, les chiffres droite de la virgule
reprsentent des demis, des quarts, des huitimes, des seizimes, etc. On peut ainsi
reprsenter, par exemple, le nombre un et un quart : 1,01. Toutefois, cette manire de
faire ne permet pas de reprsenter des nombres trs grands ou trs petits comme le
nombre dAvogadro ou la constante de Planck. On utilise donc une autre reprsenta-
tion similaire la notation scientifique des calculatrices, sauf quelle est en base deux
et non en base dix. Un nombre est reprsent sous la forme s m 2n o s est le signe du
nombre, n son exposant et m sa mantisse. Le signe est + ou -, lexposant est un entier
relatif et la mantisse est un nombre virgule, compris entre 1 inclus et 2 exclu.

112 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

Par exemple, quand on utilise 64 bits pour reprsenter un nombre virgule, on utilise
1 bit pour le signe, 11 bits pour lexposant et 52 bits pour la mantisse. Le signe + est
reprsent par 0 et le signe - par 1. Lexposant n est un entier relatif compris entre
-1 022 et 1 023 ; on le reprsente comme lentier naturel n + 1 023, qui est compris
entre 1 et 2 046. Les deux entiers naturels 0 et 2 047 sont rservs pour des situations
exceptionnelles (+ , - , NaN, etc.). La mantisse m est un nombre binaire virgule
compris entre 1 inclus et 2 exclu, comprenant 52 chiffres aprs la virgule. Comme
cette mantisse est comprise entre 1 et 2, elle a toujours un seul chiffre avant la virgule
et ce chiffre est toujours un 1 ; il est donc inutile de le reprsenter et on utilise les
52 bits pour reprsenter les 52 chiffres aprs la virgule.

ALLER PLUS LOIN Valeurs exceptionnelles

Ce codage prend en compte des valeurs exceptionnelles : +, - et NaN (not a number) qui est une valeur
indfinie. Ces valeurs non numriques sont reprsentes respectivement par les mots de 64 bits suivants :
0 11111111111 0000000000000000000000000000000000000000000000000000
1 11111111111 0000000000000000000000000000000000000000000000000000
1 11111111111 1111111111111111111111111111111111111111111111111111
Ce codage permet galement de reprsenter des valeurs infinitsimales qui, sans tre nulles, sont trop petites
pour que lon puisse calculer avec elles.

SAVOIR-FAIRE Trouver la reprsentation en base dix dun nombre


virgule donn en binaire
On identifie le signe, la mantisse et lexposant.

Exercice 7.37 (avec corrig)


Trouver le nombre virgule reprsent par le mot
1100010001101001001111000011100000000000000000000000000000000000

Le signe est reprsent par 1.


Lexposant est reprsent par 10001000110. La mantisse est reprsente par
1001001111000011100000000000 000000000000000000000000.
Le signe du nombre est donc -. Le nombre 100 0100 0110 est gal 1 094 et lexposant du
nombre est n = 1094 - 1023 = 71. Sa mantisse est :

m = 1.1001 0011 1100 0011 1000 0000 0000 0000 0000 0000 0000 0000 0000
= 1 + 1/2 + 1/24 + 1/27 + 1/28 + 1/29 + 1/210 + 1/215 + 1/216 + 1/217
= (217 + 216 + 213 + 210 + 29 + 28 + 27 + 22 + 2 + 1) / 217
= 206727/131072.

Le nombre reprsent est donc -206 727 / 131 072 271 = -3.724 1021.

Groupe Eyrolles, 2013 113


Informatique et sciences du numrique

Exercice 7.38
Trouver le nombre virgule reprsent par le mot :
0001000000111101001110010101100000000000000000000000000000000000.

Exercice 7.39
Comment est reprsent le nombre virgule 2-1 022 (qui est gal 2,225 10-308) ?

Exercice 7.40
Comment est reprsent le nombre entier 7 ? Et le nombre virgule 7,0 ?

Exercice 7.41
combien de dcimales environ correspondent 52 chiffres binaires aprs la virgule ?

Exercice 7.42
Quel est le plus grand nombre virgule que lon peut reprsenter en binaire avec 64 bits ?
Quel est le plus petit nombre virgule, donc ngatif, que lon peut reprsenter en binaire
avec 64 bits ? Quel est le plus petit nombre virgule strictement positif que lon peut repr-
senter en binaire avec 64 bits ?

Exercice 7.43
Quelle prcision perd-on si on divise par deux un nombre virgule avant de le remultiplier
par deux ?

Exercice 7.44
chaque multiplication de deux nombres virgule, on arrondit le calcul en ne gardant que
52 chiffres binaires aprs la virgule, ce qui introduit une erreur relative de lordre de 2-52.
Quelle est la valeur de cette erreur en base dix ? Si on fait plusieurs multiplications, ces
erreurs saccumulent. Quelle est lerreur relative dun calcul qui est form dun million de
multiplications, qui dure quelques millisecondes sur un ordinateur usuel ?

Exercice 7.45
On considre le programme suivant :

x = 1.0
y = x + 1.0
while y - x == 1.0:
x = x * 2.0
y = x + 1.0

Si lon calculait sur des nombres rationnels exacts, que se passerait-il lors de lexcution
de ce programme ?
crire ce programme et lexcuter. Que constate-t-on ?
Modifier le programme de faon dterminer au bout de combien dexcutions du
corps de la boucle il sarrte, ainsi que la valeur de x la fin de cette excution.
Comment est reprsente cette dernire valeur de x ? Et celle de y ?

114 Groupe Eyrolles, 2013


7 Reprsenter des nombres entiers et virgule

Proposer une explication de ce comportement.


Exercice 7.46
On considre le programme suivant :

a = 0.0
for loop in range(0,10):
a = a + 0.1
print(a)

Si lon calculait sur des nombres rationnels exacts, que se passerait-il lors de lexcution
de ce programme ?
crire ce programme et lexcuter. Que constate-t-on ?
Vrifier que la reprsentation binaire de 0,1 est
0011111110111001100110011001100110011001100110011001100110011010.
Quel nombre dcimal cette reprsentation dsigne-t-elle en ralit ?
En dduire les reprsentations binaires de 0,2, 0,3 et les nombres dcimaux que cette
reprsentation dsigne en ralit.
Expliquer le rsultat obtenu.

Ai-je bien compris ?


En quelle base reprsente-t-on le plus souvent les nombres en informatique ?
Pourquoi ?
Comment reprsente-t-on les nombres ngatifs ?
Comment reprsente-t-on les nombres virgule ?

Groupe Eyrolles, 2013 115


8
Samuel Morse (1791-1872) est linventeur dun code, dans
lequel chaque lettre est exprime par une alternance de sons
brefs symboliss par . et longs , utilis pour tlgraphier
des textes. La lettre a y est exprime par les sons . , la
lettre b par les sons , etc. Artiste peintre, Samuel
Morse sest intress aux tlcommunications aprs quen 1925,
un message lui annonant que sa femme tait malade ne lui est
pas parvenu temps. Comme nous le verrons au chapitre 12, le
code morse est rfrences de longueurs variables, mais ce
nest pas un code prfixe.
Reprsenter
des caractres
et des textes

Les lettres ? Toutes des nombres !

Dans ce chapitre, nous voyons comment sont reprsents


les caractres et les textes de toutes les langues du monde.

Nous expliquons pourquoi il existe plusieurs codes tels


ASCII, latin-1, latin-2, UTF-32, UTF-8. Nous prsentons
ensuite les formats enrichis qui permettent de dcrire la
forme des caractres et des textes, comme le font les logiciels
de traitement de texte.
Un exemple de format enrichi est le langage HTML.
Informatique et sciences du numrique

Nous nous intressons, dans ce chapitre, la reprsentation des textes, cest--dire


des suites de caractres, ventuellement enrichies dinformations typographiques.

La reprsentation des caractres


Puisquun texte est une suite de caractres, on commence par sintresser la reprsen-
tation des caractres, cest--dire entre autres choses aux lettres minuscules et majus-
cules, aux chiffres, aux signes de ponctuation et aux symboles mathmatiques. Pour
reprsenter ces caractres, on attribue un nombre chacun.
Le code ASCII, par exemple, attribue le nombre 65 la lettre A , le nombre 66 la lettre
B , le nombre 97 la lettre a et le nombre 98 la lettre b . Il reprsente
95 caractres : les 26 lettres minuscules, les 26 lettres majuscules, les 10 chiffres, les
32 symboles ! " # $ % & ( ) * + , . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ et 1 signe despace. Il
reprsente aussi 33 autres symboles de mise en page, par exemple le retour chariot qui signale
la fin de la ligne et le saut de page qui signale le passage la page suivante. Le code ASCII
reprsente donc 95 + 33 = 128 = 27 caractres, par des nombres qui peuvent eux-mmes
tre reprsents en binaire par des mots de sept bits. Ils sont en fait reprsents par des
mots de huit bits, le premier tant toujours un zro.
Le code ASCII tait lorigine conu pour des textes crits en anglais, comme lindique
son nom, American Standard Code for Information Interchange. Il nest pas adapt pour
reprsenter des textes crits dans dautres langues, mme celles qui, comme le franais,
utilisent lalphabet latin, car ces langues utilisent des accents, des cdilles et autres signes
diacritiques. Cest pourquoi on a tout dabord conu une extension du code ASCII, le
code latin-1, qui contient 191 caractres. Aux 128 caractres du code ASCII, qui sont
reprsents comme en ASCII, sajoutent les lettres , , , , , ,
, etc. qui permettent de reprsenter les textes crits dans la plupart des langues
dEurope de lOuest, mme si, pour le franais, le a t oubli. Il manque toutefois
des lettres utilises par les langues dEurope de lEst, si bien quun autre format, le code
latin-2, a t propos pour ces langues. Ensuite, pour reprsenter les textes crits en
grec, russe, chinois, japonais, coren, etc., il a fallu proposer un format universel :
Unicode. Unicode recense prs de 110 000 caractres et associe un nom et un numro
chacun. A priori, ce numro se code sur 32 bits. Cependant, Unicode existe en plusieurs
dclinaisons, parmi lesquelles UTF-32, dans laquelle chaque caractre est ainsi exprim
sur 32 bits, et UTF-8, dans laquelle les caractres les plus courants sont exprims sur
8 bits et les moins courants sur 16, 32 ou 64 bits, utilisant une ide discute en dtail au
chapitre 12 propos de la notion de compression.

118 Groupe Eyrolles, 2013


8 Reprsenter des caractres et des textes

Le format UTF-8 a vocation devenir le standard, mais il ne lest pas encore :


malgr les efforts des comits de normalisation, lhumanit na pas encore russi se
doter dun format universellement accept, si bien quil est parfois ncessaire de tra-
duire un texte dUTF-8 en latin-1 ou de latin-2 en UTF-8. Quand cette traduction
nest pas bien faite, les caractres accentus sont remplacs par des caractres bizarres.
Cependant, tous ces formats reposent sur une mme ide : associer un nombre, cest--
dire un mot binaire, chaque caractre. Tous ces formats sont accessibles sur le Web.

La reprsentation des textes simples


Un texte tant une suite de caractres, on peut le reprsenter en crivant les carac-
tres les uns aprs les autres.

SAVOIR-FAIRE Trouver la reprsentation en ASCII binaire dun texte


En utilisant une table, on cherche le code ASCII de chaque caractre. Puis on traduit
chacun de ces nombres en reprsentation binaire.

Exercice 8.1 (avec corrig)


Trouver la reprsentation binaire en ASCII du texte Je pense, donc je suis.

On cherche la table des codes ASCII sur le Web de manire traduire le texte, caractre par
caractre : 74, 101, 32, 112, 101, 110, 115, 101, 44, 32, 100, 111, 110, 99, 32, 106, 101, 32,
115, 117, 105, 115, 46. On exprime ensuite chacun de ces nombres en binaire sur huit bits :
01001010 01100101 00100000 01110000 01100101 01101110 01110011
01100101 00101100 00100000 01100100 01101111 01101110 01100011
00100000 01101010 01100101 00100000 01110011 01110101 01101001
01110011 00101110.

Exercice 8.2
Trouver la reprsentation binaire en ASCII du texte Cet exercice est un peu fastidieux.

SAVOIR-FAIRE Dcoder un texte reprsent en ASCII binaire


On dcoupe la suite de bits en octets, on traduit chaque octet en dcimal, puis on cherche
en utilisant une table, le caractre exprim par chacun de ces nombres.

Groupe Eyrolles, 2013 119


Informatique et sciences du numrique

Exercice 8.3 (avec corrig)


Trouver le texte reprsent en ASCII binaire par la suite de bits
0100001100100111011001010111001101110100001000000110011001100001011000110110
10010110110001100101.

On commence par dcouper la suite de bits en octets : 01000011 00100111 01100101


01110011 01110100 00100000 01100110 01100001 01100011 01101001 01101100 01100101.
Chaque octet reprsente un nombre entier : 67, 39, 101, 115, 116, 32, 102, 97, 99, 105, 108,
101. On cherche ensuite la table des codes ASCII en ligne de manire traduire chacun de
ces nombres en une lettre : Cest facile .

Exercice 8.4
Trouver le texte reprsent en ASCII binaire par la suite de bits
001100000111010001100101011101000111010000110001.

Exercice 8.5
Traduire en ASCII binaire votre phrase prfre, par exemple : Le commencement de
toutes les sciences, cest ltonnement. en oubliant les accents. Traduire ensuite cette
phrase en UTF-8 avec les accents.

Exercice 8.6
Traduire une phrase en ASCII binaire, puis la passer son voisin qui la dcode.

Exercice 8.7
On suppose que les seize lettres qui suivent sont codes ainsi :

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Dcoder le message suivant : 1011 1100 1001 1111 0000 1010 1111 0111 1101 0110 0101
1111 0110 1100 1011 1110 1000, puis en se faisant ventuellement aider dune personne qui
lit larabe ou en utilisant le mcanisme de traduction de Google, dterminer sil correspond
la phrase tout en code binaire ou les lettres deviennent des nombres .

Exercice 8.8
On considre lalphabet de 32 signes constitu des 26 lettres de lalphabet, de lespace et de
cinq symboles de ponctuation : la virgule, le point, le point-virgule, le point dinterrogation et le
point dexclamation. On reprsente les caractres de cet alphabet par un code binaire de cinq
bits prsent dans le tableau suivant. Sur la dernire ligne, on a fait figurer la traduction dci-
male de chaque code binaire.

120 Groupe Eyrolles, 2013


8 Reprsenter des caractres et des textes

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , . ; ? !
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Quel est le troisime bit du code de la lettre P ?


Dcoder le message suivant : 00001011100110101001011101010010001.
crire son prnom avec ce code.
Quels sont les caractres qui commencent par deux 1 ?
Pourquoi ny a t-il pas de caractres en minuscule dans cet alphabet ?
On considre lopration qui consiste transformer les 0 en 1 et vice-versa dans chaque
caractre. Recopier et remplir le tableau ci-aprs qui, chaque caractre, associe le
caractre obtenu par cette transformation.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , . ; ? !
! ?

On considre lopration qui consiste changer le premier bit avec le dernier, et le


deuxime bit avec lavant-dernier ; recopier et remplir le tableau ci-aprs qui, chaque
caractre, associe le caractre obtenu par cette transformation.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , . ; ? !
A Q

ATTENTION Utiliser un code standard

Pour les exercices 8.7 et 8.8, on a invent un code valable exclusivement pour la
dure de lexercice. Pour partager des informations, il ne faut jamais faire cela, mais
utiliser un code standard, connu de tous. Sauf, bien sr, si on veut garder le texte
secret (voir le chapitre 12).

Exercice 8.9
Selon Pierre Lecomte du Noy, 01001100 01100101 00100000 01100010 01110101 01110100
00100000 01100100 01100101 00100000 01101100 01100001 00100000 01110011 01100011
01101001 01100101 01101110 01100011 01100101 00100000 01100101 01110011 01110100
00100000 01100100 01100101 00100000 01110000 01110010 01100101 01110110 01101111
01101001 01110010 00101100 00100000 00100000 01101110 01101111 01101110 00100000
01100100 01100101 00100000 01100011 01101111 01101101 01110000 01110010 01100101
01101110 01100100 01110010 01100101. tes-vous daccord avec lui ?

Groupe Eyrolles, 2013 121


Informatique et sciences du numrique

La reprsentation des textes enrichis


Les textes en ASCII ou en Unicode sont simplement des suites de caractres. Les di-
teurs de texte sont les logiciels qui manipulent ces suites de caractres. Toutefois, quand
on crit un texte, on peut souhaiter lui donner une forme spciale, plus jolie, plus lisible,
comme le fait un imprimeur. On peut jouer sur la police de caractres Times, Courier,
etc. , sur la taille des caractres 11 points, 12 points, etc. , sur leur forme romain,
italique, etc. , leur graisse maigre, gras, etc. On peut aussi souhaiter dcouper un texte
en chapitres et mettre en valeur les titres des chapitres, etc. Or, les seules caractristiques
que lon puisse exprimer avec un code comme le code ASCII, par exemple, sont la casse
dune lettre minuscule ou majuscule et le dcoupage en paragraphes, grce au sym-
bole retour chariot. Les traitements de texte sont les logiciels qui permettent ces mises en
pages plus labores.
Ceci a amen enrichir ces formats, de manire :
1 qualifier certaines parties du texte, par exemple en mettant certaines parties en
gras ou en italique,
2 structurer le texte en divisions : un texte nest pas uniquement une suite de para-
graphes, mais est hirarchis en parties, chapitres, sections, sous-sections, etc.
3 prsenter certaines informations sous forme de listes et de tables,
4 permettre de faire rfrence dautres textes,
5 donner des informations sur le texte : son titre, son ou ses auteur(s), sa date de
cration, sa langue, des mots-cls utiliss pour le rechercher parmi plusieurs
textes, etc. Ces informations sur le texte, et non du texte, sont appeles des mta-
donnes.
Toutes ces considrations sont, bien entendu, valables aussi bien pour les textes manus-
crits ou imprims que pour les textes traits par les ordinateurs.
Lun de ces formats enrichis, qui est utilis en particulier pour crire des pages web
est appel le format HTML. En HTML, pour mettre un passage en gras, on le dli-
mite par les balises <b> et </b> et pour le mettre en italique, on le dlimite par les
balises <i> et </i>. Ainsi le texte :
Ma <i>premire</i> page <b>web</b>

saffiche dans un navigateur :

Ma premire page web

Comme les parenthses, les balises vont par deux : on ouvre le passage mettre en
gras avec la balise <b> et on le ferme avec la balise </b>.

122 Groupe Eyrolles, 2013


8 Reprsenter des caractres et des textes

Une division du texte est dlimite par les balises <div> et </div>, ainsi le texte :
<div>Ma premire page web
<div> comporte une premire sous-division pour dire Bonjour tout le monde ! </
div>
<div> et une seconde qui finit par bientt ! </div>
</div>

saffichera dans le navigateur en rendant ces divisions explicites.


Comme les parenthses, les balises peuvent semboter les unes dans les autres, mais
pas se chevaucher.
On indique quun passage est un titre en le dlimitant par les balises <h1> et </h1> et que
cest un sous-titre en le dlimitant par les balises <h2> et </h2>.
De mme, les autres structurations du texte comme les numrations ou les tableaux
sont exprimes par dautres balises.
Quand on crit un texte, il est frquent de mentionner dautres textes : par exemple,
de parler dans une lettre dun livre que lon a lu. Dans le cas dun texte manuscrit ou
imprim, on donne en gnral une rfrence du texte cit, par exemple le titre du
livre et son auteur, afin que le lecteur puisse sy rfrer sil le souhaite. Quand on veut
exprimer, dans une page web, une rfrence une autre page, on peut faire mieux que
simplement indiquer ladresse de la page web en question (par exemple ladresse
http://fr.wikipedia.org/wiki/Hypertext_Markup_Language) ; on peut changer lapparence du pas-
sage o lon fait la rfrence, pour indiquer au lecteur que sil clique sur ce passage, le
navigateur affichera la page demande. On utilise pour cela les balises <a> et </a> : on
encadre la partie du texte qualifier par ces deux balises et on indique lintrieur de
la balise <a> ladresse de la page rfrence. Par exemple le texte :
Pour les dtails sur le langage HTML, on pourra consulter <a href = "http://
fr.wikipedia.org/wiki/Hypertext_Markup_Language">la page <i>Hypertext Markup
Language de Wikipdia</i></a>.

qui affiche dans un navigateur :


Pour les dtails sur le langage HTML, on pourra consulter la page Hypertext
MarkupLanguage de Wikipdia.
Si lon clique sur le passage en bleu et soulign, le navigateur affiche la page dont
ladresse est http://fr.wikipedia.org/wiki/Hypertext_Markup_Language. Un tel passage sur lequel on
peut cliquer pour accder une autre page sappelle un lien, et un texte qui contient au
moins un lien est un hypertexte.
Les balises <body> et </body> dlimitent le texte afficher dans le navigateur. On
indique avant ces informations les mta-donnes relatives la page : son titre, le
format utilis pour les lettres accentues, etc.

Groupe Eyrolles, 2013 123


Informatique et sciences du numrique

Voici, au bout du compte, un exemple de texte au format HTML :


<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
<title>Un exemple</title>
</head>

<body>
<h1>Un titre</h1>
<h2>Un sous-titre</h2>
<div><a href="http://www.wikipedia.org/">Un lien</a></div>
<div><b>Un passage important</b></div>
</body>
</html>

Len-tte situ entre les deux balises <head> et </head> indique dune part que le texte
est exprim en UTF-8, cest lobjet de la ligne :
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>

et dautre part que le titre de la page est Un exemple.

Le contenu est situ entre les balises <body> et </body>. On y retrouve les balises <b>,
</b>, <i>, </i>, <h1>, </h1>, <h2>, </h2>, <div>, </div>, <a> et </a> que lon a dcrites.
Dans un navigateur, le texte saffiche ainsi.

SAVOIR-FAIRE crire une page en HTML


crire le texte contenu dans cette page. Structurer ce texte en divisions. Identifier les titres
de parties, les passages mettre en gras, en italique, etc. et les rfrences vers dautres pages.
Ajouter les balises <body> et </body> autour du corps du texte, len-tte qui contient les
mta-donnes et terminer avec les balises <html> et </html>.

124 Groupe Eyrolles, 2013


8 Reprsenter des caractres et des textes

Exercice 8.10 (avec corrig)


crire une page HTML qui prsente les diffrents projets informatiques des lves dune
classe.

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
<title>Projets Ada Lovelace</title>
</head>

<body>
<h1>Les projets de la classe de TS1 du Lyce <a href = "http://
www.adalovelace.fr">Ada Lovelace</a></h1>
<div>
<a href="http://www.adalovelace.fr/informatique/ts1/projets/backgammon/
index.html">Un programme qui <b>joue aux Backgammon</b></a>
</div>
<div>
<a href="http://www.adalovelace.fr/informatique/ts1/projets/compression/
index.html">Un programme qui <b>compresse des images</b></a>
</div>
<div><a href="http://www.adalovelace.fr/informatique/ts1/projets/montecarlo/
index.html">Un programme qui <b>calcule des intgrales</b> sans peine</a>
</div>
</body>
</html>

Exercice 8.11
crire une page HTML qui prsente la liste des concerts et des spectacles prsents dans un
thtre.

Exercice 8.12
Changer le texte HTML Ma <i>premire</i> page web pour que le mot premire appa-
raisse non en italique, mais en gras.

Exercice 8.13
Ce texte HTML est incorrect. Comment le corriger ?

Il faut <i>comprendre/i> le codage des objets numriques pour les matriser.

Exercice 8.14
Dans ce texte, vers quel site web pointe le lien ?

Votre compte bancaire prsente une anomalie. Cliquer <a href="http://grosse-


arnaque.com">ici</a> pour avoir de l'aide.

Groupe Eyrolles, 2013 125


Informatique et sciences du numrique

Comment ce texte saffiche-t-il dans un navigateur ? Quel est lintrt de regarder le source
HTML de cette page avant de cliquer ?

Exercice 8.15
Donner le source HTML du texte suivant sachant que le texte en bleu et soulign est un lien
vers la page http://www.monlivre.fr/page2 :

On pourra consulter la page suivante.

126 Groupe Eyrolles, 2013


8 Reprsenter des caractres et des textes

Ai-je bien compris ?


Comment reprsente-t-on un caractre ?
Quelle est la diffrence entre le code ASCII et le format Unicode ?
Quelle est la diffrence entre le format Unicode et le format HTML ?

Groupe Eyrolles, 2013 127


9
Claude Shannon (1916-2001), a montr en 1949, en
sappuyant sur des travaux antrieurs de Harry Nyquist, que la
frquence dchantillonnage dun son, et plus gnralement
dun signal, doit tre au moins le double de la frquence
maximale contenue dans ce son, pour que le son puisse tre
restitu partir de lchantillon. Il a galement montr com-
ment dcrire les circuits lectroniques par des fonctions boo-
lennes (voir le chapitre 13) et comment exprimer toutes les
fonctions boolennes et arithmtiques laide des fonctions
boolennes lmentaires (voir le chapitre 10).
Reprsenter
des images
et des sons

Pour dcrire une image, commence par comprendre


comment il la voit.

Cest encore avec des 0 et des 1 que lon reprsente les images
et les sons, mais en grand nombre.
Pour dcrire une image, on peut utiliser une reprsentation
vectorielle en dcrivant des formes gomtriques : un cercle,
une droite, etc., ou une reprsentation bitmap en quadrillant
limage et en dcrivant chaque case (pixel). Noir et blanc,
niveaux de gris ou couleurs sont dcrits par diffrents
codages.
Les sons aussi sont chantillonns en dcoupant le temps
durant lequel le son est mis.
Les images et les sons sont de trs longues suites de 0 et de 1,
nous introduisons dans ce chapitre les units pour mesurer
la taille des fichiers.
Informatique et sciences du numrique

La reprsentation des images


Pour dcrire limage , une possibilit est de dire : cette image est forme dun
cercle . On peut mme tre plus prcis et indiquer les coordonnes du centre du
cercle et son rayon. Et, partir de cette description, nimporte qui pourrait reconsti-
tuer le dessin.
On peut donc reprsenter cette image par trois nombres : deux pour les coordonnes
du centre et un pour le rayon. Une image forme de plusieurs cercles serait de mme
dcrite par trois nombres pour chacun deux. On peut reprsenter dune manire
similaire un dessin form de cercles et de rectangles, en reprsentant chaque figure
par une lettre, c pour un cercle, r pour un rectangle, suivi dune suite de nom-
bres qui dfinissent les paramtres de la figure. On parle alors de reprsentation
symbolique, ou parfois de reprsentation vectorielle, dune image.
Nanmoins, cette mthode est peu pratique pour reprsenter limage .
Une autre mthode, qui a lavantage de pouvoir tre utilise sur nimporte quelle image,
consiste superposer un quadrillage limage .
Chacune des cases de ce quadrillage sappelle un pixel (picture element). On noircit
ensuite les pixels qui contiennent une portion de trait ().

Puis, il suffit dindiquer la couleur de chacun des pixels, en les lisant de gauche droite
et de haut en bas, comme un texte. Ce dessin se dcrit donc par une suite de mots
blanc ou noir . Comme seuls les mots noir ou blanc sont utiliss, on peut
tre plus conome et remplacer chacun de ces mots par un bit, par exemple 1 pour
noir et 0 pour blanc .
Le dessin ci-avant, avec une grille de 10 10, se dcrit alors par la suite de 100 bits :
00000000000011111100011000011001000000100100000010010000001001000000100110000110
00111111000000000000

Cette description est assez approximative, mais on peut la rendre plus prcise en utili-
sant un quadrillage, non plus de 10 10 pixels, mais de 100 100 pixels. partir de

130 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

quelques millions de pixels, notre il nest plus capable de faire la diffrence entre les
deux images. Cette manire de reprsenter une image sous la forme dune suite de
pixels, chacun exprim sur un bit, sappelle une bitmap. Cest une mthode approxima-
tive, mais universelle : nimporte quelle image en noir et blanc peut se dcrire ainsi.

La notion de format
Nous verrons au chapitre 11 que quand on stocke un texte, une image, un son, etc.
par exemple sur un disque, on le stocke dans un fichier. Pour le moment, nous avons
juste besoin de savoir quun fichier est un mot, cest--dire une suite de 0 et de 1,
auquel on a attribu un nom.
Si on trouve un fichier qui contient la suite de bits
0000000000001111110001100001100100000010010000001001000000100100000
010011000011000111111000000000000
il nest pas a priori vident que cette suite exprime une image de 10 10 pixels. Il pourrait
aussi sagir par exemple dun texte en ASCII, ou de la reprsentation dun nombre vir-
gule. Pour cette raison, au lieu dappeler le fichier simplement cercle, on lappelle
cercle.pbm. Cette extension pbm du nom indique que ce fichier est exprim dans le format
PBM (Portable BitMap). Ce format est lun des plus simples pour exprimer des images.
Un fichier au format PBM est un fichier en ASCII qui se compose comme suit :
les caractres P1, suivis dun retour la ligne ou dun espace,
la largeur de limage, en base dix, suivie dun retour la ligne ou dun espace,
la hauteur de limage, en base dix, suivie dun retour la ligne ou dun espace,
la liste des pixels, ligne par ligne, de haut en bas et de gauche droite les retours
la ligne et les espaces sont ignors dans cette partie.
En outre, aucune ligne ne doit dpasser 70 caractres et toutes les lignes commen-
ant par le caractre # sont des commentaires ignors (voir le chapitre 3). Ainsi, le
fichier ci-aprs est un fichier au format PBM. Bien entendu, le format PBM nest
que lun des multiples formats de fichiers dimages. Dautres exemples sont PGM,
PPM, PNG, JPEG, GIF, PS, PICT, TIFF, etc.
P1
# Mon premier fichier PBM : cercle
10 10
0000000000
0011111100
0110000110
0100000010

Groupe Eyrolles, 2013 131


Informatique et sciences du numrique

0100000010
0100000010
0100000010
0110000110
0011111100
0000000000

SAVOIR-FAIRE Identifier quelques formats dimages


Les diffrents formats qui permettent dexprimer des images se distinguent les uns des
autres par :
le type dimage : noir et blanc, en niveaux de gris, en couleurs, etc. ;
la manire dexprimer ces images : sous forme vectorielle ou de bitmap ;
le fait que ces images soient compresses ou non ;
le fait que le format soit public ou secret : certains formats sont publics, dautres sont
gards secrets par leurs concepteurs, de manire contraindre les utilisateurs utiliser
leurs logiciels pour traiter ces images ;
le fait que ces formats soient propritaires ou libres : pour utiliser certains formats, il est
ncessaire de payer des droits leurs concepteurs, alors que pour dautres non.

Exercice 9.1 (avec corrig)


Chercher sur le Web les caractristiques du format PBM.

Cest un format noir et blanc, bitmap, non compress, public et libre.

Exercice 9.2
Chercher sur le Web les caractristiques des formats GIF et PNG.

La reprsentation des images en niveaux


de gris et en couleurs
Certaines images, par exemple les photos en noir et blanc, utilisent, en plus du noir
et du blanc, diverses nuances de gris. On les appelle les images en niveaux de gris. Un
format, parmi dautres, pour exprimer ces images est le format PGM (Portable
GreyMap). Pour exprimer une image dans le format PGM, on choisit une valeur
maximale, par exemple 255, pour exprimer les niveaux de gris et on associe chaque
pixel un nombre compris entre 0 et 255, 0 indiquant que le pixel est noir et 255 quil

132 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

est blanc. Les valeurs de 1 254 expriment diffrentes teintes de gris, de la plus
fonce la plus claire. Un fichier au format PGM, ressemble beaucoup un fichier
au format PBM, cest un fichier en ASCII qui se compose comme suit :
les caractres P2, suivis dun retour la ligne ou dun espace,
la largeur de limage, suivie dun retour la ligne ou dun espace,
la hauteur de limage, suivie dun retour la ligne ou dun espace,
la valeur maximale utilise pour exprimer les niveaux de gris, suivie dun retour
la ligne ou dun espace,
la liste des couleurs des pixels, ligne par ligne, de haut en bas et de gauche
droite, spares par des retours la ligne ou des espaces.
Comme en PBM, aucune ligne ne doit dpasser 70 caractres et toutes les lignes
commenant par le caractre # sont ignores.
Pour comprendre comment reprsenter les images en couleurs, il faut dabord sint-
resser la manire dont notre il les peroit. Notre il contient des cellules, les cnes,
qui sont sensibles la couleur, cest--dire la longueur donde de la lumire quils
reoivent. Ces cnes sont de trois sortes, dont le maximum de sensibilit est respective-
ment dans le rouge (560 nm), le vert (530 nm) et le bleu (424 nm). Quand notre il
reoit une lumire monochrome mise par une ampoule jaune, les cnes sensibles au
rouge et au vert ragissent beaucoup et ceux sensibles au bleu un tout petit peu, exacte-
ment comme sil recevait un mlange de lumires mises par deux ampoules rouge et
verte. Ainsi, en mlangeant de la lumire produite par une ampoule rouge et une
ampoule verte, on peut donner lil la mme sensation que sil recevait une lumire
jaune. Plus gnralement, quelle que soit la lumire quil reoit, notre il ne commu-
nique notre cerveau quune information partielle : lintensit de la raction des cnes
sensibles au rouge, au vert et au bleu. Et deux lumires qui stimulent ces trois types de
cnes de manire identique sont indiscernables pour lil.
Ainsi, sur lcran dun ordinateur, chaque pixel est compos non dune, mais de trois
sources de lumire, rouge, verte et bleue ; en faisant varier lintensit de chacune de
ces sources, on peut simuler nimporte quelle couleur.
Par exemple, en mlangeant de la lumire verte et de la lumire bleue on obtient de la
lumire cyan. En mlangeant de la lumire rouge et de la lumire bleue on obtient de
la lumire magenta. Et en mlangeant de la lumire rouge et de la lumire verte on
obtient de la lumire jaune. Cyan est le nom savant dun bleu turquoise et
magenta celui dun rouge tirant un peu sur le violet.

Groupe Eyrolles, 2013 133


Informatique et sciences du numrique

Ce procd de reprsentation des couleurs dpend donc la fois de la physique de la


lumire et de la biologie de la vision : si, comme certains oiseaux, nous avions quatre
types de cnes, la physique de la lumire serait la mme, mais nous devrions cependant
concevoir des crans dans lesquels chaque pixel contient, non trois, mais quatre sources
lumineuses.
Un format, parmi dautres, pour exprimer ces images est le format PPM (Portable
PixMap). Pour exprimer une image dans ce format, on choisit une valeur maximale,
par exemple 255, pour exprimer lintensit des couleurs et on associe chaque pixel
trois nombres, lintensit en rouge, en vert et en bleu, chaque nombre tant compris
entre 0 et 255. Un fichier au format PPM, ressemble beaucoup un fichier au format
PBM ou PGM ; cest un fichier ASCII qui se compose comme suit :
les caractres P3, suivis dun retour la ligne ou dun espace,
la largeur de limage, suivie dun retour la ligne ou dun espace,
la hauteur de limage, suivie dun retour la ligne ou dun espace,
la valeur maximale utilise pour exprimer lintensit des couleurs,
la liste des valeurs des couleurs, trois par pixel, dans lordre rouge, vert, bleu, ligne
par ligne, de haut en bas et de gauche droite, spares par des retours la ligne
ou des espaces.
Comme en PBM et en PGM, aucune ligne ne doit dpasser 70 caractres et toutes les
lignes commenant par le caractre # sont ignores.
Par exemple, en mlangeant du rouge et du vert en quantits gales, on obtient du
jaune. En augmentant la quantit de rouge, par exemple rouge = 237, vert = 127,
bleu = 16, on obtient du orange. On peut alors crire un fichier PPM qui reprsente
un carr orange de 100 pixels sur 100 pixels, le triplet 237 127 16 devant tre rpt
dix mille fois, puisque limage est forme de dix mille pixels.
P3
# Mon premier fichier PPM : orange
100 100
255
237 127 16
237 127 16
237 127 16
237 127 16

Cet exemple aide comprendre pourquoi il y a des formats dimages plus complexes que
le format PPM : il y a de nombreux moyens dviter de recopier dix mille fois le mme
triplet de nombres. Cest ce que lon appelle compresser un fichier (voir le chapitre 12).

134 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

SAVOIR-FAIRE Numriser une image sous forme dun fichier


1 Identifier le type dimage numriser (noir et blanc, en niveaux de gris ou en couleurs) et
choisir un format appropri.
2 Identifier la valeur de chaque pixel.
3 Identifier les autres informations que contient le fichier : taille de limage, commen-
taires, etc. et la manire dont ces informations sont exprimes dans ce format.

Exercice 9.3 (avec corrig)


Lequel des formats PBM, PGM et PPM est adapt pour reprsenter un carr noir de
10 pixels sur 10 pixels ?
Mme question pour un carr rouge de mme taille.
Comparer les tailles des fichiers obtenus.

Pour un carr noir, le format PBM suffit, puisquil ny a ni niveaux de gris ni couleurs, et
le fichier est le suivant.

P1
# Un carr noir
10 10
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111

Pour un carr rouge, il faut obligatoirement recourir au format PPM, seul capable de
reprsenter de la couleur. Le rouge se reprsente par les trois nombres 255 0 0 : inten-
sit maximale pour le rouge et nulle pour le vert et le bleu. On obtient le fichier suivant.

P3
# Un carr rouge
10 10
255
255 0 0
255 0 0
255 0 0

(100 lignes identiques)

Le fichier reprsentant la seconde image est significativement plus gros que celui repr-
sentant la premire, puisquil faut indiquer trois octets par pixel, au lieu dun bit dans le
cas du fichier PBM.

Groupe Eyrolles, 2013 135


Informatique et sciences du numrique

Exercice 9.4
crire les fichiers de lexercice 9.3 dans un diteur de texte et les ouvrir avec un logiciel de
traitement dimages, par exemple Gimp. Attention, certains dessins sont petits, il peut tre
ncessaire de zoomer pour bien les voir.

Exercice 9.5
Rechercher des informations sur la structure des fichiers GIF.
Combien de bits occupe la reprsentation dun pixel dans ce format ?
Quelle information particulirement importante pour laffichage de limage le fichier
doit-il contenir et qui ntait pas prsente dans les formats PBM, PGM et PPM ?

Figure 91 Depuis Georges Seurat et Paul Signac, Figure 92 Logo de DansTonChat.com en pixel art
la fin du XIXe sicle, les artistes exploitent cette possi-
bilit surprenante de suggrer des images, avec des
taches monochromes. Ici un Mario en carrelage,
photographi rue au Pltre, Paris, en juillet 2011.

ALLER PLUS LOIN La synthse soustractive bleu et qui ne reflte rien : une encre noire, et non jaune.
Cest pour cela quen synthse soustractive, on doit
Les imprimantes galement simulent toutes les couleurs
utiliser trois encres telles que :
en mlangeant trois types dencre. Pourtant ces trois
encres ne sont pas rouge, vert et bleu, mais cyan, La premire absorbe le rouge et reflte le vert et le
magenta et jaune. Cela est d au fait que, contrairement bleu : lencre cyan.
un cran qui met de la lumire, une feuille de papier La deuxime absorbe le vert et reflte le rouge et le
ne fait que recevoir de la lumire blanche (cest--dire un bleu : lencre magenta.
mlange de lumires de toutes les couleurs), absorber La troisime absorbe le bleu et reflte le rouge et le
certaines couleurs et reflter les autres. Lencre rouge, par vert : lencre jaune.
exemple, absorbe le vert et le bleu et reflte le rouge. De Ce mme principe de synthse soustractive est celui
mme, lencre verte absorbe le rouge et le bleu et reflte quemploient les peintres pour obtenir toutes les cou-
le vert. Si on mlange de lencre rouge et de lencre verte, leurs en mlangeant, sur leur palette, trois couleurs
on obtient une encre qui absorbe le rouge, le vert et le primaires.

136 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

La reprsentation des sons


Un son est une variation de la pression de lair au cours du temps. Une manire
simple de reprsenter un son consiste lchantillonner, cest--dire mesurer la pres-
sion intervalles rguliers et le reprsenter comme la suite des mesures obtenues.
Lchantillonnage dun son est une mthode assez similaire au dcoupage dune
image en pixels, sauf que le dcoupage seffectue, non dans lespace, mais dans le
temps. Par exemple, si on chantillonne 44 000 Hz, cest--dire en faisant
44 000 mesures par seconde, une sinusode de frquence 440 Hz, on fait cent
mesures par priode et on obtient lchantillon suivant :

En revanche, si lon chantillonne 300 Hz cette mme sinusode, on fait une


mesure toutes les priodes et demie environ, et on obtient lchantillon suivant :

On comprend quil est possible de reconstituer la sinusode dans le premier cas, mais
non dans le second. De manire plus gnrale, on montre que quand on chantillonne
un son, il faut, pour que la reconstitution soit possible, une frquence dchantillonnage
au moins double de la frquence la plus leve contenue dans ce son.

Groupe Eyrolles, 2013 137


Informatique et sciences du numrique

ALLER PLUS LOIN La reprsentation des sons et la notation musicale

Cette manire de reprsenter les sons par chantillonnage se distingue de la notation musicale utilise depuis le
XIIIe sicle, qui permet de reprsenter la dure, la frquence et lintensit des notes de musique, chacune repr-
sente par un symbole sur une porte. Des systmes intermdiaires entre lchantillonnage et la notation musicale
existent aussi, comme le format MIDI (Musical Instrument Digital Interface) utilis pour reprsenter les
sons produits par les instruments de musique lectroniques.

En gnral, on chantillonne les sons 44 000 Hz, car le son sinusodal le plus aigu que
notre oreille peut entendre est de 22 000 Hz environ, ce qui implique que notre oreille
ne peut pas distinguer deux sons qui donnent le mme chantillon 44 000 Hz. Cette
frquence est relativement leve ; cest pourquoi il faut plusieurs millions de bits pour
reprsenter une minute de son et les fichiers audio sont souvent compresss (voir le
chapitre 12).
Cette mthode de reprsentation dun son par chantillonnage est utilise dans de
nombreux formats. Les plus simples sont RAW, WAV et BWF, mais il existe de
nombreux autres formats plus sophistiqus : MP3, WMA, AAC, etc. Comme pour
les images, ces formats se distinguent les uns des autres par la manire dont le son est
reprsent, par le fait quil soit compress ou non, que le format soit public ou secret
et propritaire ou libre.

ALLER PLUS LOIN La notation musicale et la musique contemporaine

La comparaison des diffrentes mthodes de reprsentation des sons permet de prendre conscience de leurs sp-
cificits. La notation musicale prsente lavantage, sur les formats RAW ou MP3, de pouvoir tre lue par un musi-
cien. En revanche, elle ne permet pas de reprsenter tous les sons. Il est par exemple impossible de reprsenter le
bruit dune locomotive ou dune porte qui grince en duo avec un flexaton. Si les musiciens baroques ne pouvaient
utiliser le bruit dune locomotive, si mme le barrissement dun lphant, dans lune de leurs compositions, les
magntophones, puis les instruments lectroniques, ont permis aux compositeurs contemporains de composer
des Nocturne aux chemins de fer et des Variations pour une porte et un soupir, qui mettent en vi-
dence certaines limites de la notation musicale.

La taille dun texte, dune image ou dun son


La taille dune suite de 0 et de 1, que cette suite reprsente un texte, une image ou un
son, sexprime soit en bits, soit en octets, un octet tant gal 8 bits. Par exemple, la
suite 0111 0001 0010 0111 a une taille de 16 bits, ou encore de 2 octets.
Comme les textes, les images et les sons sont souvent de longues suites ; on peut
exprimer leurs tailles en kilooctets, mgaoctets, gigaoctets ou traoctets. Comme en

138 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

physique, un kilo (k) est un millier (103), un mga (M) un million (106), un giga (G)
un milliard (109) et un tra (T) mille milliards (1012). Ainsi, une image dun
mgaoctet est forme de huit millions de bits. On utilise cependant souvent des pr-
fixes similaires qui expriment des nombres ronds, non en dcimal, mais en binaire :
un kilo (binaire) est 1 024 (210),
un mga (binaire) 1 048 576 (220),
un giga (binaire) 1 073 741 824 (230),
un tra (binaire) 1 099 511 627 776 (240).

ALLER PLUS LOIN Prfixes

Pour distinguer ces prfixes des prfixes dcimaux, certains ont propos dutiliser plutt les prfixes kibi (Ki),
mbi (Mi), gibi (Gi) et tbi (Ti). Ainsi un mgaoctet (Mo) serait 1 000 000 octets et un mbioctet (Mio)
1 048 576 octets. Ces prfixes sont malheureusement peu souvent utiliss.

SAVOIR-FAIRE Comprendre les tailles des donnes et les ordres de grandeurs


Trois quantits peuvent entrer en jeu dans la taille dun fichier de donnes :
1 le nombre de bits utilis pour reprsenter une unit de donne : pixel, caractre
alphanumrique, chantillon sonore, etc. ;
2 ventuellement, selon le format, la frquence dchantillonnage : nombre dchantillons
par seconde, de pixels par centimtre, etc. ;
3 la taille de lobjet dans une unit concrte : dure du son en secondes, surface de limage
en centimtres carrs, etc.

Exercice 9.6 (avec corrig)


On enregistre un son pendant 10 min avec 10 000 chantillons par seconde et 16 bits pour
chaque chantillon, sans compresser les donnes. Quelle est la taille du fichier ?

La taille du fichier est 10 60 10 000 16 bits = 96 000 000 bits, soit 91,55 mgabits
(binaire) environ.

Exercice 9.7
On enregistre une image 10 cm 10 cm, avec 100 pixels par centimtre, chaque pixel tant
reprsent par trois nombres entiers, chacun cod sur un octet. Quelle est la taille du
fichier ?

Exercice 9.8
Exprimer les capacits des exercices prcdents en mgabits dcimaux. Que constate-t-on ?
Ces presque 5 % de marge entre les capacits exprimes en dcimal et en binaire permet-
tent quelques constructeurs de gonfler un peu les capacits des disques ou des mmoires

Groupe Eyrolles, 2013 139


Informatique et sciences du numrique

quils vendent. Voil une raison de plus dtre vigilant quand on lit les donnes techniques
des produits que lon achte.

Exercice 9.9
Prendre une photo avec un petit appareil numrique, comme celui intgr un tlphone.
Observer la taille du fichier obtenu. Calculer la taille de limage aprs stre renseign sur le
nombre de pixels de lappareil et en supposant quun pixel est exprim sur trois octets.
Comparer la taille du fichier. En dduire le taux de compression.
Recommencer avec dix photos en prenant soin de prendre la fois des vues trs riches, avec
beaucoup de petits dtails, et des vues sans rien : une feuille blanche ou une photo sans
flash dans le noir. Comparer les taux de compression obtenus.

SAVOIR-FAIRE Choisir un format appropri par rapport un usage


ou un besoin, une qualit, des limites
Identifier les points suivants.
1 Les donnes doivent-elles tre stockes avec prcision ou un certain taux de perte est-il
acceptable ?
2 Quelle taille est acceptable pour le fichier ainsi cr ?
3 Quels logiciels devront pouvoir accder au fichier ?

Exercice 9.10 (avec corrig)


Pour une photographie de vacances, peut-on accepter un format avec perte ? Si on doit
envoyer cette photo dans un courrier lectronique, quelle est la taille maximale du fichier ?
Quels logiciels utiliseront les rcepteurs de cette image ?

Pour une photographie de vacances, on peut accepter une lgre perte. Si le fichier doit
transiter par courrier, sa taille est limite quelques mgaoctets chez la plupart des fournis-
seurs dadresses et il faut en gnral rechercher une taille moindre pour que le rcepteur du
fichier puisse y accder en un temps raisonnable. A priori, on ne sait pas quels logiciels
seront utiliss, il faut donc employer un format lisible par le plus grand nombre de logiciels
diffrents, par exemple un format libre.

Exercice 9.11
Pour une courbe reprsentant les rsultats dun TP de physique que lon souhaite prsenter
dans un expos, peut-on accepter un format avec perte ? Quelle est la taille maximale du
fichier ? Quels logiciels utilise-t-on pour lire cette image ?

Exercice 9.12
Ouvrir un logiciel de traitement dimages tel que Gimp et y charger une photo. Observer dans
le logiciel sa taille en mmoire en choisissant la fonction Proprit de limage dans le menu
Image. Cette taille en mmoire est le produit du nombre de pixels et de la taille des pixels. En

140 Groupe Eyrolles, 2013


9 Reprsenter des images et des sons

dduire la taille, en octets, de chaque pixel. Pour une photo en couleurs, le rsultat devrait
tre 3 octets. Toutefois, si le format de limage nest pas PPM, le rsultat peut tre diffrent.
Enregistrer cette image sous diffrents formats et diffrents niveaux de compression (voir
le chapitre 12). Comparer visuellement les rsultats obtenus. Observer si le taux de compres-
sion propos correspond bien au rapport des tailles des fichiers.

Ai-je bien compris ?


Quelles sont les deux principales manires de reprsenter une image ?
Comment reprsente-t-on un son ?
En quelle unit se mesure typiquement la taille dun son ou dune image ?

Groupe Eyrolles, 2013 141


10
Dans le Manoir de Bletchey Park, quartier gnral des services
de renseignement britanniques, Thomas Flowers (1905-
1998) a construit pendant la seconde guerre mondiale la
machine Colossus, premier calculateur lectronique utiliser
le systme binaire. Si cette machine ntait pas encore un ordi-
nateur, elle a cass les codes secrets (voir le chapitre 12) utiliss
par larme allemande et a t un lment essentiel dans la
victoire allie. Plusieurs milliers de personnes ont travaill
Bletchey Park, en particulier Alan Turing.
Les fonctions
boolennes

Pour un oui ou pour un non ? Oui ou non ?

Les fonctions boolennes sont utilises partout : dans les


langages de programmation, en architecture des ordinateurs,
dans certains algorithmes cryptographiques
Elles peuvent tre dcrites par des tables ou de manire
symbolique et nous montrons comment passer dune
reprsentation une autre.
Nous nous concentrons dans ce chapitre sur les fonctions non,
et et ou qui permettent dexprimer toutes les autres.
Informatique et sciences du numrique

Nous nous intressons, dans ce chapitre, aux fonctions boolennes, qui associent un
boolen, 0 ou 1, un ou plusieurs boolen(s).

Lexpression des fonctions boolennes


Comme les fonctions dune variable relle, les fonctions boolennes peuvent
sexprimer de manire symbolique : lexpression (non(x) et y) ou (x et z) est btie sur
le mme modle que lexpression (sin(x) y) + (x z), sauf que les variables x, y et z
y reprsentent des boolens et non des nombres rels.
En revanche, contrairement aux fonctions dune variable relle, ces fonctions ne peu-
vent pas sexprimer par des courbes. Nanmoins, elles peuvent sexprimer dune nou-
velle manire : par des tables car, la diffrence des nombres rels, les boolens sont
en nombre fini.

Les fonctions non, et, ou


Les fonctions non, et et ou sont dfinies par les tables suivantes.

non(x) et(x,y) ou(x,y)


x non(x) x y et(x,y) x y ou(x,y)
0 1 0 0 0 0 0 0
1 0 0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 1

T Notation

De mme que lon crit x + y le nombre que lon devrait, en toute rigueur, crire +(x,y), on crit souvent x et y
le boolen que lon devrait crire et(x,y).

Le nom de ces fonctions vient de la convention de lire 0 comme faux et 1 comme


vrai .
Ainsi, la fonction non transforme faux en vrai et vrai en faux : le boolen non(x)
est donc gal 1 si et seulement si x nest pas gal 1.
De mme, le boolen x et y est gal 1 si et seulement si x est gal 1 et y est gal 1.

144 Groupe Eyrolles, 2013


10 Les fonctions boolennes

Le boolen x ou y est gal 1 si et seulement si au moins x ou y est gal 1.


On remarquera que, quand x et y sont tous les deux gaux 1, x ou y est gal 1. Ce
ou est donc inclusif ; cest le ou qui apparat dans la phrase Je viendrai sil y a un bus
ou un mtro. et non le ou exclusif qui apparat dans la phrase Tu dois choisir : aller
la mer ou aller la montagne. Pour le distinguer du prcdent, ce ou exclusif sera
not oux.

Lexpression des fonctions boolennes avec


les fonctions non, et, ou
On peut exprimer de manire symbolique toutes les fonctions boolennes avec les
seules fonctions non, et et ou.
Avant de voir comment le faire dans le cas gnral, on commence par exprimer cinq
fonctions particulires, qui seront utilises dans la suite.
La premire est la fonction multiplexeur, mux. Cette fonction de {0,1}3 dans {0,1} est
telle que si x vaut 0, alors mux(x,y,z) vaut y et si x vaut 1, alors mux(x,y,z) vaut z. Elle
est dfinie par la table ci-aprs. Elle sexprime avec les fonctions non, et et ou, par
lexpression symbolique mux(x,y,z) = (non(x) et y) ou (x et z).

mux(x,y,z)
x y z mux(x,y,z)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1

Pour le montrer, on calcule ligne ligne la table de la fonction qui x, y et z associe


(non(x) et y) ou (x et z) en ajoutant des colonnes correspondant aux calculs interm-
diaires et on vrifie, ligne ligne, que cette table est celle de la fonction mux :

Groupe Eyrolles, 2013 145


Informatique et sciences du numrique

x y z non(x) non(x) et y x et z (non(x) et y) ou (x et z)


0 0 0 1 0 0 0
0 0 1 1 0 0 0
0 1 0 1 1 0 1
0 1 1 1 1 0 1
1 0 0 0 0 0 0
1 0 1 0 0 1 1
1 1 0 0 0 0 0
1 1 1 0 0 1 1

Les quatre autres cas particuliers sont les quatre fonctions de {0,1} dans {0,1} :
la fonction constante gale 0 () exprime, de manire symbolique, par
h(x) = x et non(x),
la fonction constante gale 1 () exprime par k(x) = x ou non(x),
l identit () exprime par i(x) = x, sans utiliser aucune fonction,
et la fonction non,


x h (x ) x k(x) x i (x )
0 0 0 1 0 0
1 0 1 1 1 1

qui peuvent donc toutes les quatre tre exprimes avec des fonctions non, et et ou.
On peut maintenant voir comment exprimer toutes les fonctions de {0,1}n dans {0,1}
avec les fonctions non, et et ou. On procde par rcurrence sur n.
Dans le cas n = 1, la fonction exprimer est lune des fonctions h, k, i et non, qui peu-
vent toutes sexprimer avec les fonctions non, et et ou.
On suppose maintenant que lon sait exprimer toutes les fonctions de {0,1}n dans
{0,1} avec les fonctions non, et et ou et on se donne une fonction f de {0,1}n+1 dans
{0,1}. On dfinit les fonctions g et g de {0,1}n dans {0,1} par :
g(x1, , xn) = f(x1,, xn,0)
g(x1,, xn) = f(x1,, xn,1)

et on remarque que la fonction f peut sexprimer de manire symbolique avec les


fonctions g, g et mux :
f(x1,, xn, xn+1) = mux(xn+1, g(x1,, xn), g(x1,, xn))

146 Groupe Eyrolles, 2013


10 Les fonctions boolennes

car, quand xn+1 vaut 0, le membre de gauche et le membre de droite sont tous les deux
gaux g(x1,, xn) et, quand xn+1 vaut 1, les deux membres sont gaux g(x1,, xn).
Par hypothse de rcurrence, on sait exprimer les deux fonctions g et g de manire
symbolique avec les fonctions non, et et ou, et comme on sait aussi exprimer la fonction
mux, on peut exprimer la fonction f en remplaant les fonctions mux, g et g par leur
expression en termes de non, et et ou.

SAVOIR-FAIRE Trouver une expression symbolique exprimant une fonction


partir de sa table
On identifie le nombre darguments de la fonction f. On extrait de la table de la fonction f
les tables des fonctions g et g dfinies par :
g(x1, , xn) = f(x1,, xn,0)
g(x1,, xn) = f(x1,, xn,1)
On trouve les expressions symboliques de ces deux fonctions et on construit celle de la
fonction f partir de ces deux expressions symboliques et de celle de la fonction multiplexeur.

Exercice 10.1 (avec corrig)


Trouver une expression symbolique exprimant une fonction ou exclusif (oux) dfinie par la
table ci-dessous.

x y x oux y
0 0 0
0 1 1
1 0 1
1 1 0

Le boolen x oux y est gal 1 si et seulement si x est gal 1 ou y est gal 1, mais pas les
deux.
Soit g la fonction dfinie par g(x) = x oux 0 et g la fonction dfinie par g(x) = x oux 1. La
table de la fonction g est et celle de la fonction g est .


x g(x) x g'(x)
0 0 0 1
1 1 1 0

On reconnat les tables de la fonction identit et de la fonction non. Donc g(x) = x et


g(x) = non(x), do on tire lexpression de la fonction oux :
x oux y = mux(y,x,non(x)) = (non(y) et x) ou (y et non(x))

Groupe Eyrolles, 2013 147


Informatique et sciences du numrique

Exercice 10.2
Trouver lexpression symbolique de la fonction de si et seulement si dfinie par la table
ci-dessous.

x y x ssi y
0 0 1
0 1 0
1 0 0
1 1 1

Lexpression des fonctions boolennes


avec les fonctions non et ou
On veut maintenant montrer quil est possible de se passer de la fonction et et que
toutes les fonctions boolennes peuvent sexprimer avec les fonctions non et ou. Pour
cela, il suffit de montrer que la fonction et elle-mme peut sexprimer ainsi. Cette fonc-
tion sexprime de la manire suivante :
x et y = non (non(x) ou non(y))
En effet, la table de la fonction qui x et y associe non (non(x) ou non(y)) se calcule
ligne ligne (voir ci-dessous) et on reconnat la table de la fonction et.

x y non (non(x) ou non(y))


0 0 0
0 1 0
1 0 0
1 1 1

Exercice 10.3
Montrer que :
x ou y = non (non(x) et non(y))
En dduire que toutes les fonctions boolennes peuvent sexprimer avec les fonctions non
et et.

Exercice 10.4
La fonction de Sheffer exprime lincompatibilit de deux valeurs boolennes. Elle est dfinie
par la table ci-dessous.

148 Groupe Eyrolles, 2013


10 Les fonctions boolennes

x y S (x,y)
0 0 1
0 1 1
1 0 1
1 1 0

Montrer que S(x, y) = non(x et y).


Montrer, rciproquement, que non(x) = S(x,x) et x ou y = S(S(x,x),S(y,y)). En dduire que toutes
les fonctions boolennes peuvent sexprimer avec la fonction de Sheffer uniquement.
Le choix dexprimer les fonctions avec les fonctions non et ou nest donc quun choix parmi
dautres.

Exercice 10.5
Quand deux interrupteurs sont en parallle, la lumire sallume quand lun deux est ferm.
Quand ils sont en srie, la lumire sallume quand les deux sont ferms. Quand ils sont en
va-et-vient la lumire sallume quand les deux sont ferms ou les deux sont ouverts. Donner
la table de la fonction boolenne dans ces trois cas et exprimer ces trois fonctions boo-
lennes avec les fonctions non et ou.

Exercice 10.6
Montrer que x et y = y et x. Est-ce la mme chose pour ou ? Calculer x et 1 et x et 0. On
appelle lment neutre dune fonction binaire f, un lment n tel que pour tout x,
f(x,n) = f(n,x) = x et lment absorbant un lment a tel que pour tout x, f(x,a) = f(a,x) = a.
La fonction et a-t-elle un lment neutre ? Et un lment absorbant ? La fonction ou a-t-
elle un lment neutre ? Et un lment absorbant ?

Exercice 10.7
Med est content si Bob et Jon sont tous les deux l, mais sans Rut, ou si Rut est l soit avec
Bob, soit avec Jon. Construire une table avec en entre la prsence de Rut, Bob et Jon et en
sortie le boolen qui vaut 1 si Med est content. Exprimer le choix de Med par une phrase
plus simple.

Exercice 10.8
Soit f une fonction qui sexprime de manire symbolique avec la fonction ou uniquement.
Montrer que f(0,0,,0) = 0. Montrer que la fonction non ne peut pas sexprimer avec la
fonction ou uniquement.

Ai-je bien compris ?


Quelles sont les deux principales manires de reprsenter une fonction boolenne ?
Quelle est la table de la fonction non ? Celle de la fonction et ? Celle de la fonction
ou ?
Quelles sont les fonctions de base partir desquelles il est possible de construire
toutes les autres fonctions ?

Groupe Eyrolles, 2013 149


11
En 1989, Tim Berners-Lee (1955-) a propos un outil aux
nombreux chercheurs de lOrganisation europenne pour la
recherche nuclaire (CERN) pour partager de grandes quan-
tits dinformations : insrer dans des textes des liens vers
dautres textes, situs sur dautres ordinateurs, auxquels on
accde travers le rseau Internet. Cette toile daraigne de
liens a vite trouv un nom : le Web. Tim Berners Lee est
lauteur du langage HTML et du premier navigateur : Nexus.
Structurer
linformation
C HAPITRE AVANC

Comment trouver son chemin


dans une jungle dinformations ?

Dans ce chapitre, nous voyons comment les informations


seffacent, se conservent, sorganisent, selon les usages que
nous voulons en faire, de la notion de fichier en arborescence
et de liens celle de base de donnes.
Nous insistons ici sur la notion de persistance des donnes
avec le danger de lhypermnsie et discutons les enjeux autour
de la gratuit de la copie ou diffusion de linformation.
Informatique et sciences du numrique

La persistance des donnes


Reprenons lide de crer, comme au chapitre 3, un programme de gestion dun
rpertoire. Cependant, au lieu dtre dcids une fois pour toutes au moment de
lcriture du programme, les noms et les numros de tlphone de ce rpertoire sont
entrs par lutilisateur du programme.
Par exemple :

a Alice 0606060606 3 On ajoute un numro.


Contact ajout
a Bob 0606060607 3 On ajoute un autre numro.
Contact ajout
i Alice 3 On interroge le rpertoire.
0606060606
q 3 On quitte le programme.

Le point auquel on va sintresser ici est que, quand on tape la commande q, le pro-
gramme se termine et les donnes entres sont perdues. Si on excute nouveau ce
programme, on doit nouveau entrer tous les contacts, ce qui nest pas en gnral ce
que lon souhaite faire quand on utilise un rpertoire : on souhaite que les donnes
soient persistantes, cest--dire quelles demeurent un endroit accessible quand le
programme se termine et mme quand on teint lordinateur sur lequel ce pro-
gramme est excut, voire quand on remplace cet ordinateur par un autre.
Cette question de la persistance des donnes se pose deux niveaux. Cest dabord
une question de matriel : les valeurs stockes dans les variables dun programme
sont physiquement stockes dans la mmoire de lordinateur (voir le chapitre 14) et
ces donnes sont perdues quand lordinateur est teint et que la mmoire cesse dtre
alimente en courant lectrique. Cela a men concevoir des priphriques, comme
les disques, ou les cls de mmoire flash, aussi appeles cls USB, qui peuvent stocker des
donnes de manire persistante. La persistance des donnes est ensuite une question
de programmation, puisquil faut tre capable, dans un programme, de stocker des
donnes sur un tel priphrique et dutiliser de telles donnes.

La notion de fichier
Un texte en ASCII ou en HTML, une image au format PBM, PGM ou PPM, un son
au format RAW ou MP3, un programme en Python ou en C, sont des exemples de
donnes que lon souhaite faire persister, par exemple en les stockant sur un disque.

152 Groupe Eyrolles, 2013


11 Structurer linformation

Un disque stocke simplement une suite de bits, une suite de 0 et de 1. Le nombre de bits
quun disque peut stocker est appel sa capacit : par exemple un disque dun traoctet
(binaire) peut stocker 240 mots de 8 bits, soit un peu plus de huit mille milliards de bits.
On peut donc facilement stocker un texte, une image, un son ou un programme sur un tel
disque. Cependant, comme on souhaite souvent stocker sur un disque plusieurs images,
textes, etc., il faut diviser les huit mille milliards de bits dont le disque est constitu en
plusieurs espaces plus petits, que lon appelle des fichiers. Un fichier est simplement une
suite de 0 et de 1, laquelle on associe un nom. Par exemple, on a vu que le texte Je
pense, donc je suis. se reprsente en ASCII comme la suite de 184 bits suivante :
01001010011001010010000001110000011001010110111001110011011001010010110000
10000001100100011011110110111001100011001000000110101001100101001000000111
001101110101011010010111001100101110

Il est possible de stocker cette suite de bits sur un disque en lui donnant le nom
cogito.txt, lextension txt indiquant que cette suite de bits exprime un texte en ASCII.
Lextension dtermine le type dinformation exprim (texte, image, son, etc.) et le format
utilis pour lexprimer.

Utiliser un fichier dans un programme


Pour revenir lexemple du rpertoire, on commence par stocker les contacts dans un
fichier repertoire.txt qui peut avoir t crit la main, en utilisant un diteur de
texte ou un logiciel de traitement de texte, ou t produit par un autre programme. Il
a la forme suivante :
Alice Djamel Guillaume Jrme
0606060606 0606060609 0606060612 0606060615
Bob tienne Hector
0606060607 0606060610 0606060613
Charles Frdrique Isabelle
0606060608 0606060611 0606060614

Le programme dinterrogation du rpertoire est semblable celui du chapitre 3, la diff-


rence prs que, au lieu de remplir les cases des listes nom et tel avec des constantes, on
transfre ces informations depuis le fichier repertoire.txt dans les listes nom et tel. Pour
cela, on utilise de nouvelles fonctions qui appartiennent une extension de Python appele
isn. Pour utiliser ces fonctions, il est ncessaire de se procurer le fichier isn.py sur la page
du livre sur le site de lditeur, http://www.editions-eyrolles.com, et de le mettre dans le mme
rpertoire que les programmes. La fonction readStringFromFile (lire une chane de
caractres dans un fichier) en tout point semblable la fonction input que lon a dj uti-

Groupe Eyrolles, 2013 153


Informatique et sciences du numrique

lise, sauf quau lieu dattendre quune chane de caractres soit tape au clavier, elle la lit
dans un fichier. Avant de pouvoir lire dans un fichier, il faut tablir un canal de communi-
cation avec lui ; cest ce que lon appelle ouvrir le fichier. Cela se fait avec la fonction
openIn qui prend en argument une chane de caractres, le nom du fichier, et qui retourne
le canal de communication lui-mme. Ensuite, la fonction readStringFromFile prend en
argument ce canal de communication et retourne la chane de caractres lue. Quand la lec-
ture est acheve, il faut fermer le canal de communication avec linstruction close.
En rsum, le programme commence par allouer deux listes nom et tel, ouvre un
canal de communication f avec le fichier repertoire.txt, lit les dix noms et les dix
numros de tlphone sur ce canal de communication, puis ferme ce canal.
from isn import *

nom = ["" for i in range(0,10)]


tel = ["" for i in range(0,10)]
f = openIn("repertoire.txt")
for i in range(0,10):
nom = readStringFromFile(f)
tel = readStringFromFile(f)
close(f)

La suite du programme est similaire au programme du chapitre 3. On demande un


nom lutilisateur, au clavier cette fois-ci, on recherche ce nom dans la liste nom laide
dune boucle while, et quand on la trouv, on affiche le numro de tlphone corres-
pondant.
s = input()
i = 0
while i < 10 and s != nom[i]:
i = i + 1
if i < 10:
print(tel[i])
else :
print("Inconnu")

On peut alors utiliser ce programme comme celui du chapitre 3 :


Hector
0606060613

Exercice 11.1
Que se passe-t-il si lon ouvre et ferme le fichier chaque lecture ?

Exercice 11.2
crire un programme de rpertoire invers, qui demande lutilisateur un numro de tl-
phone et recherche le nom associ.

154 Groupe Eyrolles, 2013


11 Structurer linformation

crire dans un fichier se fait de manire similaire : on ouvre le fichier avec linstruc-
tion openOut qui prend en argument une chane de caractres et qui retourne un canal
de communication. On crit dans le fichier avec linstruction
print(...,file=fichier) qui prend en argument un canal de communication et un
objet crire, chane de caractres, nombre entier ou nombre virgule, et on ferme le
canal de communication avec linstruction close.
Exercice 11.3
Adapter le programme, ci-avant, pour quil puisse enregistrer de nouveaux numros. Le
fichier sera entirement lu et rcrit chaque modification.

Organiser des fichiers en une arborescence


Quand un disque, ou une cl de mmoire flash, contient plusieurs fichiers, il est pos-
sible den afficher la liste. La manire la plus courante de le faire est de reprsenter
chaque fichier par une icne dans une fentre, la forme de licne variant en fonction
du format du fichier.

On peut aussi simplement afficher la liste des fichiers par ordre alphabtique avec,
dans une fentre terminal, une commande qui sappelle ls ou dir selon le systme
dexploitation.
ls
isn.py joconde.ppm repertoire.py repertoire.txt vinci.py

Dcouper un disque en fichiers nest toutefois pas suffisant, car il est probable que ce
disque contiendra rapidement plusieurs milliers de fichiers : des fichiers profession-

Groupe Eyrolles, 2013 155


Informatique et sciences du numrique

nels, comme les programmes que lon est en train ou que lon a termin de dve-
lopper, des fichiers personnels, comme des photos de vacances, etc. Il est donc
ncessaire dorganiser ces fichiers. Une manire de le faire est de regrouper ces der-
niers dans des dossiers ; par exemple, tous les fichiers professionnels dans un dossier
Pro et tous les fichiers personnels dans un dossier Perso. lintrieur du dossier Pro,
on peut encore regrouper tous les fichiers qui concernent ce cours dans un dossier
Informatique, tous les fichiers qui concernent le cours de physique dans un dossier
Physique, etc. lintrieur du dossier Informatique, on peut regrouper tous les fichiers
qui concernent le projet dcrire un programme de gestion de rpertoire dans un dos-
sier Rpertoire, etc. Si bien que le disque contient un dossier Pro, qui contient un dos-
sier Informatique, qui contient un dossier Rpertoire, qui contient enfin le fichier
repertoire.py, et dautres. On appelle une telle organisation des fichiers une organi-
sation arborescente, car on peut la visualiser sous la forme dun arbre.

Dans cet arbre, le chemin dun fichier est la liste des noms des nuds de la branche
qui va de la racine de larbre au fichier en question. Par exemple, le chemin du fichier
repertoire.py est /DISQUE/Pro/Informatique/Rpertoire/repertoire.py.

156 Groupe Eyrolles, 2013


11 Structurer linformation

SAVOIR-FAIRE Classer des fichiers sous la forme dune arborescence


Faire la liste des fichiers classer, les regrouper en catgories homognes, donner un nom
significatif chacune de ces catgories. ventuellement les regrouper elles-mmes en cat-
gories homognes. Crer les dossiers correspondant chacune de ces catgories. Mettre
chaque fichier dans le dossier appropri.

Exercice 11.4 (avec corrig)


Classer, sous la forme dune arborescence, les fichiers suivants :
des photos de vacances,
des photos de sa classe,
une page de tableur prsentant ses notes du trimestre,
des pages de Wikipdia prsentant des informations utiles pour son TPE,
des copies de mails personnels,
un fichier texte contenant les notes prises dans une runion prparatoire au conseil de
classe,
des fichiers de musique pour son baladeur,
des fichiers de musique tlchargs en prparation de son TPE.

On commence par donner un nom chacune de ces catgories : photos de vacances, photos
de classe, etc. On peut regrouper les dossiers contenant les photos de vacances, les mails per-
sonnels et les fichiers pour son baladeur, dans un dossier Perso, les photos de la classe et les
notes prises en runion dans un dossier Dlgu , puisque ces diffrentes informations sont
lies cette fonction, les pages de Wikipdia et la musique tlcharge pour le TPE peuvent
tre rassembles dans un dossier TPE, enfin on peut regrouper le dossier Dlgu, le dossier
TPE et les notes du trimestre dans un dossier Pro. On obtient alors larborescence suivante.

Groupe Eyrolles, 2013 157


Informatique et sciences du numrique

Exercice 11.5
Classer, sous la forme dune arborescence, les fichiers qui tranent dans son rpertoire per-
sonnel sur les ordinateurs du lyce.

Liens et hypertextes
Lorganisation arborescente des fichiers nest pas le seul moyen de structurer
linformation : elle est en concurrence avec dautres mthodes, parmi lesquelles luti-
lisation de liens hypertextes, notion qui na pas t invente pour structurer linforma-
tion, mais pour simplifier le mcanisme de rfrence dans une page web (voir le
chapitre 8).
Ainsi, une page web, crite au format HTML,
Le programme <a href =
"file:///DISQUE/Pro/Informatique/Rpertoire/repertoire.py">repertoire.py
</a> permet de rechercher un nom dans un rpertoire, exprim sous forme
d'un fichier texte, comme le fichier
<a href =
"file:///DISQUE/Pro/Informatique/Rpertoire/
repertoire.txt">repertoire.txt</a>.

visualise dans un navigateur, apparat de la manire suivante :

Le programme repertoire.py permet de rechercher un nom dans un rpertoire,


exprim sous forme dun fichier texte, comme le fichier repertoire.txt.

Et en cliquant sur lun des mots en bleu et souligns, on accde directement au


fichier repertoire.py ou au fichier repertoire.txt. Il est donc possible daccder
un fichier sans savoir prcisment o il se trouve dans larborescence, simplement en
cliquant sur un lien.
Cette remarque mne une autre manire dorganiser les fichiers sur un disque, o la
place du fichier dans larborescence est moins importante que la manire dy accder
en cliquant sur un lien qui apparat dans une page. Par exemple, au lieu de classer ses
photos dans plusieurs dossiers, Anniversaire, Londres, etc. on laisse ses photos en vrac
dans un dossier et on cre une page web pour accder ses photos danniversaire, une
autre pour accder aux photos de son voyage Londres, etc. et une page web qui
permet daccder chacune de ces pages. Cette ide est la base du Web, des logi-
ciels de gestion de photos ou de fichiers son et des rseaux sociaux.

158 Groupe Eyrolles, 2013


11 Structurer linformation

EN SAVOIR PLUS Structure darbre et structure de graphe

Cette mthode permet aussi de dpasser facilement les limites dun disque unique et de rfrencer des fichiers
qui se trouvent ailleurs sur le rseau. En outre, dans une structure arborescente, si le dossier B est un lment
du dossier A, le dossier A ne peut pas son tour tre un lment du dossier B. En revanche, avec des liens
hypertextes, rien nempche une page A de contenir un lien vers une page B, qui contient elle-mme un lien
vers la page A. une structure darbre se substitue donc une structure de graphe (voir le chapitre 22).

Lhypermnsie
La persistance des donnes, qui est souvent souhaite, a aussi quelques effets indsi-
rables. Par exemple, quand un ordinateur hors dusage est mis au grenier, son disque
continue contenir des milliers de textes, courriers, photos, etc. et il est possible que
cent ans plus tard, ces informations soient encore accessibles. Les ordinateurs sont
hypermnsiques : ils noublient rien. Souhaite-t-on rellement que ses petits enfants
puissent accder toutes ses photos, la liste des sites web que lon a visits, aux con-
versations que lon a eues sur le chat, aux mails que lon a changs, etc. ?
Bien entendu, ce phnomne dhypermnsie existait avant les ordinateurs : dans le
mme grenier, un album de photos ou une liasse de lettres manuscrites pouvaient
aussi voyager dans le temps. La diffrence est quun album de photos ou une liasse de
lettres se voit et contient peu dinformations. Un disque de un traoctet (binaire)
peut stocker 240 caractres, soit un million de livres de cinq cents pages, sans que lon
voie, au premier abord, ce quil contient.
Si lon ny prend garde, on ira peut-tre vers un monde dans lequel rien ne soubliera :
chaque geste laissera une trace dans tout tat postrieur du monde.
Cette hypermnsie des ordinateurs serait un problme facile rsoudre si les ordina-
teurs ntaient pas connects en rseau : chacun devrait simplement trier les informa-
tions quil souhaite garder et celles quil souhaite dtruire sur le disque de son
ordinateur. Nanmoins, comme les ordinateurs sont connects en rseaux, les cour-
riers changs peuvent aussi tre conservs par les fournisseurs de services de cour-
rier. Il en va de mme avec la liste des produits que lon achte et les magasins en
ligne, ou ceux dans lesquels on a une carte de fidlit, les images filmes par les
camras de surveillance et les entreprises qui installent et grent ces camras, etc.
Ces problmes, qui sont nouveaux, ont dj reu des solutions partielles, mais bien des
solutions sont encore inventer. Parmi elles, certaines sont individuelles : quand on met
une photo en ligne, on peut la protger par un mot de passe ou en restreindre laccs un
petit nombre de personnes ; ainsi elle ne sera pas archive par les moteurs de recherche.
Dautres sont collectives : par exemple, larticle 6 de la loi du 6 janvier 1978 (modifie

Groupe Eyrolles, 2013 159


Informatique et sciences du numrique

plusieurs fois) indique que des donnes caractre personnel ne peuvent tre conserves
sous une forme permettant lidentification des personnes concernes au-del de la dure
ncessaire aux finalits pour lesquelles elles ont t collectes.

SUJET DEXPOS Loi du 6 janvier 1978

Rechercher le texte de la loi du 6 janvier 1978 afin den prsenter les ides principales.

Alors que, dans les derniers millnaires, lhumanit a beaucoup cherch laisser des
traces de ses actions, elle commence juste prendre conscience de limportance quil
y a aussi parfois effacer certaines de ces traces.
Exercice 11.6
Chercher sur le Web la dfinition du droit loubli que certains cherchent promouvoir
comme un droit fondamental.

SUJET DEXPOS La CNIL

Prsenter la Commission nationale de linformatique et des liberts.

Pourquoi linformation est-elle souvent


gratuite ?
Si lon achte une pomme et si on la mange, cette pomme ne peut pas aussi tre
mange par quelquun dautre. De mme, si on achte un sac de charbon pour chauffer
sa maison, ce sac de charbon ne peut pas aussi chauffer la maison de quelquun dautre.
Et si lon achte les services dun jardinier pour tondre sa pelouse, ce jardinier ne peut
pas en mme temps tondre la pelouse de quelquun dautre. Une pomme, un sac de
charbon ou les services dun jardinier sont des biens dont la consommation par une
personne exclut la consommation par une autre. On dit que de tels biens sont rivaux.
Jusquau XXe sicle, presque tous les biens produits par lagriculture et lindustrie taient
rivaux et notre conomie, en particulier notre notion de proprit, est construite pour la
production, lchange et la consommation de tels biens.
Un fichier qui contient un texte, un morceau de musique, une image, une vido ou
un programme est, en revanche, un bien non rival. Recopier un tel fichier ou le dif-
fuser sur un rseau ne cote pratiquement rien, si bien que le fait quune personne
coute un morceau de musique nempche nullement une autre personne dcouter le
mme morceau. Linformation est, par nature, un bien non rival. Un livre, un CD,

160 Groupe Eyrolles, 2013


11 Structurer linformation

une photo, un DVD, un CD-ROM sont des biens rivaux, mais non un texte, une
pice de musique, une image, une vido ou un programme.
Si une mine produit un sac de charbon et le vend une personne qui lutilise pour
chauffer sa maison et quune seconde personne souhaite aussi acheter un sac de
charbon pour chauffer la sienne, la mine doit produire un second sac de charbon, ce
qui lui cote de largent. De ce fait, la mine na pas dautre choix que celui de vendre
ce sac de charbon la seconde personne. En revanche, si une entreprise produit une
vido pour une personne et quune seconde personne souhaite aussi regarder cette
vido, lentreprise peut, en thorie, donner cette vido gratuitement la seconde per-
sonne, car, une vido tant un bien non rival, cela ne cote rien de plus lentreprise
de laisser une seconde personne en profiter galement.
Ce raisonnement mne cependant un paradoxe : pourquoi le premier client paie-
rait-il la vido, sil sait quil lui suffit dattendre que quelquun dautre la paie pour
tre le second ? Au cours de lhistoire, les producteurs de biens non rivaux ont ima-
gin diffrentes manires de rpondre cette question.
Imiter le march des biens rivaux, cest--dire empcher les personnes qui ne le
paient pas de consommer un bien, mme si cela ne coterait rien de plus de les
laisser le consommer. Ainsi laccs certaines chanes de tlvision est interdit aux
personnes qui ne paient pas un abonnement, mme si laisser ces personnes
regarder ces chanes ne coterait rien de plus.
Faire payer chacun ce quil est prt payer pour ce bien. Cest par exemple le cas
de logiciels qui sont payants pour les entreprises, mais beaucoup moins chers pour
les particuliers, voire gratuits pour les tudiants.
Faire payer chacun ce quil souhaite payer. Cest le cas de certaines radios dans le
monde, qui sont gratuites mais rappellent frquemment lantenne que, si on ne
leur envoie pas un chque de temps en temps, elles finiront par fermer.
changer ce bien, non contre de largent, mais contre un bien dont tout le monde
dispose : du temps et de lattention. Cest la rponse des chanes de tlvision ou
des sites web qui sont gratuits, mais qui demandent leurs consommateurs
daccorder un peu de temps et dattention des publicits.
Distribuer un bien gratuitement, car cela cre de la demande pour un autre bien,
rival cette fois-ci. Ainsi, certaines entreprises distribuent un logiciel gratuitement,
mais font payer les cours pour apprendre sen servir.
Faire payer tout le monde, consommateur ou non, cest par exemple le cas des
chanes de tlvision publiques, qui sont payes par un impt spcial. Cest gale-
ment le cas du service des pompiers qui est pay par les impts.
Une dernire rponse est celles dentreprises qui dveloppent un logiciel pour leur
besoins propres et qui ensuite laissent tout le monde en profiter et aussi amliorer
ce logiciel, ce dont elles bnficient en retour.

Groupe Eyrolles, 2013 161


Informatique et sciences du numrique

Plusieurs de ces rponses mnent donc distribuer gratuitement des biens non rivaux, en
particulier de linformation, ce quil est impossible de faire avec des pommes, des sacs de
charbons ou les services dun jardinier qui, avant davoir un prix, ont un cot.

ALLER PLUS LOIN Les bases de donnes


Pour grer de grandes quantits de donnes, par exemple lensemble des rservations de billets de train ou
davion que doit grer une compagnie ferroviaire ou arienne, il nest pas possible dutiliser une simple struc-
ture arborescente ou base de liens hypertextes. On doit utiliser des outils plus sophistiqus : un systme de
gestion de bases de donnes et un langage de manipulation de donnes, comme le langage SQL.
Le rpertoire quon a construit ci-avant peut tre dfini comme un ensemble fini de couples forms dun nom et
dun numro de tlphone
R = {(nom = Alice ; tel = 0606060606),
(nom = Bob ; tel = 0606060607),
(nom = Charles ; tel = 0606060608),
(nom = Djamel ; tel = 0606060609),
(nom = tienne ; tel = 0606060610),
(nom = Frdrique ; tel = 0606060611),
(nom = Guillaume ; tel = 0606060612),
(nom = Hector ; tel = 0606060613),
(nom = Isabelle ; tel = 0606060614),
(nom = Jrme ; tel = 0606060615)}
Un tel ensemble de couples, de triplets ou, plus gnralement, de n-uplets, sappelle une relation et un
ensemble de relations sappelle une base de donnes.
Par exemple, si Alice, Bob, Charles, Djamel, tienne, Frdrique, Guillaume, Hector, Isabelle et Jrme sont musiciens,
outre la relation ci-avant qui indique le numro de tlphone de chacun, on peut dfinir une autre relation qui
indique les instruments dont chacun joue.
I = {(nom = Alice ; instrument = alto),
(nom = Bob ; instrument = contrebasse),
(nom = Charles ; instrument = cor),
(nom = Charles ; instrument = trompette),
(nom = Djamel ; instrument = piano),
(nom = tienne ; instrument = xylophone),
(nom = Frdrique ; instrument = harpe),
(nom = Guillaume ; instrument = basson),
(nom = Hector ; instrument = basson),
(nom = Hector ; instrument = contrebasson),
(nom = Isabelle ; instrument = hautbois),
(nom = Isabelle ; instrument = clarinette),
(nom = Jrme ; instrument = violon)}
et une autre qui indique la famille de chaque instrument
F = {(instrument = violon ; famille = cordes),
(instrument = hautbois ; famille = bois),
(instrument = clarinette ; famille = bois),
(instrument = xylophone ; famille = percussions), }
Lensemble de ces trois relations constitue une base de donnes.
Un systme de gestion de bases de donnes est un systme qui permet de crer de telles relations,
dajouter ou de retirer des n-uplets dans une relation et de rechercher des n-uplets. Pour cela, on formule des
requtes dans un langage de gestion de donnes.

162 Groupe Eyrolles, 2013


11 Structurer linformation

ALLER PLUS LOIN Les bases de donnes (suite)


Par exemple, on peut formuler la requte de chercher les instruments dont joue Hector, en cherchant les cou-
ples de la relation I dont la composante nom est Hector :
(nom = Hector ; instrument = basson)
(nom = Hector ; instrument = contrebasson)
On peut de mme chercher les joueurs de basson, en cherchant les couples de la relation I dont la composante
instrument est basson. On trouvera alors deux couples
(nom = Guillaume ; instrument = basson)
(nom = Hector ; instrument = basson)
On peut aussi fabriquer, partir des relations R et I, une nouvelle relation qui est un ensemble de triplets forms
dun nom, dun numro de tlphone et dun instrument. On appelle cela la jointure des relations R et I et il est
possible de chercher dedans comme dans les relations simples ; par exemple, on peut chercher ceux des triplets de
cette jointure dont la composante instrument est basson. On obtiendra ainsi deux triplets
(nom = Guillaume ; tel = 0606060612 ; instrument = basson)
(nom = Hector ; tel = 0606060613 ; instrument = basson)
ce qui est linformation dont on a besoin quand on cherche un bassoniste.
Quand on utilise un systme de gestion de bases de donnes, on exprime donc, dans un langage de haut niveau, des
requtes dont lexcution consulte et modifie des fichiers. Toutefois, il nest plus ncessaire de connatre la forme
exacte de ces fichiers, car on ny accde plus que par lintermdiaire du systme de gestion de bases de donnes.

ALLER PLUS LOIN Transformer, stocker et transmettre des informations

Lalgorithme de laddition en base deux (voir le chapitre 18) illustre une manire
dutiliser les ordinateurs pour transformer des informations : les informations 10 et
11 sont transformes en 101. Ce chapitre illustre quant lui une autre manire duti-
liser des ordinateurs, non pour transformer des informations, mais pour les stocker et
les retrouver plus tard. Une troisime utilisation des ordinateurs que nous aborde-
rons au chapitre 16 consiste transmettre des informations dun endroit un autre.
Les ordinateurs ont essentiellement t invents pour transformer des informations.
Le stockage et la transmission sont venus plus tard et ont apport avec eux de nou-
veaux problmes et de nouveaux algorithmes, par exemple pour interroger les bases
de donnes ou pour mettre jour des tables de routage (voir le chapitre 16).

Ai-je bien compris ?


Quelle est la diffrence entre une donne persistante et une donne non
persistante ?
Quels sont les diffrents moyens dorganiser les informations ?
Que signifie le mot hypermnsie ?

Groupe Eyrolles, 2013 163


12
Ronald Rivest (1947-), Adi Shamir (1952-) et Len Adleman
(1945-) ont conu, en 1978, une mthode de chiffrement, la
mthode RSA, fonde sur lutilisation de deux cls : une cl
prive et une cl publique. La mthode la plus rapide connue
ce jour pour retrouver la cl prive partir de la cl publique
est la dcomposition dun nombre entier en un produit de
facteurs premiers, calcul qui demande un temps trs long,
quand le nombre factoriser dpasse quelques milliers de
chiffres binaires.
Compresser,
corriger, chiffrer
C HAPITRE AVANC

Zhqm, zmgm, zmfm.


( Jules Csar, 47 av. J.-C.)

Nous voyons maintenant comment modifier lexpression


des donnes dans le but dconomiser de lespace, de corriger
des erreurs ou de les protger. Pour cela, nous utilisons
des formats beaucoup plus sophistiqus que ceux vus
aux chapitres 8 et 9.
Pour la compression, nous expliquons comment dfinir
un dictionnaire des mots utiliss et les coder selon leur
frquence. Pour dtecter et corriger les erreurs, nous
expliquons comment utiliser la redondance de linformation
et exploiter des bits de contrle de cohrence.
Pour le chiffrement, nous expliquons les mthodes cl
et introduisons les notions de cl publique et de cl prive.
Informatique et sciences du numrique

Pour reprsenter des informations, par exemple un texte, sous la forme dune suite
de 0 et de 1, nous avons prsent les formats standards, comme ASCII ou UTF-8
(voir le chapitre 8). Il est galement possible dutiliser un format particulier pour
rendre la suite de bits exprimant ces informations moins volumineuse, ou intelligible
mme en cas derreurs de transmissions, ou au contraire inintelligible, sauf pour son
destinataire. Un tel format sappelle un code.

Compresser
La phrase je pense, donc je suis. peut se reprsenter en ASCII par la suite 106,
101, 32, 112, 101, 110, 115, 101, 44, 32, 100, 111, 110, 99, 32, 106, 101, 32, 115,
117, 105, 115, 46 (voir le chapitre 8). Chacun de ces nombres est exprim sur 8 bits.
Il faut donc 23 8 = 184 bits pour reprsenter cette phrase en entier.

T DFINITION Compresser des informations

On appelle compresser des informations le fait de les exprimer sous la forme dune suite de bits, avec un code
choisi pour rendre cette suite aussi courte que possible.

Toutefois, seuls 13 symboles sont utiliss dans cette phrase : le c , le d , le e ,


le i , le j , le n , le o , le p , le s , le u , lespace, la virgule et le point.
On peut donc modifier le code, en reprsentant chaque symbole sur 4 bits et il ne
faut alors plus que 23 4 = 92 bits pour reprsenter cette phrase.
On peut faire encore mieux. Le mot je suivi dun espace est rpt deux fois dans
la phrase ; on peut donc reprsenter chaque symbole sur 4 bits, en convenant, de
plus, que le mot entier je suivi dun espace est reprsent galement par une suite
de 4 bits. Il suffit dsormais de 19 4 = 76 bits.
Cette ide est la base des mthodes de compression par dictionnaire. Un dictionnaire
est une fonction qui associe des suites de bits non pas des symboles isols, mais
des suites de symboles. La suite de bits associe par un dictionnaire une suite de
symboles est appele sa rfrence. Remplacer, dans un texte, chaque suite de symboles
par sa rfrence exprime donc ce texte en binaire, et remplacer chaque rfrence par
la suite laquelle elle est associe permet de retrouver le texte original. En associant
une rfrence aux suites longues et rptes dans le texte original, on obtient une
suite de bits plus courte que si on avait exprim le texte en binaire, caractre par
caractre.

166 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

ALLER PLUS LOIN Joindre le dictionnaire au message

Un dictionnaire tant construit sur mesure pour chaque message, il faut ladjoindre au message pour rendre la
lecture de ce dernier possible. Ce cot est cependant vite amorti quand le message est long.

On peut encore amliorer le rsultat en tirant parti des diffrences de frquence dappa-
rition des symboles et suites de symboles. En effet, dans la phrase je pense, donc je
suis. , le s est utilis 3 fois, le n , lespace, le e et la squence de symboles je
sont utiliss 2 fois chacun, tandis que le c , le d , le i , le o , le p , le u , la
virgule et le point sont utiliss 1 fois seulement. On peut donc rduire encore la taille du
message en utilisant des rfrences plus courtes pour les suites les plus frquentes et plus
longues pour les suites les plus rares, par exemple :
s : 000
c : 00100
d : 00101
i : 00110
o : 00111
e : 010
je : 011
p : 1000
u : 1001
, : 1010
. : 1011
n : 110
: 111
Ainsi, la phrase je pense, donc je suis. se reprsente par la suite de 69 bits
suivante : 01110000101100000101010111001010011111000100111011000100100
1100001011. Un code qui utilise ainsi des rfrences de longueurs diffrentes est
appel un code de Huffman.
Quand une suite de bits reprsente un texte en ASCII, la dcouper en symboles est
facile, puisque chaque symbole est reprsent sur huit bits. En revanche, quand les
symboles sont reprsents par des rfrences de longueurs diffrentes, la tche est
plus ardue. Par exemple, en Morse, o la lettre e se code par . et la lettre i
par .. , la suite .. peut ou bien reprsenter le message i ou bien le message
ee . On dit que le code de la lettre e est un prfixe de celui de la lettre i , car

Groupe Eyrolles, 2013 167


Informatique et sciences du numrique

cest le dbut du code de la lettre i . Le code Morse est donc ambigu et il est nces-
saire dutiliser un sparateur pour lever cette ambigut : .. pour i , et . / .
pour ee , ce qui a linconvnient dallonger la reprsentation du texte, alors quon
cherche prcisment la raccourcir.
Cependant, avec le code ci-avant, on peut se passer de sparateurs, car aucun sym-
bole na pour rfrence un prfixe de la rfrence dun autre symbole. Ainsi, quand on
dcode la suite 0111000010110000010101011100101001111100010011101100
01001001100001011 par exemple, aucun symbole nayant pour rfrence 0, 01, 0111
ou 01110, le premier symbole cod ne peut tre que je dont la rfrence est 011.
Une fois ce premier symbole dcod, on peut enlever sa rfrence de la suite de bits
dcoder et dcoder le symbole suivant : aucun symbole nayant pour rfrence 1, 10,
100 ou 10000, le deuxime symbole ne peut tre que p , dont la rfrence est 1000,
et ainsi de suite.
Exercice 12.1
Un indicatif tlphonique international est un indicatif que lon doit ajouter devant un
numro de tlphone, quand on appelle ce numro depuis un autre pays. Lindicatif de la
France est 33, celui de la Chine est 86, celui des tats-Unis 1, celui de Monaco 377, etc. Expli-
quer pourquoi le code dun pays nest jamais un prfixe du code dun autre pays.
Lutilisation de dictionnaires et de rfrences de longueurs diffrentes sont les deux
ides la base des algorithmes de compression les plus courants, comme ZIP utilis
par le logiciel gzip.

SAVOIR-FAIRE Utiliser un logiciel de compression


Il est judicieux de compresser un fichier quand :
ce fichier est de taille importante,
il nest pas dj dans un format compress, comme MP3,
il comporte beaucoup de rptitions, comme une image avec de grandes zones unies,
on na pas besoin dy accder souvent,
on doit stocker ce fichier dans un espace limit ou le transmettre travers un rseau
faible dbit.
On peut, par exemple, utiliser le logiciel gzip, distribu avec Linux. On compresse un
fichier fichier.txt avec la commande gzip fichier.txt ; le fichier fichier.txt est rem-
plac par le fichier fichier.txt.gz, que lon dcompresse avec la commande
gunzip fichier.txt.gz.

168 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

Exercice 12.2 (avec corrig)


Crer un fichier a.txt form de la lettre a rpte mille fois et un fichier alea.txt
form de mille lettres minuscules tires au hasard. Compresser ces deux fichiers avec le pro-
gramme gzip. Comparer les tailles des fichiers.

Le programme suivant affiche mille lettres tires au hasard.

from random import *


from math import *

for i in range(0,1000):
print(chr(floor(random() * 26) + 97),end = "")
print()

ls -l a.txt
1001
ls -l alea.txt
1001

gzip a.txt
gzip alea.txt

ls -l a.txt.gz
36
ls -l alea.txt.gz
652

Les deux fichiers a.txt et alea.txt ont la mme taille : 1 001 octets. En revanche, le pre-
mier se compresse en un fichier de 36 octets et le second en un fichier de 652 octets.

Exercice 12.3
Crer deux fichiers PGM, contenant des images de mme taille, lune unie et lautre ala-
toire. Compresser ces deux fichiers avec le programme gzip et comparer les tailles des
fichiers.

Exercice 12.4
On veut dterminer le type de fichiers textes sur lequel la mthode ZIP est la plus efficace.
La compression ZIP est-elle importante ou non sur un fichier contenant :
un texte littraire,
un extrait dannuaire tlphonique,
des caractres taps au hasard,
la liste des publicits diffuses sur une chane de tlvision pendant une journe,
un fichier trs court : quelques caractres seulement.
Crer ou rcuprer sur le Web de tels fichiers et tester ses prdictions laide dun logi-
ciel de compression, par exemple gzip.

Groupe Eyrolles, 2013 169


Informatique et sciences du numrique

Compresser avec perte


Les techniques de compression des informations prsentes ci-avant sont sans perte
dinformations : en dcompressant les informations compresses, on retrouve exacte-
ment les informations originales. Il existe dautres techniques de compression dites
avec perte dinformations : au prix dune infime diffrence entre les informations origi-
nales et les informations compresses puis dcompresses, on arrive un codage
moins volumineux encore.
Un exemple simple est celui dune image entirement blanche, lexception dun
pixel noir. Cette image peut tre approxime par une image entirement blanche :
lil nu, la diffrence est invisible et cette seconde image se laisse beaucoup mieux
compresser. Cette ide est utilise dans les algorithmes de compression usuels
comme JPG pour les images ou MP3 pour les sons.
Exercice 12.5
En utilisant le logiciel Gimp, ouvrir une image au format PNG compress sans perte, puis
lenregistrer au format JPG compress avec perte en qualit de 40 % (avec Enregistrer sous).
Ouvrir les deux images et les comparer lil nu. Voit-on des diffrences ? Ouvrir ensuite
en tant que calques les deux images au format JPG et PNG. Dans le mode de calques, par
dfaut rgl Normal, choisir maintenant le mode Diffrence , qui compare les deux images
en affichant la valeur absolue de la diffrence de la valeur de chaque pixel dune image et
de lautre. Quobserve-t-on ? Effectuer la mme manipulation en comparant limage au
format PNG et limage au format JPG avec une qualit 20, puis une qualit 90. Observer
comment la taille du fichier JPG varie et comment la diffrence avec limage au format PNG
augmente ou diminue.

Exercice 12.6
Un exemple courant de compression des informations est lutilisation de la moyenne pour
compresser la suite de notes dun lve au cours dun trimestre. Cette compression est-elle
avec ou sans perte ? Quels sont les avantages et inconvnients de cette mthode ? Proposer
des mthodes de compression alternatives qui attnuent ces inconvnients.

Corriger
Les rseaux transportent de grandes quantits dinformations des centaines de
traoctets par seconde et les mmoires, DVD, BluRay, disques, mmoire flash, per-
mettent souvent de stocker des traoctets. Avec de telles quantits dinformations, il
est invitable que se produisent quelques erreurs dues au bruit sur la ligne de transmis-
sion, des rayures dusure sur un disque ou des composants lectroniques dfaillants.
Cest pourquoi des algorithmes pour dtecter et corriger ces erreurs ont t invents.

170 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

Une mthode simple pour dtecter et corriger une erreur dans une suite de bits est dy
introduire une forme de redondance, en rptant chacun des bits plusieurs fois. Ainsi, au
lieu de transmettre sur un rseau la suite de bits 10110110, on transmet la suite de bits
111000111111000111111000, o chaque bit est rpt trois fois. Pour retrouver le
message original, il suffit de lire les bits reus trois par trois, en remplaant les triplets
000 par des 0 et les triplets 111 par des 1. Si lun des triplets reu nest ni 111 ni 000,
par exemple si cest 010 ou 001, on peut tre certain quune erreur sest glisse. On peut
mme corriger lerreur : les 0 tant majoritaires, le triplet original tait sans doute 000,
et lon peut interprter le triplet 010 ou 001 par 0. Ce code permet donc de dtecter et
corriger toutes les erreurs, condition quil y ait au plus une erreur par triplet. En
revanche, si plusieurs erreurs sont commises sur le mme triplet, elles peuvent passer
inaperues ou tre mal corriges. Cette mthode fonctionne donc bien, mais elle est
coteuse car la longueur du message est triple.

T Code correcteur derreurs

On appelle code correcteur derreurs un code qui permet de retrouver les informations codes mme en cas
derreurs de transmission, de lecture ou dcriture.

Dans certains cas, dtecter les erreurs sans les corriger est suffisant. Par exemple,
quand on transmet un message sur un rseau, la machine qui reoit le message a sou-
vent la possibilit de le redemander celle qui la envoy, sil est erron. Une manire
peu coteuse pour dtecter des erreurs dans une suite de bits transmise est dajouter
un bit de contrle tous les 100 bits transmis, indiquant si le nombre de 1 dans ce
paquet de 100 bits est pair (0) ou impair (1). La longueur des messages est ainsi aug-
mente de 1 % seulement. Si une erreur se produit lors de la transmission des
101 bits, cest--dire si un 0 est remplac par un 1, ou un 1 par un 0, la parit du
nombre de 1 est change et lerreur est dtecte. En revanche, si deux erreurs se pro-
duisent dans la mme suite de 101 bits, elles passeront inaperues.

ALLER PLUS LOIN Longueur des suites

Plutt que des suites de 100 bits, on peut utiliser des suites de 10 bits ou de 1 000 bits. Plus la suite est longue,
plus la mthode est conome, mais plus la probabilit de voir deux erreurs se produire dans la mme suite, et
donc passer inaperues, est leve.

Dans dautres cas, il est ncessaire de corriger les erreurs. Par exemple, quand on lit un
DVD et que lon dtecte une erreur, on veut pouvoir la corriger au vol et non demander
au spectateur daller acheter un autre DVD pour voir la fin du film. Une mthode de
correction des erreurs moins coteuse que le triplement des bits dcrit ci-avant consiste

Groupe Eyrolles, 2013 171


Informatique et sciences du numrique

ajouter seulement 20 bits de contrle tous les 100 bits, de la manire suivante : on
organise le paquet de 100 bits en une liste de 10 lignes sur 10 colonnes et on ajoute un
bit de contrle par ligne et un bit de contrle par colonne, soit 20 bits au total. Ce bit
indique simplement si le nombre de 1 dans la ligne ou la colonne est pair ou impair.
Quand on reoit le message, si on dtecte une erreur dans la ligne l et une erreur dans la
colonne c, on sait que le bit erron est celui qui se trouve dans la liste la ligne l et la
colonne c ; il suffit, pour corriger le message, de remplacer ce bit par un 1 si cest un 0
ou par un 0 si cest un 1. Si on dtecte une erreur dans une ligne, mais aucune erreur
dans les colonnes, ou le contraire, cest que lerreur porte sur le bit de contrle lui-
mme et il ny a donc rien corriger dans le message. Cette mthode demande donc
dallonger le message de 20 % et elle permet de corriger toutes les erreurs condition
quune erreur au plus se produise dans chaque suite de 120 bits.
Exercice 12.7
On utilise la mthode dcrite prcdemment pour transmettre 16 bits. Par exemple, pour
transmettre le message 0011010111010111 on construit la liste :

Colonne de contrle
0 0 1 1 0
0 1 0 1 0
1 1 0 1 1
0 1 1 1 1
Ligne de contrle 1 1 0 0

et on transmet la suite 0011010111010111 0011 1100.


De combien de bits de contrle a-t-on besoin ?
Montrer que si on reoit le message 00?10?0111010?11 001?1100, o les ? reprsentent
des bits inintelligibles, il est possible de reconstituer entirement les donnes qui ont t
envoyes, y compris les bits de contrle.
Est-il possible de reconstituer le message original si on reoit la squence suivante :
0??10?0111010?11001?1100 ?
Montrer que le message suivant : 101001111001001000010100, transmis suivant la mme
mthode, est incohrent. Expliquer cette incohrence. Comment y remdier ?

172 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

Chiffrer
Une mthode pour protger les informations contre les actions dune personne mal-
veillante qui veut y accder alors quelles ne lui sont pas destines consiste les chiffrer.

T Sret et scurit

Dans la section prcdente, nous avons prsent des mthodes qui permettent de protger les informations
contre des erreurs accidentelles. Cela sappelle augmenter la sret des informations, cest--dire la pro-
tger des erreurs involontaires, telles les erreurs de transmission. linverse, on cherche dans cette section
augmenter la scurit des informations, cest--dire la protger contre laction de personnes mal-
veillantes.

T Chiffrer

On appelle chiffrer des informations le fait de les exprimer sous la forme dune suite de bits, avec un code
choisi pour rendre cette suite aussi inintelligible que possible, sauf pour son destinataire.

Cette ide de chiffrement est ancienne puisquon sait que Jules Csar avait dj mis au
point un algorithme pour transmettre des ordres ses armes de manire secrte. Pour
cela, il utilisait le code de Csar, qui consistait remplacer chaque lettre dun message par
celle situe trois lettres plus loin dans lalphabet : les a taient replacs par des d ,
les b par des e , etc. Ainsi Veni, vidi, vici se chiffrait en Zhqm, zmgm,
zmfm attention, il ny a pas de j , de u , ni de w en latin.
Cette mthode nest en fait pas trs bonne. Dune part, une fois quon la connat, on
peut dchiffrer tous les messages trs simplement. Dautre part, mme si on ne con-
nat pas la correspondance entre les lettres, celle-ci est facile deviner, car la fr-
quence des lettres, dans une langue donne, est peu prs constante dun texte un
autre. Ainsi, si le message est en franais, il suffit de remarquer que la lettre h est
la plus frquente dans les messages chiffrs pour deviner que cette lettre est le code
de la lettre e , lettre la plus frquente en franais.
Des mthodes plus robustes ont donc t dveloppes. Une delles est la mthode du
masque jetable, dans laquelle les deux interlocuteurs se mettent daccord, avant
dchanger un message, sur une cl qui dfinit les bits du message que lexpditeur lais-
sera identiques et ceux quil inversera, cest--dire remplacera par un 1 si cest un 0 ou
par un 0 si cest un 1. Par exemple, pour changer un message long de huit bits, les
interlocuteurs se mettent daccord sur le fait que lexpditeur le chiffrera en inversant le
premier, le deuxime, le troisime, le septime et le huitime bit et en laissant les autres
inchangs. Ainsi le message 01101101 sera chiffr en 10001110. Le rcepteur du mes-

Groupe Eyrolles, 2013 173


Informatique et sciences du numrique

sage, connaissant lui aussi la cl, naura qu inverser les mmes bits pour retrouver le
message original : 01101101.
La cl qui indique quels bits laisser en ltat et quels bits inverser est elle-mme
exprime par une suite de bits : 0 signifiant quon laisse le bit inchang et 1 indiquant
quon linverse. Ainsi, la cl ci-avant sexprime par la suite de bits : 11100011. Une
cl, dans cette mthode, sappelle aussi un masque. Chiffrer le message consiste
effectuer un ou exclusif, bit bit, entre le message et le masque. En effet, effectuer un
ou exclusif entre un bit du message et un 0 du masque laisse ce bit inchang
(0 oux 0 = 0, 1 oux 0 = 1) et effectuer un ou exclusif entre un bit du message et un 1
du masque inverse ce bit (0 oux 1 = 1, 1 oux 1 = 0). Cette mme opration permet de
retrouver le message original partir du message chiffr.
Cette mthode a t employe par les diplomates et les services secrets depuis le
dbut du XXe sicle, mais elle prsente plusieurs inconvnients. Le premier est que le
masque doit avoir la mme longueur que le message lui-mme, il doit tre complte-
ment alatoire et il ne doit jamais tre rutilis, do le nom de masque jetable. Cette
mthode demande donc de fabriquer des masques alatoires de trs grande taille, ce
qui est plus difficile quil ny parat. Un second problme est que ce masque doit tre
secrtement chang entre les interlocuteurs, avant la transmission du message, ce
qui est difficile. Si une personne malveillante arrive intercepter un masque au cours
de cet change, elle pourra dchiffrer les messages changs.
Cela a men la conception de mthodes alternatives qui ne reposent pas sur
lchange pralable dune cl secrte entre les interlocuteurs : les mthodes cl
publique cl prive.
Une mtaphore aide saisir le principe de ces mthodes : deux personnes, lexpditeur
et le destinataire, souhaitent changer un message confidentiel, mais elles nont pas la
possibilit de se mettre daccord au pralable sur une cl secrte. Une possibilit est que
le destinataire envoie par la poste lexpditeur un cadenas ouvert dont il garde la cl.
Lexpditeur met son message dans une bote, quil ferme avec le cadenas reu, et
envoie cette bote au destinataire, qui na plus qu ouvrir le cadenas avec la cl quil a
garde. aucun moment, il ne sest spar de la cl, si bien que ni le facteur, ni per-
sonne lexception du destinataire, na le moyen douvrir la bote. Le message reste
donc confidentiel, si lon est certain que le cadenas utilis est bien celui du destinataire.
Le fait de pouvoir fermer un cadenas sans avoir la cl qui permet de louvrir est ce qui
permet cette mthode de fonctionner. Les mthodes cl publique cl prive
reposent sur un mcanisme similaire : la possibilit de chiffrer un message sans dis-
poser de la cl qui permet de le dchiffrer.

174 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

Une telle mthode recourt deux cls : une cl publique, diffuse tous par le destina-
taire pour le chiffrement des messages, et une cl prive, quil garde secrte, permet-
tant de les dchiffrer. On peut schmatiser ce mcanisme ainsi :

Le destinataire : Lexpditeur :
envoie la cl publique
chiffre son message avec cette cl publique
envoie le message chiffr
reoit le message chiffr
et le dchiffre avec la cl prive

La mthode cl publique cl prive la plus utilise est la mthode RSA, qui doit
son nom celui de ses inventeurs : Rivest, Shamir et Adleman. Dans cette mthode,
la cl prive est formes de trois nombres, d, e et n tels que pour tout entier w inf-
rieur n, (we % n)d % n = w, o lopration % est le reste de la division euclidienne.
La cl publique correspondante est forme des nombres e et n uniquement.
Un message transmettre est dabord exprim sous la forme dune suite de bits, que
lon interprte comme un nombre entier w, infrieur n. Lexpditeur le chiffre en
w = we % n, puis envoie ce message chiffr w au destinataire, qui le dchiffre en cal-
culant w d % n, qui est donc gal (we % n)d % n, cest--dire w, le message ori-
ginal. Pour chiffrer un message, lexpditeur na pas besoin de connatre la cl prive,
car le nombre d nest utilis que dans la phase de dchiffrement.
Si une personne malveillante a accs aux nombres e et n et un message chiffr w,
elle peut essayer de dduire d de e et n ou directement trouver un nombre w tel que
we % n = w. Lun et lautre de ces calculs sont possibles, mais ils sont trs longs, pour
peu que e et n soient assez grands. Les mthodes les plus rapides que lon connaisse
aujourdhui demandent plusieurs annes de calcul, quand n est de lordre de quelques
milliers de chiffres binaires.
Les mthodes cl publique cl prive sont donc, en thorie, dun niveau de scu-
rit infrieur aux mthodes cls secrtes : quand on connat la mthode de chiffre-
ment et un message chiffr w, on peut, en thorie, essayer de chiffrer tous les
messages w possibles, jusqu en trouver un qui se code en w. Toutefois, cela
demande en pratique un temps de calcul norme. Cest donc un inconvnient ngli-
geable cot de lavantage que prsente le fait de ne pas avoir besoin dchanger
secrtement une cl.

Groupe Eyrolles, 2013 175


Informatique et sciences du numrique

ALLER PLUS LOIN Construire une cl RSA


Pour construire une cl RSA, il suffit de choisir deux nombres premiers et distincts p
et q, par exemple p = 3017642249 et q = 6644055791. On choisit ensuite un nombre d
premier avec (p - 1) (q - 1), par exemple d = 2596516757 et un nombre e tel que
(e d) % ((p - 1) (q - 1)) = 1, par exemple e = 35661169403325998333. On pose ensuite
n = pq, dans cet exemple n = 20049383459634713959. La cl prive est forme des
nombres, d, e et n et la cl publique des nombres e et n uniquement.
On dmontre alors que pour tout entier w infrieur n, (we % n)d % n = w. Pour cela,
on montre que wed w est un multiple de p, en utilisant le petit thorme de Fermat :
si p est un nombre premier et w un nombre qui nest pas un multiple de p alors wp-
1 % p = 1. La dmonstration ne demande que quelques lignes. On montre de mme

que wed w est un multiple de q. Comme p et q sont deux nombres premiers et diff-
rents, wed w est un multiple de n = pq. Donc wed % n = w, cest--dire
(we % n)d % n = w.
La mthode connue la plus rapide pour dchiffrer un message, quand on ne connat
pas la cl prive, consiste la dduire de la cl publique en factorisant le nombre n en
un produit de deux nombres premiers, on obtient ainsi p et q, donc (p - 1) (q - 1), puis
en connaissant (p - 1) (q - 1) et e, on peut retrouver d. Toutefois, factoriser un nombre
de quelques milliers de chiffres binaires demande plusieurs annes de calcul.

ALLER PLUS LOIN Authentifier


Les mthodes cl publique cl prive permettent aussi une autorit dauthentifier
un utilisateur, cest--dire de vrifier son identit. Pour cela, il lui suffit de dtenir la
cl publique de la personne authentifier et de vrifier quelle dtient bien sa cl
prive en lui faisant dcoder un message.

Lutilisateur : Lautorit :
dtient la cl prive ; dtient la cl publique ;
demande tre authentifi ;
fabrique un message ;
chiffre ce message avec la cl publique ;
envoie le message ;
dchiffre le message avec la cl prive ;
envoie le message de test dcod ; vrifie si le message de test a t dchiffr.

On voit donc ici que seul un utilisateur qui dtient la cl prive peut dchiffrer le mes-
sage de test, ce qui garantit lauthentification, si on fait lhypothse que la cl
publique utilise est bien celle de lutilisateur, et non celle dun imposteur.

176 Groupe Eyrolles, 2013


12 Compresser, corriger, chiffrer

Exercice 12.8
Utiliser la mthode du masque jetable pour transmettre un nombre 4 chiffres son voisin.

Exercice 12.9
Que se passerait-il si on dcouvrait un algorithme rapide pour factoriser un nombre entier
en un produit de nombres premiers ?

Exercice 12.10
Pour retirer de largent avec une carte de retrait, on doit entrer un code secret compris
entre 0000 et 9999 et la carte est avale au bout de trois erreurs : quelle est la probabilit
de russir utiliser une carte sans en avoir le code ? Et si on pouvait, au bout de deux essais,
aller essayer la carte dans un autre distributeur ?

Exercice 12.11
Pour retirer de largent avec une carte de retrait, on doit entrer un code secret compris
entre 0000 et 9999. On suppose que lon peut essayer autant de codes que lon veut, mais
avec un dlai de 1 s entre le premier et le deuxime essai, 10 s entre le deuxime et le troi-
sime, 100 s entre le troisime et le quatrime, etc. Au bout de combien de temps est-on sr
de pouvoir trouver le code ? Quel est le temps moyen pour le trouver ? Cette mthode est
utilise pour protger les serveurs contre les attaques par des logiciels qui testent tous les
mots de passe possibles pour sauthentifier.

Exercice 12.12
Expliquer la mthode dauthentification prsente dans lencadr, avec la mtaphore du
cadenas, qui fait office de cl publique, et sa cl prive.

Exercice 12.13
Dans un univers imaginaire, Acha est la seule personne savoir factoriser lexpression
x2 + a x + b, mais tout le monde sait dvelopper lexpression (x - u) (x - v). Imaginer une
mthode qui permet Acha de recevoir dune autre personne des messages chiffrs. Cette
mthode permet-elle Acha denvoyer des messages chiffrs ? Permet-elle lauthentifica-
tion dAcha ou des autres personnes de ce monde imaginaire ?

Ai-je bien compris ?


Quest-ce que compresser des informations ?
Quest-ce quun code correcteur derreurs ?
Quest-ce que chiffrer des informations ?

Groupe Eyrolles, 2013 177


TROISIME PARTIE

Machines
Dans cette troisime partie, nous voyons que derrire les
informations, il y a toujours des objets matriels :
ordinateurs, rseaux, robots, etc. Les premiers ingrdients
de ces machines sont des portes boolennes (chapitre 13)
qui ralisent les fonctions boolennes vues au chapitre 10.
Ces portes demandent tre compltes par dautres
circuits, comme les mmoires et les horloges, qui
introduisent une dimension temporelle (chapitre 14).
Nous dcouvrons comment fonctionnent ces machines
que nous utilisons tous les jours (chapitre 15). Nous
verrons que les rseaux, comme les oignons, sorganisent
en couches (chapitre 16*). Et nous dcouvrons enfin les
entrailles des robots, que nous apprenons commander
(chapitre 17*).
13
Frances Allen (1932-) est une pionnire de la paralllisation
automatique des programmes, cest--dire de la transforma-
tion de programmes destins tre excuts sur un ordinateur
squentiel contenant un unique processeur en des pro-
grammes destins tre utiliss sur un ordinateur parallle
contenant plusieurs processeurs. Elle est aussi lorigine de
nouvelles mthodes, fondes sur la thorie des graphes, pour
optimiser les programmes. Elle a reu le prix Turing en 2006
pour ces travaux.
Les portes
boolennes

Au commencement tait le transistor,


puis nous crmes les portes boolennes
et, la fin de la journe, les ordinateurs.

Dans ce chapitre, nous voyons de quoi sont faits


les ordinateurs lchelle microscopique. Nous partons
du transistor et construisons successivement des circuits non
et ou qui vont nous permettre ensuite de construire les circuits
de toutes les fonctions boolennes, comme nous lavons
vu au chapitre 10.
Informatique et sciences du numrique

Nous connaissons des algorithmes depuis plus de quatre mille ans, pourtant nous
navons pas cherch les exprimer dans des langages de programmation avant le
milieu du XXe sicle. Cest en effet seulement ce moment que les progrs de llec-
tronique nous ont permis de construire les premiers ordinateurs. La construction de
ces machines a donc eu un effet important sur la manire dont nous concevons
aujourdhui les notions dalgorithme, de langage et dinformation.

Le circuit NON
Comme beaucoup de systmes complexes, un ordinateur peut se dcrire de nom-
breuses chelles. lchelle la plus petite, un ordinateur est un assemblage de tran-
sistors. Un transistor est un circuit lectronique trois fils appels le drain, la source et
la grille. La rsistance entre le drain et la source est ou bien trs petite ou bien trs
grande en fonction de la tension applique entre la grille et la source. Quand cette
tension est infrieure un certain seuil, cette rsistance est trs grande, on dit que le
transistor est bloqu ; quand la tension est suprieure ce seuil, la rsistance est trs
petite, on dit que le transistor est passant.

ALLER PLUS LOIN Les circuits CMOS

Dans ce livre nous utilisons un seul type de transistors appels N-Mos. On construit aujourdhui plus souvent
des circuits qui utilisent deux types de transistors N-Mos et P-Mos, afin de minimiser la consommation dlec-
tricit et la production de chaleur.

Avec un transistor, une rsistance et un gnrateur dont la tension est suprieure au


seuil de basculement du transistor, on peut construire le circuit .

Si on applique entre le point A et le point O une tension infrieure au seuil de bascule-


ment du transistor, celui-ci est bloqu et le circuit est quivalent au circuit , si bien

182 Groupe Eyrolles, 2013


13 Les portes boolennes

que la tension entre les points B et O est gale la tension dalimentation. Elle est donc
suprieure au seuil de basculement. Si, en revanche, on applique entre les points A et O
une tension suprieure au seuil de basculement du transistor, celui-ci est passant et le
circuit est quivalent au circuit , si bien que la tension entre les points B et O est
nulle. Elle est donc infrieure au seuil de basculement.

Si on dcide quune tension infrieure au seuil de basculement reprsente le bit 0 et


quune tension suprieure ce seuil reprsente le bit 1, les deux remarques prc-
dentes se reformulent ainsi : si on donne au circuit le bit 0 en A, il donne le bit 1
en B ; si on lui donne le bit 1 en A, il donne le bit 0 en B. Autrement dit, ce circuit
calcule une fonction boolenne : la fonction non.

Le circuit OU
Le circuit est construit selon les mmes principes, mais il a deux entres A et B.

Si on donne aux deux entres A et B le bit 0, les deux transistors dans la partie gauche
du circuit sont bloqus, si bien que la tension entre les points C et O est gale la

Groupe Eyrolles, 2013 183


Informatique et sciences du numrique

tension dalimentation, suprieure au seuil de basculement. Le transistor de droite


est donc passant et la tension entre les points D et O est nulle ; autrement dit le
point D est dans ltat 0.
Si on donne lune ou lautre des entres A et B le bit 1, au moins lun des deux transis-
tors dans la partie gauche du circuit est passant, si bien que la tension entre les points C
et O est nulle. Le transistor de droite est donc bloqu et la tension entre D et O est
gale la tension dalimentation. Le point D est par consquent dans ltat 1.
La table de ce circuit est donc
A B D
0 0 0
0 1 1
1 0 1
1 1 1

o lon reconnat la table de la fonction ou.


On peut schmatiser ces circuits de manire plus succincte en remplaant le morceau de
dessin reprsentant le transistor et la rsistance encadrs dans la figure par un simple
rectangle () et en remplaant de mme le morceau de dessin reprsentant les trois
transistors et les deux rsistances encadrs dans la figure par un rectangle ().

184 Groupe Eyrolles, 2013


13 Les portes boolennes

On arrive ainsi une reprsentation, un autre niveau, du mme circuit.

Quelques autres portes boolennes


Les circuits non et ou sappellent des portes boolennes ou parfois des portes logiques.
Dans ce chapitre et le suivant, on constitue petit petit une bote outils de circuits
rutilisables pour concevoir des circuits plus sophistiqus. Les portes non et ou sont
les deux premiers lments de cette bote outils.
Bien souvent, quand on reprsente un circuit, on ne dessine pas le gnrateur : il est
implicite que chaque porte est alimente. On obtient alors une troisime manire de
reprsenter les circuits o le circuit est reprsent comme sur le schma .

Exercice 13.1 (avec corrig)


Quelle est la table du circuit suivant ?

Groupe Eyrolles, 2013 185


Informatique et sciences du numrique

Si on donne lune ou lautre des entres A et B le bit 1, au moins lun des deux transistors
dans la partie gauche du circuit est passant, si bien que le point C est dans ltat 0. Sinon le
point C est dans ltat 1.
La table de ce circuit est donc la suivante.

A B C
0 0 1
0 1 0
1 0 0
1 1 0

Il sagit de la table de la fonction boolenne qui A et B associe non (A ou B).

Exercice 13.2 (avec corrig)


Quelle est la table du circuit suivant ? Est-ce la table dune fonction boolenne connue ?

La table de ce circuit est :

186 Groupe Eyrolles, 2013


13 Les portes boolennes

A B C
0 0 0
0 1 0
1 0 0
1 1 1

Cest celle de la fonction boolenne et.

Exercice 13.3
Construire un circuit ralisant la fonction boolenne ou exclusif, vue au chapitre 10.
En plus des portes ou et non, on a dsormais dans sa bote outils les portes et et oux :

Exercice 13.4 (avec corrig)


Construire un circuit ralisant la fonction multiplexeur vue au chapitre 10.

La fonction multiplexeur peut se dfinir par mux (A, B, C) = (non (A) et B) ou (A et C). Un
circuit, parmi dautres, ralisant cette fonction est donc :

On peut dsormais utiliser directement le circuit suivant, dont lunique sortie transmet la
valeur de B ou de C selon la valeur de A :

Groupe Eyrolles, 2013 187


Informatique et sciences du numrique

Exercice 13.5 (avec corrig)


Construire le circuit ralisant le calcul de la fonction Cout dfinie par la table :

A B Cin Cout
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

Quelle est cette fonction ?


On utilise la mthode de dcomposition par multiplexage (voir le chapitre 10). La fonction
Cout (Cin, A, B) scrit mux (Cin, g (A, B), g (A, B)), avec g (A, B) et g (A, B) dfinies par les
tables ci-dessous :

g (A, B) g (A, B)
A B g A B g'
0 0 0 0 0 0
0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 1

On reconnat les tables des fonctions et et ou, respectivement. Si bien que Cout (A, B ,
Cin) = mux (Cin, A et B, A ou B).
Un circuit calculant cette fonction est donc :

188 Groupe Eyrolles, 2013


13 Les portes boolennes

Cette fonction est la fonction chiffre des deuzaines de A + B + Cin, qui sert au calcul de la
retenue dans lalgorithme de laddition (voir le chapitre 18). Ce circuit porte le nom de
Carry out (retenue sortante).

Exercice 13.6
Construire un circuit ralisant les oprations calculant la fonction chiffre des units de
A + B + Cin (voir le chapitre 18). Construire un circuit additionneur un bit qui prend en
entre deux nombres de un bit et donne en sortie leur somme, sur deux bits.
Construire un circuit quatre entres et trois sorties, qui ajoute deux nombres exprims sur
deux bits.
Construire un circuit seize entres et neuf sorties qui ajoute deux nombres binaires de huit
bits.

Exercice 13.7
Construire un circuit 9 entres A0 A7 et D et 8 sorties B0 B7 telles que :
lorsque D = 0, Bi = Ai pour i compris entre 0 et 7,
lorsque D = 1, Bi = Ai-1 pour i compris entre 1 et 7 et B0 = 0.
Quand D = 1, ce circuit ralise un dcalage gauche dun nombre exprim en binaire sur
huit bits, ce qui correspond la multiplication par 2 de ce nombre. Dans cette multiplica-
tion, le chiffre le plus gauche, A7, est oubli afin de faire tenir le rsultat sur huit bits.

Exercice 13.8
Construire un circuit 11 entres A0 A7 et D0 D2 et 8 sorties B0 B7 telles que Bi = Ai-d
pour i entre d et 7 et Bi = 0 pour i entre 0 et (d - 1), o d est le nombre entre 0 et 7 reprsent
en binaire par D0 D2. Ce circuit ralise un dcalage gauche de d bits dun nombre binaire
de huit bits, ce qui correspond la multiplication par 2d. Ce circuit est un composant impor-
tant dun circuit ralisant une multiplication binaire.

lissue de ce chapitre, on dispose donc, parmi dautres, des circuits boolens sui-
vants dans sa bote outils :
les portes boolennes non, ou, et et oux,
le multiplexeur mux,
des additionneurs de nombres de diffrentes tailles,
des multiplieurs par 2 et par 2d.

Groupe Eyrolles, 2013 189


Informatique et sciences du numrique

ALLER PLUS LOIN Penser les systmes complexes

Au cours de ce chapitre, nous sommes partis dune manire de dcrire des circuits forms de transistors et de
rsistances pour, peu peu, faire merger une autre manire de dcrire certains de ces circuits, sous la forme
dassemblages de portes boolennes. Comme chaque porte est constitue de plusieurs composants lectroni-
ques, cette description sous la forme dun assemblage de portes boolennes est une description plus
grande chelle que celle sous forme de transistors et de rsistances. Une question se pose alors : peut-on
concevoir des circuits en assemblant des portes boolennes et en ignorant compltement la manire dont ces
portes sont ralises avec des transistors ?
Cette question demande une rponse nuance : comprendre la fois lchelle des portes boolennes et celle
des transistors permet parfois de raliser des circuits plus petits, donc moins chers et plus rapides. Par exemple,
si on veut construire un circuit qui ralise lopration boolenne qui A et B associe non (A ou B) et si lon
sait uniquement associer des portes boolennes, on construira le circuit suivant

qui, in fine, utilise quatre transistors, trois pour la porte ou et un pour la porte non. Si, en revanche, on sait
aussi comment ces portes sont construites avec des transistors, on peut remarquer que le circuit

qui ne comporte que deux transistors, convient. Raisonner une petite chelle permet donc dconomiser deux
transistors. Il est souvent utile, quand on raisonne une chelle donne, de faire une incursion lchelle inf-
rieure ou lchelle suprieure.
Cela dit, il y a aussi des avantages construire des circuits avec des portes boolennes en ignorant, ou en fei-
gnant dignorer, les chelles infrieures. Par exemple, les portes boolennes sont aujourdhui fabriques avec
des transistors mais, par le pass, elles ont t fabriques avec dautres composants : des relais, des tubes
vide, etc. et il est possible que, dans le futur, elles soient ralises avec dautres composants, aujourdhui non
encore invents. Raisonner lchelle des portes boolennes, sans prendre en compte la manire dont elles
sont fabriques, permet de conserver la mme organisation des circuits lchelle des portes, mme quand la
manire dont ces portes sont fabriques change.
De plus, il est illusoire desprer penser simultanment un systme aussi complexe quun ordinateur toutes
les chelles. Sil est donc, bien entendu, utile davoir une culture gnrale qui donne une ide de la manire
dont un ordinateur se dcrit toutes les chelles, il est aussi souvent ncessaire de savoir penser une chelle
unique, en ignorant, ou en feignant dignorer, la manire dont les composants que lon assemble sont fabri-
qus. Ainsi, aux chapitres 14 et 15, on construira des circuits de plus en plus labors en rutilisant les circuits
prcdents comme de nouveaux composants.

190 Groupe Eyrolles, 2013


13 Les portes boolennes

ALLER PLUS LOIN Qui a invent lordinateur ?

Contrairement la pnicilline, il est trs difficile de dire qui a invent lordinateur.


Sans remonter aux machines calculer du XVIIe sicle de Wilhelm Schickard, Blaise Pascal, Gottfried Wilhelm
Leibniz, etc., ou la machine analytique imagine au XIXe sicle par Charles Babbage, lapparition de lordina-
teur a t prpare par une grande crativit dans le domaine de la construction de machines la fin du
XIXe sicle et au dbut du XXe sicle, avec, par exemple, la machine recensement de Herman Hollerith cons-
truite en 1889 ou lanalyseur diffrentiel de Harold Locke Hazen et Vannevar Bush construit entre 1928 et
1931, qui taient dj des machines polyvalentes.
La notion duniversalit a t dfinie mathmatiquement en 1936 par Alonzo Church et Alan Turing et il
semble que la premire machine universelle ait t le Z3, construite en 1941 par Konrad Zuse, mme si on ne
sen est rendu compte qua posteriori. La premire machine lectronique utiliser le binaire semble avoir t
la machine Colossus, construite par Thomas Flowers au cours de la seconde guerre mondiale, mais cette
machine ntait pas universelle. La premire machine conue pour tre universelle fut sans doute lENIAC,
construite en 1946 par John Mauchly, Presper Eckert et John Von Neumann. Pour certains nanmoins, ce ntait
pas encore un ordinateur, son programme ntant pas enregistr dans la mmoire. La premire machine pro-
gramme enregistr a sans doute t la machine Baby, construite Manchester en 1948 par Frederic Williams,
Tom Kilburn et Geoff Tootill.
Il semble donc difficile dattribuer linvention de lordinateur un inventeur unique. Il y a plutt eu un foisonne-
ment dinnovations de la fin des annes trente au dbut des annes cinquante qui, chacune sa manire, ont
contribu linvention de lordinateur.

Ai-je bien compris ?


Comment raliser une porte non avec des transistors ?
Comment raliser une porte ou avec des transistors ?
Est-il ncessaire de savoir raliser une porte non et une porte ou avec des tran-
sistors pour les assembler en des circuits plus complexes ?

Groupe Eyrolles, 2013 191


14
Otto Schmitt (1913-1998) est un pionnier du gnie biom-
dical. En 1934, en tudiant la propagation de linflux ner-
veux dans les nerfs des calmars, il a compris quun circuit en
boucle ferme positive cest--dire dans lequel la sortie
est connecte lentre, sans inversion de valeur avait
deux tats stables et pouvait donc tre utilis pour mmo-
riser une grandeur. En lectronique, une bascule de Schmitt
est une forme de circuit bistable, qui utilise cette ide de
boucle ferme positive.
Le temps
et la mmoire

Le temps est ce qui permet dviter


de tout faire en mme temps.

Dans ce chapitre, nous voyons comment les circuits


lectroniques prennent le temps en compte. Nous voyons
dabord comment fabriquer un circuit mmoire.
Puis, comment un circuit particulier, lhorloge,
permet de synchroniser tous les autres.
Informatique et sciences du numrique

Les circuits que nous avons vus au chapitre 13, par exemple le circuit

ont des entres (deux gauche sur la figure) et des sorties (une droite sur la figure)
et ltat des sorties est dtermin par celui des entres. Dans cet exemple, la sortie est
dans ltat 1 quand les deux entres sont dans ltat 1 et elle est dans ltat 0 quand au
moins lune des entres est dans ltat 0. Ltat des sorties un instant donn dpend
de ltat des entres ce mme instant, mais pas de ltat des entres une seconde ou
une minute plus tt. Un tel circuit, qui ignore le temps, sappelle un circuit combina-
toire. Il y a, autour de nous, beaucoup de circuits combinatoires. Par exemple, une
lampe est allume quand son interrupteur est ferm et elle est teinte quand cet
interrupteur est ouvert ; ltat de la lampe dpend de la position de linterrupteur,
mais pas de la position de linterrupteur une seconde ou une minute plus tt.
Cependant, il y a aussi autour de nous des circuits moins amnsiques, dont ltat un
instant donn dpend non seulement de ltat de ses entres cet instant, mais aussi
de leur tat pass. Par exemple, quand nous appuyons sur la touche 1 dune calcula-
trice, le chiffre 1 apparat sur lcran, mais quand nous relchons cette touche, le
chiffre 1 ne disparat pas : ltat de lcran un instant donn dpend donc non seu-
lement de ltat du clavier ce mme instant, mais aussi de toute lhistoire du clavier.
Un tel circuit sappelle un circuit squentiel. Les ordinateurs sont, bien entendu, des
circuits squentiels car, comme nous lavons vu au chapitre 1, lexcution dun pro-
gramme modifie un tat, qui est une description abstraite de ltat de lordinateur et
dpend donc de toutes les instructions excutes dans le pass.

La mmoire
Le circuit squentiel le plus simple est le circuit mmoire un bit qui permet de mmoriser
un 0 ou un 1. Construire un tel circuit nest pas difficile, mais il faut procder en plu-
sieurs tapes. La premire est de construire un circuit qui a deux tats stables, par
exemple :

194 Groupe Eyrolles, 2013


14 Le temps et la mmoire

Ce circuit a deux tats stables car :


Si la sortie A de la premire porte non est dans ltat 0, alors lentre de la seconde
porte non, qui est A galement, est aussi dans ltat 0 ; par consquent, sa sortie B
est dans ltat 1, donc lentre de la premire porte, qui est B galement, est dans
ltat 1, ce qui participe perptuer le fait que sa sortie A soit dans ltat 0.
Si, en revanche, la sortie A de la premire porte non est dans ltat 1, alors lentre
de la seconde porte non, qui est A galement, est aussi dans ltat 1 ; par cons-
quent, sa sortie B est dans ltat 0, donc lentre de la premire porte, qui est B
galement, est dans ltat 0, ce qui participe perptuer le fait que sa sortie A soit
dans ltat 1.
Autrement dit, les deux tats stables de ce circuit sont :
A = 0 et B = 1,
A = 1 et B = 0.

ALLER PLUS LOIN La rupture de symtrie

Il est difficile de prdire ltat dans lequel se retrouve un circuit mmoire un bit quand on le met sous ten-
sion. Il se trouve dabord, pendant une courte dure, dans un tat instable dans lequel les deux sorties A
et B sont dans ltat 0. Lentre des deux portes non est alors dans ltat 0. Rapidement, lune delles pro-
duit un tat 1 en sortie, un peu avant lautre, si bien que lautre, ayant dsormais son entre dans ltat 1,
garde sa sortie dans ltat 0. Cest donc une diffrence de vitesse entre les portes non qui dtermine ltat
du circuit quand on le met sous tension. Cette diffrence de vitesse est elle-mme due une infime diff-
rence de temprature, de longueur de fil, de puret des matriaux utiliss pour construire les transistors,
etc. Ce phnomne est un exemple de rupture de symtrie. Dans le circuit, les points A et B sont par-
faitement symtriques, mais pour arriver un tat ou un autre, il faut que cette symtrie soit rompue.
Les ruptures de symtrie sont frquentes en physique. Par exemple, si on pose une balle de ping-pong sur
le sommet du filet, de manire parfaitement symtrique, elle ne peut pas tomber dun cot ou de lautre
sans briser cette symtrie. Pourtant il est trs rare quelle reste en quilibre au sommet du filet : elle finit
en gnral par tomber dun ct ou de lautre. Ici encore, un souffle de vent, une petite secousse, ou une
imperfection dans la construction de la balle suffit dcider de quel ct elle tombera.

En supprimant la sortie B et en ne gardant que la sortie A

Groupe Eyrolles, 2013 195


Informatique et sciences du numrique

on obtient un circuit qui a deux tats stables. La sortie A vaut 0 dans le premier et 1
dans le second. On peut donc dire que ce circuit mmorise la valeur 0 dans le premier
cas et la valeur 1 dans le second. Ce circuit est donc un circuit mmoire.
Toutefois, ce circuit ayant une sortie, mais pas dentre, il nest pas possible de
changer son tat et donc la valeur mmorise.
Pour ce faire, il faut construire un circuit , un peu plus complexe, en ajoutant deux
portes ou.

Tant que les entres X et Y sont dans ltat 0, tout se passe comme dans le circuit pr-
cdent. En effet, si la sortie A de la premire porte non est dans ltat 0, alors le
point D lentre de la seconde est dans ltat 0 galement, car 0 ou 0 = 0. Et si la
sortie A est dans ltat 1, le point D est dans ltat 1 galement, car 1 ou 0 = 1. Le
point D est donc dans le mme tat que la sortie A dans les deux cas. De mme, le
point C lentre de la premire porte non est dans le mme tat que B. Tout se passe
donc comme si les deux portes ou ntaient pas l.
En revanche, si pendant une courte dure on met lentre X dans ltat 1 tout en lais-
sant lentre Y dans ltat 0, alors le point C passe dans ltat 1 quelle que soit la
valeur de B car 1 ou 0 = 1 et 1 ou 1 = 1 ; la sortie A passe donc dans ltat 0, le
point D galement et le point B passe dans ltat 1. On force donc le circuit se
mettre dans ltat A = 0 et B = 1, cest--dire mmoriser la valeur 0. Et quand
lentre X sera revenue la valeur 0, le circuit restera dans cet tat.

196 Groupe Eyrolles, 2013


14 Le temps et la mmoire

Au cours dtapes qui senchanent trs vite, ltat des points C, D, A et B devient :

X Y C D A B
1 0
1 0 1
1 0 1 0
1 0 1 0 0
1 0 1 0 0 1

De mme, si pendant une courte dure, on met lentre Y dans ltat 1 tout en laissant
lentre X dans ltat 0, on force le circuit mmoriser la valeur 1. Ce circuit mmorise
donc une valeur 0 ou 1 et, en stimulant lentre X ou lentre Y, on peut changer la valeur
mmorise. Ce circuit sappelle une bascule RS (Reset-Set) et on peut le reprsenter
comme ci-dessous.

la bote outils de circuits commence au chapitre 13, on peut donc ajouter un


premier circuit squentiel : la bascule RS.
On peut aller un peu plus loin et construire un troisime circuit qui mmorise une
valeur V quon lui fournit lorsquon stimule lentre S.
Exercice 14.1 (avec corrig)
Construire un circuit combinatoire deux entres V et S et deux sorties X et Y tel que,
si lentre S est dans ltat 0, alors X et Y sont dans ltat 0 et si S est dans ltat 1, alors
X est dans ltat non V et Y est dans ltat V.
Connecter ce circuit combinatoire avec la bascule RS ci-avant pour obtenir un circuit
qui :
quand S est dans ltat 0, ne change pas dtat et produit la valeur mmorise sur la
sortie A,
quand S est dans ltat 1 et V dans ltat 0, mmorise la valeur 0 et met la sortie A
dans ltat 0,
quand S est dans ltat 1 et V dans ltat 1, mmorise la valeur 1 et met la sortie A
dans ltat 1.

Les tables des fonctions boolennes X et Y sont les suivantes :

Groupe Eyrolles, 2013 197


Informatique et sciences du numrique

S V X S V Y
0 0 0 0 0 0
0 1 0 0 1 0
1 0 1 1 0 0
1 1 0 1 1 1

o on reconnat les fonctions S et non (V) et S et V. Il suffit donc de construire les circuits
correspondants.
On relie la sortie du circuit S et (non V) lentre X de la bascule RS et la sortie du circuit
S et V lentre Y de la bascule RS.

Ainsi, quand S est dans ltat 0, le circuit ne change pas dtat et quand S est dans ltat 1, il
mmorise la valeur V. On a donc enfin un vritable circuit mmoire contrlable : mettre
lentre S dans ltat 1 provoque la mmorisation de la valeur de lentre V. Cette valeur
peut tre lue par la suite sur la sortie A, jusqu ce que lon provoque la mmorisation dune
nouvelle valeur. Ce circuit sappelle un verrou D (D pour Donne ou Data).

Verrou D

Exercice 14.2
Quand on utilise plusieurs composants identiques dans un mme circuit, on peut diffren-
cier leurs entres et sorties en leur donnant un numro : ainsi, si lon a plusieurs verrous D,
on appellera V1 lentre V du premier, A2 la sortie du deuxime, etc.
On dfinit un circuit squentiel appel bascule D en reliant la sortie A1 dun premier
verrou D avec lentre V2 dun second verrou D, et en reliant lentre S1 du premier une
porte non dont la sortie est raccorde lentre S2 du second.

198 Groupe Eyrolles, 2013


14 Le temps et la mmoire

Si lon considre ce circuit dans son intgralit, ses entres sont donc lentre V1 du premier
verrou D et une entre S unique qui alimente la fois S1 directement et S2 via la porte non. Sa
sortie est la sortie A2 du second verrou D.
Dessiner ce circuit.
Montrer que quand S est dans ltat 0, le second verrou met sa valeur jour, mais pas le pre-
mier, et quand S est dans ltat 1, le premier verrou met sa valeur jour, mais pas le second.
Ce circuit sappelle une bascule D.

Bascule D

Son intrt est que la valeur mmorise nest mise jour qu linstant prcis o lentre S
passe de ltat 1 ltat 0, alors quun simple verrou D laisse passer les valeurs de V vers A
tant que S reste 1. Il est ainsi plus facile de commander lvolution de ce circuit dans le
temps.

Exercice 14.3
On utilise un additionneur un bit (voir le chapitre 13) avec deux entres A et B et deux sor-
ties S et C, qui sont respectivement le chiffre des units et le chiffre des deuzaines de A + B.
On relie la sortie S de ladditionneur lentre V1 dune premire bascule D, la sortie A1 de
cette bascule tant elle-mme relie lentre A de ladditionneur. On relie galement la
sortie C de ladditionneur lentre V2 dune deuxime bascule D. Enfin, on relie ensemble
les entres S1 et S2 des deux bascules et on les alimente avec une entre commune S.
Dessiner ce circuit.
chaque fois que lentre S des bascules passe dans ltat 1 puis revient ltat 0, les
valeurs mmorises par les bascules D sont mises jour. Montrer que le nouvel tat de la
premire bascule est le chiffre des units de la somme de son ancien tat et de lentre B.
Montrer que le nouvel tat de la seconde bascule est le chiffre des deuzaines de cette
somme.

Exercice 14.4
En utilisant huit copies du circuit construit lexercice prcdent, construire un compteur
8 bits comportant une entre I, tel que lentier 8 bits mmoris par compteur soit augment
dune unit chaque fois que lentre I passe dans ltat 1 puis revient ltat 0.

Exercice 14.5
Modifier le circuit de lexercice prcdent de manire ajouter une entre R telle que le
nombre mmoris par ce compteur soit initialis 0 quand lentre R est mise dans ltat 1.

Groupe Eyrolles, 2013 199


Informatique et sciences du numrique

Lhorloge
Quand on assemble des circuits squentiels qui interagissent les uns avec les autres,
on obtient un circuit asynchrone : ltat de chacun des circuits volue dans le temps,
en fonction de ltat des circuits auxquels il est connect, mais de manire relative-
ment dsordonne.
Beaucoup dinteractions que nous avons avec les autres sont asynchrones : dans un
grand magasin, par exemple, chaque client fait ses courses relativement indpendam-
ment des autres. Et quand plusieurs clients veulent payer leurs courses en mme
temps, il se forme une file dattente. De ce fait, chaque client est peu prs sr quil
finira par payer et sortir, mais il na pas de garantie a priori sur le temps que cela
prendra. linverse, un petit nombre de nos interactions doivent tre synchrones :
jouer dans un orchestre demande non seulement de jouer toutes les notes de la parti-
tion dans un certain ordre, mais galement de les jouer un moment donn. Les
clients dun magasin peuvent faire leurs courses chacun son rythme, mais les musi-
ciens dun orchestre, les danseurs dune chorgraphie ou les soldats qui marchent au
pas, doivent agir dans une mme temporalit. Une manire dobtenir cette synchronie
est de confier lun des musiciens, le chef dorchestre, le rle de battre la mesure.
En informatique, les machines de grande taille, par exemple les rseaux, sont des
machines asynchrones. Chaque utilisateur va son rythme et le rseau finit par
rpondre tout le monde, mais sans garantie du temps que cela prendra. En
revanche, les machines de petite taille, telles que les processeurs, sont des machines
synchrones. Cest pour cela quil y a dans les ordinateurs un circuit, lhorloge, dont le
rle est de battre la mesure pour les autres circuits. Une horloge est simplement un
circuit qui met sur sa sortie un signal priodique, par exemple le signal suivant.

Chaque flche sur la figure marque le dbut dun cycle. Avec ce type dhorloge, la
sortie est 1 pendant la premire moiti du cycle et 0 pendant la seconde.

200 Groupe Eyrolles, 2013


14 Le temps et la mmoire

Chacun des circuits, en particulier les circuits mmoires, se synchronise sur un signal
dhorloge. Par exemple, si on connecte la sortie de lhorloge sur lentre S dune
bascule D, on obtient un circuit qui enregistre la valeur de lentre V chaque cycle.

T Frquence dhorloge

La frquence dhorloge, qui est souvent indique dans les caractristiques techniques des ordinateurs, est
le nombre de cycles par seconde. Par exemple, quand la frquence dhorloge est 1 GHz, la priode de lhorloge,
cest--dire la longueur dun cycle, est de 1 nanoseconde, un milliardime de seconde.

Exercice 14.6
Construire un circuit comportant un additionneur 8 bits, 16 entres et 9 sorties, dont
chaque entre est relie la sortie A dun verrou D diffrent, chaque sortie est relie
lentre V dun verrou D diffrent, et dont toutes les entres S de ces 25 verrous sont relies
une horloge unique.
tablir un lien entre la frquence de lhorloge et le temps de propagation des signaux lec-
triques portant les retenues des 8 additionneurs un bit composant ladditionneur 8 bits.
Estimer le temps de propagation maximal par porte boolenne, suppos constant et uni-
forme, compatible avec une frquence de 1 GHz.

Exercice 14.7
Lorsque lon relie lentre S dune bascule D une horloge, montrer que la sortie A se com-
porte comme lentre V, mais avec un cycle dhorloge de retard.

ALLER PLUS LOIN Transformation dnergie et production de chaleur

Un processeur consomme de llectricit et la transforme essentiellement en chaleur. Llectricit consomme


et la chaleur produite sont des facteurs physiques limitant les performances des processeurs.
Le cot nergtique dun calcul a beaucoup diminu avec le temps puisquon est pass dune production de cal-
culs denviron 400 calculs par kWh pour lENIAC, en 1946, environ 1 million de milliards de calculs par kWh pour
un processeur actuel. Dans cette estimation, un calcul est par exemple laddition de deux nombres entiers.
Cependant, comme on fait beaucoup plus de calculs quen 1946, la quantit dlectricit consomme pour ce faire
a beaucoup augment pour arriver, en 2007, environ 1 % de la production mondiale dlectricit. Cette estima-
tion ne tient compte que de lnergie transforme pour effectuer les calculs et non de celle transforme pour fabri-
quer, transporter et recycler les machines utilises.
Les gros centres de serveurs de calcul ou de donnes ont des besoins normes en lectricit et cherchent souvent
se rapprocher gographiquement des centrales lectriques. Ils requirent de mme des systmes de climatisa-
tion de plus en plus sophistiqus, par exemple des systmes de refroidissement qui utilisent de leau de mer.

Groupe Eyrolles, 2013 201


Informatique et sciences du numrique

ALLER PLUS LOIN La rversibilit

Le fonctionnement dun circuit squentiel est dynamique : il se dcrit dans le temps. Comme chaque fois
que lon observe un phnomne dynamique, on peut sinterroger sur sa rversibilit.
Par exemple, si on connat la position x et la vitesse v, un instant t, dun point en mouvement rectiligne uni-
forme, on peut prdire sa position et sa vitesse un instant t du futur : sa position sera x = x + v (t - t) et
sa vitesse sera v = v. Rciproquement, si on connat sa position x et la vitesse v linstant t, on peut aussi
rtro-prdire sa position et sa vitesse un instant t du pass : sa position tait x = x - v (t - t) et sa
vitesse tait v = v. La variation de position et de vitesse dun point en mouvement rectiligne uniforme est un
phnomne dit rversible.
En revanche, quand on mlange un litre de gaz la temprature T1 avec un litre de gaz la
temprature T2, on obtient deux litres de gaz la temprature T = 2 T1 T2 / (T1 + T2). Si on connat les
tempratures T1 et T2, on peut donc prdire la temprature T. En revanche, si on connat la
temprature T, il est impossible de rtro-prdire les tempratures T1 et T2 : deux litres de gaz 300 K
peuvent avoir t obtenus en mlangeant un litre 290 K et un litre 310,7 K, mais il peuvent aussi avoir
t obtenus en mlangeant un litre 280 K et un litre 323 K. Mlanger des gaz de tempratures diff-
rentes est donc un phnomne irrversible. Non seulement il est impossible de rejouer le film en arrire
et dobtenir les deux litres de gaz aux tempratures T1 et T2, mais il est de plus impossible de dfinir ce
que ces tempratures T1 et T2 doivent tre, puisquil y a plusieurs solutions lquation 2 T1 T2 /
(T1 + T2) = T.
Les volutions des tats des circuits vues dans ce chapitre sont des volutions irrversibles, comme le mlange
de deux volumes de gaz de tempratures diffrentes. Si lentre V dun circuit mmoire est 0, au moment
o lon met son entre S 1, ce circuit enregistre la valeur 0. La valeur prcdemment mmorise est irrm-
diablement dtruite. Il est donc impossible de rejouer le film lenvers pour retrouver ltat initial du circuit,
car les deux tats initiaux possibles mnent au mme tat final.
La physique statistique et la thorie de linformation permettent de mesurer le degr dirrversibilit de ces
deux phnomnes : la croissance de lentropie, ou la perte dinformation, lors de la destruction dun bit dinfor-
mation est de 9,5 1024 J/K et celle lors du mlange dun litre dun gaz parfait monoatomique 105 Pa et
290 K avec un litre de ce mme gaz cette mme pression et 310,7 K est de 9,9 104 J/K, soit en comptant
cette perte dinformation, non en J/K, mais en bits, 1020 bits.

202 Groupe Eyrolles, 2013


14 Le temps et la mmoire

Ai-je bien compris ?


Quelle est la diffrence entre un circuit combinatoire et un circuit squentiel ?
Quest-ce quune bascule RS ?
Quelle est la diffrence entre un circuit synchrone et un circuit asynchrone ?

Groupe Eyrolles, 2013 203


15
Dans les annes 1940, lUniversit de Pennsylvanie, John
Von Neumann (1903-1957) a conu, avec Presper Eckert et
John Mauchly, deux des premiers ordinateurs : lENIAC, puis
lEDVAC. Ces ordinateurs taient organiss selon larchitecture
de Von Neumann, utilise dans la quasi-totalit des ordina-
teurs conus depuis : sparation du processeur et de la
mmoire, relis par un bus de communication. LENIAC pesait
vingt-sept tonnes.
Lorganisation
dun ordinateur

Pour fabriquer un ordinateur,


il suffit dun fer souder (ou presque).

Dans ce chapitre, nous voyons de quoi sont faits les


ordinateurs une chelle plus proche de la ntre et comment
architectures et langages sont lis. Nous dcrivons la manire
dont sont assembls le processeur de calcul, lorganisation de
la mmoire et les bus permettant la circulation des donnes.
Nous voyons comment programmer le processeur au moyen
dun langage machine simple et expliquons comment
drouler une squence dinstructions. Nous adjoignons enfin
les priphriques pour obtenir un ordinateur.
Informatique et sciences du numrique

Aprs avoir dcrit le fonctionnement dun ordinateur lchelle du transistor puis de


la porte boolenne, nous abordons, dans ce chapitre, une troisime chelle de des-
cription, qui est celle qui va nous permettre de vritablement en comprendre les prin-
cipes dorganisation. Un ordinateur est principalement compos de deux grands
circuits : le processeur et la mmoire. Ces deux circuits sont relis entre eux par des fils
qui constituent un ou plusieurs bus de communication, parmi lesquels un bus de donnes
et un bus dadresses. Le processeur est compos de deux units. Lunit de contrle lit
en mmoire un programme et donne lunit de calcul la squence des instructions
effectuer. Le processeur dispose par ailleurs de bus dentres et de sorties permettant
daccder aux autres parties de lordinateur, que lon nomme les priphriques. Cette
organisation gnrale, larchitecture de Von Neumann, est tonnamment stable depuis
les annes quarante.

La mmoire est compose de plusieurs milliards de circuits mmoires un bit. Ces cir-
cuits sont organiss en agrgats de huit, seize, trente-deux, soixante-quatre bits, et
parfois davantage, que lon appelle des cases mmoires et qui peuvent donc mmoriser
des mots de huit, seize, trente-deux, soixante-quatre bits, etc. Le nombre de ces cases
dfinit la taille de la mmoire de lordinateur. Comme il faut distinguer ces cases les
unes des autres, on donne chacune un numro : son adresse. La mmoire contient
les donnes sur lesquelles on calcule et le programme qui dcrit le calcul effectu,
donn sous la forme dune squence dinstructions.

ALLER PLUS LOIN Taille de la mmoire

En gnral, on indique la taille de la mmoire en prcisant le nombre doctets, cest--dire de mots de huit bits,
qui peuvent tre mmoriss. Ainsi, une mmoire de 4 gigaoctets (binaires), contient
4 230 8 = 34 359 738 368 circuits mmoires un bit. Si la mmoire est organise en mots de soixante-
quatre bits, ces circuits sont rpartis en 536 870 912 cases permettant de mmoriser un mot chacune.

206 Groupe Eyrolles, 2013


15 Lorganisation dun ordinateur

Le processeur, de son ct, na quun trs petit nombre de cases mmoires, que lon
appelle des registres. On peut imaginer, par exemple, quil ne contient que deux regis-
tres, appels A et B. Les registres peuvent contenir des donnes, mais aussi des
adresses de cases mmoires.

ALLER PLUS LOIN Les processeurs 32 et 64 bits

Lorsque lon parle de processeurs 32 bits ou 64 bits, on fait rfrence la taille de ces registres.

Trois instructions
Pour changer des donnes avec la mmoire, le processeur utilise deux procds qui
permettent lun de transfrer ltat dun registre dans une case mmoire et lautre de
transfrer ltat dune case mmoire dans un registre.
Pour transfrer le contenu du registre A dans la case mmoire dadresse n, le processeur
met les diffrents fils qui composent le bus dadresses dans un tat qui correspond
lexpression en base deux du nombre n et il met les diffrents fils qui composent le bus
de donnes dans un tat qui correspond au contenu du registre. Au signal dhorloge,
chaque case de la mmoire compare son propre numro au numro arriv sur le bus
dadresse ; seule la case numro n se reconnat et elle met alors ses diffrentes entres S
(voir le chapitre 14) dans ltat 1, de manire enregistrer le mot arrivant sur le bus de
donnes. Le procd symtrique permet au processeur de rcuprer une valeur prc-
demment enregistre : les informations circulent toujours du processeur vers la
mmoire sur le bus dadresses, mais elles circulent dans lautre sens sur le bus de
donnes : cest la case n qui connecte sa sortie au bus de donnes et cest le registre qui
met ses entres S 1 de manire enregistrer le mot qui arrive sur le bus de donnes.
Ces deux oprations sappellent le stockage (STA) et le chargement (LDA) du contenu
dune case mmoire dans le registre A (STore A, LoaD A). Il y a bien entendu des
oprations similaires pour le registre B (STB et LDB).
Une autre opration que peut excuter le processeur est laddition des contenus des
registres A et B. Le rsultat de lopration peut tre stock aussi bien dans le
registre A (ADD A) que dans le registre B (ADD B). De mme, DEC A dcrmente la valeur
contenue dans le registre A, cest--dire soustrait 1 la valeur contenue dans le

Groupe Eyrolles, 2013 207


Informatique et sciences du numrique

registre A et stocke la valeur ainsi obtenue dans le registre A et DEC B ralise le mme
calcul sur la valeur contenue dans le registre B.
LDA 7
LDB 8
ADD A
LDB 9
ADD A
LDB 10
ADD A
STA 11

Si, par exemple, le processeur effectue successivement les oprations ci-avant et si,
dans ltat initial, la case 7 de la mmoire contient le nombre 42, la case 8 le
nombre 68, la case 9 le nombre 47 et la case 10 le nombre 33, lexcution des huit
oprations a comme effet de :
LDA 7 charger le contenu de la case 7, soit 42, dans le registre A,
LDB 8 charger le contenu de la case 8, soit 68, dans le registre B,
ADD A additionner les contenus des registres A et B et mettre le rsultat, 110, dans
le registre A,
LDB 9 charger le contenu de la case 9, soit 47, dans le registre B,
ADD A additionner les contenus des registres A et B et mettre le rsultat, 157, dans
le registre A,
LDB 10 charger le contenu de la case 10, soit 33, dans le registre B,
ADD A additionner les contenus des registres A et B et mettre le rsultat, 190, dans
le registre A,
STA 11 stocker le contenu du registre A, soit 190, dans la case 11.
Au bout du compte, cette squence doprations additionne les quatre nombres
stocks dans les cases 7, 8, 9 et 10 de la mmoire et stocke le rsultat dans la case 11.

Le langage machine
Un ordinateur doit tre capable dexcuter un programme. Il faut donc un moyen
dindiquer au processeur la squence des instructions quil doit excuter ; par exemple,
la squence LDA 7, LDB 8, ADD A, LDB 9, ADD A, LDB 10, ADD A, STA 11. Dans les pre-
mires machines, des cartes perfores ou un ruban perfor situ lextrieur de la
machine indiquaient les oprations effectuer, comme les cartes dun orgue de Bar-
barie indiquent les notes jouer lune aprs lautre. Puis cette ide a t abandonne au
profit dune autre : celle denregistrer le programme dans la mmoire avec les donnes.

208 Groupe Eyrolles, 2013


15 Lorganisation dun ordinateur

Ainsi, on peut exprimer le programme prcdent en binaire en dcidant par exemple


que A scrit 0, B scrit 1 et les instructions LDA, LDB, STA, STB, ADD et DEC scrivent res-
pectivement 0, 1, 2, 3, 4 et 5. Le programme de notre exemple scrit alors 0, 7, 1, 8,
4, 0, 1, 9, 4, 0, 1, 10, 4, 0, 2, 11, ce qui commence devenir assez difficile lire, mme
sil est facile de passer dune reprsentation lautre. On peut ensuite stocker ce pro-
gramme dans la mmoire, en commenant, par exemple, la case 100 :

adresse .. .. 100 101 102 103 104 105 106 107

valeur .. .. 0 7 1 8 4 0 1 9

adresse 108 109 110 111 112 113 114 115 .. ..

valeur 4 0 1 10 4 0 2 11 .. ..

Il suffit maintenant dajouter au processeur un nouveau registre qui dbute 100, le


compteur de programme ou PC (program counter), et chaque tape, le processeur :
charge le contenu des cases mmoires dadresses PC et PC + 1,
dcode le premier de ces nombres en une instruction (0 devient LDA, 1 LDB, etc.),
excute linstruction en question,
et ajoute 2 au registre PC.

ALLER PLUS LOIN Pourquoi sparer A et B pour ADD et DEC mais pas pour LD et ST ?

Dans le langage machine quon vient dinventer, pour que le compteur de programme fonctionne correctement,
chaque instruction utilise exactement deux cases mmoire : une pour son nom et une pour son argument.
Largument des instructions ADD et DEC est le nom dun registre. En revanche, comme les instructions de char-
gement ont dj un argument ladresse mmoire o aller chercher la donne charger , elles ne peuvent
pas en avoir un second pour indiquer le registre utilis. Cest pour cela que lon a deux instructions LDA et LDB
et, de mme, deux instructions STA et STB.

Enregistrer les programmes en mmoire permet de faire trs simplement des boucles
et des tests. On ajoute aux instructions prcdentes une instruction JMP (jump) telle
que JMP n charge simplement le nombre n, ou plutt le nombre n - 2 qui sera aug-
ment de 2 immdiatement aprs lexcution du JMP, dans le registre PC pour
dtourner le programme de sa route et le forcer continuer son excution
ladresse n. De mme, linstruction JMPZ (jump if zero), qui effectue un saut si le con-
tenu du registre A est 0, permet de faire des tests. On ajoute enfin linstruction END,
qui termine le programme. En langage machine, on suppose que JMP, JMPZ et END
scrivent respectivement 6, 7 et 8 et que END prend 0 comme argument puisquil en
faut un. Mais cet argument nest pas utilis.

Groupe Eyrolles, 2013 209


Informatique et sciences du numrique

Pour construire une boucle ou un test avec ces nouvelles instructions, il faut tout
dabord trouver une faon de traduire la condition du test ou la condition darrt de la
boucle par un test dgalit zro. Par exemple, pour effectuer un test comme
x == 2, on peut placer la valeur de x dans le registre A, excuter deux fois linstruc-
tion DEC A et enfin tester si le registre A contient 0. Ensuite, on crit les squences
dinstructions qui correspondent aux diffrentes branches du test ou au corps de la
boucle, et on utilise JMPZ et JMP pour diriger lexcution du programme dans lune ou
lautre de ces squences. Par exemple, un programme qui lit une valeur x dans la case
mmoire dadresse 11, puis recopie la case mmoire dadresse 12 dans la case
mmoire dadresse 20 si x vaut 2, ou la case mmoire dadresse 13 dans la case
mmoire dadresse 30 dans le cas contraire, peut scrire :

100 0 LDA 11 110 3 STB 30


101 11 111 30
102 5 DEC A 112 6 JMP 118
103 0 113 118
104 5 DEC A 114 1 LDB 12
105 0 115 12
106 7 JMPZ 114 116 3 STB 20
107 114 117 20
108 1 LDB 13 118 8 END
109 13 119 0

ALLER PLUS LOIN


Calcul sur des structures de donnes plus complexes

Les instructions quon vient de prsenter ne permettent daccder qu un nombre limit de cases mmoire,
dont les adresses sont les constantes entires qui servent darguments aux instructions LDA, STA, LDB et STB.
Le calcul sur des structures de donnes plus complexes, comme des listes, ncessite dautres instructions pour
accder une case mmoire dont ladresse est elle-mme une donne, en particulier le rsultat dun calcul. Les
processeurs ont bien dautres instructions encore : des oprations boolennes, des oprations sur les nombres
entiers, des oprations sur les nombres flottants, etc.

SAVOIR-FAIRE Savoir drouler lexcution dune squence dinstructions


Le principe est de suivre, instruction par instruction, lvolution du programme en obser-
vant les effets sur les valeurs contenues dans les registres, y compris le compteur de pro-
gramme PC, et les valeurs contenues dans la mmoire, un peu comme on le ferait pour
ltat de lexcution dun programme crit en Python.

210 Groupe Eyrolles, 2013


15 Lorganisation dun ordinateur

Exercice 15.1 (avec corrig)


crire une squence dinstructions qui multiplie par 5 le nombre contenu dans la case
mmoire dadresse 10 et stocke le rsultat dans la case mmoire dadresse 11.

Pour multiplier par 5, on fait 4 additions, en accumulant le rsultat dans le registre A. On


note x le nombre rang ladresse 10.

A B
LDA 10 x Charger dans A le nombre rang ladresse mmoire 10
LDB 10 x x Charger dans B le nombre rang ladresse mmoire 10
ADD A x+x x Additionner A et B, rsultat dans A
ADD A x+x+x x Additionner A et B, rsultat dans A
ADD A x+x+x+x x Additionner A et B, rsultat dans A
ADD A x+x+x+x+x x Additionner A et B, rsultat dans A
STA 11 x+x+x+x+x x Stocker le nombre contenu dans A ladresse mmoire 11

La squence LDA 10, LDB 10, ADD A, ADD A, ADD A, ADD A, STA 11, scrit en langage
machine 0, 10, 1, 10, 4, 0, 4, 0, 4, 0, 4, 0, 2, 11. On la stocke par exemple partir de
ladresse 100 de la mmoire.
tat de la mmoire avant lexcution du programme :

adresse .. 10 11 .. .. 100 101 102 103 104


valeur .. x .. .. 0 10 1 10 4

adresse 105 106 107 108 109 110 111 112 113 ..
valeur 0 4 0 4 0 4 0 2 11 ..

tat de la mmoire aprs lexcution du programme :

adresse .. 10 11 .. .. 100 101 102 103 104


valeur .. x 5x .. .. 0 10 1 10 4

adresse 105 106 107 108 109 110 111 112 113 ..
valeur 0 4 0 4 0 4 0 2 11 ..

Exercice 15.2
Expliquer ce que fait le programme suivant, crit en langage machine, en supposant que le
nombre x contenu dans la case mmoire dadresse 10 est strictement positif.

Groupe Eyrolles, 2013 211


Informatique et sciences du numrique

adresse .. 10 11 .. 100 101 102 103 104 105 106


valeur .. x y 0 10 1 10 7 112 5

adresse 107 108 109 110 111 112 113 114 115 ..
valeur 0 4 1 6 104 3 11 8 0 ..

Exercice 15.3
crire un programme qui lit deux valeurs x et y contenues respectivement dans les cases
mmoires 11 et 12, calcule la diffrence y - x et stocke le rsultat ladresse 13. On suppose
que ces deux valeurs sont des nombres entiers positifs.
Complter ce programme pour quil stocke la valeur 0 ladresse 15 si x est gal y, ou la
valeur x sinon.

Exercice 15.4
crire un programme qui multiplie la valeur contenue la case mmoire 12 par celle con-
tenue dans la case mmoire 13 et stocke le rsultat ladresse 14. On suppose que ces
valeurs sont des nombres entiers positifs.
Quel problme lcriture de ce programme pose-t-elle ? Quelle modification du processeur
permettrait de contourner ce problme et donc de simplifier le programme ?

Compilation et interprtation
Les premiers programmeurs crivaient des programmes en langage machine qui res-
semblaient LDA 7, LDB 8, ADD A, LDB 9, ADD A, LDB 10, ADD A, STA 11, ou plus exac-
tement 0, 7, 1, 8, 4, 0, 1, 9, 4, 0, 1, 10, 4, 0, 2, 11, ce qui tait trs fastidieux et
offrait de nombreuses possibilits de se tromper. On a alors cherch concevoir des
langages dans lesquels ce programme pouvait scrire :
e = a + b + c + d

ce qui a permis de dvelopper des programmes de manire plus rapide et plus sre.
Nanmoins, aujourdhui encore, les ordinateurs ne comprennent que les programmes
de la forme 0, 7, 1, 8, 4, 0, 1, 9, 4, 0, 1, 10, 4, 0, 2, 11. Cest pourquoi quand on crit :
e = a + b + c + d

on doit ensuite utiliser un programme qui transforme les programmes crits en lan-
gage volu en des programmes crits en langage machine : un compilateur ou un
interprteur. Un programme existe donc toujours sous deux formes : le code source
crit en Python, Java, C, etc., et le code compil crit en langage machine.

212 Groupe Eyrolles, 2013


15 Lorganisation dun ordinateur

Le compilateur ou linterprteur sont des traducteurs dun langage volu vers un


langage plus proche de la machine. Ils diffrent par le fait quun compilateur traduit
un programme en entier avant de lexcuter, alors quun interprteur excute le pro-
gramme au fur et mesure quil est traduit. Python est un langage, en gnral, inter-
prt. Une manire simple de compiler un programme est de traduire les instructions
une une. Cependant, comme pour les circuits vus au chapitre 13, lorsque le compi-
lateur a accs lintgralit dun programme, il peut produire des programmes en
langage machine plus efficaces en se plaant aussi lchelle du langage machine. Par
exemple, le temps daccs une donne en mmoire peut tre une centaine de fois
suprieur au temps daccs un registre. Conserver une valeur dans un registre entre
deux instructions au lieu de la stocker pour la recharger ensuite peut donc faire
gagner beaucoup de temps de calcul.

Les priphriques
Outre un processeur, une mmoire, une horloge et des bus reliant le processeur la
mmoire, un ordinateur est galement constitu de priphriques : crans, claviers,
souris, disques, haut-parleurs, imprimantes, scanners, cartes rseau, cls de mmoire
flash, etc. qui permettent au processeur dchanger des informations avec lextrieur :
des tres humains, travers par exemple lcran et le clavier, dautres ordinateurs, tra-
vers la carte rseau, et des outils de stockage, par exemple des disques. On peut grossi-
rement classer les priphriques en priphriques dentre, qui permettent au processeur
de recevoir des informations de lextrieur, et priphriques de sortie, qui lui permettent
dmettre des informations vers lextrieur. Toutefois, beaucoup de priphriques sont
la fois des priphriques dentre et de sortie. Ainsi, un cran est a priori un priph-
rique de sortie, mais un cran tactile est aussi un priphrique dentre.
Pour changer des informations avec les priphriques, le processeur procde dune
manire trs similaire celle quil utilise pour changer des informations avec la
mmoire. Par exemple, on peut donner une adresse chaque pixel dun cran noir et
blanc, exactement comme on donne une adresse chaque case de la mmoire ;
stocker une valeur comprise entre 0 et 255 cette adresse, avec linstruction STA par
exemple, aura pour effet dallumer ce pixel lcran avec le niveau de gris correspon-
dant. De mme linstruction LDA permet de recevoir des informations dun priph-
rique de sortie, par exemple la position de la souris. Selon les processeurs, ce sont les
instructions STA et LDA elles-mmes qui sont utilises, ou des instructions voisines,
spcialises pour la communication avec les priphriques.

Groupe Eyrolles, 2013 213


Informatique et sciences du numrique

Le systme dexploitation
La description des ordinateurs que lon a donne dans ce chapitre diffre quelque peu
de lexprience pratique quont tous ceux qui ont dj utilis un ordinateur. Tout
dabord, on saperoit que si on bouge la souris, le curseur de souris bouge sur lcran, il
semble donc y avoir un programme qui interroge en permanence la souris pour con-
natre sa position et dessine un curseur de souris lendroit correspondant de lcran.
De mme, il est possible dutiliser simultanment plusieurs programmes, alors que dans
la description que lon a donne, le processeur nen excute quun seul la fois.
Cela est d au fait que ds que lon allume un ordinateur, un programme spcial est
lanc : le systme dexploitation. Ce programme, souvent gigantesque, a plusieurs
fonctions :
Il permet lexcution simultane de plusieurs programmes, selon le systme du temps
partag : le systme dexploitation excute chacun des programmes tour de rle et
pendant une courte dure, garantissant chacun que ses donnes ne seront pas modi-
fies par les autres ainsi, mme si un programme croit utiliser les cases mmoire 1, 2
et 3, il se peut quil utilise en fait les cases 4097, 4098 et 4099, car le systme dexploita-
tion a rserv les vritables cases 1, 2 et 3 pour un autre programme.
Il gre les priphriques ; ainsi, pour imprimer un caractre sur lcran, il nest pas
ncessaire dallumer chaque pixel lun aprs lautre, mais on peut demander au sys-
tme dexploitation dafficher un A et celui-ci traduira cette instruction en une
suite dinstructions qui afficheront un A pixel par pixel. La partie du systme
dexploitation qui gre un priphrique sappelle un pilote.
En particulier, il gre le disque, son dcoupage en fichiers, lattribution dun nom
chaque fichier et leur organisation arborescente (voir le chapitre 11).
Il gre aussi lcran, cest--dire son dcoupage en fentres, louverture et la fer-
meture des fentres.
Dans certains systmes utiliss par plusieurs personnes, il gre lauthentification
de chaque utilisateur et les droits, en particulier de lecture et dcriture des
fichiers, associs chacun deux.

ALLER PLUS LOIN Plusieurs systmes dexploitation

Il existe plusieurs systmes dexploitation : Unix, Linux ou GNU/Linux, Windows, Mac OS, etc. Toutefois, le
dveloppement dun systme dexploitation est une tche si coteuse en temps, quil nexiste gure plus dune
dizaine de systmes dexploitation rellement utiliss.

214 Groupe Eyrolles, 2013


15 Lorganisation dun ordinateur

ALLER PLUS LOIN Les ordinateurs parallles

Une manire de fabriquer des ordinateurs plus rapides est de mettre dans un ordinateur plusieurs processeurs qui
calculent en parallle, cest--dire en mme temps. Les ordinateurs qui ont plusieurs processeurs parallles sont
appels ordinateurs parallles ou multicurs. Certains algorithmes sont trs faciles parallliser : par
exemple pour augmenter la luminosit dune image en niveaux de gris, il faut ajouter une constante chaque
pixel. Chaque pixel peut tre trait indpendamment des autres et utiliser deux processeurs au lieu dun divise le
temps de calcul par deux. Toutefois, dautres algorithmes sont plus difficiles parallliser.
La programmation des processeurs parallles est plus difficile car, en plus dcrire des instructions, il faut pr-
voir sur quel processeur elles vont sexcuter.
Les processeurs peuvent se partager une mmoire ou plusieurs. Si deux processeurs partagent la mme
mmoire et doivent se communiquer des donnes, il faut sassurer que le premier ait bien fini de les calculer et
de les stocker en mmoire avant que le second ne les lise. On dit que les deux processeurs doivent se synchro-
niser. Ils peuvent aussi avoir des mmoires diffrentes et communiquer par un bus. Les processeurs peuvent
fonctionner sur la mme horloge ; on dit alors quils sont synchrones. Ou bien chaque processeur peut avoir
sa propre horloge ; on dit quils sont asynchrones. Le paralllisme existe aussi lintrieur des processeurs,
entre les instructions du langage machine. Cette forme de paralllisme sappelle le paralllisme dinstruc-
tions.

ALLER PLUS LOIN La hirarchie mmoire

Il y a une vidente ressemblance entre les notions de case de la mmoire dun ordinateur et de bote associe
une variable dans un tat de lexcution dun programme. Toutefois, ces deux notions ne sont pas absolument
identiques. Un programmeur peut faire comme si une valeur stocke dans une bote de nom x tait stocke au
mme endroit de la mmoire dun bout lautre de lexcution du programme. Cependant, cette valeur peut en
ralit changer de place. Elle peut tre en mmoire, mais comme le systme dexploitation gre plusieurs pro-
grammes en temps partag, il peut trs bien attribuer la bote de nom x dabord une case de la mmoire,
puis une autre plus tard. Ce que le systme dexploitation garantit est que, quoi quil se passe en ralit, tout
se passera de manire transparente pour le programmeur, qui peut donc faire comme si le contenu de cette
bote tait toujours stock dans la mme case. Si on utilise des processeurs parallles pour faire un calcul, la
valeur de la bote x peut tre dans la mmoire dun processeur ou dun autre, voire dans plusieurs mmoires
en mme temps.
La ralit est encore un peu plus complexe car les processeurs disposent de mmoires caches ou antm-
moires. Ce sont les mmoires L1 et L2 indiques dans les caractristiques techniques des processeurs. Ces
mmoires sont daccs plus rapides que la mmoire ordinaire, mais beaucoup moins grandes. Gnralement,
laccs une mmoire cache ne prend que quelques cycles dhorloge, mais sa capacit est limite quelques
kilooctets ou mgaoctets. Pendant le calcul, la valeur de la bote x peut aussi se trouver dans une de ces
mmoires caches. Un mcanisme matriel gre automatiquement ces deux mmoires et les instructions du lan-
gage machine ne permettent mme pas de choisir dutiliser lune ou lautre. Toutefois, le principe retenir est que
toute donne rcemment utilise a de fortes chances dtre encore dans un des caches. Donc viter de trop loi-
gner les utilisations dune mme variable dans un programme peut faire gagner beaucoup de temps de calcul.
On a ici un nouvel exemple de la description dune mme ralit diffrents niveaux dabstraction.

Groupe Eyrolles, 2013 215


Informatique et sciences du numrique

ALLER PLUS LOIN Des programmes auto-modifiants aux virus

Stocker le programme excuter dans la mmoire, avec le reste des donnes, a permis de prendre conscience
de la possibilit pour un programme de se modifier lui-mme, par une simple instruction STA, dans la partie de
la mmoire consacre au stockage du programme. Si cette possibilit disparat dans les langages de program-
mation volus, elle est bien prsente dans les programmes directement crits en langage machine.
Cette possibilit de se dupliquer et de se transformer est en particulier utilise par les virus informatiques.
Un virus est un programme qui est conu pour se dupliquer et se propager dordinateur en ordinateur linsu
de leurs utilisateurs, par le rseau, ou tout autre support permettant de transmettre de linformation : cl de
mmoire flash, CD-ROM, etc. Une fois install sur un ordinateur, un virus peut espionner ses utilisateurs et
communiquer les informations collectes par le rseau. Il peut aussi simplement utiliser la capacit de calcul de
lordinateur hte, par exemple pour envoyer des courriers en trs grand nombre.

ALLER PLUS LOIN La distribution du code source dun logiciel

Certains auteurs et diteurs de programmes ne donnent leurs utilisateurs que le code compil de leurs pro-
grammes. Ils peuvent ainsi garder leurs secrets de fabrication. Les usagers peuvent utiliser ces programmes, mais
ne peuvent pas comprendre comment ils fonctionnent.
Dautres, linverse, donnent leurs utilisateurs la fois le code compil et le code source. Cela permet aux
utilisateurs qui le souhaitent de comprendre comment le programme est conu, de ladapter leurs propres
besoins si le programme ny rpond quimparfaitement, ou de vrifier que le programme ne fait rien dindsi-
rable, par exemple quil ne contient pas despion qui communique son insu des informations sur lutilisateur
lauteur du programme. Cela permet aussi aux utilisateurs de contribuer lamlioration du programme, en
signalant des erreurs, en les corrigeant ou en ajoutant des composants aux programmes.
Les partisans de la distribution du code source des logiciels articulent leurs arguments sur deux plans : un plan
thique et philosophique et un plan scientifique et technique. Certains insistent sur limpratif moral de distri-
buer le code source de ses programmes, avec lobjectif de diffuser tous des connaissances et de leur per-
mettre de se les approprier. Dautres insistent sur le fait que permettre aux utilisateurs de contribuer aux
logiciels dvelopps en amliore la qualit. De fait, certains logiciels tels les systmes dexploitation GNU/Linux
sont aujourdhui dvelopps par des milliers de contributeurs de par le monde, ce qui serait impossible si le
code source ntait pas publi.

Ai-je bien compris ?


Quels sont les principaux circuits dun ordinateur ?
Quest-ce que le langage machine ?
Quest-ce que compiler un programme ?

216 Groupe Eyrolles, 2013


16
Vinton Cerf (1943-) et Robert Kahn (1938-) ont invent, au
dbut des annes 1970, le protocole de transmission de
paquets de donnes IP (Internet Protocol) et le protocole de
contrle de flux de donnes TCP (Transmission Control Pro-
tocol). Il sagit des deux principaux protocoles du rseau
Internet. Ils donnent ce rseau sa fiabilit, sa robustesse en
cas de pannes ou de modifications et sa capacit voluer.
Cela a valu leurs auteurs le surnom de pres dInternet .
Les rseaux
C HAPITRE AVANC

Les ordinateurs parlent aux ordinateurs.

Dans ce chapitre, nous voyons comment les ordinateurs


communiquent entre eux, et comment ces communications
se composent pour faire fonctionner le rseau Internet.
Ces mcanismes de communication de machine machine
sappellent des protocoles.
Les protocoles de la couche physique connectent les bus
des ordinateurs. Les protocoles de la couche lien organisent
un rseau local autour dun serveur et reprent les ordinateurs
par ladresse MAC de leur carte rseau. Les protocoles
de la couche rseau organisent les rseaux locaux de proche
en proche et reprent les ordinateurs par leur adresse IP.
Nous expliquons comment les informations sont achemines
au travers du rseau laide de routeurs.
Informatique et sciences du numrique

Nous avons vu quun ordinateur pouvait se dcrire diffrentes chelles : les transis-
tors sassemblent en portes boolennes, qui sassemblent leur tour en composants
processeurs, mmoires, etc. qui sassemblent leur tour en ordinateurs. Et nous
pouvons continuer, car les ordinateurs sassemblent leur tour en rseaux de diff-
rentes tailles : des rseaux les plus simples, forms de deux ordinateurs relis par un
cble ou par radio, aux rseaux locaux connectant quelques ordinateurs entre eux les
ordinateurs dun lyce par exemple , qui sassemblent leur tour pour former le plus
grand des rseaux : Internet, lequel relie presque tous les ordinateurs du monde.

T Rseau

Un rseau est un ensemble dordinateurs et de connexions qui permettent chaque ordinateur de communi-
quer avec tous les autres, ventuellement en passant par des intermdiaires.

Les protocoles
Si un programme PA, par exemple un logiciel de courrier lectronique, excut sur un
ordinateur A, veut communiquer des informations un autre programme PB, excut
sur un ordinateur B, il sous-traite cette tche un programme spcialis QA, excut sur
lordinateur A, qui met en uvre un protocole. Ce programme QA dialogue, suivant les
spcifications de ce protocole, avec un programme homologue QB excut sur
lordinateur B, ce qui permet ainsi la communication entre les programmes PA et PB.
En fait, le programme QA sous-traite, son tour, certaines tches moins sophistiques
dautres programmes mettant en uvre dautres protocoles, qui sous-traitent, de mme,
certaines tches encore plus lmentaires dautres protocoles, etc. On peut ainsi classer
les protocoles en couches hirarchiques, par le niveau de sophistication des tches quils
excutent.

T Protocole

Un protocole est un ensemble de rgles qui rgissent la transmission dinformations sur un rseau. Il existe
de nombreux protocoles, chacun spcialis dans une tche bien prcise.

Ainsi, les informations envoyes par le programme de courrier lectronique sont


dabord confies un protocole de la couche application, qui les confie un protocole
de la couche transport, qui les confie un protocole de la couche rseau, qui les
confie un protocole de la couche lien, qui les confie un protocole de la couche
physique, qui les transmet effectivement vers lordinateur B.

220 Groupe Eyrolles, 2013


16 Les rseaux

Figure 161 Systme en couches, piles de protocoles. Encapsulation et dcapsulation des informations.

T Couche

Une couche est un ensemble de protocoles qui effectuent des tches de mme niveau. On distingue cinq cou-
ches appeles couche application, couche transport, couche rseau, couche lien et couche phy-
sique.

Quand on confie une lettre un facteur, on doit la mettre dans une enveloppe et
ajouter sur lenveloppe des informations supplmentaires : ladresse du destinataire,
sa propre adresse, une preuve de paiement, etc. De mme, quand un protocole de la
couche k+1 confie des informations un protocole de la couche k, celui-ci ajoute
ces informations un en-tte Hk qui contient des informations, comme ladresse de
lordinateur destinataire, utilises par le protocole de la couche k. On appelle cela
lencapsulation des informations. Quand les informations I confies par la couche

Groupe Eyrolles, 2013 221


Informatique et sciences du numrique

application la couche transport arrivent un protocole de la couche physique, plu-


sieurs en-ttes H4, H3, H2, H1 leur ont t ajouts. Ces en-ttes sont supprims la
rception : la couche k analyse puis supprime Hk avant de passer linformation la
couche k+1. On appelle cela la dcapsulation des informations.

ALLER PLUS LOIN Les normes

Des normes rgissent les rles de chaque couche, leurs interactions et les spcifications
de chaque protocole. Ces normes permettent au rseau Internet de fonctionner
lchelle mondiale et assurent la modularit du systme : il est possible de modifier les
protocoles luvre au sein dune couche, sans modifier les protocoles des autres cou-
ches, et le systme continue fonctionner dans son ensemble. Cette modularit est
analogue au fait de pouvoir changer un composant matriel dun ordinateur, par
exemple sa carte graphique, sans devoir rien changer dautre. Cette modularit est
essentielle pour permettre au systme dvoluer.

La communication bit par bit :


les protocoles de la couche physique
Commenons la prsentation de ces protocoles par ceux de la couche physique. Un
protocole de la couche physique doit raliser une tche extrmement simple : com-
muniquer des bits entre deux ordinateurs relis par un cble ou par radio.
Pour relier deux ordinateurs par un cble, et donc raliser le rseau le plus simple qui
soit, on pourrait prolonger le bus de lun des ordinateurs, afin de le connecter au bus
de lautre. Ainsi, le processeur du premier ordinateur pourrait crire, avec linstruc-
tion STA, non seulement dans sa propre mmoire, mais aussi dans celle du second.
Le processeur du second ordinateur pourrait alors charger, avec linstruction LDA, la
valeur crite par celui du premier.
La technique utilise en ralit nest pas beaucoup plus complique : le processeur du
premier ordinateur envoie des informations par le bus vers lun de ses priphriques, la
carte rseau, qui les transmet par un cble ou par un autre support physique, par
exemple par radio la carte rseau du second ordinateur qui les transmet, par le bus,
son processeur.

222 Groupe Eyrolles, 2013


16 Les rseaux

Figure 162 Transmission point point

La transmission dune carte rseau lautre met en uvre un protocole, appel proto-
cole physique. Un exemple de protocole physique est la communication par codes-
barres deux dimensions, comme les pictogrammes Flashcode utiliss par les tl-
phones, o chaque bit est exprim par un carr noir ou blanc.

Flashcode exprimant le nombre 5412082001000261

Les protocoles physiques qui permettent deux ordinateurs de communiquer par


cble ou par radio ne sont pas trs diffrents. Cependant, au lieu dutiliser des carrs
noirs et blancs, ils reprsentent les informations par des signaux lectromagntiques,
par exemple des variations de longueur donde, de phase ou dintensit dune onde.
Exercice 16.1
On utilise un lien physique peu fiable : chaque fois que lon transmet un 0 ou un 1, la proba-
bilit que ce bit ne soit pas reconnaissable larrive est 3/10. Pour pallier ce manque de fiabi-
lit, on utilise une forme de redondance (voir le chapitre 12) : quand lordinateur metteur
demande sa carte rseau denvoyer un 0, cette dernire envoie la suite de bits 0, 1, 0, 0, 1, qui
est interprte par la carte rseau de lordinateur rcepteur comme un 0. De mme, quand
lordinateur metteur demande sa carte rseau denvoyer un 1, elle envoie la suite de bits 1,
0, 1, 1, 0 qui est interprte par la carte rseau de lordinateur rcepteur comme un 1.
partir de combien de bits errons la suite de cinq bits envoye nest-elle plus discer-
nable de lautre suite ?
En dduire la probabilit quune suite de cinq bits envoye ne soit pas reconnaissable
larrive.
Quels sont les avantages et inconvnients de cette mthode ?

Groupe Eyrolles, 2013 223


Informatique et sciences du numrique

SUJET DEXPOS Protocoles et codages

Chercher sur le Web quels sont les protocoles utiliss dans les liaisons RS-232 dune part, et dans les liaisons
USB dautre part. Quels sont les avantages dUSB par rapport RS-232 ? Chercher de mme ce que sont les
codages Manchester dune part et NRZI dautre part. Quels sont les avantages du codage Manchester par rap-
port au codage NRZI ?

Les rseaux locaux :


les protocoles de la couche lien
Ltape suivante consiste construire un rseau local, cest--dire form de quelques
machines connectes, par un protocole physique, un ordinateur central : un serveur. Pour
envoyer des informations un autre ordinateur, chaque ordinateur passe par le serveur.
De mme quil tait ncessaire de distinguer les diffrentes cases de la mmoire dun
ordinateur en donnant chacune un nom, son adresse, il est ncessaire de distinguer les
diffrents ordinateurs dun rseau local en donnant chacun un nom : son adresse MAC
(Medium Access Control). Une adresse MAC est un mot de 48 bits que lon crit comme
un sextuplet de nombres de deux chiffres en base seize, les seize chiffres scrivant 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f : par exemple 10:93:e9:0a:42:ac. Une adresse MAC
unique est attribue chaque carte rseau au moment de sa fabrication. Ladresse MAC
dune carte rseau, priphrique dun ordinateur, identifie ce dernier sur le rseau local.

Figure 163 Rseau local

224 Groupe Eyrolles, 2013


16 Les rseaux

Les protocoles grce auxquels diffrents ordinateurs, connects au mme serveur,


changent des informations entre eux sont appels des protocoles de la couche lien. Un
protocole simple consiste, pour le serveur, changer des informations successive-
ment avec chaque ordinateur du rseau. Ainsi, chaque ordinateur a un crneau de
temps pr-tabli qui lui est ddi priodiquement pour communiquer avec le serveur,
durant lequel le protocole physique pelle bit bit linformation transmettre.
Toutefois, les protocoles de la couche lien les plus utiliss, par exemple Ethernet et
WiFi, utilisent un autre mcanisme qui autorise chaque ordinateur envoyer des
informations au serveur nimporte quel moment toujours via un protocole phy-
sique. Ce mcanisme vite de rserver un crneau pour un ordinateur qui na peut-tre
rien communiquer au serveur. Cependant, quand plusieurs ordinateurs envoient des
informations en mme temps, les messages se brouillent on dit quil y a une collision
entre les messages et le serveur nen reoit aucun. Pour rsoudre ce problme, on uti-
lise une forme de redondance : quand le serveur reoit les informations envoyes par
un ordinateur, il en accuse rception et tant quun ordinateur na pas reu daccus de
rception, il renvoie son message priodiquement. Pour minimiser les risques de nou-
velles collisions, ce message est en gnral renvoy aprs un dlai de longueur ala-
toire. Ce protocole est un exemple dalgorithme qui ne peut fonctionner sans ala.
Le rle des protocoles de la couche lien est galement de dfinir le format des mes-
sages changs : de mme quun fichier PGM (voir le chapitre 9) nest pas simple-
ment une suite de pixels, mais contient aussi dautres informations la largeur et la
hauteur de limage, le nombre de niveaux de gris, etc. et est structur selon un cer-
tain format standard, les messages qui circulent sur les rseaux, les paquets, ne sont
pas simplement forms des bits transmis, mais contiennent des informations addi-
tionnelles et sont structurs selon un format standard.

T Paquet

Un paquet est une suite de bits structurs selon un certain format, destine tre change sur le rseau.

Exercice 16.2
Un pictogramme nest pas simplement une suite de carrs blancs et noirs, mais il contient
aussi des informations qui permettent au tlphone den trouver les bords et lorientation.
Quelle est la partie du format de chacun de ces pictogrammes qui joue ce rle ?

Groupe Eyrolles, 2013 225


Informatique et sciences du numrique

Combien de pictogrammes diffrents existe-t-il dans chacun de ces formats ? Comment ce


nombre se compare-t-il au nombre de pages existant sur le Web ?

SAVOIR-FAIRE Trouver les adresses MAC des cartes rseau dun ordinateur
Ouvrir une fentre terminal. Utiliser la commande ifconfig sous Linux, ou ipconfig /all
sous Windows.

Exercice 16.3 (avec corrig)


Trouver les adresses MAC des cartes rseau de son ordinateur.

Lorsquon tape la commande ifconfig ou ipconfig /all, diffrentes informations saffi-


chent, relatives la connexion de son ordinateur au rseau. Ces informations sont gnrale-
ment organises en paragraphes qui correspondent diffrentes cartes rseaux : par
exemple un paragraphe qui correspond la carte Ethernet qui gre la connexion par cble
et un autre qui correspond la carte WiFi qui gre la connexion par radio. On reconnat
dans chacun de ces paragraphes une adresse de la forme 10:93:e9:0a:42:ac : un sextuplet de
nombres de deux chiffres en base seize. Il sagit de ladresse MAC de chacune de ces cartes.

Exercice 16.4
Noter ladresse MAC dune carte rseau de son ordinateur. De quelle connexion rseau
sagit-il prcisment ? WiFi ? Ethernet ? Autre ? teindre, puis rallumer lordinateur.
Ladresse a-t-elle chang ?

Le rseau global : les protocoles


de la couche rseau
Utiliser un ordinateur central est possible pour un rseau de petite taille, mais cette
mthode ne peut pas sappliquer un rseau form de plusieurs milliards dordinateurs,
comme Internet : dune part, lordinateur central serait vite surcharg, dautre part sil
tombait en panne, ou sil tait dtruit, les communications sur la Terre entire seraient
interrompues. Cest pour cela que lon a invent dautres protocoles pour les rseaux de
grande taille, appels les protocoles rseau, qui fdrent les rseaux locaux de proche en
proche et utilisent les protocoles lien pour assurer les communications locales. Le plus
utilis des protocoles rseau est le protocole IP (Internet protocol).
Avec le protocole IP, chaque machine a une adresse, appele son adresse IP. Contrai-
rement ladresse MAC, celle-ci nest pas associe de manire durable un
ordinateur : quand un ordinateur est remplac par un autre, le nouveau peut hriter
de ladresse IP de lancien. linverse, si un ordinateur est dplac dun lieu un

226 Groupe Eyrolles, 2013


16 Les rseaux

autre, il change dadresse IP. Les adresses IP classiques (IPv4) sont des mots de
32 bits crits sous forme dun quadruplet de nombres compris entre 0 et 255, par
exemple 216.239.59.104.

POUR ALLER PLUS LOIN DIPv4 IPv6

Une adresse tant un mot de 32 bits, il ny a que 232 adresses IPv4 possibles, soit un peu plus de quatre
milliards : cest peu quand on sait que le rseau Internet contient dj trois milliards dordinateurs. Cette
pnurie en adresses IP, due limprvoyance des pionniers dInternet, qui cherchaient seulement connecter
quelques dizaines dordinateurs sans anticiper le succs de leur rseau, explique que lon cherche aujourdhui
les remplacer par des adresses de 128 bits (IPv6).

SAVOIR-FAIRE Trouver ladresse IP attribue un ordinateur


Ouvrir une fentre terminal. Utiliser la commande ifconfig sous Linux ou ipconfig /all
sous Windows.

Exercice 16.5 (avec corrig)


Trouver les adresses IPv4 attribues son ordinateur.
Lorsquon tape la commande ifconfig ou ipconfig /all, diffrentes informations saffi-
chent, relatives la connexion de son ordinateur au rseau. On reconnat parmi ces infor-
mations des adresses de la forme 216.239.59.104 : un quadruplet de nombres compris entre
0 et 255. Il sagit des adresses IPv4 attribues chacune des cartes rseaux de lordinateur.

Exercice 16.6
Noter les adresses IP attribues aux cartes rseau de son ordinateur. teindre, puis rallumer
cet ordinateur. Ces adresses ont-elle chang ?

Exercice 16.7
Soit un rseau connectant cinq ordinateurs : A, B, C, D et E. Est-il possible didentifier
chaque ordinateur de manire unique avec des adresses de 3 bits ? Dcrire un tel plan
dadressage : attribuer une adresse chaque ordinateur. Est-il galement possible didenti-
fier chaque ordinateur de manire unique avec des adresses de 2 bits ?

Exercice 16.8
Combien y a-t-il dadresses IPv4 ? Combien y a-t-il dadresses IPv6 ? Combien y a-t-il de
numros de tlphone en France ?

Avec les protocoles rseau, la notion de serveur est remplace par celle de routeur.
Pour envoyer des informations une machine dont ladresse IP est X, un ordinateur
commence par les envoyer au routeur auquel il est connect. En fonction de

Groupe Eyrolles, 2013 227


Informatique et sciences du numrique

ladresse X, celui-ci lenvoie un autre routeur, puis un autre, etc. jusqu ce que les
informations arrivent destination. On appelle ce procd le routage.
Les routeurs nayant pour fonction que de relayer les paquets en direction de leur
destination, ils ne mettent en uvre que des protocoles des couches physique, lien et
rseau, contrairement aux htes qui, eux, mettent en uvre des protocoles de toutes
les couches.

Figure 164 Rseau global. Routage de A B en passant par les routeurs R1, R2, R3, R4, R5, R6, R7 et R8.

T Routeur

Un routeur est un ordinateur dont la seule fonction est dacheminer des informations sur le rseau. Pour les
distinguer des routeurs, on appelle les autres ordinateurs du rseau des htes.

La figure suivante illustre le routage dinformations dun hte un autre, en passant


par deux routeurs et trois cbles : en chemin, sur chaque machine les traitant, les
informations transmises sont successivement encapsules quand elles passent dune
couche la couche infrieure, puis dcapsules quand elles passent dune couche
une couche suprieure.

228 Groupe Eyrolles, 2013


16 Les rseaux

Figure 165 Les protocoles luvre lors du routage.


Chemin suivi par linformation travers les couches sur chaque machine.

On peut comparer le routage au systme du courrier postal. Si, Sydney, un Austra-


lien expdie une lettre ladresse 2004, route des Lucioles, Valbonne, France , le
facteur australien napporte pas cette lettre directement son destinataire, contraire-
ment ce que faisaient les facteurs au XVIIe sicle : il la met dans un avion en
direction de Hong-Kong ou de Los Angeles, o un autre facteur la met dans un
avion en direction de Francfort ou de Paris, o un autre facteur la met dans un avion
en direction de Nice, o un facteur lapporte finalement en camionnette, au 2004 de
la route des Lucioles, Valbonne.
Un routeur, qui reoit des informations envoyer une adresse IP X, doit choisir le
routeur suivant, en direction de X. De mme que le facteur australien sait quune
lettre pour Valbonne, ou plus gnralement pour la France, peut passer par Hong-
Kong, le routeur a un rpertoire, appel table de routage, qui indique que la premire
tape dun chemin vers ladresse X est le routeur dont ladresse IP est B, auquel il est
directement connect. Il envoie donc ces informations vers le routeur B, qui consulte
son tour sa propre table de routage, et ainsi de suite jusqu arriver lordinateur
dont ladresse est X. Comme dans un jeu de piste, on ne connat pas le chemin
lavance, mais, chaque tape, on dcouvre la suivante.
Pour construire et maintenir jour leurs tables de routage, les routeurs utilisent un
algorithme de routage, par exemple lalgorithme de Bellman-Ford : outre acheminer des
informations dun point un autre, chaque routeur envoie priodiquement chaque

Groupe Eyrolles, 2013 229


Informatique et sciences du numrique

routeur auquel il est connect directement par un protocole lien, la liste des
adresses IP vers lesquelles il connat un chemin, dont bien entendu sa propre adresse,
et la longueur de ce chemin. Grce cet algorithme et au fur et mesure quil reoit
des listes, chaque routeur dcouvre peu peu ltat du rseau et, ce faisant, les che-
mins les plus courts pour atteindre les destinations prsentes dans le rseau. Ainsi, un
routeur qui reoit du routeur B linformation que B a reu du routeur C linformation
que C est directement connect lordinateur X, met jour sa table de routage en
mmorisant quun chemin pour accder lordinateur X, en passant par deux inter-
mdiaires, commence par le routeur B.
Cette mise jour dynamique des tables de routage est ce qui donne sa souplesse au
rseau Internet. Si par exemple le cble entre les routeurs B et C est dtruit, les tables
de routage se mettent graduellement jour en dcouvrant dautres chemins pour
acheminer les informations vers la machine X. lorigine, cette ide servait donner
une robustesse au rseau en temps de guerre : tant que deux points restaient con-
nects par un chemin dans le graphe des routeurs, il leur tait possible de communi-
quer. Par la suite, on sest rendu compte que cette souplesse tait de toutes faons
ncessaire dans un rseau de trois milliards dordinateurs, o il est invitable que des
ordinateurs soient en permanence ajouts ou supprims du rseau.
Si les protocoles rseau sont trs souples, ils sont en revanche peu fiables : quand un
routeur est satur par trop dinformations transmettre, il en dtruit tout simple-
ment une partie. En outre, quand des informations ont t envoyes dun routeur
un autre trop longtemps sans arriver destination, elles sont galement dtruites.

SAVOIR-FAIRE Dterminer le chemin suivi par linformation


Dans une fentre terminal, la commande ping suivie dun nom de domaine affiche
ladresse IP associe ce nom de domaine. La commande traceroute sous Linux ou
tracert sous Windows, suivie dune adresse IP, affiche les routeurs dun chemin menant de
son ordinateur celui dont ladresse IP est indique.

Exercice 16.9 (avec corrig)


Trouver un chemin entre son ordinateur et lordinateur associ au nom de domaine
www.google.fr.

Dans une fentre terminal, on tape la commande ping www.google.fr et une adresse IP
saffiche, par exemple 173.194.34.55. Cest ladresse dun ordinateur de Google. On tape
ensuite la commande traceroute 173.194.34.55 ou tracert 173.194.34.55 et une liste
saffiche des routeurs qui forment un chemin entre sa machine et celle de Google.

230 Groupe Eyrolles, 2013


16 Les rseaux

SAVOIR-FAIRE Dterminer ladresse IP du serveur par lequel un ordinateur


est connect Internet
Dans une fentre terminal, la commande netstat -r sous Linux ou ipconfig /all sous
Windows affiche diffrentes informations relatives la connexion de son ordinateur au
rseau, en particulier la passerelle par dfaut (default gateway) qui est le routeur par lequel cet
ordinateur est connect Internet.

Exercice 16.10 (avec corrig)


Dterminer ladresse IP du routeur par lequel son ordinateur est connect Internet.

On tape la commande netstat -r ou ipconfig /all. Dans les informations affiches, on


recherche la passerelle par dfaut (default gateway) indique, qui est le routeur. Ce dernier
est identifi soit directement par son adresse IP, soit par un nom de la forme
gw.adalovelace.fr ; dans ce second cas, on peut trouver ladresse IP associe ce nom
avec la commande ping.

Exercice 16.11
Un algorithme de routage. On attribue chaque lve une nouvelle adresse mail, par
exemple anonyme1@adalovelace.fr, anonyme2@adalovelace.fr, etc. Chaque lve garde
cette adresse secrte et il la marque sur une feuille de papier. Ces feuilles sont mlanges
dans un chapeau et chacun tire une adresse en sassurant quil ne tire pas la sienne propre.
Chaque lve a uniquement le droit denvoyer des courriers ladresse quil a tire dans le
chapeau et de rpondre lenvoyeur de tout courrier quil reoit son adresse .
Chaque lve envoie un courrier ladresse quil a tire, dans lequel il indique son propre
nom. Par exemple, Alice enverrait :

sujet : Hello
corps du message :
Alice (par -)

Chaque lve construit une table de routage qui indique, pour chaque lve dont il a
entendu parler, ladresse de la personne par qui il en a entendu parler pour la premire fois.
Par exemple, la table de routage dAlice peut avoir cette forme :

Alice (par -)
Djamel (par anonyme2@adalovelace.fr)
Frdrique (par anonyme2@adalovelace.fr)
Hector (par anonyme7@adalovelace.fr)

chaque fois quun lve reoit un message, il le lit, met jour sa table de routage et y
rpond en copiant, dans le corps du message ltat de sa table de routage mise jour. Alice
enverrait par exemple :

Groupe Eyrolles, 2013 231


Informatique et sciences du numrique

sujet : Hello
corps du message :
Alice (par -)
Djamel (par anonyme2@adalovelace.fr)
Frdrique (par anonyme2@adalovelace.fr)
Hector (par anonyme7@adalovelace.fr)

Au bout dune dizaine de minutes, on arrte denvoyer et de rpondre aux messages.


On passe alors la seconde phase de lexercice : un lve essaie denvoyer un vritable mes-
sage un autre lve. Pour cela, il envoie son message ladresse correspondant au nom de
son destinataire dans sa table de routage.
Par exemple :
Alice envoie ladresse anonyme2@adalovelace.fr le message suivant :

Sujet : message pour Frdrique


Corps du message : Noublie pas de me rapporter lexemplaire de Madame
Bovary que je tai prt il y a six mois. Merci. Alice.

Si un lve autre que son destinataire reoit ce message, il le renvoie ladresse correspon-
dant au nom de son destinataire dans sa propre table de routage, et ainsi de suite jusqu
ce que le message arrive destination.
quelle condition un message arrive-t-il bien son destinataire ?

La rgulation du rseau global :


les protocoles de la couche transport
Les programmes que lon utilise tous les jours, par exemple les navigateurs web ou les
programmes de gestion du courrier lectronique, ne peuvent pas directement utiliser
le protocole IP, principalement pour deux raisons : dune part, le protocole IP ne
permet de transfrer dun ordinateur un autre que des informations de taille limite :
en gnral, des paquets de 1500 octets au maximum. Dautre part, comme on la vu,
IP est un protocole peu fiable : ds quun serveur est surcharg, il dtruit des informa-
tions qui narrivent donc pas leur destinataire. On utilise donc un type supplmen-
taire de protocole : les protocoles de transport, dont le plus utilis est le protocole TCP
(Transmission Control Protocol). Les protocoles de transport utilisent les protocoles
rseau pour acheminer des informations contenues dans des paquets IP, dun bout
lautre du rseau, et assurent que tout paquet IP envoy est arriv bon port.
Pour poursuivre la comparaison avec le service postal, si on attache une importance
particulire une lettre, on lenvoie en recommand et on attend un accus de rcep-

232 Groupe Eyrolles, 2013


16 Les rseaux

tion, qui permet de savoir que sa lettre a bien t reue. La couche transport sassure
que la communication a bien lieu de bout en bout, comme prvu.
Comme les protocoles de la couche lien, TCP utilise une forme de redondance pour
fiabiliser les communications. Il utilise les protocoles rseaux pour envoyer des
paquets IP dun ordinateur un autre et pour envoyer un accus de rception du des-
tinataire lexpditeur. Tant que laccus de rception narrive pas, le mme paquet
est renvoy priodiquement. Si trop daccuss de rception narrivent pas, TCP
ralentit la cadence denvoi des paquets pour sadapter une congestion ventuelle du
rseau global, puis r-acclre la cadence quand les accuss de rception arrivent.
Une autre fonction de TCP est de dcouper les informations transmettre en
paquets de 1 500 octets. Par exemple, pour envoyer une page web de 10 000 octets,
TCP dcoupe ces 10 000 octets en paquets plus petits, chacun de taille standard, et
les envoie lun aprs lautre. lautre bout du rseau, quand tous ces paquets stan-
dards sont arrivs, TCP les remet dans lordre et r-assemble leurs contenus pour
reconstruire la page web.

ALLER PLUS LOIN Le port

Comme plusieurs programmes peuvent utiliser TCP en mme temps et sur la mme machine, TCP attribue
chacun deux un numro : un port. Un numro de port permet TCP de distinguer les paquets correspondant
aux diffrents programmes qui communiquent en mme temps.

Exercice 16.12
Taper la commande ping www.google.fr dans une fentre terminal et observer ce qui se
passe. En dduire la valeur dun temps dattente adquat aprs lequel TCP devrait consi-
drer que laccus de rception dun paquet envoy www.google.fr est perdu. Quelle
serait la consquence dutiliser un temps dattente plus court ? Quelle serait la consquence
dutiliser un temps dattente plus long ?

Exercice 16.13
On suppose que la dure attendre entre lenvoi dun paquet et la rception dun accus
de rception pour ce paquet est 1 seconde en moyenne, et que les paquets peuvent chacun
contenir jusqu 1 500 octets de donnes. On considre les deux configurations suivantes
pour TCP.
Configuration A. TCP est configur pour nenvoyer un nouveau paquet quaprs avoir
reu laccus de rception du paquet prcdent.
Configuration B. TCP est autoris envoyer des grappes de 20 paquets la suite et
accuser rception avec un seul accus de rception pour toute la grappe, au lieu dun
accus de rception pour chaque paquet. En consquence, un paquet perdu entrane
labsence daccus de rception pour la grappe laquelle il appartient, et donc
demande de renvoyer la grappe entire au lieu du seul paquet perdu.

Groupe Eyrolles, 2013 233


Informatique et sciences du numrique

Combien de temps faut-il au minimum pour envoyer 1 Mo destination avec la


configuration A ? Avec la configuration B ? Pour simplifier, on suppose que le temps
pass envoyer 20 paquets la suite est ngligeable par rapport 1 seconde.
On suppose maintenant quen moyenne, 1% des paquets envoys vers une destination
se perdent en chemin. En moyenne, combien de paquets faudra-t-il faire transiter sur le
rseau pour transfrer le fichier de 1 Mo destination avec la configuration A ? Avec la
configuration B ? Pour simplifier, on considre qu la deuxime fois quon envoie un
paquet, il arrive destination coup sr, et quun accus de rception envoy arrive
galement coup sr.
Quels sont les avantages et inconvnients de la configuration B par rapport la
configuration A ?

Exercice 16.14
Considrons un protocole de transport qui identifie chaque paquet envoy par un numro de
squence exprim sur 4 octets, et admettons que chaque paquet envoy peut contenir jusqu
1 500 octets de donnes transmettre. Quelle est la taille minimale de fichier transmettre
partir de laquelle on devrait rutiliser un numro de squence dj utilis au dbut de lenvoi
de ce mme fichier ? Mme question si on dduit des 1 500 octets les informations de contrle
ncessaires au fonctionnement des couches au-dessus de la couche Lien, savoir 20 octets den-
tte pour le protocole de transport, et 20 octets den-tte IP ?

Exercice 16.15
Chercher sur le Web ce quest le protocole UDP. Quelles sont les diffrences entre UDP et
TCP ? Quels sont les principaux avantages et inconvnients de chacun de ces protocoles ?
Citer des exemples de programmes qui utilisent UDP, dautres qui utilisent TCP, et expliquer
ces choix.

Programmes utilisant le rseau :


la couche application
Les protocoles des couches physique, lien, rseau et transport fournissent le socle
dInternet : ils permettent de transmettre de manire fiable des fichiers de toutes
tailles, dune machine nimporte quelle autre machine connecte Internet. En
plus de ce socle, on distingue nanmoins un dernier type de protocoles, qui utilisent
les services de la couche transport pour le compte de certains programmes que lon
utilise tous les jours, comme les navigateurs web ou les logiciels de courrier lectro-
nique. Il sagit des protocoles dapplication.
Les logiciels de courrier lectronique utilisent par exemple le protocole dapplication
SMTP (Simple Mail Transfer Protocol), les navigateurs web utilisent le protocole
dapplication HTTP (HyperText Transfer Protocol) etc. Un autre protocole dapplica-
tion important est DNS (Domain Name System) qui, aux adresses IP, associe des noms
de domaines comme www.moi.fr.

234 Groupe Eyrolles, 2013


16 Les rseaux

Quand un navigateur cherche accder une page web situe sur un autre ordina-
teur, il utilise DNS pour trouver ladresse IP de lordinateur hte sur lequel cette
page web se trouve, puis le protocole HTTP pour demander cette page lordinateur
hte. Si cette page est par exemple la page daccueil dun annuaire lectronique, elle
contiendra des champs remplir, et cest nouveau le protocole HTTP qui achemi-
nera les informations renseignes vers lordinateur hte, qui, en fonction de ces
informations, renverra en gnral une autre page avec la rponse la requte.
Au bout du compte, pour transfrer une page web dun ordinateur un autre, HTTP
confie cette page web au protocole TCP, qui la dcoupe en paquets et confie chaque
paquet au protocole IP, qui choisit un lien utiliser en direction de la destination, puis
confie chaque paquet au protocole de lien en vigueur sur ce dernier, par exemple WiFi,
qui le confie enfin au protocole physique, qui gre lacheminement des bits codant ces
paquets travers ce lien. Chaque protocole, son niveau, contribue la communica-
tion. Chaque protocole est simple ; cest de leur interaction qui nat la complexit.

SUJET DEXPOS DNS

Prsenter les principes de base de DNS.

Quelles lois sappliquent sur Internet ?


Jusquau milieu du XXe sicle, quand un livre ou un journal tait publi, il ltait dans
un pays particulier et sa publication tait rgie par les lois de ce pays. Quand un objet
tait vendu, il ltait dans un pays particulier et cette vente tait rgie par les lois de ce
pays. Ainsi, la publication de certains textes ou la vente de certains objets tait auto-
rise dans certains pays, mais interdite dans dautres.
Parce que cest un rseau mondial, Internet permet de publier, dans un pays, des
textes qui peuvent tre lus dans le monde entier et, de mme, de vendre des objets
qui peuvent tre achets dans le monde entier. Ds lors, quelle loi appliquer ? cette
question, qui est nouvelle, plusieurs rponses ont t imagines, sans que personne ne
sache encore laquelle simposera sur le long terme :
lapplication des lois du pays dans lequel le texte est publi ou lobjet mis en vente,
lapplication des lois du pays dans lequel le texte peut tre lu ou lobjet achet ce
qui obligerait, par exemple, un hbergeur de site web bloquer laccs certains
sites depuis certains pays,
ou lmergence dun minimum de rgles universelles.

Groupe Eyrolles, 2013 235


Informatique et sciences du numrique

SUJET DEXPOS Laffaire LICRA contre Yahoo!

Quest-ce que larticle R.645-1 du code pnal franais ? Quest-ce que le premier amendement de la Constitu-
tion des tats-Unis ? En quoi sont-ils contradictoires ? Chercher des documents sur laffaire de la LICRA
contre Yahoo!, relative la vente aux enchres dobjets nazis sur Internet (de lordonnance du Tribunal de
Grande Instance de Paris du 20 novembre 2000, jusqu la dcision de la Cour Suprme des tats-Unis du
30 mai 2006). Montrer en quoi cette affaire illustre le problme de lapplication de lgislations diffrentes
selon les pays pour la vente sur Internet.

Qui gouverne Internet ?


Quelques rgles dorganisation dInternet doivent tre universellement acceptes. Par
exemple, pour que les ordinateurs du monde entier puissent communiquer, il est
ncessaire quils utilisent les mmes protocoles et pour quil ny ait pas de confusion
entre les adresses IP, il faut que deux ordinateurs distincts naient jamais la mme
adresse. Internet nest donc pas entirement dcentralis : un petit nombre de dci-
sions doivent tre prises en commun.

SUJET DEXPOS Que sont

lInternet Engineering Task Force (IETF),


lInternet Corporation for Assigned Names and Numbers (ICANN),
lInternet Society (ISOC),
le World Wide Web Consortium (W3C),
le WhatWG,
et lUnion internationale des tlcoms (UIT) ?
Quel est le rle et quel est le statut de chacune de ces organisations ?

Ici, plusieurs modes dorganisation sont en concurrence, nouveau sans que per-
sonne ne sache lequel simposera sur le long terme :
lmergence dorganisations internationales rgies par des traits entre tats,
lmergence dorganisations internationales informelles, dont la lgitimit vient uni-
quement de la confiance qui leur est accorde,
lmergence dorganisations propres aux pays o Internet est le plus dvelopp (cette
dernire solution ayant linconvnient daugmenter les diffrences de dveloppement
dInternet entre les pays).

236 Groupe Eyrolles, 2013


16 Les rseaux

ALLER PLUS LOIN Calculer dans les nuages (cloud computing)

Au cours de lhistoire de linformatique, des modes centralisatrices et dcentralisatrices


se sont succdes. Ainsi, jusquaux annes 1970, les entreprises navaient quun seul
ordinateur, auquel taient connects de nombreux terminaux, par exemple forms dun
clavier et dun cran, qui permettaient diffrentes personnes deffectuer des calculs
sur cet ordinateur. partir des annes 1980, ces terminaux ont t remplacs par des
micro-ordinateurs, connects par un rseau un serveur. Les calculs ntaient alors plus
effectus par un ordinateur central, mais par chacun de ces micro-ordinateurs.
Depuis le milieu des annes 2000, on voit apparatre un retour de la centralisation.
Des entreprises, qui vendaient nagure des programmes des clients qui les utili-
saient pour effectuer des calculs sur leurs ordinateurs, proposent dsormais ces
mmes clients deffectuer elles-mmes ces calculs leur place. Les clients ont juste
besoin de communiquer leurs donnes ces entreprises, qui font les calculs sur leurs
propres ordinateurs et envoient le rsultat de ces calculs leurs clients. Cest ce quon
appelle le calcul dans les nuages (cloud computing).
Par exemple, au lieu dinstaller un logiciel de courrier lectronique sur son ordinateur
et de lutiliser pour envoyer des courriers, on peut, chaque fois que lon souhaite
envoyer un courrier, se connecter un ordinateur distant, en gnral au moyen
dune page web, et communiquer le texte de son courrier cet ordinateur, qui se
chargera de lenvoyer ; cest lide du Webmail. De mme, au lieu dacheter un logi-
ciel de comptabilit et de lutiliser, une entreprise peut se connecter, chaque fois
quelle souhaite effectuer une opration comptable, une machine distante qui
effectue cette opration pour lentreprise. Lordinateur local ne sert plus qu com-
muniquer des informations cette machine distante, comme jadis les terminaux.
Utiliser des programmes sur une machine distante simplifie beaucoup de choses. Il
nest plus ncessaire dinstaller des logiciels sur son ordinateur, de les mettre jour
de temps en temps, etc. De plus, il devient possible denvoyer un courrier depuis
nimporte quel ordinateur : dun web caf de Bogota ou de Caracas, comme de son
bureau. Pour une entreprise, cela permet de diminuer la taille du service informa-
tique, puisquil lui suffit dsormais davoir quelques ordinateurs relis au rseau.
Cependant, cette volution prsente aussi un risque de dpossession des utilisateurs
de leur pouvoir : au lieu davoir ses programmes, ses courriers, ses photos, sa compta-
bilit, etc. sur son ordinateur, on prfre les confier des entreprises et des ordina-
teurs distants. En outre, on a parfois une garantie assez faible de leur conservation
sur le long terme, de son pouvoir de les effacer ou de son contrle sur les usages que
ces entreprises peuvent faire de ces donnes.

Ai-je bien compris ?


Quest-ce quun protocole ? Quest-ce quune couche ?
Quelles sont les cinq couches de protocoles dont sont composs les rseaux ?
Comment fabriquer un protocole fiable en utilisant un protocole peu fiable ?

Groupe Eyrolles, 2013 237


17
Norbert Wiener (1894-1964) est le fondateur, la fin des
annes 1940, de la science du pilotage ou cyberntique.
Entour dun groupe interdisciplinaire de mathmaticiens, logi-
ciens, anthropologues, psychologues, conomistes, il a
cherch comprendre les processus de commande et de com-
munication chez les tres vivants, dans les machines et dans les
socits. Le concept central de la cyberntique est celui de cau-
salit circulaire ou contrle en boucle ferme (feedback).
Les robots
C HAPITRE AVANC

Un robot ? Cest un ordinateur deux roues.

Dans ce chapitre, nous introduisons de nouveaux objets :


les robots, qui sont essentiellement des ordinateurs munis
de capteurs et dactionneurs. Nous voyons comment
les grandeurs captes sont numrises et comment le principe
de la boucle ferme permet de contrler une action.
Enfin, nous voyons comment programmer un robot
laide dune boucle infinie dans laquelle les capteurs
sont interrogs et les actionneurs activs.
Informatique et sciences du numrique

Les composants dun robot


Comme un ordinateur ou un tlphone, un robot est form dun processeur, dune
mmoire et de priphriques. Ces derniers se divisent en priphriques de sortie, ou
actionneurs, qui permettent au robot de se mouvoir et dagir sur son environnement, et
ses priphriques dentre, ou capteurs, qui lui permettent danalyser cet environnement.

Dans ce chapitre, on utilise le robot mOway, mais les connaissances quon prsente
ne sont pas propres ce robot et peuvent facilement se transposer dautres.
Les actionneurs du robot mOway sont deux moteurs qui font tourner ses roues et
diverses diodes lectroluminescentes que lon peut allumer ou teindre. Quand on
fait tourner les deux roues du robot la mme vitesse, il avance en ligne droite.
Quand on ralentit ou acclre une roue par rapport lautre, il tourne.
Les capteurs du robot mOway sont les suivants :
Quatre dtecteurs dobstacles qui mettent rgulirement de brves impulsions
de lumire infrarouge. Quand le robot est proche dun obstacle, cette lumire est
rflchie par lobstacle et dtecte par le robot.
Un capteur de luminosit , qui identifie la direction et lintensit dune source
lumineuse.
Deux capteurs de couleur de sol , qui analysent la rflexion dune lumire infra-
rouge sur le sol et permettent, par exemple, dy reprer une ligne.
Un capteur dont la rsistance lectrique varie avec la temprature.
Un microphone qui dtecte la prsence ou labsence dun son dont la frquence
est comprise entre 100 Hz et 20 kHz, et aussi lintensit de ce son.
Un acclromtre qui mesure lacclration linaire du robot et la gravit. Cest le
mme composant que sur les manettes de jeux et certains tlphones : une accl-
ration dforme deux plaques souples dun condensateur, ce qui fait varier sa capa-
cit. Cet acclromtre indique aussi la direction verticale, ce qui permet, par
exemple, de savoir si le robot sest retourn.
Il est possible dajouter dautres priphriques , grce des bus similaires ceux
dcrits au chapitre 15.

240 Groupe Eyrolles, 2013


17 Les robots

Le robot contient une batterie rechargeable qui le rend autonome, mais il peut dialo-
guer avec un ordinateur par radio ou par un rseau WiFi (voir le chapitre 16).
Tous les capteurs et actionneurs sont raccords deux micro-contrleurs. Un micro-
contrleur est un circuit qui contient plusieurs composants, en particulier un proces-
seur et de la mmoire (voir le chapitre 15). Le micro-contrleur principal, appel
PIC18F86J50 sur la figure ci-aprs, excute un programme charg dans sa mmoire.
On reviendra plus tard sur le rle du micro-contrleur secondaire.

Groupe Eyrolles, 2013 241


Informatique et sciences du numrique

La numrisation des grandeurs captes


Les capteurs mesurent des grandeurs physiques : intensit lumineuse, intensit
sonore, etc. et expriment en gnral ces grandeurs sous la forme dune tension lec-
trique. Pour que ces grandeurs puissent tre utilises par un processeur, cette tension
doit, son tour, tre exprime par un nombre reprsent en binaire, comme le sont le
niveau de gris dun pixel quand on numrise une image ou la pression quand on
numrise un son (voir le chapitre 9). Pour cela, deux composants sont utiliss : un
chantillonneur-bloqueur et un convertisseur analogique-numrique. Le premier bloque
la tension une valeur stable, pendant que le second mesure cette valeur et produit
un nombre, reprsent en binaire, qui est la valeur de cette tension.

Par exemple, quand la valeur analogique est comprise entre 0 et 5 V et la valeur


numrique comprise entre 0 et 1 023 (cest--dire reprsente sur 10 bits), la tension
est mesure par pas de 5 / 1 023 = 4,88 mV. Cette valeur est appele la rsolution du
convertisseur. Pour trouver la valeur numrique dune tension, un convertisseur ana-
logique-numrique nutilise que des comparaisons entre cette tension et des multi-
ples entiers de la rsolution en procdant par dichotomie (voir le chapitre 20).
Exercice 17.1
Si un convertisseur analogique-numrique transforme une tension comprise entre 0 et 5 V
en un nombre compris entre 0 et 1 023, quelles valeurs analogiques correspondent les
valeurs numriques 512, 256 et 768 ?

Exercice 17.2
Si un convertisseur analogique-numrique transforme une tension comprise entre 0 et 5 V
en un nombre compris entre 0 et 1 023, en procdant par dichotomie, combien de compa-
raisons sont ncessaires pour dterminer la valeur numrique correspondante ?

242 Groupe Eyrolles, 2013


17 Les robots

Exercice 17.3
Si on numrise une tension comprise entre 0 et 5 V, dfinie avec une prcision de 20 mV, par
un nombre compris entre 0 et 1 023, tous les bits de la valeur numrique ont-ils une
signification ? Sur combien de bits suffirait-il de numriser cette valeur ?

Le contrle de la vitesse : la mthode


du contrle en boucle ferme
Pour faire tourner un moteur une vitesse dtermine, il ne suffit pas de fixer la ten-
sion dalimentation du moteur, car la vitesse dpend aussi de la masse du robot, de la
nature du terrain sur lequel le robot se dplace, des conditions climatiques si le robot
est lextrieur, etc. La mthode appele contrle en boucle ferme utilise un capteur
pour mesurer la vitesse du moteur, compare cette dernire la vitesse souhaite et
rajuste la commande du moteur en fonction de lcart constat : si cette vitesse est
infrieure la vitesse souhaite, on augmente la tension dalimentation du moteur, si
elle est suprieure, on la diminue. Mesurer en permanence la vitesse des moteurs et
adapter leur tension dalimentation en fonction de lcart, par rapport la consigne,
est le rle du micro-contrleur secondaire, appel PIC16F687 sur la figure.
Pour mesurer la vitesse de la roue du robot, on utilise un capteur de vitesse form
dun disque qui alterne des zones opaques et transparentes, fix sur laxe du moteur et
clair par une source de lumire. On calcule la vitesse du moteur en comptant le
nombre de fois que la lumire est occulte par unit de temps. La frquence de ce cli-
gnotement est proportionnelle la vitesse. On utilise donc un circuit qui convertit
cette frquence en valeur de vitesse, de faon pouvoir la contrler.

Groupe Eyrolles, 2013 243


Informatique et sciences du numrique

Exercice 17.4
Pour le contrleur de vitesse que lon vient de dcrire, quelle est la vitesse de la roue en
fonction de la frquence de clignotement, du nombre dencoches sur la roue et du rayon de
la roue ? Pour une roue de 2 cm de rayon et contenant 64 encoches, quelle vitesse corres-
pond la frquence 128 Hz ? Quelle frquence correspond la vitesse 0,4 m/s ? Expliquer
comment on peut exprimer la vitesse sous forme numrique, en utilisant un compteur
numrique qui augmente dune unit chaque impulsion lumineuse.

Programmer un robot : les actionneurs


On programme le robot mOway en chargeant dans sa mmoire un programme,
depuis un ordinateur ordinaire. Comme on la vu, ce programme est ensuite excut
par le microcontrleur principal. Ce programme doit tre crit non en Python, mais
en C. Cependant, le fragment de C utilis dans ce chapitre nest pas trs diffrent de
Python.
On commence donc par crire un programme et le compiler. On utilise pour cela
lenvironnement de dveloppement MPLAB. On le transmet ensuite au robot laide
dun cble USB et du programme mOwayGUI (mOway Graphic User Interface).

ALLER PLUS LOIN Un programme sans fin

Contrairement beaucoup de programmes qui calculent un rsultat et se terminent, un programme comman-


dant un robot, un tlphone, un rseau et, plus gnralement, un objet qui interagit avec son environnement,
doit ne jamais se terminer, car le robot ou le tlphone ne cessent jamais dinteragir avec leur environnement.
Quand un tel programme se termine, on dit que le robot ou le tlphone est en panne, car il ne rpond plus
aux sollicitations de son environnement et, bien souvent, on relance ce programme.

Pour crire un programme, on utilise des fonctions qui interrogent les capteurs et
commandent les actionneurs. Ces fonctions ne font pas partie du langage C lui-
mme, mais dune extension de C fournie par le fabricant du robot. On indique que
lon utilise cette extension en ajoutant au dbut de son programme les commandes :
#include "lib_mot_moway.h"
#include "lib_sen_moway.h"

Pour faire avancer le robot, on utilise la fonction MOT_STR. Par exemple, linstruction
MOT_STR(50,FWD,TIME,100); fait avancer le robot la vitesse 50, en marche avant, pen-
dant 10 secondes (100 diximes de seconde).
Le premier argument de cette fonction est la vitesse laquelle on fait avancer le
robot. Il est compris entre 0 et 100 ; 0 correspond 0 cm/s, 25 11 cm/s, 50

244 Groupe Eyrolles, 2013


17 Les robots

13 cm/s, 75 15 cm/s et 100 17 cm/s. Le deuxime, FWD ou BACK, dfinit le sens de


la marche : avant ou arrire. Le troisime argument indique si lon souhaite spcifier
une dure ou une distance. Dans ce chapitre, on spcifie toujours une dure et cet
argument sera TIME. Le quatrime argument, compris entre 0 et 255, est la dure du
mouvement exprime en diximes de secondes. On peut aussi faire avancer le robot
pendant un temps infini en donnant, conventionnellement, la valeur 0 comme dure.
De mme, pour faire tourner le robot, on utilise la fonction MOT_ROT. Par exemple,
linstruction MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50); fait tourner le robot gauche, la
vitesse angulaire 25, dun angle de 180 degrs (50 centimes de tour).
Le premier argument de cette fonction est la vitesse angulaire laquelle on fait
tourner le robot. Il est compris entre 0 et 100 ; 0 correspond 0 tour/s, 25
0,52 tour/s, 50 0,62 tour/s, 75 0,73 tour/s et 100 0,80 tour/s. Les deux argu-
ments suivants permettent de choisir si lon fait tourner le robot autour de son centre
ou autour de lune de ses roues. Dans ce chapitre, on le fera toujours tourner autour
de son centre et ces arguments seront toujours FWD et CENTER. Le quatrime argument,
LEFT ou RIGHT, dfinit le sens de rotation du robot : vers la gauche ou vers la droite. Le
cinquime argument peut prendre deux valeurs, ANGLE ou TIME ; il indique si lon sou-
haite spcifier langle de rotation ou la dure de la rotation. Le sixime argument est,
en fonction de la valeur du cinquime, langle de la rotation exprim en centimes de
tour ou sa dure exprime en diximes de secondes. Il est compris entre 0 et 100 dans
le premier cas et entre 0 et 255 dans le second. nouveau, on peut aussi faire tourner
le robot pendant un temps infini, en donnant, conventionnellement, la valeur 0
comme dure.
Quand on excute une telle instruction MOT_STR ou MOT_ROT, on initie un mouvement,
puis on passe linstruction suivante. Le robot continue alors son mouvement jusqu
la fin, moins que ce mouvement ne soit interrompu par linitiation dun autre mou-
vement. En effet, si la poursuite de lexcution du programme initie un second mou-
vement, alors le premier mouvement est interrompu. Par exemple, quand on excute
linstruction :
MOT_STR(50,FWD,TIME,100);
MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50);

on commence par excuter linstruction MOT_STR(50,FWD,TIME,100); qui initie un mou-


vement rectiligne de 10 s, puis on excute tout de suite la seconde instruction
MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50); qui interrompt le mouvement en cours et initie
un mouvement de rotation dun angle de 180 degrs. Le mouvement rectiligne est
interrompu quelques fractions de secondes seulement aprs avoir t initi. Il nest
donc pas effectu.

Groupe Eyrolles, 2013 245


Informatique et sciences du numrique

Si on souhaite effectuer le mouvement rectiligne en entier, avant de passer la rota-


tion, on doit utiliser la variable MOT_END qui prend la valeur 0 (quivalent de False
en C) quand le robot est en mouvement et la valeur 1 (quivalent de True en C)
quand le robot est immobile. Ainsi, quand on excute linstruction :
MOT_STR(50,FWD,TIME,100);
while (!MOT_END){}
MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50);

on initie un mouvement rectiligne de 10 s, on attend que le robot redevienne immo-


bile, cest--dire que le mouvement rectiligne soit achev, puis on initie le mouve-
ment de rotation.
Pour allumer et teindre la diode lectroluminescente, situe lavant du robot, on
utilise les instructions LED_FRONT_ON(); et LED_FRONT_OFF();. Pour faire clignoter la
diode lectroluminescente verte, situe sur le robot, on utilise linstruction
LED_TOP_GREEN_ON_OFF(); Ici, le fait dallumer une diode ninterrompt pas le mouve-
ment du robot, les deux actions sont effectues en mme temps.
Pour attendre quelques secondes entre deux instructions, on utilise la fonction
Delay10KTCYx, par exemple linstruction Delay10KTCYx(200); interrompt lexcution du
programme pendant 2 s. Largument de cette fonction est le temps du dlai exprim
en centimes de seconde.
Enfin, il faut excuter au dbut de chaque programme les instructions SEN_CONFIG();
et MOT_CONFIG(); pour configurer les capteurs et les moteurs.
Par exemple, le programme :
main () {
SEN_CONFIG();
MOT_CONFIG();
Delay10KTCYx(200);
LED_TOP_GREEN_ON_OFF();
MOT_STR(50,FWD,TIME,100);
while (!MOT_END) {}
MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50);
while (1) {}}

attend 2 s avant de commencer, fait clignoter la diode verte, fait avancer le robot
pendant 10 s, le fait tourner de 180 degrs et boucle linfini, afin que le programme
ne se termine pas. Dans ce cas, la non-terminaison est un peu artificielle et sert sur-
tout viter, comme on la expliqu, que le programme soit relanc.
Exercice 17.5
crire un programme qui fait avancer le robot en marche avant la vitesse 100 pendant 5 s,
puis le fait reculer la vitesse 15 pendant 2 s.

246 Groupe Eyrolles, 2013


17 Les robots

Programmer un robot : les capteurs


Dautres fonctions interrogent les capteurs. Par exemple, lexpression
SEN_OBS_DIG(OBS_CENTER_L) prend la valeur 1 (True) quand le capteur avant gauche dtecte
un obstacle, et la valeur 0 sinon. De mme, les expressions SEN_OBS_DIG(OBS_CENTER_R),
SEN_OBS_DIG(OBS_SIDE_L) et SEN_OBS_DIG(OBS_SIDE_R) renvoient des valeurs similaires pour les
capteurs avant droit, ct gauche et ct droit respectivement.
De mme, lexpression SEN_LINE_DIG(LINE_L) prend la valeur 0 si le capteur de couleur
de sol situ sur la gauche du robot capte une couleur claire et 1 sil capte une couleur
sombre. Le fonctionnement est le mme pour le capteur de couleur de sol, situ sur
la droite du robot, avec lexpression SEN_LINE_DIG(LINE_R).
la diffrence des actionneurs que lon commande quand on le souhaite, il faut
interroger les capteurs de manire rgulire, afin dtre prvenu de tous les vne-
ments quils dtectent. Une mthode pour ce faire est dorganiser le programme sous
la forme dune grande boucle qui, chaque tour, interroge les capteurs et commande
les actionneurs.
Le programme suivant par exemple fait clignoter la diode verte, puis initie un mouve-
ment du robot en marche avant pour un temps infini. Si jamais le robot dtecte un obs-
tacle, on allume la diode situe lavant du robot, on initie un mouvement de rotation
de 180 degrs, ce qui interrompt le mouvement rectiligne, puis quand le mouvement
de rotation est achev, on relance le robot en marche avant pour un temps infini.
Sinon, on teint la diode situe lavant du robot, si jamais elle est allume.
void main() {
SEN_CONFIG();
MOT_CONFIG();
LED_TOP_GREEN_ON_OFF();
MOT_STR(50,FWD,TIME,0);
while (1) {
if (SEN_OBS_DIG(OBS_CENTER_L)) {
LED_FRONT_ON();
MOT_ROT(25,FWD,CENTER,LEFT,ANGLE,50);
while (!MOT_END) {}
MOT_STR(50,FWD,TIME,0);}
else {
LED_FRONT_OFF();}}}

Groupe Eyrolles, 2013 247


Informatique et sciences du numrique

SAVOIR-FAIRE crire un programme pour commander un robot


Identifier les actionneurs et les capteurs utiliser.
crire les tests sur les valeurs des capteurs et les instructions initiant les actions dans une
grande boucle infinie.
Insrer les temporisations permettant aux actions de seffectuer compltement si cela est
ncessaire.
Initialiser les capteurs et les actionneurs avant le dbut de la boucle.

Exercice 17.6 (avec corrig)


crire un programme qui pilote un robot le long dune ligne sombre dessine sur un sol clair.

Les actionneurs utiliss sont, bien entendu, les moteurs que lon commande avec instruc-
tions MOT_STR et MOT_ROT. Les capteurs utiliss sont les capteurs de couleur de sol que lon
interroge avec les instructions SEN_LINE_DIG(LINE_L) et SEN_LINE_DIG(LINE_R).

On cherche ce que le robot suive le ct gauche de la ligne, cest--dire que son capteur
gauche soit lextrieur de la ligne et son capteur droit lintrieur.
Tant que cela est le cas, le robot avance tout droit. En revanche, si les deux capteurs sont
hors de la ligne, cela signifie que le robot est trop gauche : il doit tourner droite. Si les
deux capteurs sont sur la ligne, le robot est trop droite : il doit tourner gauche. Si le cap-
teur gauche est lintrieur de la ligne et le capteur droit lextrieur, cela signifie que le
robot est dans le mauvais sens, il doit faire demi-tour. On utilise ici la mme mthode que
pour le contrle de la vitesse du moteur : la mthode de contrle en boucle ferme.
Il est important de placer le robot sur le bord de la ligne au moment o on le lance, sinon il
ne fera que tourner sur lui-mme.

void main() {
Delay10KTCYx(200);
SEN_CONFIG();
MOT_CONFIG();
while (1) {
if (SEN_LINE_DIG(LINE_L)==0 && SEN_LINE_DIG(LINE_R)==1) {
MOT_STR(80,FWD,TIME,0);}
else {
if (SEN_LINE_DIG(LINE_L)==0 && SEN_LINE_DIG(LINE_R)==0) {
MOT_ROT(50,FWD,CENTER,RIGHT,TIME,0);}

248 Groupe Eyrolles, 2013


17 Les robots

else {
if (SEN_LINE_DIG(LINE_L)==1 && SEN_LINE_DIG(LINE_R)==1) {
MOT_ROT(50,FWD,CENTER,LEFT,TIME,0);}
else {
MOT_ROT(50,FWD,CENTER,RIGHT,TIME,0);}}}}}

Exercice 17.7
Mettre le robot dans une enceinte avec un mur carr de 50 cm de ct, o il ny a pas
dautres obstacles que les murs. Utiliser le dtecteur dobstacles pour le faire aller vers lun
des murs, puis tourner sans fin dans le sens des aiguilles dune montre.

Exercice 17.8
Dans un espace sans limite avec deux robots face face, crire un programme qui fait danser
ensemble les robots en les faisant tourner lun autour de lautre.

Exercice 17.9
On imagine un robot aspirateur dans une enceinte avec un mur carr de 50 cm de ct, o il
ny a pas dautres obstacles que les murs. crire un programme pour que le robot passe
laspirateur sur tout le sol. Essayer diffrentes mthodes : par des allers-retours, en spirale,
etc. Essayer ces programmes.

ALLER PLUS LOIN Les interruptions

Organiser un programme en une grande boucle qui teste les capteurs en permanence est possible, mais souvent
malcommode. On a donc introduit dans les langages de programmation des outils qui permettent dexprimer la
mme chose de manire plus simple. Le programme dcrit dune part ce quil faut faire quand tout se passe nor-
malement, par exemple avancer tout droit, et dautre part des conditions qui dfinissent des interruptions, par
exemple le fait quun dtecteur signale un obstacle, et des instructions excuter en cas dinterruption, par
exemple faire tourner le robot. Ces diffrentes instructions sont ensuite traduites automatiquement en un pro-
gramme qui, de manire rpte, interroge les capteurs et, selon quune interruption est dclenche ou non, ex-
cute une instruction ou une autre.
Cette manire ractive de programmer, permet de mieux prendre en compte les alas de lenvironnement :
dune excution dun programme une autre, un robot rencontre rarement deux fois la mme situation et il
doit sadapter sil rencontre une tache dhuile sur le sol, des obstacles nouveaux, etc.

ALLER PLUS LOIN Les mots robot et robotique

Le mot robot , driv dun mot qui signifie esclave , a t cr par lcrivain Tchque Karel Capek en 1920
et le mot robotique par un autre crivain, Isaac Asimov, en 1942. Lorigine littraire de ces deux mots nest
pas due au hasard. Le fait que les ordinateurs imitent certaines facults humaines, comme effectuer des multipli-
cations ou jouer aux chec, a suscit le rve de machines intelligentes. Mais la conception de robots, cest--dire
dordinateurs mobiles et autonomes, rejoint, de plus, une figure littraire ancienne, qui du Golem Pinocchio et
du monstre de Frankenstein WALL-E, pose la question de la frontire entre lanim et linanim.

Groupe Eyrolles, 2013 249


Informatique et sciences du numrique

ALLER PLUS LOIN Les robots sont partout

Dans lindustrie, les robots sont utiliss dans les chanes de montage de nombreuses usines. En mdecine, ils
sont utiliss pour effectuer des oprations chirurgicales micro-invasives, pour effectuer des analyses, pour rem-
placer des membres paralyss, pour assister des personnes dpendantes, etc. Ils sont aussi utiliss dans lexplo-
ration spatiale et sous-marine ou pour intervenir dans les zones inaccessibles, par exemple de centrales
nuclaires. Des robots sont aussi utiliss dans des tches plus quotidiennes comme passer laspirateur, nettoyer
une piscine ou garer une voiture.

Figure 171 Thyrodectomie assiste par un robot - CHU de Nmes

Figure 172 Le robot industriel Robolab recopiant la Bible

Ai-je bien compris ?


Quels sont les composants dun robot ?
Quest-ce que le principe de la boucle ferme ?
Comment organise-t-on un programme pour que les capteurs soient interrogs
priodiquement ?

250 Groupe Eyrolles, 2013


QUATRIME PARTIE

Algorithmes
Dans cette quatrime partie, nous apprenons quelques-
uns des savoir-faire les plus utiles au XXIe sicle : ajouter
des nombres exprims en base deux (chapitre 18),
dessiner (chapitre 19), retrouver une information par
dichotomie (chapitre 20*), trier des informations
(chapitre 21*) et parcourir un graphe (chapitre 22*).
18
Ada Lovelace (1815-1852) est lauteur du premier algorithme
destin tre excut par une machine. Cet algorithme, qui
permettait de calculer une suite de nombres de Bernoulli,
devait tre excut sur la machine analytique conue par
Charles Babbage. Malheureusement, Babbage na jamais
russi terminer sa machine. Ada Lovelace est parfois consi-
dre comme le premier programmeur de lhistoire. Le lan-
gage de programmation Ada est ainsi nomm en son
honneur.
Ajouter deux nombres
exprims en base deux

Pour faire une addition, lordinateur fait


comme on lui a appris sur les bancs de lcole.

Dans ce chapitre, nous dtaillons lalgorithme de laddition


en base deux, ce qui est surtout un prtexte pour comprendre
comment dmontrer quun algorithme est correct.
Lalgorithme est le mme que celui que nous utilisons
couramment lorsque nous effectuons une addition ordinaire,
cest--dire en base dix. Nous dmontrons ensuite
que lalgorithme que nous avons programm calcule bien
la somme de deux nombres. Pour cela, nous utilisons la
notion importante dinvariant de boucle qui est une proprit
vraie chaque tour de boucle. Nous montrons une telle
proprit par rcurrence sur le numro du tour de boucle.
Informatique et sciences du numrique

Nous revenons dans ce chapitre sur lun des premiers algorithmes que nous ayons
appris lcole, celui qui permet dajouter deux nombres entiers, pour nous poser
deux questions : comment adapter cet algorithme aux nombres exprims en base
deux ? Et pourquoi cet algorithme calcule-t-il bien la somme des deux nombres ?

Laddition
On commence par rappeler cet algorithme sur un exemple. On veut ajouter les nom-
bres 728 et 456.

On commence par ajouter les chiffres des units, 8 et 6. La table de laddition


indique que la somme de ces deux chiffres est 14 ; on pose le chiffre des units, 4, et
on retient le chiffre des dizaines, 1. On ajoute ensuite les chiffres des dizaines et cette
retenue, 2, 5 et 1. La table de laddition indique que la somme de ces trois chiffres
est 8 ; on pose le chiffre des units, 8, et on retient le chiffre des dizaines, 0. On
ajoute ensuite les chiffres des centaines et cette retenue, 7, 4 et 0. La table de laddi-
tion indique que la somme de ces trois chiffres est 11 ; on pose le chiffre des
units, 1, et on retient le chiffre des dizaines, 1. Finalement, on pose cette retenue
dans la colonne des milliers.
Une irrgularit de cette mthode est que, lors de la premire itration, on ajoute
deux chiffres, alors quen rgime permanent, on en ajoute trois. On peut corriger cela
en commenant par poser la retenue gale 0. La premire itration se formule alors
de la manire suivante : on commence par ajouter les chiffres des units et la retenue,
8, 6 et 0, etc. Ainsi, cet algorithme nutilise quune seule table, qui indique la somme
de chacun des triplets (a ; b ; c) o a, b et c sont des chiffres compris entre 0 et 9, table
quen gnral on connat par cur.

256 Groupe Eyrolles, 2013


18 Ajouter deux nombres exprims en base deux

Laddition pour les nombres exprims


en base deux
Voyons maintenant comment on ajoute des nombres exprims en base deux, par
exemple 101 et 111, cest--dire 5 et 7.

On commence, comme en base dix, par ajouter les chiffres des units et la retenue, 1,
1 et 0. La table de laddition indique que la somme de ces trois chiffres est 10 ; on
pose le chiffre des units, 0, et on retient le chiffre des deuzaines, 1. On ajoute
ensuite les chiffres des deuzaines et cette retenue, 0, 1 et 1. La table de laddition
indique que la somme de ces trois chiffres est 10 ; on pose le chiffre des units, 0, et
on retient le chiffre des deuzaines, 1. On ajoute ensuite les chiffres des quatraines et
cette retenue, 1, 1 et 1. La table de laddition indique que la somme de ces trois chif-
fres est 11 ; on pose le chiffre des units, 1, et on retient le chiffre des deuzaines, 1.
Finalement, on pose cette retenue dans la colonne des huitaines. Le rsultat est donc
1100, cest--dire 12.
Cette mthode utilise une table qui indique la somme de chacun des triplets (a ; b ; c)
o a, b et c sont des chiffres compris entre 0 et 1. Cette table ne contient donc que
huit lignes :

a b c a+b+c
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 10
1 0 0 1
1 0 1 10
1 1 0 10
1 1 1 11

Groupe Eyrolles, 2013 257


Informatique et sciences du numrique

En fait, cette mthode se formule mieux en utilisant deux tables. La premire


indique le chiffre des units de a + b + c :

a b c Units de a + b + c
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1

La seconde indique le chiffre des deuzaines de a + b + c :

a b c Deuzaines de a + b + c
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

Il sagit l des tables de deux fonctions boolennes trois arguments. Comme toutes
les fonctions boolennes, elles peuvent sexprimer avec les fonctions non, et et ou (voir
le chapitre 10). Une manire, parmi dautres, de les exprimer est la suivante :
units(a,b,c)
= (a et non(b) et non(c)) ou (non(a) et b et non(c))
ou (non(a) et non(b) et c) ou (a et b et c)
deuzaines(a,b,c) = (a et b) ou (b et c) ou (a et c)

Pour se convaincre de la correction de ces expressions, il suffit de vrifier quelles


donnent bien les chiffres des units et des deuzaines de a + b + c dans chacun des huit
cas des tables prcdentes. Par exemple, dans le cas a = 0, b = 1 et c = 1, lexpression
a et non(b) et non(c) prend la valeur 0, les expressions non(a) et b et non(c),
non(a) et non(b) et c et a et b et c prennent elles aussi la valeur 0 et donc lexpression

258 Groupe Eyrolles, 2013


18 Ajouter deux nombres exprims en base deux

(a et non(b) et non(c)) ou (non(a) et b et non(c)) ou (non(a) et non(b) et c) ou (a et b et c)


prend la valeur 0 galement, ce qui est bien le chiffre des units de a + b + c. De
mme, les expressions a et b, b et c et a et c prennent respectivement les valeurs 0, 1
et 0 et donc lexpression (a et b) ou (b et c) ou (a et c) prend la valeur 1, ce qui est bien
le chiffre des deuzaines de a + b + c.
On peut, par exemple, programmer cette mthode pour ajouter deux nombres de dix
chiffres binaires. Le rsultat sera donc un nombre de onze chiffres. On choisit de
reprsenter les nombres ajouter x et y par deux listes de boolens de dix cases n et p,
et le rsultat par une liste de boolens r de 11 cases. On choisit le boolen True pour
le chiffre 1 et le boolen False pour le chiffre 0. La case 0 dune liste contient le
chiffre des units du nombre reprsent, la case 1 le chiffre des deuzaines et la
case 9, le chiffre des cinq-cent-douzaines. Le rsultat r qui a un chiffre de plus a
aussi une case 10 pour les mille-vingt-quatraines.
La retenue c est dabord initialise 0 (). Puis on calcule les chiffres du rsultat
lun aprs lautre par une boucle dont lindice i varie de 0 9. chaque tape, on
dfinit le chiffre a comme le i-me chiffre du nombre n () et b comme le i-me
chiffre du nombre p (), puis on affecte la case i de la liste r () avec le chiffre des
units de a + b + c. Enfin, on affecte la retenue c avec le chiffre des deuzaines de
a + b + c (). Et une fois la boucle termine, on affecte la case 10 de la liste r avec
la dernire des retenues ().
c = False
for i in range(0,10):
a = n[i]
b = p[i]
r[i] = (a and not b and not c) or (not a and b and not c)
or (not a and not b and c) or (a and b and c)
c = (a and b) or (b and c) or (a and c)
r[10] = c

Exercice 18.1
On utilise ce programme pour ajouter les nombres x = 1011001101 et y = 1101101011. Ex-
cuter linstruction c = False, linitialisation de la variable i et le tour 0 de la boucle revient
excuter la squence daffectations suivante :

c = False
i = 0
a = n[0]
b = p[0]
r[0] = (a and not b and not c) or (not a and b and not c)
or (not a and not b and c) or (a and b and c)
c = (a and b) or (b and c) or (a and c)
i = i + 1

Groupe Eyrolles, 2013 259


Informatique et sciences du numrique

Si on excute cette squence dans ltat , la premire affectation c = False donne


ltat .

Dessiner les tats successifs produits par lexcution de chacune de ces affectations. Quel est
ltat final produit par lexcution du tour 0 de la boucle ?
Montrer que dans cet tat :

(r[0] 20) + c 21 = (n[0] 20) + (p[0] 20 )

Excuter le tour 1 de la boucle revient excuter la squence daffectations suivante :

a = n[1]
b = p[1]
r[1] = (a and not b and not c) or (not a and b and not c)
or (not a and not b and c) or (a and b and c)
c = (a and b) or (b and c) or (a and c)
i = i + 1

260 Groupe Eyrolles, 2013


18 Ajouter deux nombres exprims en base deux

Quel est ltat produit par lexcution de ce tour de boucle ?


Montrer que dans cet tat :

(r[0] 20 + r[1] 21) + c 22


= (n[0] 20 + n[1] 21) + (p[0] 20 + p[1] 21)

La dmonstration de correction
du programme
Quand on conoit un tel programme, une question se pose naturellement : comment
sait-on quil calcule la somme des deux nombres entiers ?
Une premire manire de sassurer quun programme fait bien ce quon attend de lui est
de le tester (voir le chapitre 1). Il faut essayer diffrentes valeurs pour les nombres x et y
et vrifier que le programme affiche bien la valeur x + y dans tous les cas. On estime, en
gnral, que le cot du test dun programme est du mme ordre de grandeur que celui
de son dveloppement. Cependant, le test prsente deux limites importantes : la pre-
mire est que lon ne peut pas tester le programme sur toutes les valeurs dentre possi-
bles, qui sont souvent trs nombreuses, voire en nombre infini. La seconde est que pour
tester un programme, il faut savoir ce que lon attend de lui. Or, ce nest pas le cas
quand on crit, par exemple, un programme qui calcule la millime dcimale du
nombre , ou la position de la Lune dans mille ans, car la raison pour laquelle on crit
un tel programme est prcisment que lon ignore la millime dcimale du
nombre ou la position de la Lune dans mille ans. De ce fait, comment le tester ?
Une autre manire de sassurer quun programme fait bien ce quon attend de lui est
de le dmontrer. Par exemple, on peut dmontrer que le programme prcdent cal-
cule bien la somme des nombres x et y. Plus prcisment, on veut dmontrer que si,
au moment o lon excute ce programme, les listes n et p contiennent la reprsenta-
tion binaire de deux entiers de dix chiffres, cest--dire si :
x = n[0] 20 + n[1] 21 + + n[8] 28 + n[9] 29

et

y = p[0] 20 + p[1] 21 + + p[8] 28 + p[9] 29

alors la fin de lexcution de ce programme, la liste r contient un nombre de onze


chiffres qui est la reprsentation binaire de x + y, cest--dire que :
x + y = r[0] 20 + r[1] 21 + + r[9] 29 + r[10] 210.

Groupe Eyrolles, 2013 261


Informatique et sciences du numrique

T Invariant

Un invariant dune boucle est une proprit qui est vrifie chaque excution du corps de cette boucle. En
gnral, pour la dernire excution, cette proprit traduit le fait que la boucle ralise bien la tche souhaite.
On montre quune proprit est un invariant dune boucle par un raisonnement par rcurrence :
on montre que la proprit est vrifie la premire excution du corps de la boucle,
on montre que si linvariant est vrifi une excution donne du corps de la boucle, il est encore vrifi
lexcution suivante.
Linvariant est alors vrifi la fin de boucle, qui fournit donc le rsultat attendu.

Le programme qui ajoute deux nombres exprims en binaire est form dune boucle,
dans laquelle on calcule dabord le chiffre des units, puis les chiffres des deuzaines,
des quatraines, etc. du rsultat. Aprs avoir achev les tours 0, , i - 1 et au moment
de commencer le tour i, on a donc calcul la somme des deux nombres forms des i
premiers chiffres, en partant de la droite, des nombres x et y. Cest linvariant que
lon va montrer par rcurrence. la fin de la boucle, linvariant indiquera que lalgo-
rithme a effectu laddition souhaite.
Par exemple, si au cours de laddition de x = 1011001101 et y = 1101101011 () on
sarrte aprs avoir effectu les tours 0 et 1 de la boucle et avant de commencer le tour 2,
on a dj calcul la somme des nombres 01 et 11, cest--dire 1 et 3 . Le rsultat de
cette addition nest pas exactement le nombre reprsent par les deux chiffres dj poss
00, car il faut tenir compte de la retenue. La proprit exacte est que si on pose la retenue
dans la colonne i, ce qui donne dans cet exemple le nombre 100 cest--dire 4, on obtient
la somme des deux nombres forms des i premiers chiffres des nombres x et y.

Autrement dit, au moment de commencer le tour i de la boucle, ltat vrifie la


proprit :
(r[0] 20 + + r[i-1] 2i-1) + c 2i
= (n[0] 20 + + n[i-1] 2i-1) + (p[0] 20 + + p[i-1] 2i-1)

On dmontre maintenant cette proprit.

262 Groupe Eyrolles, 2013


18 Ajouter deux nombres exprims en base deux

la premire excution, i = 0, la somme (r[0] 20 + + r[i-1] 2i-1) ne contient


aucun terme ; elle vaut donc 0. Il en est de mme pour les sommes (n[0] 20 + + n[i-
i-1 0 i-1
1] 2 ) et (p[0] 2 + + p[i-1] 2 ). Comme par ailleurs, la retenue c vaut 0, les
deux membres de lgalit sont nuls.
On suppose maintenant que cette proprit est vrifie dans ltat dans lequel sexcute le
tour i de la boucle et on veut montrer quelle est encore vrifie dans ltat dans lequel
sexcute le tour suivant. Au dbut du tour i, on a :
(r[0] 20 + + r[i-1] 2i-1) + c 2i
= (n[0] 20 + + n[i-1] 2i-1) + (p[0] 20 + + p[i-1] 2i-1)
et donc en ajoutant n[i] 2i + p[i] 2i dans les deux membres de lgalit on
obtient que, au dbut du tour i de la boucle :

(r[0] 20 + + r[i-1] 2i-1) + (n[i] + p[i] + c) 2i


= (n[0] 20 + + n[i] 2i) + (p[0] + + p[i] 2i)

Au cours de ce tour de la boucle, on ajoute les trois chiffres n[i], p[i] et c, et le


rsultat de cette addition a pour chiffre des units r[i] et pour chiffre des deuzaines
la nouvelle valeur de c, si bien que, dans ltat atteint la fin de ce tour de la boucle :

(r[0] 20 + + r[i-1] 2i-1) + (r[i] + 2 c) 2i


= (n[0] 20 + + n[i] 2i) + (p[0] 20 + + p[i] 2i)

cest--dire :

(r[0] 20 + + r[i] 2i) + c 2i+1


= (n[0] 20 + + n[i] 2i) + (p[0] 20 + + p[i] 2i)

Au dbut du tour suivant, la variable i a t augmente de 1, si bien que :

(r[0] 20 + + r[i-1] 2i-1) + c 2i


= (n[0] 20 + + n[i-1] 2i-1) + (p[0] 20 + + p[i-1] 2i-1)

La proprit est donc encore vrifie au dbut du tour suivant. Elle est donc vrifie
chacun des tours de boucles : cest un invariant de la boucle.
la fin du dixime et dernier tour, i est gal 10 et donc :
(r[0] 20 + + r[9] 29) + c 210
= (n[0] 20 + + n[9] 29) + (p[0] 20 + + p[9] 29)
=x+y

Groupe Eyrolles, 2013 263


Informatique et sciences du numrique

On affecte alors la case 10 de la liste r avec la retenue si bien que, quand lexcution
est termine :

r[0] 20 + + r[10] 210 = x + y

Cest ce quil fallait dmontrer : la liste r contient la reprsentation binaire du


nombre x + y.

ALLER PLUS LOIN Lautonomie de la notion dalgorithme

Dans ce chapitre, on a tudi un programme, crit en Python, qui additionne deux nombres crits en base
deux. Il est possible dcrire des programmes trs similaires dans dautres langages de programmation.
La mthode pour ajouter deux nombres en base deux est indpendante dun langage de programmation
particulier : cest une mthode abstraite qui peut sexprimer dans divers langages. Une telle mthode sys-
tmatique qui permet de rsoudre un problme sappelle un algorithme. Il est important de distinguer
un algorithme, mthode indpendante de tout langage, dun programme, qui est lincarnation dun
algorithme dans un langage particulier.
Cette distinction entre les notions dalgorithme et de programme doit galement son importance au fait
quon a utilis des algorithmes pour faire des additions dans diverses bases depuis des millnaires, bien
avant quon ait pens exprimer ces algorithmes dans un langage de programmation. On a mme utilis
des algorithmes, transmis de gnration en gnration par observation et imitation, pour fabriquer des
objets en cramique, tisser des toffes, nouer des cordages, prparer les aliments, etc., avant linvention
de lcriture.

ALLER PLUS LOIN Dfinitions algorithmiques et non algorithmiques

Lapprentissage des mathmatiques commence par lapprentissage dalgorithmes qui permettent deffec-
tuer des additions, des soustractions, etc.
Mme au-del de ces mathmatiques lmentaires, beaucoup de dfinitions mathmatiques sont algorithmi-
ques. Par exemple, la dfinition du nombre n - m comme le nombre obtenu en mettant n cailloux dans un
sac, en en tant m et en comptant ceux qui restent est algorithmique. Mais la dfinition du nombre n - m
comme le nombre p tel que p + m = n ne lest pas : contrairement la premire, cette dfinition ne dit pas
ce que lon doit faire pour connatre le nombre n - m quand on connat les nombres n et m.
De mme, la dfinition selon laquelle deux vecteurs non nuls du plan, donns par leurs coordonnes
(x1 ; y1) et (x2 ; y2) dans une base, sont colinaires quand x1 y2 = x2 y1 est algorithmique, mais pas celle
selon laquelle ces deux vecteurs sont colinaires sil existe un facteur de proportion k tel que x1 = k x2 et
y1 = k y2. Si deux vecteurs sont donns par leurs coordonnes dans une base, par exemple (4 ; 10) et
(6 ; 15), la premire dfinition donne une mthode pour dterminer sils sont colinaires, puisquil suffit
de calculer 4 15 et 10 6 et de vrifier que lon obtient bien le mme nombre dans les deux cas, mais
pas la seconde, qui demande de trouver le facteur de proportion, sans indiquer de mthode pour le faire.

264 Groupe Eyrolles, 2013


18 Ajouter deux nombres exprims en base deux

Ai-je bien compris ?


En quelles bases lalgorithme de laddition peut-il tre utilis ?
Que veut-on dire lorsquon affirme que lalgorithme de laddition est correct ?
Quest-ce quun invariant ?

Groupe Eyrolles, 2013 265


19
Ivan Sutherland (1938-) est un des pionniers de linforma-
tique graphique. Il est lauteur du logiciel Sketchpad (1963) qui
est lun des premiers logiciels de conception assiste par ordi-
nateur. Ivan Sutherland a aussi t lorigine de lun des pre-
miers systmes de ralit virtuelle muni dun visiocasque. Il est
lun des pionniers des architectures dordinateurs spcialises
pour le temps rel et le graphisme.
Dessiner

Ou comment devenir Botticelli


sans se tacher les doigts.

Dans ce chapitre, nous voyons comment programmer


un ordinateur pour dessiner ou modifier une image
sans utiliser un logiciel de retouche photo ! Nous voyons
comment ouvrir une fentre graphique, crer une image,
dessiner en trois dimensions, lire et produire des fichiers
contenant des images, transformer des images.
Informatique et sciences du numrique

Dessiner dans une fentre


Trois instructions permettent de dfinir une fentre graphique (cest--dire une fentre
dans laquelle on peut dessiner), dy dessiner un pixel et dafficher cette fentre.
Excuter linstruction initDrawing("Mon premier dessin",x,y,largeur,hauteur) a
pour effet de dfinir une fentre de largeur pixels de large, sur hauteur pixels de
haut, qui porte le nom Mon premier dessin et dont le coin en haut gauche est au
pixel de coordonnes (x ; y) de lcran.
Excuter linstruction drawPixel(x,y,rouge,vert,bleu) a pour effet de dessiner un
pixel dans la x-me colonne et la y-me ligne de cette fentre, dont la couleur est
dcrite par les nombres rouge, vert et bleu (voir le chapitre 9). La coordonne x
varie entre 0 et largeur - 1 et la coordonne y entre 0 et hauteur - 1. Les nombres
rouge, vert et bleu varient entre 0 et 255.

Excuter linstruction showDrawing() enfin a pour effet dafficher cette fentre


lcran. Cette fentre ne doit tre affich quaprs que tous les pixels ont t dessins.
Ces instructions ne font pas partie du langage Python mais de son extension isn
(voir le chapitre 11).

ATTENTION Axe vertical

De mme que les Anglais roulent gauche, laxe vertical, en gomtrie algorithmique, est orient vers le bas.

SAVOIR-FAIRE Crer une image


1 tablir une condition sur les coordonnes dun pixel qui permette de dcider sil appar-
tient ou non la figure tracer.
2 crire une instruction qui balaye la fentre graphique au moyen de deux boucles imbri-
ques, lune sur les abscisses et lautre sur les ordonnes.
3 Dans le corps de la boucle la plus interne, affecter la couleur approprie chaque pixel,
selon quil appartient ou non la figure.

Exercice 19.1 (avec corrig)


Dans une fentre de 400 pixels sur 400 pixels, dessiner un carr rouge form des points dont
labscisse est comprise entre 100 et 250 et lordonne comprise entre 50 et 200.
Un pixel de coordonnes (x ; y) appartient ce carr si et seulement si 100 <= x and
x <= 250 and 50 <= y and y <= 200. On obtient donc le programme :

from isn import *

initDrawing("Carr rouge",10,10,400,400)

268 Groupe Eyrolles, 2013


19 Dessiner

for x in range(0,400):
for y in range(0,400):
if 100 <= x and x <= 250 and 50 <= y and y <= 200:
drawPixel(x,y,255,0,0)
showDrawing()

Dans ce cas, il nest cependant pas ncessaire de balayer toute la fentre graphique et un
autre programme possible est :

for x in range(100,250 + 1):


for y in range(50,200 + 1):
drawPixel(x,y,255,0,0)

Exercice 19.2
crire un programme qui dessine ce mme carr mais sans le remplir.

Exercice 19.3
crire un programme qui dessine un disque de centre (a ; b) et de rayon r .

Exercice 19.4
Tracer un segment pixel par pixel est facile quand ce segment est horizontal ou vertical, mais
cela est un peu plus difficile quand il est oblique. Pour tracer un segment qui va du point
(x ; y) au point (x ; y) quand |y - y| |x - x|, cest--dire quand le segment est plutt hori-
zontal, on cherche dessiner un pixel dans chaque colonne dabscisse comprise entre x et x.
Dterminer une quation cartsienne de la droite passant par les points de coordonnes
(x ; y) et (x ; y).
En supposant que x x, montrer que le point de la droite dabscisse X a pour ordonne
y + (X - x)(y - y) / (x - x). Dans la pratique, pour dessiner effectivement le pixel, ce
nombre sera arrondi lentier le plus proche.
crire un programme qui trace ainsi un segment de type plutt horizontal . On
prendra soin de prvoir le cas o x x.

Groupe Eyrolles, 2013 269


Informatique et sciences du numrique

De mme, quand le segment est plutt vertical, cest--dire quand |x - x| |y - y|, on


cherche dessiner un pixel dans chaque ligne dordonne comprise entre y et y. Dter-
miner labscisse du point de la droite dont lordonne est y et complter lalgorithme
pour le cas des segments plutt verticaux.
Rechercher sur le Web ce quest lalgorithme de Bresenham et comment il amliore celui
que lon vient de construire.

Exercice 19.5
Tracer un cercle de centre (a ; b) et de rayon r en balayant les abscisses x de a - r a + r et en cal-
culant les valeurs de y partir de lquation (x - a)2 + (y - b)2 = r2. Mme question en balayant
les ordonnes. Comment viter les discontinuits ?

Exercice 19.6
Tracer, pour t variant de 0 10 000, la courbe dfinie par x(t) = 256 + 250 cos(0,0015 t) et
y(t) = 256 + 250 sin(kt), avec k = 0,0045, ceci dans une fentre de 512 pixels sur 512 pixels.
Cest une courbe de Lissajous. Faire varier k de 0,0015 0,0090 et explorer les diffrentes
courbes obtenues.
Dautres instructions dessinent des segments, des cercles et des disques, sans avoir
le faire pixel par pixel.
Linstruction drawLine(x1,y1,x2,y2,rouge,vert,bleu) trace un segment, de couleur
rouge, vert, bleu, qui va du point (x1 ; y1) au point (x2 ; y2).

Linstruction drawCircle(x,y,rho,rouge,vert,bleu) trace un cercle, de couleur rouge,


vert, bleu, de centre (x ; y) et de rayon rho.

Linstruction paintCircle(x,y,rho,rouge,vert,bleu) trace un disque, de couleur rouge,


vert, bleu, de centre (x ; y) et de rayon rho.

Dessiner en trois dimensions


Les mthodes que lon utilise aujourdhui pour dessiner des images en trois dimen-
sions remontent la Renaissance quand, bien avant que les ordinateurs existent, les
peintres ont commenc mettre au point diffrentes mthodes de reprsentation de
lespace en perspective et les utiliser dans leurs tableaux. Ces peintres sont finale-
ment arrivs une conclusion qui, en langage moderne, sexprime assez simplement :
un point de lespace de coordonnes (x ; y ; z), o laxe des x va de gauche droite,
laxe des y de bas en haut et celui des z de proche loin, doit tre reprsent sur un
tableau par un point de coordonnes X = x / z et Y = y / z. Par exemple, le point de
coordonnes (0 ; 1 ; 2) est reprsent sur le tableau par le point de coordonnes
(0 ; 1/2). Dans ce systme de reprsentation, la coordonne z doit toujours tre stric-
tement positive : les points dont la coordonne z est ngative correspondent aux
points de lespace qui sont dans le dos du peintre et quil ne reprsente donc pas.

270 Groupe Eyrolles, 2013


19 Dessiner

Les points de coordonnes (0 ; 0 ; 1) et (0 ; 1 ; 1), qui sont une distance 1 dans


lespace, sont reprsents par deux points (0 ; 0) et (0 ; 1), qui sont aussi une
distance 1 sur le tableau. En revanche, les points de coordonnes (0 ; 0 ; 2) et
(0 ; 1 ; 2) qui sont aussi une distance 1 dans lespace, sont reprsents par deux
points (0 ; 0) et (0 ; 1/2), qui sont une distance 1/2 sur le tableau : plus un objet est
loin, plus sa reprsentation sur le tableau est petite.

ALLER PLUS LOIN Taille du tableau

La taille du tableau est dtermine par la partie de


lespace que lon veut reprsenter. Si lon dcide,
par exemple, que x et y varient entre -1 et 1 et
z entre 1 et linfini, alors les coordonnes sur le
tableau varient entre -1 et 1 : un objet peut tre
lextrieur du tableau parce quil est trop gauche,
trop droite, trop en haut, trop en bas ou trop
prs, mais non parce quil est trop loin. Cela est
souvent rappel dans les tableaux de la
Renaissance : quand le peintre reprsente une
scne qui se passe dans une pice, il laisse souvent
une porte ou une fentre ouverte sur une petite
scne beaucoup plus loin. Cest, par exemple, le cas
de cette Annonciation de Botticelli.

Si lon veut maintenant reprsenter un tableau o les points sont reprs par des
coordonnes (X ; Y) qui varient entre -1 et 1 dans une fentre graphique o les points
sont reprs par des coordonnes (i ; j) qui varient entre 0 et 399, il faut faire un
changement de repre et reprsenter le point du tableau de coordonnes (X ; Y) par le
pixel de coordonnes i = 200 + 200 X et j = 200 - 200 Y. Le signe - est d au fait que
laxe vertical est orient vers le haut dans le tableau et vers le bas dans la fentre gra-
phique. Au bout du compte, le point de lespace de coordonnes (x ; y ; z) est repr-
sent par le pixel de coordonnes i = 200 + 200 x / z et j = 200 - 200 y / z.
Par exemple, on dessine le cube dont une face ABCD est dans le plan z = 2 et une
autre face ABCD est plus loin, dans le plan z = 4 :
A = (-1 ; -1 ; 2), B = (-1 ; 1 ; 2), C = (1 ; 1 ; 2), D = (1 ; -1 ; 2) ;
A = (-1 ; -1 ; 4), B = (-1 ; 1 ; 4), C = (1 ; 1 ; 4), D = (1 ; -1 ; 4).
On commence par calculer les coordonnes des pixels reprsentant chacun de ces
points en utilisant les formules i = 200 + 200 x / z et j = 200 - 200 y / z :
A : (100 ; 300), B : (100 ; 100), C : (300 ; 100), D : (300 ; 300) ;
A : (150 ; 250), B : (150 ; 150), C : (250 ; 150), D : (250 ; 250).

Groupe Eyrolles, 2013 271


Informatique et sciences du numrique

Il ne reste plus qu tracer les quatre segments de la premire face ([AB], [BC], [CD]
et [DA]), les quatre de la seconde ([AB], [BC], [CD] et [DA]) et les quatre qui
relient chaque sommet dune face au sommet homologue de lautre ([AA], [BB],
[CC], [DD]).
# Face avant
drawLine(100,300,100,100,0,0,0)
drawLine(100,100,300,100,0,0,0)
drawLine(300,100,300,300,0,0,0)
drawLine(300,300,100,300,0,0,0)

# Face arrire
drawLine(150,250,150,150,0,0,0)
drawLine(150,150,250,150,0,0,0)
drawLine(250,150,250,250,0,0,0)
drawLine(250,250,150,250,0,0,0)

# Artes fuyantes
drawLine(100,300,150,250,0,0,0)
drawLine(100,100,150,150,0,0,0)
drawLine(300,100,250,150,0,0,0)
drawLine(300,300,250,250,0,0,0)

On obtient alors limage

o la face du cube la plus proche est reprsente par le grand carr, la face la plus
lointaine par le petit carr et les quatre autres par des trapzes. Dans ce dessin, on
suppose que la face antrieure du cube est transparente, si bien que lon voit lint-
rieur du cube. Si on lavait suppose opaque, il aurait fallu ne pas dessiner la partie du
dessin cache par cette face.
On peut imaginer que ce cube reprsente une pice : la face infrieure est le sol, la
face suprieure est le plafond et les trois faces verticales, reprsentes par les deux tra-
pzes latraux et le petit carr sont les murs. Le quatrime mur est suppos ouvert,
ou transparent, ou derrire le peintre, afin que lon puisse voir lintrieur de la pice.
On peint maintenant chacune de ces faces. On peut commencer par peindre les murs
latraux en ambre jaune (r = 240, v = 195, b = 0). Il faut pour cela colorier tous les

272 Groupe Eyrolles, 2013


19 Dessiner

pixels contenus lintrieur du trapze : lcriture des deux boucles imbriques est
alors un peu plus complexe que pour le carr rouge prcdent, car toutes les colonnes
du trapze nont pas la mme hauteur. Pour traduire cela, les bornes entre lesquelles
lordonne j des pixels colorier varie dpendront de labscisse i : on retrouve ici les
quations, j = i et j = 400 i, des droites qui reprsentent les artes fuyantes du cube.
for i in range(100,150 + 1):
for j in range(i,400 i + 1):
drawPixel(i,j,240,195,0)

for i in range(250,300 + 1):


for j in range(400 i,i + 1):
drawPixel(i,j,240,195,0)

On peint de mme le plafond en jaune bouton dor (r = 246, v = 220, b = 18). Cette
fois, le trapze a ses bases horizontales. Cest donc lordonne j qui est choisie en
premier dans la boucle externe, et les bornes de labscisse i qui dpendent de j :
for j in range(100,150 + 1):
for i in range(j,400 j + 1):
drawPixel(i,j,246,220,18)

On obtient ainsi limage

On peut dessiner un carrelage sur le sol de la pice que lon vient de dessiner, cest--
dire la face infrieure du cube. Un point de coordonnes (x ; -1 ; z) de cette face inf-
rieure est reprsent par un pixel de la fentre graphique de coordonnes
i = 200 + 200 x / z et j = 200 + 200 / z.

REMARQUE Carrelages et perspective

Les peintres de la Renaissance peignaient souvent des carrelages, comme Botticelli dans son Annonciation, car
les carrelages sont faciles reprsenter et ils soulignent la perspective.

Groupe Eyrolles, 2013 273


Informatique et sciences du numrique

Rciproquement, le pixel de coordonnes (i ; j) reprsente le point de coordonnes


x = (i - 200) / (j - 200), y = -1, z = 200 / (j - 200).
La coordonne x varie entre -1 et 1 et la coordonne z entre 2 et 4. Si on lon
dcoupe ce rectangle en 400 dalles carres de 0,1 de cot, le point de coordonnes
(i ; j) appartient la dalle situe dans la colonne [10 ((i - 200) / (j - 200) + 1)], o
[x] est la partie entire de x, cest--dire [10 (i + j - 400) / (j - 200)], et dans la ligne
[10 (200 / (j - 200) - 2)], cest--dire [10 (600 - 2 j) / (j - 200)].
Pour construire un carrelage en damier, il suffit de choisir une couleur pour les dalles
dont la somme des numros de ligne et de colonne est paire et une autre pour celles
dont la somme est impaire. Il faut donc dessiner le pixel (i ; j) dune couleur si
[10 (i + j - 400) / (j - 200)] + [10 (600 - 2 j) / (j - 200)] est pair et dune autre cou-
leur quand ce nombre est impair :
for j in range(250,300 + 1):
for i in range(400 j,j + 1):
if (10 * (i + j 400) // (j 200) + 10 * (600 2*j)
// (j 200))%2 == 0:
drawPixel(i,j,167,103,38)
else:
drawPixel(i,j,255,255,0)

En alternant des dalles alezan (r = 167, v = 103, b = 38) et jaunes (r = 255, v = 255,
b = 0), on obtient limage.

Il ne reste plus qu peindre le mur du fond en beurre frais (r = 255, v = 244, b = 141),
en laissant, comme les peintres de la Renaissance, une fentre ouverte sur le ciel bleu
ciel (r = 119, v = 181, b = 254) :
for i in range(150,250 + 1):
for j in range(150,250 + 1):
if 160 <= i and i <= 210 and 160 <= j and j <= 220:
drawPixel(i,j,119,181,254)
else:
drawPixel(i,j,255,244,141)

274 Groupe Eyrolles, 2013


19 Dessiner

pour terminer limage et obtenir

Exercice 19.7
On considre un repre (O; i; j; k) tel que lil du peintre soit en O et le tableau soit dans le
plan z = 1. Soit un point A de coordonnes (x ; y ; z). Trouver une reprsentation param-
trique de la droite (AO) support du rayon lumineux qui va du point A lil du peintre. On
reprsente ce point A sur le tableau par le point A intersection de cette droite avec le plan
du tableau z = 1. Montrer que les coordonnes du point A sont (x / z ; y / z ; 1).

Produire un fichier au format PPM


Si au lieu de dessiner cette image dans une fentre graphique, on veut lenregistrer
dans un fichier, par exemple au format PPM (voir le chapitre 9), afin de pouvoir
linclure dans une page web ou lattacher un courrier, on doit dabord reprsenter
cette image comme une liste bidimensionnelle, puis produire un fichier au format
PPM partir de cette liste. Pour reprsenter une image en niveaux de gris, il suffit
dutiliser une liste bidimensionnelle t, dont la case t[i][j] contient la valeur du pixel
de coordonnes (i ; j). Pour reprsenter une image en couleurs, on utilise trois listes
bidimensionnelles rouge, vert et bleu, les cases rouge[i][j], vert[i][j] et bleu[i][j]
contenant les trois composantes de la couleur du pixel de coordonnes (i ; j).
On peut alors transformer le programme prcdent en remplaant toutes les instruc-
tions drawPixel(i,j,r,v,b) par :
rouge[i][j] = r
vert[i][j] = v
bleu[i][j] = b

Par exemple, le dessin du carrelage scrit dsormais :


for j in range(250,300 + 1):
for i in range(400 j,j + 1):
if (10 * (i + j 400) // (j 200) + 10 * (600 2*j)
// (j 200))%2 == 0:

Groupe Eyrolles, 2013 275


Informatique et sciences du numrique

rouge[i][j] = 167
vert[i][j] = 103
bleu[i][j] = 38
else:
rouge[i][j] = 255
vert[i][j] = 255
bleu[i][j] = 0

Une fois le dessin termin, on peut lenregistrer au format PPM, qui est un fichier
texte de la forme ci-dessous.
Un fichier PPM P3
#
400
400
255
rouge[0][0]
vert[0][0]
bleu[0][0]
rouge[1][0]
vert[1][0]
bleu[1][0]

La premire ligne contient les caractres P3 pour indiquer que cest un fichier au format
PPM, la deuxime est un commentaire, la troisime la largeur de limage, la quatrime
sa hauteur, la cinquime la valeur 255 pour indiquer que les valeurs des pixels vont de 0
255, puis sur les lignes suivantes les trois valeurs rouge, vert et bleu en numrant les
pixels de gauche droite et de haut en bas. Le programme qui cre un tel fichier scrit :
from isn import *

fichier = openOut("botticelli.ppm")

print("P3",file=fichier)
print("#",file=fichier)
print(400,file=fichier)
print(400,file=fichier)
print(255,file=fichier)

for j in range(0,400):
for i in range(0,400):
print(rouge[i][j],file=fichier)
print(vert[i][j],file=fichier)
print(bleu[i][j],file=fichier)
close(fichier)

276 Groupe Eyrolles, 2013


19 Dessiner

Lire un fichier au format PPM


Inversement, on peut crire un programme qui lit un fichier au format PGM ou PPM
dans une liste ou dans trois, selon que limage est en niveaux de gris ou en couleurs.
La seule difficult, pour lire un tel fichier, est due au fait quil est possible dinsrer
des commentaires dans un fichier au format PGM ou PPM, cest--dire des lignes
qui commencent par le caractre # et qui doivent tre ignores. En pratique cepen-
dant, les fichiers au format PGM et PPM nont gnralement quun seul commen-
taire, la deuxime ligne.
P2
# une photo prise au Louvre
181
279
255
86
94
103

On se limite donc des fichiers de cette forme si bien que les fichiers PGM que lon
lit sont de la forme suivante :
deux lignes qui peuvent tre ignores,
la largeur de limage, suivie dun retour la ligne ou dun espace,
la hauteur de limage, suivie dun retour la ligne ou dun espace,
la valeur maximale utilise pour exprimer les niveaux de gris, suivie dun retour
la ligne ou dun espace,
la liste des pixels, ligne par ligne, de haut en bas et de gauche droite, spars par
des retours la ligne ou des espaces.
Pour lire une ligne complte dans un fichier, on utilise une nouvelle opration :
readLineFromFile.

On peut lire un tel fichier avec le programme suivant :


from isn import *

fichier = openIn("maison.pgm")

s = readLineFromFile(fichier)
s = readLineFromFile(fichier)
largeur = int(readStringFromFile(fichier))
hauteur = int(readStringFromFile(fichier))
maximum = int(readStringFromFile(fichier))

Groupe Eyrolles, 2013 277


Informatique et sciences du numrique

gris = [[0 for j in range(0,hauteur)] for i in range(0,largeur)]


for j in range(0,hauteur):
for i in range(0,largeur):
gris[i][j] = int(readStringFromFile(fichier))
close(fichier)

et ensuite afficher cette image dans une fentre :


initDrawing("Pgm",10,10,largeur,hauteur)
for j in range(0,hauteur):
for i in range(0,largeur):
valeurgris = gris[i][j] * 255 // maximum
drawPixel(i,j,valeurgris,valeurgris,valeurgris)
showDrawing()

La lecture et laffichage dune image en couleurs, au format PPM sont similaires,


sauf quil faut lire trois nombres pour chaque pixel et les stocker dans trois listes :
rouge, vert et bleu.

Transformer les images


Une fois une image reprsente dans une liste, il est facile de la transformer. Par
exemple, on peut inverser la quantit de chaque couleur :
for j in range(0,hauteur):
for i in range(0,largeur):
rougebis[i][j] = max rouge[i][j]
vertbis[i][j] = max vert[i][j]
bleubis[i][j] = max bleu[i][j]

ce qui transforme limage en limage .

278 Groupe Eyrolles, 2013


19 Dessiner

SAVOIR-FAIRE Transformer une image en couleurs en une image


en niveaux de gris
On remplace chaque pixel de couleur r, v, b par un pixel dont le niveau de gris est la
moyenne des nombres r, v et b.

Exercice 19.8 (avec corrig)


crire un programme qui transforme une image en couleurs en une image en niveaux de gris.

for i in range(0,largeur):
for j in range(0,hauteur):
gris[i][j] = (rouge[i][j] + bleu[i][j] + vert[i][j]) // 3

Exercice 19.9
crire un programme qui transforme une image en couleurs en une image en niveaux de
gris, non pas en faisant la moyenne, mais en gardant un seul des trois nombres r, v et b et
en ignorant les autres. Comparer le rsultat obtenu avec le rsultat de lexercice 19.8.

SAVOIR-FAIRE Augmenter le contraste dune image en niveaux de gris


On fixe un seuil et on remplace tous les pixels plus clairs que ce seuil par un pixel blanc,
et tous les pixels plus sombres que ce seuil par un pixel noir.

Exercice 19.10 (avec corrig)


crire un programme qui augmente le contraste dune image en se fixant comme seuil la
valeur maximum // 5.

for i in range(0,largeur):
for j in range(0,hauteur):
if gris[i][j] <= maximum//5:
grisbis[i][j] = 0
else:
grisbis[i][j] = maximum

Groupe Eyrolles, 2013 279


Informatique et sciences du numrique

Exercice 19.11
crire un programme qui augmente le contraste dune image en se fixant comme seuil la
valeur 4 * maximum // 5. Ce programme est-il bien adapt pour les images claires ou les
images sombres ?

Exercice 19.12
partir dune image en niveaux de gris, produire les images suivantes.

SAVOIR-FAIRE Modifier la luminance dune image


On ajoute ou on retranche une constante la valeur de chacun des pixels.

Exercice 19.13 (avec corrig)


crire un programme qui ajoute maximum // 4 tous les pixels dune image en niveaux de
gris, en remplaant les valeurs qui dpassent la valeur maximale par la valeur maximale elle-
mme.

diff = maximum // 4
for i in range(0,largeur):
for j in range(0,hauteur):
grisbis[i][j] = min(gris[i][j] + diff,maximum)

280 Groupe Eyrolles, 2013


19 Dessiner

Exercice 19.14
crire un programme qui augmente la luminance dune image en couleurs.

Exercice 19.15
crire un programme qui multiplie toutes les valeurs des pixels de limage par un nombre g
positif en remplaant les valeurs qui dpassent la valeur maximale par la valeur maximale elle-
mme. Ce programme modifie-t-il la luminance ou le contraste de limage ? Que se passe-t-il
quand le coefficient multiplicateur g est trs petit ? Et quand il est trs grand ? Au lieu de
transformer la valeur v en g * v, la transformer en 128 + g * (v - 128), toujours en gardant
la mme valeur maximale et en remplaant les valeurs qui la dpassent par la valeur maximale
elle-mme, et celles qui dpassent 0 par 0. Que se passe-t-il quand g est trs grand ?

Exercice 19.16
Prendre une photo sombre, par exemple avec un tlphone, et utiliser la transformation qui
v associe 255 * pow(v / 255,gamma) avec 0 < gamma < 1. Que se passe-t-il ? quoi peut
servir cette transformation ?

SAVOIR-FAIRE Changer la taille dune image


On calcule la nouvelle image pixel par pixel.

Exercice 19.17 (avec corrig)


crire un programme qui double la taille dune image en niveaux de gris, en remplaant
chaque pixel par un carr de deux pixels sur deux pixels du mme niveau de gris.

largeurbis = 2*largeur
hauteurbis = 2*hauteur
grisbis = [[0 for j in range(0,hauteurbis)] for i in range(0,largeurbis)]
for i in range(0,largeurbis):
for j in range(0,hauteurbis):
grisbis[i][j] = gris[i//2][j//2]

Exercice 19.18
crire un programme qui divise la taille dune image par deux, en remplaant chaque carr
de deux pixels sur deux pixels par un pixel dont la couleur est la moyenne de celles des
quatre pixels quil remplace.

SAVOIR-FAIRE Fusionner deux images


On calcule la nouvelle image pixel par pixel, la valeur de chaque pixel tant le maximum des
valeurs des pixels correspondant dans chacune des images fusionner.

Groupe Eyrolles, 2013 281


Informatique et sciences du numrique

Exercice 19.19 (avec corrig)


crire un programme qui fusionne deux images en niveaux de gris. Attention au cas o les
images nont pas la mme taille ou nutilisent pas la mme valeur maximale pour exprimer
les niveaux de gris.

# Calcul des dimensions maximales des deux images


if largeur1 >= largeur2:
largeur3 = largeur1
else:
largeur3 = largeur2
if hauteur1 >= hauteur2:
hauteur3 = hauteur1
else:
hauteur3 = hauteur2
# Calcul du niveau de gris maximal
if max1 >= max2:
max3 = max1
else:
max3 = max2

# Calcul de limage fusionne


gris3 = [[0 for j in range(0,hauteur3)] for i in range(0,largeur3)]
for j in range(0,hauteur3):
for i in range(0,largeur3):
# Si un pixel est en dehors dune image on lui affecte
# la valeur maximale
if i < largeur1 and j < hauteur1:
valeur1 = max3 * gris1[i][j] // max1
else:
valeur1 = max3
if i < largeur2 and j < hauteur2:
valeur2 = max3 * gris2[i][j] // max2
else:
valeur2 = max3
if valeur1 < valeur2:
gris3[i][j] = valeur1
else:
gris3[i][j] = valeur2

282 Groupe Eyrolles, 2013


19 Dessiner

Exercice 19.20
quoi peut correspondre la soustraction de deux images en niveaux de gris, cest--dire limage
obtenue en soustrayant la valeur de chaque pixel de la premire image la valeur du pixel cor-
respondant de la seconde ? On sinspirera du schma ci-aprs. Prendre deux photos dun objet
sur une table en bougeant un peu lobjet entre les deux photos et calculer la valeur absolue de
la diffrence pixel pixel. Quelle peut tre une application de cet algorithme ?

SAVOIR-FAIRE Lisser une image pour liminer ses petits dfauts


et en garder les grands traits
La valeur dun pixel de la nouvelle image est la moyenne des valeurs de ce pixel et des pixels
qui lentourent ( gauche, droite, au-dessus et en dessous).

Exercice 19.21 (avec corrig)


crire un programme qui lisse une image. Attention au fait que les pixels sur le bord gauche
de limage nont pas de pixel leur gauche, ceux du bord droit, pas de pixel leur droite, etc.

for i in range(0,largeur):
for j in range(0,hauteur):
grisbis[i][j] = (gris[i][j]
+ gris[max(i - 1,0)][j]
+ gris[min(i + 1,largeur - 1)][j]
+ gris[i][max(j - 1,0)]
+ gris[i][min(j + 1,hauteur 1)])//5

Et si on rpte lopration plusieurs fois, limage sera de plus en plus lisse mais aussi plus
floue, comme illustr ici avec limage initiale gauche et limage lisse droite en appli-
quant lopration prcdente 20 fois.

Groupe Eyrolles, 2013 283


Informatique et sciences du numrique

Il existe des algorithmes plus complexes qui, pour une image couleur, font la moyenne sur les
petites variations pour gommer les dtails les moins importants, mais pas sur les plus grands
traits, permettant ainsi de bien les faire ressortir, on obtient alors de meilleurs rsultats.

Exercice 19.22
Considrer limage qui suit avec des valeurs de pixels entre 0 et 9. Remplacer la valeur de
chaque pixel par la moyenne des valeurs des pixels sa gauche et sa droite. On arrondit
la valeur entire la plus proche chaque fois. On prendra 0 au bord de limage.
Dessiner le rsultat obtenu. On conomisera beaucoup de calculs en tenant compte des
symtries.

0000000000
0088888800
0880000880
0800000080
0800000080
0800000080
0800000080
0880000880
0088888800
0000000000

Exercice 19.23
Reprendre lexercice prcdent, mais en recommenant encore deux fois. Commenter le
rsultat obtenu. Que se passe-t-il si on recommence indfiniment ?

Exercice 19.24
crire un programme qui extrait les contours dune image gris en niveaux de gris. Pour
cela, on fixe un seuil et on construit une image dont le pixel (i ; j) est noir si lintensit varie
fortement autour du pixel (i ; j) de gris, cest--dire si
abs(gris[i+1][j] - gris[i][j]) + abs(gris[i][j+1] - gris[i][j])
est suprieur au seuil fix, et blanc si ce nest pas le cas.

Exercice 19.25
Dessiner une image dau moins 200 pixels par 200 pixels, o la valeur de chaque pixel est ala-
toire. Observer le rsultat obtenu : ny a-t-il pas quelques rgularits ? Elles sont videmment
dues au hasard : il faut se mfier de surinterprter un phnomne alatoire dans lequel on
croit apercevoir des rgularits.

284 Groupe Eyrolles, 2013


19 Dessiner

ALLER PLUS LOIN Comment sont dessines nos maisons ?

Les algorithmes gomtriques que lon a vus dans ce chapitre sont, bien entendu, uti-
liss par lindustrie du dessin anim, mais ils sont galement utiliss dans beaucoup
dautres secteurs de lindustrie, pour la conception assiste par ordinateur de voi-
tures, de bateaux, davions, de btiments, etc.
Il y a encore quelques dizaines dannes, les architectes dessinaient la main les
plans des btiments quils concevaient la planche dessin sur du papier calque.
Effacer un trait demandait alors de gratter le papier avec une lame de rasoir : il valait
donc mieux viter de se tromper deux fois. Les planches dessin ont t remplaces
par des logiciels de conception assiste par ordinateur, qui permettent de dessiner
des plans avec une prcision beaucoup plus grande et surtout de les modifier ad
libitum. Ils ont par la suite t complts par des logiciels de dessin en trois dimen-
sions, qui reprsentent les btiments sous forme de maquettes virtuelles, beaucoup
plus lisibles que des plans, surtout pour les non spcialistes.
Les ingnieurs dessinaient ensuite dautres plans et faisaient des notes de calcul la
main ou en utilisant une calculatrice. Ils utilisent aujourdhui, pour ces calculs, des logi-
ciels fonds sur la mthode des lments finis, qui dcomposent les btiments en des
milliers de petits morceaux et calculent les forces exerces sur chacun de ces morceaux.
Des volutions rcentes vont vers lutilisation dun format unique de description des
btiments, utilis la fois par les architectes, les ingnieurs de conception et les ing-
nieurs qui organisent le travail sur les chantiers.
Ces transformations ont permis de concevoir et de calculer des btiments beaucoup
plus complexes que par le pass, comme le muse Guggenheim de Bilbao. Ainsi, on
comprend rtrospectivement que la raison pour laquelle beaucoup de btiments
taient, par le pass, de simples paralllpipdes, est que les paralllpipdes sont
faciles dessiner et calculer.
Ces mthodes ont aussi permis une prsentation plus lisible des btiments dans les-
quels il est dsormais possible de se promener avant mme quils ne soient construits.
Enfin, elles favorisent une meilleure communication entre les diffrents corps de
mtier. Par exemple, quand un btiment demande la dcoupe dune pice sur mesure,
le fichier de commande de la machine numrique qui dcoupe cette pice peut tre
produit directement partir des logiciels de conception assiste par ordinateur.

Ai-je bien compris ?


De quelles instructions a-t-on besoin pour dessiner lcran ?
Quel est le principe du dessin en trois dimensions ?
Quelles sont les principales transformations dune image ?

Groupe Eyrolles, 2013 285


20
Donald Knuth (1938-) est un des fondateurs de lalgorith-
mique, la partie de linformatique qui tudie les proprits
des algorithmes, indpendamment de leur expression dans un
langage de programmation particulier. Le troisime volume
de son livre The art of computer programming, intitul Sor-
ting and searching, est entirement consacr aux algorithmes
de tri et de recherche en table. Pour crire ce livre, il a dabord
crit un logiciel de traitement de texte : TeX, dont le nom est
form des trois premires lettres du mot techn, qui signifie
la fois art et technique .
La dichotomie
C HAPITRE AVANC

Ou diviser pour rgner.

Dans ce chapitre, nous voyons une mthode algorithmique


gnrale qui permet, entre autres choses, de trouver
rapidement un mot dans un dictionnaire : ouvrir
le dictionnaire au milieu et sinterroger :
Le mot recherch est-il avant ou aprs le mot lu ? .
Cette mthode fonctionne plus gnralement ds que nous
cherchons retrouver un lment dans une liste ordonne
selon une relation dordre total, notion que nous dfinissons.
Cette mthode est rapide et sapplique de nombreux
problmes : la recherche dun lment dans une table
ordonne, la conversion dune valeur analogique en une
valeur numrique, la recherche dun zro dune fonction
continue et strictement monotone, etc.
Informatique et sciences du numrique

La recherche en table
Au chapitre 3, on a crit un programme qui gre un rpertoire constitu de deux
listes, contenant lune des noms et lautre des numros de tlphone. Ce programme
attend en entre un nom et indique le numro de tlphone correspondant, ou bien
indique que ce nom nappartient pas au rpertoire.
Ce problme est un exemple dun problme important en algorithmique : la recherche en
table. En effet, beaucoup de systmes informatiques, tels les dictionnaires, les moteurs
de recherche, les systmes dinformation des banques et des administrations, servent
essentiellement, comme ce rpertoire, stocker des informations et les restituer
quand on les interroge. Le programme quon a crit au chapitre 3 est le suivant :
s = input()
i = 0
while i < 10 and s != nom[i]:
i = i + 1
if i < 10:
print(tel[i])
else:
print("Inconnu")

Ce programme recherche, dans la liste nom, lindice de la chane s entre par lutilisa-
teur, en comparant cette chane successivement tous les lments de la liste. Il suffit
ensuite dafficher llment de mme indice de la liste tel. On peut instrumenter ce
programme en ajoutant une instruction print(".",end="") dans la boucle afin de
visualiser le nombre de comparaisons effectues.
s = input()
i = 0
while i < 10 and s!= nom[i]:
print(".",end="")
i = i + 1
print(".")
if i < 10:
print(tel[i])
else:
print("Inconnu")

On obtient alors trois points ... quand on cherche le numro de tlphone de


Charles, qui est plutt au dbut de la liste, mais dix points .......... quand on
cherche celui de Jrme, qui est la fin.
Si on utilisait cette mthode pour chercher un mot dans un dictionnaire, on ouvrirait
celui-ci la premire page et on comparerait le mot recherch au premier mot du dic-
tionnaire, puis au deuxime, puis au troisime, etc., jusqu trouver le mot recherch, ou

288 Groupe Eyrolles, 2013


20 La dichotomie

arriver au dernier mot du dictionnaire. Un dictionnaire courant contenant 60 000 mots


et une comparaison prenant une demi-seconde, il faudrait, dans le pire des cas,
30 000 secondes, soit huit heures et vingt minutes, pour trouver le mot recherch ou se
convaincre quil nappartient pas au dictionnaire.
Bien entendu, ce nest pas ainsi que lon procde : on ouvre le dictionnaire au milieu,
on compare le mot recherch au mot mdian. Si le mot recherch est avant le mot
mdian dans lordre alphabtique, on limine la seconde moiti du dictionnaire, sans
mme la regarder ; sil est aprs le mot mdian, on limine la premire moiti. En
recommenant avec le demi-dictionnaire restant, on limine ensuite un demi-demi-
dictionnaire et on continue jusqu trouver le mot en question ou obtenir lensemble
vide, auquel cas le mot recherch nest pas dans le dictionnaire. Cette algorithme de
recherche dun lment dans une table sappelle la recherche par dichotomie (tomia,
couper, dikha, en deux).
Si on cherche un terme dans un dictionnaire de 60 000 mots :
Aprs 1 comparaison, on le cherche dans un ensemble dau plus 30 000 mots.
Aprs 2 comparaisons, on le cherche dans un ensemble dau plus 15 000 mots.
Aprs 3 comparaisons, on le cherche dans un ensemble dau plus 7 500 mots.
Aprs 4 comparaisons, on le cherche dans un ensemble dau plus 3 750 mots.
Aprs 5 comparaisons, on le cherche dans un ensemble dau plus 1 875 mots.
Aprs 6 comparaisons, on le cherche dans un ensemble dau plus 937 mots.
Aprs 7 comparaisons, on le cherche dans un ensemble dau plus 468 mots.
Aprs 8 comparaisons, on le cherche dans un ensemble dau plus 234 mots.
Aprs 9 comparaisons, on le cherche dans un ensemble dau plus 117 mots.
Aprs 10 comparaisons, on le cherche dans un ensemble dau plus 58 mots.
Aprs 11 comparaisons, on le cherche dans un ensemble dau plus 29 mots.
Aprs 12 comparaisons, on le cherche dans un ensemble dau plus 14 mots.
Aprs 13 comparaisons, on le cherche dans un ensemble dau plus 7 mots.
Aprs 14 comparaisons, on le cherche dans un ensemble dau plus 3 mots.
Aprs 15 comparaisons, on le cherche dans un ensemble dau plus 1 mot.
Au bout de 16 comparaisons seulement, on a trouv le mot dans le dictionnaire, ou
on sait quil ny est pas : 8 secondes suffisent donc, contre 8 heures et 20 minutes, soit
un temps de recherche divis par 3 750.

T Logarithme entier

On rappelle que le logarithme entier elog(x) dun nombre x suprieur ou gal 1 est le nombre de fois quil
faut le diviser par deux pour obtenir un nombre infrieur ou gal 1.

Groupe Eyrolles, 2013 289


Informatique et sciences du numrique

Au cours dune recherche par dichotomie, soit on tombe sur le rsultat, soit on divise
par deux la taille de lensemble dans lequel on recherche le mot, et ceci chaque com-
paraison. De ce fait, le nombre de comparaisons ncessaires pour trouver un lment
dans une table est, dans le pire des cas, le logarithme entier de la taille de la table.
Le gain qui consiste passer dun nombre de comparaisons proportionnel au nombre
dlments un nombre de comparaison proportionnel son logarithme entier est
immense. Quand le nombre dlments atteint quelques millions ou quelques milliards,
son logarithme entier ne vaut que 20 ou 30 :

n 1 2 4 8 16 .. 256 .. 1024 .. Million .. Milliard


Logarithme entier de n 0 1 2 3 4 .. 8 .. 10 .. 20 .. 30

La dichotomie permet, par exemple, de rechercher en un maximum de 26 tapes, le nom


de quelquun dans lannuaire des 60 millions de Franais.
Bien entendu, cet algorithme de recherche par dichotomie ne fonctionne que parce que,
dans un dictionnaire, les mots sont ordonns par ordre alphabtique. Si les mots avaient
t dans le dsordre, il aurait fallu tout fouiller. De manire gnrale, il faut que lon ait
dfini, sur le type des lments de la table, une relation dordre total, cest--dire une
relation qui soit :
rflexive : un lment x est avant lui-mme, au sens large, x x ;
anti-symtrique : si x est avant y alors y nest pas avant x, sauf sils sont gaux, si
x y et y x alors x = y ;
transitive : si x est avant y et y avant z, alors x est avant z, si x y et y z alors x z ;
et totale : de deux lments, lun est toujours avant lautre, x y ou y x.
La relation dordre habituelle sur les nombres entiers et lordre alphabtique sur les
chanes de caractres sont deux exemples de relations dordre totales.

EN PRATIQUE Attention aux accents

Selon le codage des caractres utiliss, les mots peuvent tre tris dans un ordre diffrent. Ainsi, dans un
programme Python o les caractres sont exprims en Unicode, Etienne est bien avant Frdrique,
mais ce nest plus le cas pour tienne.

Il faut, par ailleurs, que la table soit ordonne relativement cette relation, cest--dire
que si x est avant y dans la table, alors x y.
On peut alors crire un programme qui exprime lalgorithme de recherche par dicho-
tomie. Deux variables i et j dfinissent lintervalle de la liste nom, auquel lindice de la
chane de caractres s recherche appartient, si jamais cette chane est dans la table. Tant

290 Groupe Eyrolles, 2013


20 La dichotomie

que cet intervalle contient au moins deux lments, cest--dire tant que i < j, on cal-
cule llment mdian k de lintervalle et on compare les chanes de caractres s et
nom[k]. Si ces deux chanes de caractres sont identiques, on rduit lintervalle au sin-
gleton [k, k], de manire provoquer la fin du calcul. Si s est avant nom[k] dans lordre
alphabtique, on rduit lintervalle [i, k - 1] et si s est aprs nom[k] dans lordre
alphabtique, on rduit lintervalle [k + 1, j].
On sarrte quand lintervalle contient moins de deux lments. Comme on va le voir,
lintervalle [i, j] est alors ou bien de la forme [i, i], qui est un singleton, ou bien de la
forme [i,i - 1], qui est vide puisque i est plus grand que i - 1. Et i est toujours
compris entre 0 et 9. Si la chane de caractres nom[i] est identique s, on a trouv
lindice de la chane s dans la liste nom ; si ce nest pas le cas, la chane s nest pas dans la
table.
s = input()
i = 0
j = 9
while i < j:
k = (i + j) // 2
if s == nom[k]:
i = k
j = k
elif s < nom[k]:
j = k-1
else:
i = k+1
if s == nom[i]:
print(tel[i])
else:
print("Inconnu")

On doit se convaincre de deux choses : dune part que lalgorithme se termine aprs
un certain nombre ditrations, dautre part que la rponse donne par lalgorithme
est correcte.
Le fait que la boucle se termine est d au fait que le nombre j - i + 1 dlments
dans lintervalle [i, j] est au moins divis par deux chaque itration. Aprs un
nombre ditrations infrieur au logarithme entier du nombre dlments dans la
table, ce nombre est infrieur ou gal 1 et la boucle se termine. En instrumentant le
programme prcdent pour compter le nombre de comparaisons, on saperoit que ce
nombre est toujours infrieur ou gal 4, qui est le logarithme entier de 10.
Ensuite, pour dmontrer que la rponse donne par lalgorithme est correcte, on com-
mence par montrer que si la chane de caractres s est dans la table, alors son indice
appartient toujours lintervalle [i, j]. Cette proprit est un invariant de la boucle,
cest--dire une proprit qui reste vraie chaque excution du corps de la boucle. Ici,
quand on rduit lintervalle [i, j] lintervalle [i, k - 1] par exemple, cest parce que

Groupe Eyrolles, 2013 291


Informatique et sciences du numrique

lon sait que la chane s est avant la chane nom[k] dans lordre alphabtique et donc
que lindice de la chane s, sil existe, nest pas dans lintervalle [k, j]. La proprit reste
donc vraie jusqu la fin de lexcution de la boucle.
Enfin, on montre que quand on sort de la boucle, lintervalle [i, j] est soit le singleton
[i, i], soit lintervalle vide [i, i - 1]. Dans les deux cas, i est compris entre les valeurs
minimale et maximale de dpart, ici 0 et 9. Pour cela, on montre un autre invariant de
la boucle : si lintervalle [i, j] nest pas vide, alors ses bornes i et j sont comprises entre
les valeurs minimale et maximale de dpart, et sil est vide, alors sa borne infrieure i
est comprise entre les valeurs minimale et maximale de dpart.
Si lintervalle [i, j] contient au moins trois points, cest--dire si i + 2 j, il nest
pas difficile de montrer que les nombres k - 1 et k + 1, o k = (i + j) // 2, sont tous
les deux compris entre i et j au sens large. Le nouvel intervalle [k, k], [i, k - 1] ou
[k + 1, j] est contenu dans [i, j] et donc ses bornes sont comprises entre les valeurs
minimale et maximale de dpart.
Si lintervalle [i, j] contient deux points, cest--dire si j = i + 1, alors k = (i + j) // 2
est gal i. Le nombre k + 1 est gal j : il est compris entre i et j au sens large. En
revanche, le nombre k - 1 est gal i - 1. Dans ce cas, le nouvel intervalle est [i, i]
ou [j, j] dont les bornes sont comprises entre les valeurs minimale et maximale de
dpart, ou lintervalle vide [i, i - 1] dont la borne infrieure i est comprise entre les
valeurs minimale et maximale de dpart.
On sort de la boucle quand lintervalle [i, j] contient zro ou un point. Dans un cas
comme dans lautre, lindice i est compris entre les valeurs minimale et maximale de
dpart. Si la chane de caractres nom[i] est identique s, on a trouv lindice de la
chane s dans la liste nom ; si ce nest pas le cas, la chane s nest pas dans la table.

ALLER PLUS LOIN Ajouter un lment en temps logarithmique

Cet algorithme de recherche par dichotomie permet donc la recherche rapide dun lment dans une table,
puisque le nombre de comparaisons, et par consquent le temps dexcution du programme, est proportionnel au
logarithme de la taille de la table et non la taille de la table elle-mme. En revanche, ajouter ou supprimer un
lment de la table demande un temps de calcul proportionnel la taille de la table, et non son logarithme,
puisque quand on ajoute ou supprime un lment au dbut de la liste, il faut dcaler tous les autres lments. Ce
nest pas trs grave quand la table change peu, comme un dictionnaire, mais cela peut devenir un problme si elle
change souvent. Cest pour cela quil existe dautres manires, plus complexes, de programmer la recherche en
table, qui rendent logarithmiques aussi bien la recherche, que lajout et la suppression dun lment de la table.
Bien que plus complexes, ces mthodes sont fondes sur les mmes ides que celles vues dans cet exemple.

Exercice 20.1
On suppose que lon a un annuaire qui contient les sept milliards dtres humains dans
lordre alphabtique de leurs nom, prnom, lieu de naissance et date de naissance. Com-
bien de comparaisons sont ncessaires pour retrouver une personne dans cet annuaire ?

292 Groupe Eyrolles, 2013


20 La dichotomie

Exercice 20.2
Programmer lalgorithme de recherche en table par dichotomie de faon rcursive.

Exercice 20.3
crire un programme qui joue au jeu du plus petit - plus grand cest--dire qui propose
un utilisateur de deviner un nombre entre 0 et 100 en lui indiquant chaque tentative si le
nombre propos par lutilisateur est plus petit ou plus grand que le nombre deviner. En
combien dtapes au plus peut-on deviner le nombre si on connat le principe de la
dichotomie ? crire un autre programme qui cherche deviner le nombre.

Exercice 20.4
On suppose que lon a un dictionnaire qui contient n mots en vrac, sans aucun ordre.
Peut-on trouver une mthode plus rapide que la comparaison avec chacun des mots du
dictionnaire ?
On suppose que lon cherche au hasard dans ce dictionnaire un mot donn, sans noter les
mots dj essays. Quelle est la probabilit de trouver le mot du premier coup ? Quelle est
la probabilit de trouver le mot au k-me coup, cest--dire dchouer aux k - 1 premiers
coups et de russir au k-me ?
Quelle est la probabilit de ne pas encore avoir trouv le mot aprs k coups ? partir de
combien de coups cette probabilit devient-elle infrieure 1/2 ?
Rechercher sur le Web des informations sur la loi gomtrique et sur son esprance et
en dduire le nombre moyen de coups ncessaires pour trouver le mot dans le diction-
naire, sil y est. Le rsultat est surprenant : il faut en moyenne n coups.
Que se passe-t-il si on cherche au hasard le mot, sans noter les mots dj essays, et quil
nest pas dans la bote ?

La conversion analogique-numrique
On sintresse maintenant un tout autre problme : celui de la conversion analo-
gique-numrique, par exemple dune tension (voir le chapitre 17).
Il nest pas difficile de raliser un circuit qui compare deux tensions et indique
laquelle est la plus grande. Il nest pas non plus trop difficile de raliser un circuit de
conversion numrique-analogique, qui produit une tension donne par un nombre
exprim en binaire. Beaucoup de convertisseurs analogique-numrique procdent
alors en comparant la tension numriser successivement plusieurs valeurs de rf-
rence pour, de proche en proche, cerner la valeur de la tension. Ici encore, ces conver-
tisseurs procdent par dichotomie, en divisant lespace de recherche par deux
chaque mesure. Cela permet datteindre trs rapidement une bonne prcision, le mil-
lime en 10 tapes, le millionime en 20, etc.

Groupe Eyrolles, 2013 293


Informatique et sciences du numrique

Trouver un zro dune fonction


Voici encore un autre problme : trouver un zro dune fonction f continue et stricte-
ment monotone dans un intervalle [a, b], cest--dire rsoudre une quation de la
forme f (x) = 0, a x b.
Une mthode consiste comparer le signe de f (a) et f (b). Si ces deux signes sont
identiques, alors la fonction f tant strictement monotone, elle ne sannule pas sur
lintervalle [a, b]. Sinon, elle sannule une fois exactement sur cet intervalle. Cest le
cas par exemple de la fonction sinus qui sannule sur lintervalle [2,4].

Ici encore, une recherche par dichotomie permet de trouver une valeur approche de
ce zro. On cherche une valeur approche e = 10-5 prs.
from math import *

e = 1E-5
a = 2.0
b = 4.0
m = (a + b) / 2
while b - a > e and abs(sin(m)) > e:
if sin(a) * sin(m) <= 0:
b = m
else:
a = m
m = (a + b) / 2

Ce programme donne la valeur m = 3,1416015625.

294 Groupe Eyrolles, 2013


20 La dichotomie

Exercice 20.5
Montrer que ce programme se termine. Montrer que, quand on sort de la boucle, le
nombre m est soit une approximation en x de la solution, cest--dire un nombre m tel quil
existe un nombre z tel que f(z) = 0 et |m - z| e, soit une approximation en y de la solution,
cest--dire un nombre m tel que |f(m)| e.

Exercice 20.6
Lexercice 20.5 suppose que le calcul de la fonction f sur des nombres virgule soit exact. Or,
on a vu que cest rarement le cas : les calculs sur les nombres virgule sont presque toujours
des calculs approchs. Donner un exemple dans lequel cet algorithme ne fonctionne pas
cause des approximations sur le calcul de la fonction f. Montrer que si lerreur sur le calcul
de la fonction f est toujours strictement infrieure e, alors cet algorithme fonctionne tou-
jours.

Exercice 20.7
Si la fonction nest pas monotone, lalgorithme continue-t-il de se terminer ou risque-t-il de
boucler indfiniment ?

Exercice 20.8
Soit = b - a la taille de lintervalle initial. Montrer que, aprs n itrations, lintervalle de
recherche est de taille / 2n. En dduire que le nombre ditrations ncessaires pour
trouver une approximation de la solution est infrieur au logarithme entier de / e.

Exercice 20.9
Programmer cet algorithme de recherche du zro dune fonction de manire rcursive.

Ai-je bien compris ?


Que signifie le mot dichotomie ?
Combien de comparaisons faut-il faire pour trouver un mot dans un dictionnaire ?
Quelles sont les autres applications du principe de dichotomie prsentes dans ce
chapitre ?

Groupe Eyrolles, 2013 295


21
Philippe Flajolet (1948-2011) est un des pionniers de lana-
lyse de la complexit des algorithmes, cest--dire du temps
que dure leur excution et de la quantit de mmoire quelle
demande. Il a montr lutilit, dans ce domaine, de plusieurs
thories mathmatiques : la combinatoire et le dnombre-
ment, la thorie des probabilits et la thorie des fonctions
dune variable complexe. Il a aussi eu conscience trs tt de
lapport des logiciels de calcul formel pour effectuer les cal-
culs, parfois fastidieux, que cette analyse demande.
Trier
C HAPITRE AVANC

Dans une trs grande bibliothque,


il faut classer les livres pour les retrouver.

Dans ce chapitre, nous voyons deux algorithmes de tri, ce qui


est surtout un prtexte pour nous interroger sur la complexit
des algorithmes.
Nous prsentons le tri par slection et le tri par fusion,
et nous nous interrogeons sur lefficacit de ces deux
algorithmes, en valuant leur temps dexcution.
Informatique et sciences du numrique

Nous avons vu que la recherche dun lment dans une table est plus rapide quand
celle-ci est ordonne. Cest une chose que nous savons depuis quil existe des biblio-
thques et des bibliothcaires : mme si cela est long et fatigant, il vaut mieux ranger
les livres dune bibliothque une fois pour toutes, par exemple dans lordre alphab-
tique, plutt que les laisser en vrac et arpenter des kilomtres de rayonnages chaque
fois que lon cherche un volume. Cela mne naturellement un nouveau problme :
comment ordonner une table ?
Ce problme est un cas particulier dun problme plus gnral : si lon se donne
n objets, par exemple, n nombres, n chanes de caractres, etc. et une relation
rflexive, transitive et totale (voir le chapitre 20), comment trier ces n objets, cest--
dire les disposer dans un certain ordre de faon ce que si un lment a est avant un
lment b dans la table alors a b ?

ALLER PLUS LOIN Lantisymtrie

On ne suppose pas la relation ncessairement antisymtrique, cest--dire que lon suppose possible davoir
la fois x y et y x, sans que x et y soient identiques. Cela permet par exemple de trier des points du plan par
abscisse croissante. En effet, la relation avoir une abscisse infrieure ou gale est rflexive, transitive et
totale, mais elle nest pas antisymtrique ; par exemple, (1 ; 2) a une abscisse infrieure ou gale (1 ; 3) et
(1 ; 3) a une abscisse infrieure ou gale (1 ; 2), mais ces deux points sont distincts. Quand on trie par
exemple les points (1 ; 2), (2 ; 0), (0 ; 2) et (1 ; 3) par abscisse croissante, deux rsultats sont possibles : (0 ; 2),
(1 ; 2), (1 ; 3), (2 ; 0) et (0 ; 2), (1 ; 3), (1 ; 2), (2 ; 0).

Limportance de ce problme fait que plusieurs dizaines dalgorithmes diffrents ont


t proposs pour trier des objets. Ce chapitre est consacr deux dentre eux : le tri
par slection et le tri par fusion. Comme on va le voir, ces deux algorithmes sont dune
efficacit trs diffrente.
Par souci de simplicit, on supposera dans tout ce chapitre que les objets trier sont
des nombres entiers et quils sont donns dans une liste. Le but dun algorithme de
tri est donc de calculer une nouvelle liste, ou de modifier la liste initiale, de manire
ce quil contienne les mmes nombres que la liste initiale, mais que ces lments
soient ordonns.

Le tri par slection


Lalgorithme de tri par slection est volontiers utilis pour trier des objets, comme
des cartes jouer, des livres, etc. la main. On commence par chercher, parmi les
objets trier, un lment plus petit que tous les autres. Cet lment sera le premier de

298 Groupe Eyrolles, 2013


21 Trier

la liste trie. On cherche ensuite, parmi ceux qui restent, un lment plus petit que
tous les autres, qui sera le deuxime de la liste trie, etc.
Par exemple, pour trier ainsi la liste

on slectionne dabord le plus petit lment, 11, que lon met au dbut de la liste rsultat
et que lon supprime de la liste trier

On cherche ensuite le plus petit parmi ceux qui restent, 14, on le met dans la liste rsultat
et on le supprime de la liste trier

et on continue ainsi jusqu avoir puis la liste trier.


Quand on programme cet algorithme, il faut dfinir comment exprimer le fait que
les cases 3 et 13 de la liste trier sont dsormais vides. Une solution parmi dautres
est dy mettre les deux derniers lments, 36 et 67, ou les deux premiers, 42 et 63, de
manire garder les lments trier contigus, si bien quil suffit de se souvenir des
deux extrmits du segment de la liste o se trouvent les lments trier.

Pour se souvenir que les lments trier sont maintenant dans les cases 2 15, et non
0 15, de la liste initiale, il suffit dutiliser une variable i qui vaut 2 et qui indique la
fois le nombre dlments dj tris et lindice de la liste o commencent ceux qui
restent trier.

Groupe Eyrolles, 2013 299


Informatique et sciences du numrique

Comme les deux premires cases de la liste initiale ne servent plus rien, on peut les
utiliser pour stocker le dbut de la liste dj trie, si bien que lon vite le recours
une liste auxiliaire.

Si lon doit trier 16 lments, rangs dans une liste dont lindice varie entre 0 et 15, le
tri par slection se programme de la manire suivante :
for i in range(0,15):
k = i
for j in range(i + 1,16):
if tab[j] <= tab[k]:
k = j
z = tab[i]
tab[i] = tab[k]
tab[k] = z

Lindice i de la boucle principale varie entre 0 et 14. Pour chaque valeur de i, on cherche,
dans la partie de la liste comprise entre i et 15, lindice k dun lment minimal :
k = i
for j in range(i + 1,16):
if tab[j] <= tab[k]:
k = j

puis on change dans la liste llment dindice i avec celui dindice k :


z = tab[i]
tab[i] = tab[k]
tab[k] = z

Quand la boucle est acheve, quinze lments ont t slectionns dans lordre crois-
sant et placs dans les quinze premires cases de la liste. Le seizime lment qui
reste est plus grand que tous les autres. La liste est donc trie.
Exercice 21.1
Effectuer la main un tri par slection des listes :

300 Groupe Eyrolles, 2013


21 Trier

Exercice 21.2
Dans une liste tab dj trie, on souhaite insrer un nouvel lment e de sorte que la nou-
velle liste soit galement trie.
Proposer un algorithme qui dtermine la position laquelle il faut insrer ce nouvel l-
ment.
Si lon souhaite conserver les lments tris dans la mme liste tab, que faudra-t-il faire
avant de pouvoir insrer e sa place ? Dans quel cas cette opration demandera-t-elle
beaucoup de temps ?

Exercice 21.3
Si lon interrompt lexcution de lalgorithme du tri par slection aprs k tapes, on obtient
une liste qui contient les k premiers lments de la liste finale calcul par lalgorithme. Cet
algorithme procde en calculant successivement le premier lment de la liste finale, puis les
deux premiers lments de la liste finale, puis les trois premiers, etc. Un autre algorithme, la
tri par insertion, trie dabord le premier lment de la liste initiale, puis les deux premiers,
puis les trois premiers, etc. Si lon interrompt lexcution de lalgorithme du tri par insertion
aprs k tapes, on obtient une liste qui contient, non les k premiers lments de la liste
finale, mais une liste ordonne qui contient les k premiers lments de la liste initiale.
Chercher sur le Web une description prcise de cet algorithme et le programmer.

Exercice 21.4
Lalgorithme du tri bulles consiste trier une liste en ne sautorisant qu changer deux
lments conscutifs de cette liste. On peut dmontrer que lalgorithme suivant :
chercher deux lments conscutifs rangs dans le dsordre,
si deux tels lments existent, les changer et recommencer,
sinon arrter,
trie nimporte quelle liste.
Effectuer la main un tri bulles de la liste :

Quel est le temps dexcution du tri bulles sur une liste ordonne ? tait-ce le cas pour
le tri par slection ?
Les listes sur lesquelles le tri bulles est le moins efficace sont celles qui sont ranges
dans lordre dcroissant, par exemple :

Si lon commence par essayer de placer le nombre n la position correcte, combien de


permutations sont ncessaires pour y arriver ?
Ensuite, combien de permutations sont ncessaires pour placer n - 1 au bon endroit ? Et
le nombre n - 2 ?

Groupe Eyrolles, 2013 301


Informatique et sciences du numrique

mettre une conjecture sur le nombre total de permutations ncessaires pour trier une
liste de taille n rang initialement en ordre dcroissant.
Dmontrer cette conjecture par rcurrence.
Proposer une description plus prcise de cet algorithme : ltape chercher deux l-
ments conscutifs rangs dans le dsordre pouvant tre traite de faons assez varies.
Programmer cet algorithme.

Le tri par fusion


Comme on le verra plus loin, les algorithmes de tri par slection, par insertion ou
bulles sont trs lents. Lalgorithme de tri par fusion fait la mme chose que ces trois
algorithmes, mais beaucoup plus rapidement.
Il est plus simple de prsenter cet algorithme avec une liste dont la taille est une puis-
sance de 2, comme 8, 16, 32, etc. Cela nest pas rellement une limitation, car si lon
veut trier 25 lments par exemple, il suffit dajouter 7 lments avec une trs grande
valeur dans la liste trier, puis de supprimer les 7 derniers lments de la liste trie.
Le cur de lalgorithme est un autre algorithme qui permet de fusionner deux listes
tries. Par exemple, si la liste tab1 contient les lments 5, 9, 11 et 17, dans cet ordre,
et si la liste tab2 contient les lments 3, 4, 11 et 13, alors leur fusion est une liste qui
contient ces huit lments dans lordre, cest--dire 3, 4, 5, 9, 11, 11, 13 et 17. Pour
fusionner deux telles listes, le principe gnral est de transfrer les diffrents lments
dans une troisime liste dans lordre croissant, llment suivant tant toujours forc-
ment situ au dbut dune des deux listes initiales. On peut pour cela utiliser le pro-
gramme suivant :
x = 0
y = 0
for i in range(0,8):
if (x <= 3 and y <= 3 and tab1[x] <= tab2[y]) or (y == 4):
tab3[i] = tab1[x]
x = x + 1
else:
tab3[i] = tab2[y]
y = y + 1

Ce programme est essentiellement constitu dune boucle qui dtermine lun aprs
lautre les lments de la liste rsultat tab3. Lindice i dsigne la prochaine case
remplir dans cette liste. Au dpart, tab3 est vide et lindice i vaut 0. Les indices x et y
dsignent le prochain lment des listes tab1 et tab2 non encore recopis.

302 Groupe Eyrolles, 2013


21 Trier

Au cours du premier tour de boucle, on compare llment x de la liste tab1


llment y de la liste tab2. Cest ce second lment qui est plus petit. On le recopie
dans la case i de la liste tab3 et on augmente de 1 la valeur des indices y et i.

Cest encore llment y de la liste tab2 qui est le plus petit ; cest encore lui quon
recopie dans la liste tab3 au tour suivant de la boucle.

Cest dsormais llment x de la liste tab1 qui est le plus petit ; cest lui quon
recopie dans la liste tab3 au tour suivant de la boucle.

Groupe Eyrolles, 2013 303


Informatique et sciences du numrique

Et on continue ainsi jusquau septime tour de la boucle, o lon recopie le dernier


lment de la liste tab2 dans la liste tab3. Il nest alors plus ncessaire de comparer les
lments plus petits et non encore recopis des deux listes. Cest dans le premier
quon prendra dsormais tous les lments recopier.

Au huitime tour de boucle, on recopie le dernier lment de la liste tab1.

et la construction de la liste tab3 est acheve.


Exercice 21.5
Modifier ce programme pour fusionner trois listes, chacune tant de taille 4.
Au lieu dutiliser deux listes tab1 et tab2, on peut aussi utiliser deux segments de la
mme liste tab par exemple, le segment qui va de la case 0 la case 3 et le segment
qui va de la case 4 la case 7.

Le programme scrit alors de la manire suivante :


x = 0
y = 4

304 Groupe Eyrolles, 2013


21 Trier

for i in range(0,8):
if (x <= 3 and y <= 7 and tab[x] <= tab[y]) or (y == 8):
tab3[i] = tab[x]
x = x + 1
else:
tab3[i] = tab[y]
y = y + 1

Maintenant, comment utiliser cet algorithme de fusion pour trier une liste ? On
commence avec une liste non trie, dont le nombre dlments est une puissance de
deux, par exemple 16. Chaque case de la liste est un mini-segment form dune case
unique. Puisquil ne comporte quune case, chacun de ces mini-segments est
ordonn. On regroupe alors ces seize segments deux par deux et on fusionne, lune
aprs lautre, ces huit paires de segments.

On obtient alors huit segments ordonns de deux cases. On les regroupe deux par deux
et on fusionne lune aprs lautre ces quatre paires de segments de deux lments.

On obtient alors quatre segments ordonns de quatre cases. On les regroupe deux par
deux et on fusionne lune aprs lautre ces deux paires de segments de quatre lments.

On obtient alors deux segments ordonns de huit cases et on fusionne cette paire de
segments de huit lments.

et on obtient la liste ordonne.

Groupe Eyrolles, 2013 305


Informatique et sciences du numrique

Exercice 21.6
Effectuer la main un tri par fusion des listes :

Le programme scrit ainsi :


s = 1
while s <= 15:
b = 0
x = 0
y = s
for i in range(0,16):
if (x < b + s and y < b + 2 * s and tab[x] < tab[y]) or (y == b + 2 * s):
tab1[i] = tab[x]
x = x + 1
else:
tab1[i] = tab[y]
y = y + 1
if x == b + s and y == b + 2 * s:
b = b + 2 * s
x = b
y = b + s
for i in range(0,16):
tab[i] = tab1[i]
s = s * 2

Dans la boucle qui va des lignes 6 16, on parcourt la liste tab et on fusionne des
petits segments de taille s en segments de taille 2 s. On commence par poser b = 0 et
par fusionner les segments [b, b + s - 1] et [b + s, b + 2 s - 1], cest--dire [0, s -
1] et [s, 2 s - 1], en choisissant, comme prcdemment, les lments alternative-
ment dans un segment et dans lautre, en augmentant dune unit la variable x ou
bien la variable y, selon le segment choisi, jusqu ce que x soit gal b + s et y
b + 2 s. ce moment, on a fini de fusionner les deux premiers segments, on pose
b = 2 s et on continue, dans la mme boucle, fusionner les deux segments suivants :
[b, b + s - 1] et [b + s, b + 2 s - 1], cest--dire [2 s, 3 s - 1] et [3 s, 4 s - 1], etc.
Quand cette boucle est acheve, la liste tab1 est form de segments tris de taille 2 s.
On le recopie dans la liste tab, on multiplie s par 2 et on recommence fusionner les
segments de taille suprieure : cest le rle de la boucle while la plus externe.

306 Groupe Eyrolles, 2013


21 Trier

Exercice 21.7
Modifier le programme donn pour pouvoir effectuer un tri par fusion :
dune liste dont la taille est une puissance de 2 quelconque,
dune liste de taille quelconque en utilisant la mthode propose au dbut de cette section
pour se ramener une taille qui est une puissance de 2.

Lefficacit des algorithmes


Comme on la dj vu plusieurs fois, pour traiter un mme problme, il existe souvent
plusieurs algorithmes. Par exemple, on peut trier une liste par slection, par fusion, etc.
Quand on doit choisir parmi plusieurs algorithmes, lun des critres est celui du temps
dexcution. Pour un logiciel interactif, par exemple, un temps de rponse court est un
lment essentiel du confort de lutilisateur. De mme, certains programmes industriels
doivent tre utiliss un grand nombre de fois dans un dlai trs court et mme un pro-
gramme qui nest excut quune seule fois, par exemple un programme de simulation
crit pour tester une hypothse de recherche, est inutilisable sil demande des mois ou
des annes de calcul.
En gnral, on cherche dterminer comment le temps dexcution dun algorithme
varie en fonction de la taille des donnes. Le temps dexcution dune recherche en table
dpend de la taille de cette table. Comme on la vu, selon lalgorithme, ce temps peut
tre proportionnel la taille de la table ou au logarithme de cette taille. De mme, quand
on sinterroge sur lefficacit dun algorithme de tri, on cherche comprendre comment
le temps dexcution de cet algorithme varie en fonction du nombre dobjets trier.
Lvaluation du temps mis par un algorithme pour sexcuter est un domaine de
recherche part entire, car elle se rvle quelquefois trs difficile. Nanmoins, dans
de nombreux cas, cette valuation peut se faire en appliquant quelques rgles simples.

Groupe Eyrolles, 2013 307


Informatique et sciences du numrique

SAVOIR-FAIRE Sinterroger sur lefficacit dun algorithme


Une affectation ou lvaluation dune expression ont un temps dexcution petit. Cette
dure constitue souvent lunit de base dans laquelle on mesure le temps dexcution dun
algorithme.
Le temps pris pour effectuer une squence p q est la somme des temps pris pour excuter
les instructions p puis q.
Le temps pris pour excuter un test if b: p else: q est infrieur ou gal au maximum des
temps pris pour excuter les instructions p et q, plus une unit qui correspond au temps
dvaluation de lexpression b.
Le temps pris pour excuter une boucle for i in range(0,m): p est m fois le temps pris
pour excuter linstruction p si ce temps ne dpend pas de la valeur de i. En particulier, quand
deux boucles sont imbriques, le corps de la boucle interne est rpt cause de cette boucle,
mais aussi parce quelle-mme est rpte dans son intgralit. Ainsi, si les deux boucles sont
rptes respectivement m et m fois, alors le corps de la boucle interne est excut m m fois
en tout. Quand le temps dexcution du corps de la boucle dpend de la valeur de lindice i, le
temps total dexcution de la boucle est la somme des temps dexcution du corps de la boucle
pour chaque valeur de i. Quand le nombre de rptitions dune boucle ne dpend pas des
entres de lalgorithme, le temps pris pour excuter cette boucle est une constante.
Le cas des boucles while est plus complexe traiter puisque le nombre de rptitions
nest en gnral pas connu a priori.

Exercice 21.8 (avec corrig)


Comment le temps dexcution des algorithmes exprims par les programmes suivants
varie-t-il en fonction de n ?

n = int(input())
for i in range(0,11):
print(i*n)

Cet algorithme affiche la table de multiplication de n. La boucle est toujours excute


10 fois, quel que soit n, et donc le temps dexcution ne dpend pas de lentre n.

n = int(input())
for i in range(1,n+1):
print(i*i)

Cet algorithme affiche la suite des carrs des nombres entiers jusqu n2. La boucle est ex-
cute n fois et le temps dexcution est donc proportionnel n.

n = int(input())
for i in range(1,n+1):
for j in range(1,n+1):
print(i*j)

308 Groupe Eyrolles, 2013


21 Trier

Cet algorithme construit une table de multiplication pour tous les entiers de 1 n en donnant
tous leurs multiples jusquau n-ime. Il comprend deux boucles imbriques, chacune effec-
tuant n rptitions de son corps. Le temps dexcution total est donc proportionnel n2.

Exercice 21.9
Comment le temps dexcution de lalgorithme exprim par le programme suivant varie-t-il
en fonction de n ?

n = int(input())
for i in range(1,n + 1):
print(i * 2)
for j in range(1,n + 1):
print(3 * j)

Lefficacit des algorithmes de tri par slection


et par fusion
Pour valuer le temps que demande lalgorithme de tri par slection pour trier une liste,
on compte le nombre de fois quest excut le corps de la boucle la plus interne :
if tab[j] <= tab[k]:
k = j

Cette instruction est excute 15 fois la premire fois que la boucle interne est excute,
puis 14 fois, puis 13 fois, , puis 1 fois. Au total, cette instruction est excute
15 + 14 + + 1 = 120 fois.
Plus gnralement, quand on trie une liste de n lments, cette instruction est excute
(n - 1) + (n - 2) + + 1 fois, cest--dire n (n - 1) / 2 = (1 / 2) n2 - (1 / 2) n fois. Dans
cette valuation, le terme (1 / 2) n devient beaucoup plus petit que (1 / 2) n2 quand
n devient grand et on peut donc le ngliger. De mme, on peut ngliger le temps pris
pour changer les lments dindices i et k de la liste, car cette opration est rpte
n fois et elle prend donc un temps proportionnel n, ce qui peut tre nglig devant
(1 / 2) n2. Au bout du compte, linformation quil est important de retenir est que le
temps dexcution de cet algorithme est quasiment proportionnel au carr du nombre
dlments de la liste trier.
Lalgorithme de tri par fusion est lui aussi compos de deux boucles imbriques. On
pourrait donc sattendre ce que le temps dexcution de cet algorithme soit propor-
tionnel au carr du nombre dlments trier. Et de fait, la boucle for la plus interne,
qui fusionne tous les segments de taille s en des segments de taille 2 s, demande un

Groupe Eyrolles, 2013 309


Informatique et sciences du numrique

temps proportionnel au nombre n dlments trier puisquelle est excute n fois,


son indice variant de 0 15 dans notre exemple et de 0 n - 1 dans le cas gnral.
Cependant, la boucle while la plus externe est excute un nombre de fois qui est
proportionnel, non au nombre n dlments trier, mais au logarithme entier de ce
nombre car, chaque fois, on double la taille s des segments fusionns. Ainsi, dans
notre exemple, s vaut successivement 1, 2, 4 et 8 et la boucle est excute 4 fois, ce
qui est le logarithme entier de 16. Ainsi, le temps ncessaire pour trier une liste de
taille n est proportionnel, non pas au carr de n, mais au produit de n par son loga-
rithme entier : n elog n.
Prenons un exemple : pour trier une liste dun million dlments, lalgorithme de tri
par slection demande un temps de lordre de n2 = (106)2 = 1012, mille milliards. Le
logarithme entier de 106 est 20 puisque 106 / 220 = 0,953 Le temps demand par
lalgorithme de tri par fusion est donc de lordre de 106 20, vingt millions. Le tri
par fusion est plus rapide que le tri par slection dun facteur de lordre de 50 000
dans cet exemple. Si un ordinateur excute le corps de la boucle interne en une milli-
seconde, un algorithme mettra un temps de lordre de vingt secondes et lautre dun
million de secondes, soit un peu plus de dix jours, pour trier cette liste.

310 Groupe Eyrolles, 2013


21 Trier

ALLER PLUS LOIN Le tri par fusion programm rcursivement

Comme de nombreux autres algorithmes, le tri par fusion peut se programmer de


manire rcursive. Il peut se dcrire simplement en disant que pour trier un segment
dune liste de plus de deux lments, il faut trier la premire moiti, trier la seconde,
puis fusionner les deux segments obtenus. Cela mne la fonction suivante, qui trie
le segment de la liste tab, allant de n p :
def tri (tab,n,p):
if n < p:
k = (n + p) // 2
tri(tab,n,k)
tri(tab,k+1,p)
tab1 = [0 for i in range(0,p+1)]
fusion(tab,n,k,k+1,p,tab1,n)
for i in range(n,p + 1):
tab[i] = tab1[i]
Outre les deux appels rcursifs la fonction tri elle-mme, ce programme utilise un
appel la fonction fusion qui fusionne deux segments de la liste tab, allant de n m
et de p q en mettant le rsultat dans la liste tab1, partir de lindice i. Cette fonc-
tion peut elle-mme se programmer avec une boucle, ou alors rcursivement :
def fusion (tab,x,n,y,p,tab1,i):
if x <= n and (y > p or tab[x] < tab[y]):
tab1[i] = tab[x]
fusion(tab,x+1,n,y,p,tab1,i+1)
elif y <= p:
tab1[i] = tab[y]
fusion(tab,x,n,y+1,p,tab1,i+1)
Dans le programme principal, il ne reste plus qu remplir la liste tab avec les nom-
bres trier et appeler la fonction tri :
tri(tab,0,15)
Ces deux manires de programmer lalgorithme de tri par fusion illustrent, nou-
veau, la diffrence entre algorithme et programme, discute au chapitre 18. Mme
en restant dans le mme langage de programmation, lalgorithme de tri par fusion
peut sincarner dans des programmes trs diffrents, selon que lon utilise des bou-
cles ou la rcursivit pour lexprimer.

Ai-je bien compris ?


Quels sont les principaux algorithmes de tri prsents dans ce chapitre ?
Quest-ce que la complexit dun algorithme ?
Quel est lalgorithme de tri le plus rapide parmi ceux prsents dans ce
chapitre ?

Groupe Eyrolles, 2013 311


22
Joseph Sifakis (1946-) est un chercheur franais dorigine
grecque qui a reu le prix Turing en 2007, avec Edmund Clarke
et Allen Emerson, pour la mthode dnumration et de vri-
fication des modles. Cette mthode se fonde sur une descrip-
tion des systmes informatiques par des systmes tats et
transitions et sur une analyse des tats accessibles dans ces sys-
tmes, qui sinspire des algorithmes de parcours de graphes. Il
est le premier scientifique franais avoir reu ce prix.
Parcourir
un graphe
C HAPITRE AVANC

O on trouve enfin la sortie du labyrinthe.

Dans ce dernier chapitre, nous voyons un algorithme


de parcours de graphe qui permet, par exemple, de chercher
la sortie dun labyrinthe, en vitant de tourner en rond en
conservant chaque tape une liste des chemins prolonger.
Diverses variantes de cette mthode permettent de parcourir
le graphe en profondeur ou en largeur.
Partant de lexemple des labyrinthes, nous dfinissons
la notion de graphe. Cette notion est importante car les
graphes permettent de modliser nombre de problmes, par
exemple de nombreux jeux, o les sommets reprsentent les
tats possibles du jeu et les artes reprsentent les coups
possibles.
Informatique et sciences du numrique

Un algorithme de parcours de graphe est, peu de choses prs, un algorithme qui


permet de trouver la sortie dun labyrinthe. Si la systmatisation et ltude de ces
algorithmes est rcente, la notion de graphe elle-mme est trs ancienne, puisquon a
retrouv des labyrinthes dessins dans des tombes datant de la prhistoire.

La liste des chemins prolonger


Commenons par un exemple.

On entre dans ce labyrinthe par le point A en haut gauche, on avance de carrefour en


carrefour, et on cherche la sortie Z, en bas droite.
En partant de lentre A, on na gure dautre choix que davancer droit devant soi
jusquau carrefour B, o deux possibilits se prsentent : tourner droite ou conti-
nuer tout droit. Si on continue tout droit, vers le carrefour C, et que cela se rvle un
mauvais choix, il faudra plus tard explorer lautre possibilit : revenir en B et prendre
la galerie qui mne au carrefour M. Tout le temps que dure lexploration de la pre-
mire possibilit, on doit donc garder en mmoire que la seconde reste explorer. Au
carrefour C se pose nouveau le choix entre deux galeries qui mnent lune au
carrefour D et lautre au carrefour K. Si on prend la galerie qui mne au carrefour D,
on doit garder en mmoire que, en plus du chemin A-B-C-D, il y a dsormais deux
autres chemins dont on doit explorer les prolongements : A-B-M et A-B-C-K.

chaque tape de son exploration, il faut donc se souvenir dune liste de chemins
prolonger. On peut se reprsenter cette liste comme les cailloux du Petit Poucet ou le

314 Groupe Eyrolles, 2013


22 Parcourir un graphe

fil dAriane qui, en marquant le chemin parcouru, mettent en vidence ceux qui res-
tent explorer lorsquil faudra revenir sur ses pas. Au dpart, la liste contient un
chemin unique, form dun carrefour unique, qui est lentre du labyrinthe :
A

Cette liste des chemins prolonger devient ensuite :


A-B

puis
A-B-C
A-B-M

On choisit alors un chemin ou lautre et on le prolonge. Si on choisit le premier, cette


liste devient :
A-B-C-D
A-B-C-K
A-B-M

Si on choisit de prolonger encore le premier chemin, elle devient :


A-B-C-D-E
A-B-C-D-K
A-B-C-K
A-B-M

puis :
A-B-C-D-E-F
A-B-C-D-E-G
A-B-C-D-K
A-B-C-K
A-B-M

Groupe Eyrolles, 2013 315


Informatique et sciences du numrique

Si on choisit encore de prolonger le premier chemin A-B-C-D-E-F, on rencontre une


situation nouvelle, car le carrefour F est une impasse. On supprime donc simplement le
chemin A-B-C-D-E-F de la liste des chemins prolonger, qui devient donc :
A-B-C-D-E-G
A-B-C-D-K
A-B-C-K
A-B-M

et on entame alors lexploration dun autre chemin de cette liste, par exemple A-B-C-
D-E-G.
De manire gnrale, chaque tape, on transforme la liste de chemins prolonger
en choisissant un chemin c, par exemple le premier de la liste, et en le remplaant par
tous les chemins obtenus en ajoutant c un carrefour accessible depuis son dernier
carrefour. Un cas particulier est celui o ce dernier carrefour est une impasse. Dans ce
cas, on remplace le chemin c par zro chemin, cest--dire quon le supprime de la
liste des chemins prolonger.
Il y a cependant deux exceptions. Si le dernier carrefour du chemin c est la sortie du
labyrinthe, lalgorithme sarrte et retourne le chemin c qui va de lentre la sortie
du labyrinthe. Si la liste des chemins prolonger est vide, lalgorithme sarrte
galement : tous les chemins ont t explors sans succs : il ny en a aucun qui con-
duise de lentre la sortie.

viter de tourner en rond


Cette mthode fonctionne pour certains labyrinthes, mais pas pour tous. Dans le cas de
notre exemple prcdent, par exemple, elle peut chouer, ou plus prcisment se lancer
dans des calculs infinis, sans jamais trouver le chemin A-B-M-Z qui mne de lentre la
sortie. Au carrefour C, en effet, on peut continuer vers le carrefour D, puis prendre
droite vers le carrefour K et encore droite, ce qui ramne au carrefour C. On peut alors
nouveau prendre droite vers le carrefour D, et ainsi de suite linfini : ce labyrinthe

316 Groupe Eyrolles, 2013


22 Parcourir un graphe

comporte un cycle. En appliquant la mthode dcrite ci-avant, on peut remplacer le


chemin A-B-C-D, par des chemins parmi lesquels figure A-B-C-D-K, que lon remplace
son tour par des chemins parmi lesquels figure A-B-C-D-K-C, que lon remplace son
tour par des chemins parmi lesquels figure A-B-C-D-K-C-D, et ainsi de suite linfini.

Pour trouver la sortie dun labyrinthe, il faut donc certes explorer systmatiquement
tous les chemins possibles, mais aussi viter de tourner en rond.
En fait, il nest mme pas ncessaire que le labyrinthe comporte un cycle pour que la
mthode dcrite se lance dans un calcul infini. On a dit que, arriv au carrefour C, on
a deux possibilits : continuer tout droit vers le carrefour D ou tourner droite vers le
carrefour K. Stricto sensu, il y a une troisime possibilit : faire demi-tour et aller
vers B. Si on inclut cette possibilit, la mthode peut se lancer dans un calcul infini,
en allant de B C, puis de C B, etc.
Il y a plusieurs manires dviter que cette mthode tourne ainsi en rond. La plus simple
consiste ne pas ajouter la liste les chemins obtenus en ajoutant un carrefour dj inclus
dans le chemin c et qui forment donc un cycle.
Cette mthode est correcte, mais il est possible de faire mieux. En effet, comme on
la vu, quand on arrive au carrefour D, la liste des chemins prolonger est :
A-B-C-D
A-B-C-K
A-B-M

Lexploration du chemin A-B-C-D est longue puisquil faut parcourir toute la partie
du labyrinthe en vert sur cette figure.

Groupe Eyrolles, 2013 317


Informatique et sciences du numrique

Cependant, cette longue exploration ne mne qu des impasses, si bien que la liste
des chemins prolonger devient finalement :
A-B-C-K
A-B-M

partir de K, on ne peut pas aller en C, car ce carrefour appartient au chemin A-B-


C-K, mais rien nempche daller en D ou en L, si bien quon doit explorer nouveau
toute la partie du labyrinthe en vert, alors quen arrivant en K, on pourrait se rendre
compte que lon est dj pass par l et quil nest pas ncessaire de continuer.
Pour viter la fois de tourner en rond et dexplorer plusieurs fois les mmes parties
du labyrinthe, une solution consiste marquer les carrefours que lon visite pour ne
jamais y repasser. Lalgorithme auquel on aboutit ainsi utilise donc, dune part, une
liste des chemins prolonger et, dautre part, une liste des carrefours dj visits.
Ainsi, au dpart, la liste des chemins prolonger contient un seul chemin form dun
seul carrefour, qui est le point dentre du labyrinthe :
A

et la liste des carrefours dj visits est vide. Puis, chaque tape, on transforme la
liste de chemins explorer de la manire suivante : on choisit un chemin c dans la
liste des chemins prolonger. Si le dernier carrefour x de ce chemin appartient la
liste des carrefours dj visits, on supprime simplement le chemin c. Sinon, on le
remplace par les chemins obtenus en ajoutant c un carrefour accessible depuis x et
on ajoute x la liste des carrefours dj visits.

318 Groupe Eyrolles, 2013


22 Parcourir un graphe

Ainsi, dans notre exemple, quand on a fini lexploration du chemin A-B-C-D, la liste
des chemins prolonger devient :
A-B-C-K
A-B-M

et la liste des carrefours dj visits contient A, B, C, D, E, F, G, H, I, J, K et L.

K est dans la liste des carrefours dj visits ; il est donc inutile dy retourner et la liste
des chemins prolonger devient :
A-B-M

Il est facile de montrer que cet algorithme se termine, car le nombre de carrefours
dj visits augmente chaque tape et il ne peut pas augmenter au-del du nombre
total de carrefours du labyrinthe.
Il est, en revanche, un peu plus dlicat de montrer que cet algorithme trouve toujours un
chemin vers la sortie quand un tel chemin existe, car il faut montrer quen vitant ainsi
lexploration de nombreux chemins, on noublie pas dexplorer celui qui mne de lentre
la sortie. On montre, pour cela, que sil existe au dpart, dans la liste des chemins pro-
longer, un chemin prolongeable vers la sortie, alors cette proprit est prserve chaque
tape de lexcution de lalgorithme : cest un invariant. Un chemin est dit prolongeable
vers la sortie sil se termine par un carrefour y et sil existe un chemin form de carrefours
distincts et non encore visits, qui mne de y la sortie.
Ltape lmentaire de lalgorithme consiste transformer la liste des chemins prolonger
en remplaant un chemin c par tous les chemins obtenus en lui ajoutant un carrefour acces-
sible depuis son dernier carrefour x. On ajoute alors x la liste des carrefours visits. Si le

Groupe Eyrolles, 2013 319


Informatique et sciences du numrique

chemin c est lui-mme prolongeable vers la sortie, alors il y a videmment, parmi les nou-
veaux chemins, un chemin qui est prolongeable vers la sortie. Si, en revanche, c nest pas
prolongeable vers la sortie, alors un autre chemin c de la liste lest. Il faut montrer que ce
chemin reste prolongeable vers la sortie, bien qu cette tape on ajoute x la liste des car-
refours dj visits. Cela est d au fait que, comme il ny a pas de chemin form de carre-
fours distincts et non encore visits qui mne du carrefour x la sortie, le carrefour x ne
peut appartenir aucun chemin form de carrefours distincts et non encore visits qui
mne du dernier carrefour de c la sortie. Le chemin c reste donc prolongeable vers la
sortie bien que lon ajoute x la liste des carrefours visits.

La recherche en profondeur et la recherche


en largeur
La mthode dcrite au paragraphe prcdent est encore incomplte, car elle nindique pas
dans quel ordre on doit traiter les chemins prolonger. Or, selon lordre que lon choisit,
on aboutit diffrents algorithmes. La manire la plus simple de procder est celle que
nous avons employe dans les exemples : on choisit toujours de traiter le premier chemin
de la liste et, quand on le remplace par les chemins obtenus en lui ajoutant un carrefour
accessible depuis son dernier carrefour, on met ces chemins au dbut de la liste gale-
ment. Par exemple, quand on avait la liste de chemins prolonger :
A-B-C
A-B-M

on a choisi le premier de la liste, A-B-C, et on la prolong en deux chemins A-B-C-D et A-B-


C-K que lon a placs au dbut de la liste :
A-B-C-D
A-B-C-K
A-B-M

puis on a choisi nouveau le premier de la liste : A-B-C-D.


Cet algorithme sappelle lalgorithme de parcours en profondeur ou dfs (depth-first search),
car on explore dabord en profondeur les prolongements possibles du chemin A-B-C,
avant de commencer explorer ceux du second, A-B-M, si jamais la premire exploration
choue. Cette manire de faire est la plus naturelle : cest la fois la plus simple pro-
grammer et celle que lon utilise spontanment quand on est perdu dans un labyrinthe.
Une autre manire de faire est de traiter les chemins plus quitablement : pour cela,
on choisit toujours le chemin le plus court. Ainsi, quand on a remplac le chemin

320 Groupe Eyrolles, 2013


22 Parcourir un graphe

A-B-C par les deux chemins A-B-C-D et A-B-C-K, on choisit, non lun de ces deux-
l, mais le chemin A-B-M qui est plus court. Une manire simple de faire cela est de
mettre les deux chemins A-B-C-D et A-B-C-K la fin, et non au dbut, de la liste
des chemins prolonger :
A-B-M
A-B-C-D
A-B-C-K

puis dexplorer le premier chemin de la liste : A-B-M et de mettre les deux chemins
obtenus la fin de la liste des chemins prolonger :
A-B-C-D
A-B-C-K
A-B-M-N
A-B-M-Z

Cet algorithme, qui sappelle lalgorithme de parcours en largeur ou bfs (breadth-first


search), a lavantage de trouver le chemin le plus court qui va de lentre la sortie du
labyrinthe, ou lun parmi les plus courts sil y en a plusieurs.

ALLER PLUS LOIN Le chemin de poids minimal

On peut aussi prendre en compte la longueur des galeries. On obtient alors un troisime algorithme qui
cherche un chemin vers la sortie de poids minimal, le poids tant une grandeur abstraite associe chaque
galerie, par exemple sa longueur. Il suffit pour cela de toujours traiter en premier, dans la liste des chemins
prolonger, celui dont le poids est le plus petit.

Le parcours dun graphe


Ces algorithmes sont bien entendu utiliss pour rsoudre de nombreux problmes
autres que la recherche de la sortie dun labyrinthe. De manire gnrale, ils servent
parcourir des graphes. Un graphe est simplement un ensemble dobjets, que lon
appelle des sommets, et un ensemble dartes, chaque arte reliant deux sommets entre
eux. Dans le cas dun labyrinthe, les sommets sont les carrefours et les artes les gale-
ries qui relient les carrefours.
Dautres exemples de graphes sont les cartes routires ou ferroviaires : les pro-
grammes qui trouvent un chemin allant dune ville une autre, ou dune gare une
autre, utilisent des algorithmes de parcours de graphe, cherchant en gnral des che-
mins de poids minimaux.

Groupe Eyrolles, 2013 321


Informatique et sciences du numrique

Les labyrinthes que lon a parcourus sont des graphes non orients, cest--dire que la
mme arte relie le sommet A au sommet B et le sommet B au sommet A. Dans
dautres graphes, dits orients, une arte relie soit A B, soit B A, et si on veut relier
la fois A B et B A, il faut utiliser deux artes. On aurait, par exemple, d utiliser
un graphe orient, sil y avait eu des sens uniques dans les labyrinthes dont on cher-
chait la sortie. Les algorithmes tudis prcdemment stendent sans difficult aux
graphes orients.

tats et transitions
Beaucoup dobjets peuvent se modliser comme des graphes, en particulier, toutes les
situations qui peuvent se dcrire laide dun ensemble dtats et dun ensemble de
transitions entre ces tats. Cest le cas de nombreux jeux, comme le Solitaire ou le Tic-
tac-toe. La figure ci-aprs reprsente un tout petit bout du graphe o le joueur bleu a
deux choix pour placer un rond, lun des deux le conduisant perdre la partie.

Un tat du plateau indique quelle pice se trouve sur quelle case et les rgles du jeu
dfinissent des transitions possibles dun tat un autre. On peut alors dfinir un
graphe dont les sommets sont les tats du plateau et les artes les coups possibles. Un
simple parcours de graphe permet de trouver une solution au jeu du Solitaire, par
exemple. Les rgles des jeux plusieurs joueurs, comme le Tic-tac-toe, les checs ou
le Monopoly, peuvent aussi se dfinir comme des transitions entre tats. Comme il y
a plusieurs joueurs, et parfois du hasard, trouver une stratgie pour ces jeux demande
des algorithmes plus complexes quun simple parcours de graphes, mais ces algo-
rithmes reposent sur des ides similaires.

322 Groupe Eyrolles, 2013


22 Parcourir un graphe

DEVINETTE Le chou, la chvre et le loup


Une devinette raconte lhistoire dun berger qui possde un chou, une chvre et un loup. En
sa prsence, la chvre nose pas manger le chou, pas plus que le loup nose manger la chvre,
mais ils nhsiteraient pas satisfaire leurs apptits si lhomme tournait le dos. Ce berger
doit traverser une rivire avec sa petite troupe et il ne dispose que dune barque, dans
laquelle il peut naviguer avec un seul de ses compagnons. Comment doit-il sy prendre ?
Ce problme peut lui aussi se modliser comme un parcours de graphe. Tout dabord, chacun
des quatre protagonistes pouvant se trouver sur une rive ou lautre, il y a seize tats possibles :

rive de dpart rive darrive


0 chou, chvre, loup, berger
1 chou chvre, loup, berger
2 chvre chou, loup, berger
3 chou, chvre loup, berger
4 loup chou, chvre, berger
5 chou, loup chvre, berger
6 chvre, loup chou, berger
7 chou, chvre, loup berger
8 berger chou, chvre, loup
9 chou, berger chvre, loup
10 chvre, berger chou, loup
11 chou, chvre, berger loup
12 loup, berger chou, chvre
13 chou, loup, berger chvre
14 chvre, loup, berger chou
15 chou, chvre, loup, berger

Les tats 3, 6, 7, 8, 9 et 12 doivent tre limins, car dans chacun deux le loup et la chvre,
ou la chvre et le chou, sont sur une rive sans le berger. Il reste donc dix tats que lon peut
nommer en fonction des protagonistes prsents sur la rive de dpart :

chou
chvre
loup
chou, loup
chvre, berger
chou, chvre, berger
chou, loup, berger
chvre, loup, berger
chou, chvre, loup, berger

Groupe Eyrolles, 2013 323


Informatique et sciences du numrique

Dfinissons les transitions entre tats : on ne peut pas passer directement de ltat chou,
chvre, loup, berger ltat car cela signifierait que le berger emporte la fois le chou, la
chvre et le loup sur sa barque. En revanche, on peut passer de ltat chvre, loup, berger
ltat chvre, car cela signifie que le berger emmne le loup sur sa barque de la rive de
dpart la rive darrive. On peut de mme passer de ltat chvre ltat chvre, loup,
berger, car cela signifie que le berger ramne le loup sur sa barque de la rive darrive la
rive de dpart. De manire gnrale, on peut passer dun tat qui contient le berger un
tat dans lequel il nest plus, ainsi quun ou zro de ses compagnons, et vice versa.
Sur ces bases, on dfinit le graphe ()
dont les sommets sont les dix tats
possibles et les artes les transitions
entre ces tats. Il ne reste plus qu uti-
liser un algorithme de parcours de
graphe pour chercher un chemin qui
mne de la configuration initiale chou,
chvre, loup, berger, la configuration
finale - ().
Le chemin le plus court comporte sept
artes, ce qui oblige le berger faire
quatre allers et trois retours :
Il emmne dabord la chvre sur
lautre rive, ce qui correspond
larte qui va du sommet chou,
chvre, loup, berger au sommet chou,
loup.
Il revient seul.
Il emmne le loup sur lautre rive.
Il revient avec la chvre.
Il emmne le chou.
Il revient seul.
Il emmne enfin la chvre une
seconde fois.
Bref, lalgorithme a devin que la
solution consiste faire revenir la
chvre avec le berger pour ne jamais la
laisser ni avec le loup ni avec le chou.

Exercice 22.1
Chercher sur le Web qui tait Lonard Euler et dcrire le problme des ponts de Knigs-
berg, premier problme explicitement exprim avec un graphe dans lhistoire des sciences.

Exercice 22.2
Dcrire les objets suivants comme des graphes :
un rseau dordinateurs,
des maisons avec des botes aux lettres,

324 Groupe Eyrolles, 2013


22 Parcourir un graphe

le mtro parisien,
une ville, dans laquelle il ny a plus ni radio ni tl, et dans laquelle se propage par SMS
linformation de larrive dun tsunami,
une population au sein de laquelle se propage une pidmie.
Que sont les sommets ? Que sont les artes ? quoi correspond la longueur du plus court
chemin entre deux points ? Trouver dautres exemples.

Exercice 22.3
Dcrire un rseau social comme un graphe. Que sont les sommets ? Que sont les artes ?

Exercice 22.4
Imaginer un rseau social o ne sont en lien que les filles et les frres et surs : quel est le
chemin minimal pour que deux garons, qui ne sont pas de la mme famille se passent un
message travers les artes ?

Exercice 22.5
Imaginer un autre rseau o chaque personne a dix amis. Combien de personnes au
maximum un message diffus aux amis des amis des amis, etc. peut-il atteindre en une
heure, si le dlai entre la rception et le rediffusion dun message est de cinq minutes ? Que
nous apprend ce rsultat sur le risque de propagation dune rumeur sur un rseau social ?

Exercice 22.6
Sur le plus grand rseau social du monde, il y a environ un milliard de personnes connectes
chacune cent autres personnes environ. Un chemin de deux artes ami dami connecte
donc une personne environ 100 100 = 10 000 autres personnes, si on nglige les amis com-
muns et, disons, environ 100 50 = 5 000 si lon tient compte des amis communs. Un chemin
de trois artes ami dami dami connecte une personne environ 100 50 50 = 250 000
autres personnes. En supposant grossirement quon ne gagne ainsi que la moiti de nouveaux
contacts chaque arte, combien de personnes environ est-on connect avec un chemin de
six artes ? Dans un tel rseau social, quelle est la distance maximale entre deux personnes ? Il
se trouve que ce calcul approximatif donne un rsultat trs proche de la ralit.

ALLER PLUS LOIN Quest-ce quun algorithme fondamental ?

Beaucoup de problmes peuvent se formuler comme des problmes de tri ; de mme, on a vu dans ce chapitre
que beaucoup de problmes peuvent se ramener des problmes de graphes. Cela fait des algorithmes de tris
et ceux de parcours de graphes des algorithmes fondamentaux. Dautres exemples dalgorithmes fonda-
mentaux, que lon peut rechercher sur le Web, sont ceux de multiplication de matrices, de rsolution dqua-
tions boolennes, dunification... Quand on essaie de rsoudre un problme, une bonne attitude consiste
souvent chercher quel problme connu on peut se ramener et quel algorithme fondamental on peut utiliser.

Ai-je bien compris ?


Que faut-il viter quand on cherche la sortie dun labyrinthe ?
Quel est lavantage de chercher la sortie dun labyrinthe en largeur dabord ?
Quels objets peut-on dcrire comme des graphes ?

Groupe Eyrolles, 2013 325


TMOIGNAGE Jonathan, 25 ans
Jai commenc la programmation avec une (mauvaise) rplique de Mastermind qui permettait
de jouer contre lordinateur. Aprs quelques essais manqus, quelques programmes ici et l, je
dcouvre le Web : cest le coup de foudre je nai jamais dcroch depuis. Dabord des sites web en
PHP, puis le monde de Mozilla Firefox. De cette rencontre nat un livre paru chez Eyrolles,
rdig pendant mon temps libre en terminale. Quelques annes plus tard, je reprends linforma-
tique lcole Normale Suprieure en section informatique : jy dcouvre le lambda calcul et la
programmation fonctionnelle. Je suis maintenant en thse linstitut public de recherche Inria,
dans lquipe qui conoit le langage OCaml, et je continue damliorer le code de Firefox et de
Thunderbird sur mon temps libre au sein de la communaut Mozilla.
TMOIGNAGE Grgoire, 28 ans
Tomb dans la marmite de llectronique et de la bidouille grce mon papa, je passe rapide-
ment linformatique et dcide dapprendre le C. Sensuit une vraie passion pour les technologies
dites nouvelles, et pour le lien intime et complexe entre matriel et logiciel. Math-sup, math-sp
(pour faire plaisir maman !), puis une formation dingnieur, et un rve amricain concrtis lors
dun stage dans la Silicon Valley travailler sur une puce dencodage vido. Je reviens ensuite en
France et, Paris, je mets ma crativit au service de linvention de la set-top box de demain, qui
tient au creux de la main et propose une exprience visuelle digne des derniers jeux vido. titre per-
sonnel, je songe des manires de simplifier linformatique et la programmation, mais sans perdre le
lien avec le matriel, et dveloppe secrtement le concept de Software Atoms .
Convaincu que la valeur et linnovation sont portes par ceux qui crent (les programmeurs et les
passionns), je milite pour le dveloppement de hirarchies dentreprise moins verticales, pour la
revalorisation du dveloppement logiciel en France et de la crativit technologique.
Ides de projets

Un gnrateur dexercices une protine. crire un programme qui


dtermine la protine pour laquelle un brin
de calcul mental
dARN messager code.
Programmer un gnrateur dexercices de
calcul mental : le programme choisit alatoi-
rement une opration et deux nombres, et
Bataille navale
vrifie la rponse de lutilisateur. On peut crire un programme de bataille navale avec
ensuite poser une srie de questions et plusieurs bateaux.
compter le score total. On pourra enfin pr-
voir plusieurs niveaux de difficult selon les
oprations proposes ou la taille des nom-
Cent mille milliards de pomes
bres calculer, et laisser lutilisateur choisir Chercher sur le Web, ou dans une biblio-
son niveau de difficult ou attribuer des thque, ce quest le recueil Cent mille mil-
scores variables aux rponses. liards de pomes de Raymond Queneau.
crire un programme qui affiche ces cent
mille milliards de pomes.
Mastermind
crire un programme qui lit deux listes de
Site de rencontres
quatre lments au clavier et indique le
nombre dlments en commun dans ces Programmer le moteur dun site de rencon-
deux listes. crire un programme qui joue au tres, sur le principe suivant :
Mastermind : tire au hasard la combinaison Chaque personne inscrite sur le site
secrte et rpond aux propositions de lautre rpond un questionnaire de personna-
joueur. lit dont les rponses sont des entiers
entre 1 et 10.
Brin dARN On stocke les rponses dans une liste
double entre : la case de la ligne i et de la
Chercher sur le Web ce quest un brin colonne j contient la rponse de linscrit
dARN messager et comment il code pour numro i la question numro j.
TMOIGNAGE Christine
Quand jtais adolescente, il ny avait dordinateurs ni lcole, ni la maison. Pourtant nos
cours comportaient de nombreuses activits lies linformatique : reprsenter la mme informa-
tion dans plusieurs formats, laborer diffrentes mthodes pour raliser le mme objectif (je me sou-
viens de cartes perfores et daiguilles tricoter pour trier) ou encore raisonner et calculer partir
dun ensemble donn de rgles.
Ma premire calculatrice ? Je ne lai eue quaprs le baccalaurat et, si elle tait programmable,
ctait partir dun jeu dinstructions trs lmentaire. Cela nen tait quun dfi plus intressant.
Face une srie de problmes rsoudre, laborer la bonne squence dinstructions qui permettra
dobtenir toutes les solutions sans effort est gratifiant, et aussi distrayant que de rsoudre un casse-
tte. Contrairement un jeu tout fait, le champ des possibles est immense : les moyens de calcul, de
communication, et les donnes, sont notre porte pour pouvoir les explorer.
crire soi-mme un programme qui marche requiert connaissances, exprience, et imagination.
La satisfaction est immense davoir cr un nouvel objet.
Ce plaisir que jai eu transformer les problmes en programmes est encore intact aprs 25 ans de
carrire de chercheuse au CNRS puis de professeur luniversit. Jai choisi linformatique comme
mtier (assez tardivement) grce un professeur qui ma fait dcouvrir tout ce que cette discipline
nouvelle offrait dopportunits en termes de mtier et dactivit. Jy ai trouv une voie qui rpon-
dait mes gots et comptences. Aujourdhui, jessaie de donner aux tudiantes et tudiants les cls
thoriques et pratiques du monde numrique quils consomment chaque jour, pour quils sachent
ladapter leurs besoins et contribuent lenrichir.
Ides de projets

Pour mettre en relation un nouvel inscrit 3 Pour faciliter les tests, crire une seconde
avec une personne dj inscrite, on par- version de cette fonction avec pour seule
court cette liste en recherchant la ligne entre une chane de caractres qui contient
qui contient les rponses les plus proches les numros successifs des joueurs marquant
de celles donnes par le nouvel inscrit. les points ; la fonction lit cette chane carac-
Pour dterminer si des rponses sont pro- tre par caractre pour compter les points.
ches, on pourra par exemple compter le Ainsi, lentre 211222 sera comprise
nombre de rponses identiques ou cal- comme : le joueur 2 gagne un point, puis le
culer le total des diffrences. joueur 1 en gagne deux, puis le joueur 2 en
On pourra enfin, partir dune liste dj gagne trois et le joueur 2 gagne donc le jeu.
remplie, chercher former autant de 4 crire une deuxime fonction qui compte
couples que possible. les jeux au cours dun set et sarrte
lorsquun joueur gagne le set. Cette fonc-
tion fera appel la prcdente pour savoir
Tracer la courbe reprsentative
qui gagne les jeux. On noubliera pas de
dune fonction polynme prvoir le cas particulier du jeu dcisif.
du second degr 5 crire une troisime fonction qui compte
crire un programme qui, tant donn une les sets et sarrte lorsquun joueur gagne
fonction polynme du second degr, trace sa le match. On pourra, avant de com-
courbe reprsentative lcran en adaptant mencer le match, demander en combien
automatiquement la fentre pour faire appa- de sets gagnants il est jou.
ratre le sommet de la parabole et les ven-
tuels zros. On pourra faire raliser les calculs Automatiser les calculs de chimie
intermdiaires dans des fonctions spares.
Programmer une bote outils pour automa-
tiser les diffrents calculs que lon a loccasion
Grer le score au tennis de faire en chimie : dure dune raction, pH
crire un programme qui gre automatique- dune solution, masses et concentrations,
ment le score au tennis : quilibre dune quation-bilan simple
1 quelles conditions un joueur gagne-t-il
un jeu ? Tours de Hano
2 Dfinir une fonction qui compte les points Chercher sur le Web ce que sont les tours de
au cours dun jeu. En entre, on demande Hano et crire un programme qui trouve
rptitivement quel joueur, 1 ou 2, gagne une solution ce jeu.
le point ; au fur et mesure, on calcule et
on affiche le score. Le programme sarrte
ds quun joueur gagne le jeu, aprs avoir Tortue Logo
affich le nom du vainqueur. Chercher sur le Web ce quest une tortue
Logo. Programmez ses principales fonction-

Groupe Eyrolles, 2013 329


TMOIGNAGE Raphal, 36 ans
Linformatique, je suis tomb dedans trs jeune, et mon premier programme en BASIC, qui affi-
chait une carte de France, ma fait dcouvrir le plaisir de dominer lordinateur. Avec un peu
dattention, on peut lui faire faire ce que lon veut. Aprs avoir dcouvert Windows, je suis
devenu un grand fan de Bill Gates. Mais alors que jtais au lyce, Internet est arriv et grce
lui, jai redcouvert linformatique sous un nouvel angle. Je suis entr dans un nouvel univers,
celui du logiciel libre. Finis les bricolages : il tait dsormais possible de diagnostiquer tous les pro-
blmes, voire de les corriger grce laccs au code source. Lorsque cela dpassait mes comptences,
je pouvais contacter lauteur du logiciel et obtenir un correctif en lespace de quelques jours.
Trs rapidement, jai ressenti le besoin de mimpliquer dans cette communaut pour apporter ma
pierre ldifice. Cest ainsi que je suis devenu dveloppeur Debian, distribution GNU/Linux,
alors que jentrais lINSA de Lyon. Deux ans aprs avoir obtenu mon diplme dingnieur en
informatique, jcrivais le premier livre franais sur Debian et je lanais ma propre socit,
Freexian, pour faire de ma passion, mon activit principale.
Ides de projets

nalits. Chercher sur le Web ce quest le tions pour effectuer des calculs en valeur exacte
flocon de Von Koch et dessiner ce flocon sur des fractions. Rechercher sur le Web ce
laide de cette tortue. quest la mthode de Hron pour calculer une
valeur approche dune racine carre et la pro-
grammer en utilisant la bibliothque de calcul
Dessins de plantes
sur les fractions.
Programmer des dessins de plantes suivant un
modle rcursif, par exemple une fougre. On
pourra introduire un lment alatoire dans
Reprsentation des dates
lalgorithme, afin de varier les rsultats obtenus. et heures
On pourra utiliser une tortue Logo programme Les systmes numriques passent automati-
par soi-mme ou par un camarade, ou fournie quement lheure dt et dtectent quand on
dans une bibliothque du langage de program- change de fuseau horaire. Chercher sur le
mation utilis. Web des informations sur la reprsentation
des dates et heures : la norme ISO 8601 et le
Langage CSS Network Time Protocol. crire un programme
qui donne lheure dans diffrents pays.
Rechercher sur le Web comment le langage
CSS permet de donner une prsentation dif-
frente des informations, selon quelles Transcrire dans lalphabet latin
sont lues sur un ordinateur ou sur lcran Choisir une langue qui utilise un autre
dun tlphone. Construire un site Web sur alphabet que lalphabet latin (par exemple le
le sujet de son choix qui peut ainsi tre con- chinois, larabe, le japonais, lhbreu ou le
sult sur un cran ou un autre. grec) et une trentaine de mots crits dans
cette langue. Associer chaque syllabe de lun
Calcul sur des entiers de taille de ces mots une transcription phontique
crite dans lalphabet latin. crire un pro-
arbitraire
gramme dapprentissage qui tire au hasard
En reprsentant chaque nombre par une des mots dans cette liste, les affiche lcran
liste qui contient la suite de ses chiffres, et demande lutilisateur de les lire, cest--
crire une bibliothque de fonctions calcu- dire de les transcrire dans lalphabet latin.
lant sur des entiers de taille arbitraire, sans
les dpassements de capacit quengendre
lutilisation du type int.
Correcteur orthographique
Raliser un correcteur orthographique. Un
tel programme prend en entre un fichier
Calcul en valeur exacte texte, le dcoupe en mots, cherche chaque
sur des fractions mot dans un dictionnaire et donne la liste
Proposer un type reprsentant une fraction en des mots qui ne sy trouvent pas.
valeur exacte. crire une bibliothque de fonc-

Groupe Eyrolles, 2013 331


TMOIGNAGE Pierre, 25 ans
Jtais en sixime, lorsque mon premier ordinateur est arriv la maison, mais je dois recon-
natre que pendant bien longtemps, il navait dutilit pour moi que comme simple console de jeux.
Cest en classes prparatoires, sur les conseils de mon professeur de mathmatiques de lpoque, que
jai choisi de prendre loption Informatique plutt que Sciences Industrielles. Je navais aucune
ide encore de ce que pouvait tre un langage de programmation ni mme de la manire dont fonc-
tionnait un ordinateur en gnral. Se lancer dans une matire totalement inconnue alors quon a
un emploi du temps dj charg nest pas un choix ais. Il sest cependant rvl judicieux : jtais
alors port sur les mathmatiques mais jai retrouv dans lenseignement de linformatique cer-
tains concepts (ensembles, fonctions), tout en vitant le calcul (et les erreurs qui vont avec) que
je dtestais. Cest en cole dingnieur que mon choix de spcialisation sest dfinitivement port
sur linformatique. Au fil de mes lectures diverses je me faisais (enfin) une ide de ce que je vou-
drais faire plus tard : de la logique, comprendre comment sont construits le raisonnement et les
objets des mathmatiques. Jai donc commenc ma qute dans le dpartement de mathmatiques o
lon ma expliqu que ces aspect taient plutt tudis dans le laboratoire d ct L, jai
retrouv un professeur qui mavait impressionn lanne prcdente en prsentant les modifica-
tions des cases mmoires dun ordinateur, laide de boites chaussures. Aprs un master de
recherche en informatique, jai commenc ma thse dans le cadre dun partenariat entre Inria et la
NASA. Je dveloppe un algorithme pour amliorer la prcision des calculs sur les ordinateurs.
Ides de projets

Daltonisme Logisim
Rechercher sur le Web ce quest le daltonisme Pour construire et simuler des circuits, on
et quelles en sont les diffrentes formes. peut utiliser logiciel Logisim disponible
crire un programme qui lit une image dans ladresse :
un fichier au format PPM et laffiche lcran http://ozark.hendrix.edu/~burch/logisim/
comme la verrait une personne atteinte de Ce logiciel libre fonctionne sur la plupart des
chacune des formes de daltonisme. ordinateurs. Il nest pas encore traduit en fran-
ais, mais il est trs bien document : on peut
Systme audio par syllabe commencer sa lecture par le tutoriel. En utili-
sant ce logiciel, on peut par exemple construire
Enregistrer un fichier audio par syllabe ba ,
le multiplexeur et les circuits de dcalage
be , bi , bo , bu , bou , bon ,
dfinis au chapitre 13 et le compteur huit bits
etc. Utiliser ces fichiers pour crire un pro-
dfini au chapitre 14.
gramme qui envoie une squence de ces grains
sonores au systme audio, en fonction dun
texte crit phontiquement bon , jou , Banc de registres
re , i , l , ne , ve , re . Com- Rechercher sur le Web ce quest un banc de
parer le rsultat avec un systme professionnel registres, ainsi que les notions de port de lec-
de synthse vocale et mettre en lumire les dif- ture et de port dcriture sur un banc de
ficults dun tel mcanisme. registres. laide de lhorloge et des circuits
vus aux chapitres 13 et 14, raliser un banc
Dchiffrer automatiquement de 8 registres 8 bits et dessiner le circuit cor-
un message cod selon respondant.

la mthode de Csar
Simuler le comportement
crire un programme qui dchiffre automa-
tiquement un message cod selon la dun processeur
mthode de Csar sans connatre a priori la crire un programme simulant le comporte-
valeur du dcalage. Rechercher ce quest le ment du processeur lorsquil doit excuter un
chiffre de Vigenre et crire un programme des programmes crits en langage machine
qui code un message selon ce principe. dcrits au chapitre 15. Ce programme lira
Rechercher une mthode pour dcoder un dans un fichier le contenu de la mmoire,
message cod selon ce principe sans con- qui contient galement le programme ex-
natre la cl utilise, et crire un programme cuter. Il affichera ltat de la mmoire et des
qui effectue ce dcodage. registres au fur et mesure de lexcution.

Groupe Eyrolles, 2013 333


TMOIGNAGE Dominique, 37 ans
Je suis artisan de profession ; mon mtier consiste programmer des ordinateurs.
Javais 9 ans lorsque mon pre, professeur de mathmatiques, rapporta une calculatrice TI-57 la
maison. Je me souviens encore de mon tout premier programme, expliqu dans le manuel avec des
organigrammes dessins sous la forme de petites voies ferres que la locomotive-microprocesseur
parcourt : [LRN] ("Learn" - Passer en mode programmation), [+], [1], [=], [RST] (revenir au
dbut), [LRN], [RST], [R/S] (Run / Stop). Et cest parti, la calculatrice compte 1, 2, 3, 4
Lexercice suivant programmer le jeu de devine un nombre me vit mettre en uvre toute
mon habilet et mon astuce pour tenir dans les 40 pas de programme disponibles dans lappareil.
Jtais pris au jeu ! Et de MO-5 en Atari ST, et puis de Logo en Turbo Pascal, jai appris pro-
grammer. Le temps a pass, et matriels et logiciels ont progress pas de gant.
Vous qui apprenez linformatique aujourdhui, vous vous moquerez peut-tre gentiment de la TI-
57. Vous auriez tort, car programmer le jeu de devine un nombre dans le langage de votre
choix est le genre de question quon pourrait vous poser lors dun entretien tlphonique pour une
embauche chez Google (o je travaille depuis fin 2007). Les admirables fondements mathmati-
ques de la discipline nous enseignent que les ordinateurs se ressemblent tous ; mais pas les humains
qui sen servent ou qui les programment. Ces derniers se distinguent des premiers parce quavec
lignorance disparat la peur de linstrument qui rvolutionne nos vies ; et les programmeurs se
distinguent entre eux par leurs centres dintrt parmi les nombreuses spcialits de linforma-
tique, leurs langages et styles de programmation prfrs, et le but quils poursuivent titre per-
sonnel ou professionnel. Mais tous les programmeurs, ou presque, partageons le got dapprendre,
lattention au travail bien fait et lesprit de gomtrie, cher Blaise Pascal.
Que vous souhaitiez ou non en faire votre mtier, je ne saurais trop vous recommander daborder la
programmation comme jai abord la guitare (et non le violon) : en commenant par vous amuser,
puis en continuant par vous perfectionner, comme un forgeron qui cent fois sur son enclume remet son
ouvrage. La perfection existe en informatique ; cest mme une joie inpuisable que de se mettre sa
qute, en parcourant un territoire immense et encore si largement inexplor !
Ides de projets

Effectuer des calculs sur les Algorithme calculant le


adresses de cases mmoires successeur dun nombre entier
Le langage machine dcrit au chapitre 15 ne naturel n
permet daccder qu un ensemble fini de On considre un algorithme qui calcule le suc-
cases mmoires, dont les adresses sont four- cesseur dun nombre entier naturel n, cest--
nies dans le code des instructions LDA, STA, dire le nombre n + 1. Cet algorithme est simi-
etc. Pour effectuer des calculs complexes, et laire celui de laddition, mais il sapplique
notamment pour manipuler des listes, on doit un unique nombre : il procde de la droite vers
pouvoir effectuer des calculs sur les adresses la gauche en posant un chiffre et en propa-
de cases mmoires elles-mmes. Proposer une geant une retenue chaque tape. Identifier
extension du langage machine pour effectuer les fonctions boolennes qui un chiffre
de tels calculs, en dfinissant la syntaxe des binaire et une retenue associent le chiffre
nouvelles instructions, en choisissant leur poser et la retenue propager. Programmer
code machine (binaire) et en expliquant leur cet algorithme et dmontrer sa correction en
fonctionnement. Programmer des boucles suivant les lignes de la dmonstration de cor-
simples ralisant des calculs sur des listes, par rection de lalgorithme de laddition (voir le
exemple : la somme des lments dune liste, chapitre 18). Pour aller plus loin : dessiner un
le nombre dlments positifs, etc. circuit boolen (voir le chapitre 13) qui
ajoute 1 un nombre binaire de quatre bits.
Utilisation du logiciel Wireshark
Installer et lancer le logiciel Wireshark. Le jeu de la vie
Capturer des paquets Ethernet ou WiFi Sur un damier carr, on dispose des cra-
depuis la carte rseau et afficher leur con- tures de manire alatoire. La population
tenu lcran. Quelles sont les adresses volue dun tat au suivant selon les rgles
MAC utilises pour la destination et la suivantes :
source de chaque paquet ? Quels ordinateurs
Une crature survit si elle a 2 ou
sont identifis par ces adresses ? Quelle est la
3 voisines dans les 8 cases adjacentes et
taille de chaque paquet ?
elle meurt cause de son isolement ou de
la surpopulation sinon.
Algorithme de pledge Une crature nat dans une case vide sil y
Chercher sur le site web interstices.info ce a exactement 3 cratures dans les 8 cases
quest lalgorithme de pledge. Programmer voisines, et rien ne se passe dans cette
cet algorithme. Expliquer son utilit et en case sinon.
quoi il se distingue de lalgorithme de sortie Par exemple, en partant de ltat initial , la
dun labyrinthe du chapitre 22. population volue ltat , puis ltat ,

Groupe Eyrolles, 2013 335


Informatique et sciences du numrique

etc. ces images et comprendre sil est possible de



publier ses rsultats ou non.

Dtecteur de mouvement visuel


laide dune webcam, prendre deux photos
successives avec un dlai minimal entre les
deux, soustraire pixel pixel ces deux photos
et stocker limage obtenue. crire un pro-
gramme qui utilise un seuil pour dtecter
dans cette image un mouvement non ngli-
geable et qui donne la taille en pixels de la
tache de mouvement obtenue. Tester ce pro-
crire un programme qui simule le dvelop-
cd en situation relle. Quelles en sont les
pement dune population.
possibilits et les limites ? Appliquer ce pro-
cd un objet qui donne un coup de
Une balle boule la camra, cest--dire qui sen
approche vitesse constante le long de son
Dessiner une balle qui rebondit sur les parois
axe optique. Avec un modle gomtrique
de la fentre graphique. crire pour cela une
trs simple, o lon considre lobjet comme
fonction qui dessine une balle sphrique
un rectangle plat parallle la camra, cal-
un endroit donn de limage, une autre fonc-
culer le temps restant avant la collision avec
tion qui calcule si cette balle touche le bord
la camra. Vrifier exprimentalement les
de la fentre ou non, une troisime qui cal-
rsultats obtenus.
cule sa position suivante selon quelle
rebondit sur le bord ou non. On pourra
prendre en compte la gravit, le ralentisse- Qui est-ce ?
ment de la balle cause des frottements, etc.
Crer une version numrique et graphique
Produire une suite de quelques centaines
du jeu de socit Qui est-ce ? . Quelle est
dimages et agglomrer cette suite sous la
lutilit de la notion de dichotomie pour
forme dun film en utilisant un logiciel de
jouer ce jeu ?
cration de vidos ou de GIF anims.

Gnrateur duvres alatoires Un joueur de Tic-tac-toe


Le Tic-tac-toe est un jeu o deux joueurs
Trouver des tableaux sur le site web dun
placent tour de rle lun des ronds O et
muse. Choisir alatoirement un petit dtail
lautre des croix X sur un plateau de trois
dun de ces tableaux et agrandir ce dtail en
cases sur trois cases, jusqu ce que lun des
un nouveau tableau. Changer les couleurs, le
joueurs ait align trois symboles ou que les
contraste, mlanger des dtails issus de deux
neuf cases soient remplies. Cest le joueur O
tableaux diffrents, etc. Vrifier la licence de

336 Groupe Eyrolles, 2013


Ides de projets

Une manire de faire consiste trier ces


points par angle polaire croissant (),
relier entre eux les points conscutifs (),
puis supprimer lun aprs lautre les angles
rentrants ().
qui commence. Dcrire ce jeu sous forme
dun ensemble dtats et dun ensemble de
transitions. Combien y a-t-il dtats
possibles ? Un tat du jeu peut tre gagnant
pour O, gagnant pour X, match nul ou en
cours de jeu. Exprimer chacun des 39 tats
laide dun nombre entier. Construire une Chemins les plus courts
liste qui, pour chacun de ces tats, indique
sil est gagnant pour lun des joueurs, nul ou Lalgorithme de parcours dun graphe en largeur
en cours de jeu et, dans ce cas, les transitions dabord permet de dterminer sil existe un
possibles pour chacun des joueurs. Calculer chemin entre deux sommets dun graphe et de
ensuite, de proche en proche, les tats dans calculer un plus court chemin, si ces deux som-
lesquels : mets sont effectivement relis. Lalgorithme de
Roy-Warshall-Floyd va plus loin en dtermi-
le joueur O est certain de gagner,
nant une fois pour toutes sil existe un chemin
le joueur X est certain de gagner,
entre toutes les paires de sommets dun graphe
le joueur O est certain de gagner ou de faire et en calculant un plus court chemin pour
match nul, chaque paire de sommets effectivement relis.
le joueur X est certain de gagner ou de
Plus prcisment, cet algorithme calcule
faire match nul. deux listes :
crire un programme qui joue contre un une liste bidimensionnelle L telle que
joueur humain. L[x][y] soit la longueur du plus court
chemin reliant le sommet x au sommet y
Enveloppe convexe si ces deux sommets sont effectivement
relis et sinon,
crire un programme qui dessine lenve-
une liste bidimensionnelle R telle que
loppe convexe dun ensemble fini de points
R[x][y] soit le premier sommet aprs x
du plan.
sur un plus court chemin reliant x y, si
ces deux sommets sont effectivement

Groupe Eyrolles, 2013 337


Informatique et sciences du numrique

relis, et si le plus court chemin les reliant Utilisation des rseaux sociaux
nest pas de longueur nulle, cest--dire si
x est diffrent de y.
En utilisant le rseau social le plus rpandu
dans sa classe, et avec laccord des personnes
Comme dans un jeu de pistes, on peut concernes, construire le graphe qui a pour
retrouver lintgralit de ce chemin en par- sommets les lves de sa classe et pour artes la
tant de x, en allant en R[x,y], puis en relation est lami de . Au fur et mesure de
R[R[x,y],y], etc. jusqu arriver en y. lanalyse, on pourra raffiner ses donnes en
Pour calculer ces deux listes, on commence considrant des sommets collectifs, par
par initialiser la liste L en mettant dans la exemple la participation un club. Entrer ces
case L[x][y] la valeur 0 si x est gal y, la donnes dans une liste bidimensionnelle dont
valeur 1 si x est diffrent de y et sil y a une chaque ligne et colonne correspond un
arte qui relie x y, et la valeur sinon. On sommet et chaque case une arte et calculer
initialise de mme la liste R en mettant dans les composantes connexes de ce graphe, cest-
la case R[x][y] la valeur y. -dire les sous-ensembles maximaux de som-
Ensuite, on imbrique trois boucles : mets connects. Dterminer le nombre de
composantes connexes. Ce projet doit tre ra-
pour tous les sommets intermdiaires z,
lis en respectant lanonymat des personnes.
pour tous les sommets de dpart x,
pour tous les sommets darrive y,
si L[x][z] + L[z][y] < L[x][y], cest--
dire si aller de x y en passant par z est stric-
tement plus court que le plus court chemin
connu, on remplace L[x][y] par
L[x][z] + L[z][y] et R[x][y] par R[x][z].

Il nest pas difficile de montrer que, aprs avoir


effectu les tours de la boucle la plus externe
correspondant aux sommets z1, , zk, la case
L[x][y] de la liste L contient la longueur du
plus court chemin qui relie x y en passant
possiblement par les sommets z1, , zk, mais
pas par les autres sommets du graphe et que la
case R[x][y] de la liste R contient le premier
sommet de ce chemin, si un tel chemin existe
et sil nest pas de longueur nulle.
Programmer cet algorithme et lappliquer
un rseau de mtro ou de bus.

338 Groupe Eyrolles, 2013


Index

A base de donnes 162 prive 164


Ada 254 base des nombres 103, 106, 108 publique 164
addition 256 Bernoulli 254 cloud computing 237
en base 2 257 bit 102 Cobol 8
adresse boucle 32 code 116, 166
IP 226, 231 cas de base 82 ASCII (American Standard
MAC (Medium Access for 32 Code for Information
Control) 224 while 37 Interchange) 122, 134
affectation 16, 23 bus de communication 206 auto-modifiant 216
Alan Turing 142 compil 216
C distribution 216
algorithme 100, 264, 296
C 10, 15 secret 142
bfs (breadth-first search) 321
Caml 10, 46 source 216
dfs (depth-first search) 320
CAO (Conception assiste par Unicode 118
efficacit 307, 309
ordinateur) 285 Colossus 142
fondamental 325
caractre 118 commenter 39
mthode alpha-bta 60
CERN 150 compresser
Roy-Warshall-Floyd 337
chane de caractred 66 avec perte 170
algorithmique 286
chane de caractres 119 sans perte 166
Allen Emerson 312
Charles Babbage 254 compression 166
arborescence 155, 159
chiffrement conception assiste par
architecture de von Neumann 206
RSA 164 ordinateur 285
argument de fonction 64
chiffrer 173 conversion analogique-
ASCII (American Standard Code
authentifier 176 numrique 293
for Information
cl 173 correction dun programme 261
Interchange) 118, 131, 133,
masque jetable 173 corriger les erreurs 170
166
RSA 175176 couche de protocoles 221
authentifier 176
circuit application 234
B mmoire un bit 194 lien 224
bascule de Schmitt 192 cl norme 222
Informatique et sciences du numrique

physique 222 ge Format) 131 HTTP (HyperText Transfer


rseau 226 HTML (HyperText Protocol) 234
transport 232 Markup hypermnsie 159
cyberntique 238 Language) 122
JPEG (Joint Photographic I
D Experts Group) 131 idographie 88
dcapsulation des MIDI (Musical Instru- image 130
informations 222 ment Digital augmenter le contraste 279
dessiner 268 Interface) 138 couleur 132
perspective 270 PBM (Portable fusion de deux images 281
trois dimensions 270 BitMap) 131 lissage 283
dichotomie 289 PGM (Portable luminance 280
dictionnaire 167 GreyMap) 131 niveaux de gris 132
DNS (Domain Name 132, 277 numriser 135
System) 234 PICT 131 reprsentation bitmap 131
PNG (Portable Network reprsentation vectorielle 130
E Graphics) 131 synthse soustractive 136
chantillonnage 137 PPM (Portable taille 138, 281
Edmund Clarke 312 PixMap) 131, 134, transformation 278
encapsulation des 275, 277 imbrication 35
informations 221 PS (PostScript) 131 instruction 23, 206
entier TIFF (Tagged Image File dentre 16
naturel 103 Format) 131 de sortie 16
relatif 109 Fortran 8 Internet
expression 23 lois 235
G invariant 262
F gnie biomdical 192 IP (Internet Protocol) 218, 227,
feedback 238 Grard Huet 30 231
fentre graphique 268 graphe 159, 321
fichier 152 chemin prolonger 314 J
fonction 80 tat 322 Java 10
argument 64, 72 orient/non orient 322
boolenne 144 parcours 321
L
constante gale 0 146 parcours bfs 321 langage de programmation 10
constante gale 1 146 parcours dfs 320 langage formel 9092
en-tte 66 parcours en largeur 321 grammaire 93
et 144, 148 parcours en profondeur 320 smantique 95
identit 146 recherche en largeur 320 langage machine 207208
multiplexeur 145 recherche en profondeur 320 langue naturelle 90
mux 145 transition 322 licence logicielle 76
non 144 lien hypertexte 123, 158
ou 144 H Lisp 60
passage par valeur 7274 Haskell 46 logarithme entier 289
rcursive 81 horloge 200
valeur de retour 64 frquence 201
M
format 95 hte (ordinateur) 228 mmoire 13, 194, 206, 215
de fichier 131, 140 HTML (HyperText Markup Mentor 30
GIF (Graphics Interchan- Language) 124, 150 Michael Rabin 78

340 Groupe Eyrolles, 2013


Index

ML 46 Protocol) 218 notation musicale 138


mOway 240 Python 10 taille 138
sret 173
N R systme dexploitation 214
Nexus 150 ralit virtuelle 266
nombre virgule 112 recherche en table 288 T
non-terminaison 40 rcursivit 81 table de routage 229
registres 207 tableau 74
O reprsentation TCP (Transmission Control
oprations 24 caractre 118 Protocol) 218
ordinateur hte 228 entier naturel 103 test 16
ordinateurs parallles 215 entier relatif 109 TeX 286
image 130 texte
P nombre virgule 112 enrichi 122
paquet de donnes 225 son 137 simple 119
priphrique 206, 213 texte enrichi 122 taille 138
persistance des donnes 152, 159 texte simple 119 tri
pixel 130 rseau 220 bulles 301
port 233 couche de protocoles 221 par fusion 302, 309
porte boolenne protocole 220 par insertion 301
additionneur un bit 189 rivalit de linformation 160 par slection 298, 309
multiplieur 189 robot 240
non 182 actionneur 240, 244 U
ou 183 capteur 240, 242, 247 Unicode 122
TCP (Transmission Control contrle en boucle ferme 243 unit de calcul 206
Protocol) 233 micro-contrleur 241, 243 UTF-8 166
prfixe des units 139 routage
prix Turing 46, 180, 312 des informations 228
V
processeur 206 table de 229 valeur 23
unit de calcul 206 routeur 228 variable 23
unit de contrle 206 RSA 164 globale 68, 73
programme correct 261 locale 68
protocole 218, 220 S porte 68
DNS (Domain Name scurit 173 virus 216
System) 234 smantique 30
HTTP (HyperText Transfer squence 16
W
Protocol) 234 Sketchpad 266 web 150
IP (Internet Protocol) 218, SMTP (Simple Mail Transfer
227, 231
Z
Protocol) 234
SMTP (Simple Mail Transfer zro dune fonction 294
son 137
Protocol) 234 chantillonner 137
TCP (Transmission Control

Groupe Eyrolles, 2013 341

Vous aimerez peut-être aussi