Académique Documents
Professionnel Documents
Culture Documents
PAR
CHRISTOPHE DARMANGEAT
ENSEIGNANT DESS AIGES
(APPLICATIONS INFORMATIQUES LA GESTION CONOMIQUE ET SOCIALE)
UNIVERSIT PARIS VII DENIS DIDEROT
Cours Algorithmique Auteur : Christophe Darmangeat
ii
TABLE DES MATIRES
PRAMBULE (LE CODAGE)--------------------------------------------------------------------------------------- 1
1. Pourquoi les ordinateurs sont-ils binaires ?----------------------------------------------------------------------- 1
2. La numrotation de position en base dcimale------------------------------------------------------------------------ 2
3. La numrotation de position en base binaire -------------------------------------------------------------------------- 4
4. Le codage hexadcimal ----------------------------------------------------------------------------------------------------- 6
INTRODUCTION A LALGORITHMIQUE-------------------------------------------------------------------------------- 8
1. Quest-ce que lalgomachin ? --------------------------------------------------------------------------------------------- 8
2. Faut-il tre matheux pour tre bon en algorithmique ? ------------------------------------------------------------- 9
3. LADN, les Shadoks, et les ordinateurs ------------------------------------------------------------------------------- 10
4. Algorithmique et programmation-------------------------------------------------------------------------------------- 10
5. Avec quelles conventions crit-on un algorithme ?----------------------------------------------------------------- 11
P PA AR RT TI IE E 1 (LES VARIABLES) --------------------------------------------------------------------------------------- 12
1. A quoi servent les variables ? ------------------------------------------------------------------------------------------- 12
2. Dclaration des variables ------------------------------------------------------------------------------------------------ 12
2.1. Types numriques classiques-----------------------------------------------------------------------------------------------------13
2.2. Autres types numriques----------------------------------------------------------------------------------------------------------14
2.3. Type alphanumrique-------------------------------------------------------------------------------------------------------------14
2.4. Type boolen-----------------------------------------------------------------------------------------------------------------------15
3. Linstruction daffectation ---------------------------------------------------------------------------------------------- 15
3.1. Syntaxe et signification-----------------------------------------------------------------------------------------------------------15
3.2. Ordre des instructions-------------------------------------------------------------------------------------------------------------17
4. Expressions et oprateurs------------------------------------------------------------------------------------------------ 19
4.1. Oprateurs numriques : ----------------------------------------------------------------------------------------------------------20
4.3. Oprateurs logiques (ou boolens) : ---------------------------------------------------------------------------------------------21
5. Deux remarques pour terminer ---------------------------------------------------------------------------------------- 21
P PA AR RT TI IE E 2 (LECTURE ET CRITURE)------------------------------------------------------------------------------- 23
1. De quoi parle-t-on ?------------------------------------------------------------------------------------------------------- 23
2. Les instructions de lecture et dcriture ------------------------------------------------------------------------------ 24
P PA AR RT TI IE E 3 (LES TESTS) --------------------------------------------------------------------------------------------- 26
1. De quoi sagit-il ? ---------------------------------------------------------------------------------------------------------- 26
2. Structure dun test -------------------------------------------------------------------------------------------------------- 27
3. Quest ce quune condition ?-------------------------------------------------------------------------------------------- 28
4. Conditions composes ---------------------------------------------------------------------------------------------------- 29
5. Tests imbriqus ------------------------------------------------------------------------------------------------------------ 31
6. De laiguillage la gare de tri------------------------------------------------------------------------------------------- 32
7. Variables Boolennes ----------------------------------------------------------------------------------------------------- 34
P PA AR RT TI IE E 4 4 ( (ENCORE DE LA LOGIQUE)----------------------------------------------------------------------------- 35
1. Faut-il mettre un ET ? Faut-il mettre un OU ? --------------------------------------------------------------------- 35
Cours Algorithmique Auteur : Christophe Darmangeat
iii
2. Au-del de la logique : le style ------------------------------------------------------------------------------------------ 37
P PA AR RT TI IE E 5 5 ( (LES BOUCLES) ----------------------------------------------------------------------------------------- 40
1. A quoi cela sert-il donc ?------------------------------------------------------------------------------------------------- 40
2. Boucler en comptant, ou compter en bouclant ---------------------------------------------------------------------- 43
3. Des boucles dans des boucles-------------------------------------------------------------------------------------------- 45
4. Et encore une btise ne pas faire ! ----------------------------------------------------------------------------------- 46
P PA AR RT TI IE E 6 (LES TABLEAUX) ---------------------------------------------------------------------------------------- 49
1. Utilit des tableaux-------------------------------------------------------------------------------------------------------- 49
2. Notation et utilisation algorithmique---------------------------------------------------------------------------------- 49
3. Tableaux dynamiques ---------------------------------------------------------------------------------------------------- 52
P PA AR RT TI IE E 7 (TECHNIQUES RUSES )-------------------------------------------------------------------------------- 55
1. Tri dun tableau : le tri par insertion --------------------------------------------------------------------------------- 55
2. Un exemple de flag : la recherche dans un tableau----------------------------------------------------------------- 56
3. Tri de tableau + flag = tri bulles ------------------------------------------------------------------------------------- 58
4. La recherche dichotomique --------------------------------------------------------------------------------------------- 60
P PA AR RT TI IE E 8 (TABLEAUX MULTIDIMENSIONNELS)----------------------------------------------------------------- 62
1. Pourquoi plusieurs dimensions ?--------------------------------------------------------------------------------------- 62
2. Tableaux deux dimensions -------------------------------------------------------------------------------------------- 63
3. Tableaux n dimensions------------------------------------------------------------------------------------------------- 66
P PA AR RT TI IE E 9 (LES FONCTIONS PRDFINIES)---------------------------------------------------------------------- 67
1. Structure gnrale des fonctions --------------------------------------------------------------------------------------- 67
2. Les fonctions de texte ----------------------------------------------------------------------------------------------------- 68
3. Trois fonctions numriques classiques -------------------------------------------------------------------------------- 70
4. Les fonctions de conversion --------------------------------------------------------------------------------------------- 73
P PA AR RT TI IE E 10 (LES FICHIERS) -------------------------------------------------------------------------------------- 74
1. Organisation des fichiers --------------------------------------------------------------------------------------------- 74
2. Structure des enregistrements ------------------------------------------------------------------------------------------ 75
3. Types daccs--------------------------------------------------------------------------------------------------------------- 76
4. Instructions (fichiers texte en accs squentiel) --------------------------------------------------------------------- 77
5. Stratgies de traitement -------------------------------------------------------------------------------------------------- 80
6. Donnes structures------------------------------------------------------------------------------------------------------- 81
6.1. Donnes structures simples------------------------------------------------------------------------------------------------------81
6.2. Tableaux de donnes structures-------------------------------------------------------------------------------------------------83
7. Rcapitulatif gnral------------------------------------------------------------------------------------------------------ 84
P PA AR RT TI IE E 11 (PROCDURES ET FONCTIONS)--------------------------------------------------------------------- 87
1. Fonctions personnalises------------------------------------------------------------------------------------------------- 87
1.1. De quoi s'agit-il ? ------------------------------------------------------------------------------------------------------------------87
1.2. Passage d'arguments---------------------------------------------------------------------------------------------------------------89
2. Sous-Procdures ----------------------------------------------------------------------------------------------------------- 91
Cours Algorithmique Auteur : Christophe Darmangeat
iv
3. Variables publiques et prives ------------------------------------------------------------------------------------------ 94
4. Algorithmes fonctionnels ------------------------------------------------------------------------------------------------ 94
P PA AR RT TI IE E 12 (NOTIONS COMPLMENTAIRES) ----------------------------------------------------------------- 101
1. Programmation structure --------------------------------------------------------------------------------------------- 101
2. Interprtation et compilation ------------------------------------------------------------------------------------------ 102
3. Une logique vicelarde : la programmation rcursive ------------------------------------------------------------- 103
ANNEXE (CORRIGS DES EXERCICES) --------------------------------------------------------------------------- a
Cours Algorithmique Auteur : Christophe Darmangeat
1
PRAMBULE (LE CODAGE)
Linformation nest pas le savoir. Le savoir nest pas la sagesse. La sagesse nest pas la beaut. La beaut nest
pas lamour. Lamour nest pas la musique, et la musique, cest ce quil y a de mieux.
Frank Zappa
Les ordinateurs sont comme les dieux de lAncien Testament : avec beaucoup de rgles, et sans piti.
Joseph Campbell
Compter en octal, cest comme compter en dcimal, si on nutilise pas ses pouces
Tom Lehrer
Cestbienconnu,lesordinateurssontcommelegrosrockquitche:ilssontbinaires.
Maiscequiestmoinsconnu,cestcequecequalificatifdebinairerecouvreexactement,etcequilimplique.Aussi,
avant de nous plonger dans les arcanes de lalgorithmique proprement dite, ferons-nous un dtour par la notion de
codage binaire. Contrairement aux apparences, nous ne sommes pas loigns de notre sujet principal. Tout au
contraire, ce que nous allons voir prsent constitue un ensemble de notions indispensables lcriture de
programmes.Carpourparlerunemachine,mieuxvautconnatresonvocabulaire
1. Pourquoi les ordinateurs sont-ils binaires ?
Denosjours,lesordinateurssontcesmachinesmerveilleusescapablesdetraiterdutexte,dafficherdestableauxde
matre, de jouer de la musique ou de projeter des vidos. On nen est pas encore tout fait HAL, lordinateur de
2001 Odysse de lEspace, lintelligence si dveloppe quil a peur de mourir pardon, dtre dbranch. Mais
lordinateurparattreunemachinecapabledetoutfaire.
Pourtant, les ordinateurs ont beau sembler repousser toujours plus loin les limites de leur champ daction, il ne faut
pas oublier quen ralit, ces fiers--bras ne sont toujours capables que dune seule chose: faire des calculs, et
uniquementcela.Ehoui,cesgrosmalinsdordinateurssontrestsaufondcequilsonttdepuisleurinvention:de
vulgairescalculatricesamliores!
Lorsquunordinateurtraitedutexte,duson,delimage,delavido,iltraiteenralitdesnombres.Enfait,direcela,
cest dj lui faire trop dhonneur. Car mme le simple nombre 3 reste hors de porte de lintelligence dun
ordinateur,cequilesituelargementendessousdelattachantchimpanzBonobo,quisait,entreautreschoses,faire
desblaguessescongnresetjouerauPac-Man.Unordinateurmanipuleexclusivementdesinformationsbinaires,
dontonnepeutmmepasdiresanstretendancieuxquilsagitdenombres.
Mais quest-ce quune information binaire? Cest une information qui ne peut avoir que deux tats: par exemple,
ouvert-ferm,libreoccup,militairecivil,assiscouch,blancnoir,vraifaux,etc.Silonpensedesdispositifs
physiquespermettantdestockercegenredinformation,onpourraitciter:chargnoncharg,hautbas,trounon
trou.
Cours Algorithmique Auteur : Christophe Darmangeat
2
Ne donnons pas derniers exemples au hasard: ce sont prcisment ceux dont se sert un ordinateur pour stocker
lensemble des informations quil va devoir manipuler. En deux mots, la mmoire vive (la RAM) est forme de
millions de composants lectroniques qui peuvent retenir ou relcher une charge lectrique. La surface dun disque
dur, dune bande ou dune disquette est recouverte de particules mtalliques qui peuvent, grce un aimant, tre
orientes dans un sens ou dans lautre. Et sur un CD-ROM, on trouve un long sillon troit irrgulirement perc de
trous.
Toutefois,lacoutumeveutquonsymboliseuneinformationbinaire,quelquesoitsonsupportphysique,souslaforme
de1etde0.Ilfautbiencomprendrequecenestlquunereprsentation,uneimagecommode,quelonutilisepour
parlerdetouteinformationbinaire.Danslaralitphysique,ilnyapasplusde1etde0quisepromnentdansles
ordinateursquilnyacrit,enlettresgantes,OcanAtlantiquesurlamerquelquepartentrelaBretagneetles
Antilles.Le1etle0dontparlentlesinformaticienssontdessignes,niplus,nimoins,pourdsigneruneinformation,
indpendammentdesonsupportphysique.
Les informaticiens seraient-ils des gens tordus, possdant un got immodr pour labstraction, ou pour les jeux
intellectuelsalambiqus?Non,pasdavantageentoutcasquelerestedeleurscontemporainsnon-informaticiens.En
fait, chacun dentre nous pratique ce genre dabstraction tous les jours, sans pour autant trouver cela bizarre ou
difficile. Simplement, nous le faisons dans la vie quotidienne sansy penser. Et force de ne pas ypenser, nous ne
remarquonsmmeplusquelmcanismesubtildabstractionestncessairepourpratiquercesport.
Lorsquenousdisonsque4+3=7(cequireste,normalement,dansledomainedecomptencemathmatiquedetous
ceux qui lisent ce cours!), nous manions de pures abstractions, reprsentes par de non moins purs symboles! Un
trehumaindilyaquelquesmillnairesseseraitdemandlongtempsquest-cequecestquequatreoutrois,
sans savoir quatre ou trois quoi?. Mine de rien, le fait mme de concevoir des nombres, cest--dire de pouvoir
considrer,dansunensemble,laquantitindpendammentdetoutlereste,cestdjuneabstractiontrshardie,qui
a mis trs longtemps avant de simposer tous comme une vidence. Et le fait de faire des additions sans devoir
prciserdesadditionsdequoi?,estunpassupplmentairequiatencoreplusdifficilefranchir.
Leconceptdenombre,dequantitpure,adoncconstituunimmenseprogrs(quelesordinateursnontquanteux,
toujours pas accompli). Mais si concevoir les nombres, cest bien; possder un systme de notation performant de
ces nombres, cest encore mieux. Et l aussi, lhumanit a mis un certain temps (et essay un certain nombre de
pistesquisesontrvlestredesimpasses)avantdeparvenirausystmeactuel,leplusrationnel.Ceuxquinesont
pasconvaincusdesprogrsralissencedomainepeuventtoujoursessayerdersoudreunemultiplicationcomme
587x644enchiffresromains,onleursouhaiteboncourage!
Une information binaire (symbolise couramment par 0 ou 1) sappelle un bit. Un groupe de huit bits
sappelle un octet (en anglais, byte)
Combiendtatsdiffrentsunoctetpossde-t-il?Lecalculestassezfacile(maisilfautnanmoinssavoirlerefaire).
Chaquebitdeloctetpeutoccuperdeuxtats.Ilyadoncdansunoctet:
2x2x2x2x2x2x2x2=2
8
=256possibilits.
Celasignifiequunoctetpeutservircoder256nombresdiffrents:cepeuttrelasriedesnombresentiersde1
256,oude0255,oude127+128.Cestunepureaffairedeconvention,dechoixdecodage.Maiscequinest
pasaffairedechoix,cestlenombredepossibilits:ellessont256,pasunedeplus,pasunedemoins,causedece
quest,pardfinition,unoctet.
Silonveutcoderdesnombresplusgrandsque256,oudesnombresngatifs,oudesnombresdcimaux,onvadonc
tre contraint de mobiliser plus dun octet. Ce nest pas un problme, et cest trs souvent que les ordinateurs
procdentainsi.
Eneffet,avecdeuxoctets,ona256x256=65536possibilits.
Enutilisanttroisoctets,onpasse256x256x256=16777216possibilits.
Etainsidesuite,onnemattarderapasdavantagesurlesdiffrentesmaniresdecoderlesnombresavecdesoctets.
Onaborderadenouveaubrivementlesujetunpeuplusloin.
Celaimpliquegalementquunoctetpeutservircoderautrechosequunnombre:loctetesttrssouventemploy
pour coder du texte. Il y a 26 lettres dans lalphabet. Mme en comptant diffremment les minuscules et les
Cours Algorithmique Auteur : Christophe Darmangeat
5
majuscules,etmmeenyajoutantleschiffresetlessignesdeponctuation,onarriveuntotalinfrieur256.Cela
veut dire que pour coder convenablement un texte, le choix dun caractre par octet est un choix pertinent.
Se pose alors le problme de savoir quel caractre doit tre reprsent par quel tat de loctet. Si ce choix tait
librementlaisschaqueinformaticien,ouchaquefabricantdordinateur,lacommunicationentredeuxordinateurs
seraitunvritablecasse-tte.Loctet10001001seraitparexempletraduitparunemachinecommeunTmajuscule,et
paruneautrecommeuneparenthsefermante!Aussi,ilexisteunstandardinternationaldecodagedescaractreset
des signes de ponctuation. Ce standard stipule quel tat de loctet correspond quel signe du clavier. Il sappelle
lASCII (pour American Standard Code for Information nte change). Et fort heureusement, lASCII est un standard
universellementreconnuetappliquparlesfabricantsdordinateursetdelogiciels.Biensr,seposeleproblmedes
signes propres telle ou telle langue (comme les lettres accentues en franais, par exemple). LASCII a par le
problmeenrservantcertainscodesdoctetspourcescaractresspciauxchaquelangue.Encequiconcerneles
languesutilisantunalphabetnonlatin,unstandardparticulierdecodageatmisaupoint.Quantauxlanguesnon
alphabtiques (comme le chinois), elles payent un lourd tribut linformatique pour navoir pas su voluer vers le
systmealphabtique
I r
Revenons-enaucodagedesnombressurunoctet.Nousavonsvuquunoctetpouvaitcoder256nombresdiffrents,
parexemple(cestlechoixleplusspontan)lasriedesentiersde0255.Commentfairepour,partirdunoctet,
reconstituerlenombredanslabasedcimalequinousestplusfamilire?Cenestpassorcier;ilsuffitdappliquer,si
on les a bien compris, les principes de la numrotation de position, en gardant lesprit que l, la base nest pas
dcimale,maisbinaire.Prenonsunoctetauhasard:
11010011
Daprslesprincipesvusplushaut,cenombrereprsenteenbasedix,enpartantdelagauche:
1x2
7
+1x2
6
+0x2
5
+1x2
4
+0x2
3
+0x2
2
+1x2
1
+1x2
0
=
1x128+1x64+1x16+1x2+1x1=
128+64+16+2+1=
211
Etvoil!Cenestpaspluscompliququecela!
Inversement,commenttraduireunnombredcimalencodagebinaire?Ilsuffitderechercherdansnotrenombreles
puissancessuccessivesdedeux.Prenons,parexemple,186.
Dans186,ontrouve1x128,soit1x2
7
.Onretranche128de186etonobtient58.
Dans58,ontrouve0x64,soit0x2
6
.Onneretranchedoncrien.
Dans58,ontrouve1x32,soit1x2
5
.Onretranche32de58etonobtient26.
Dans26,ontrouve1x16,soit1x2
4
.Onretranche16de26etonobtient10.
Dans10,ontrouve1x8,soit1x2
3
.Onretranche8de10etonobtient2.
Dans2,ontrouve0x4,soit0x2
2
.Onneretranchedoncrien.
Cours Algorithmique Auteur : Christophe Darmangeat
6
Dans2,ontrouve1x2,soit1x2
1
.Onretranche2de2etonobtient0.
Dans0,ontrouve0x1,soit0x2
0
.Onneretranchedoncrien.
Ilnenousresteplusqureportercesdiffrentsrsultats(danslordre!)pourreconstituerloctet.Oncritalorsquen
binaire,186estreprsentpar:
10111010
Cestbon?Alorsonpasselasuite.
4. Le codage hexadcimal
Pourenfiniravecceprambule(sinon,celadeviendraitdelagourmandise),onvavoquerunderniertypedecodage,
quiconstitueunealternativepratiqueaucodagebinaire.Ilsagitducodagehexadcimal,autrementditenbaseseize.
Pourquoicechoixbizarre?Toutdabord,parcequelecodagebinaire,cenesttoutdemmepastrsconomique,ni
trs lisible. Pas trs conomique: pour reprsenter un nombre entre 1 et 256, il faut utiliser systmatiquement huit
chiffres. Pas trs lisible: parce que dinterminables suites de 1 et de 0, on a dj vu plus folichon.
Alors,unealternativetoutenaturelle,ctaitdereprsenterloctetnoncommehuitbits(cequenousavonsfaitjusque
l),maiscommedeuxpaquetsde4bits(lesquatredegauche,etlesquatrededroite).Voyonsvoirceladeplusprs.
Avec 4 bits, nous pouvons coder 2 x 2 x 2 x 2 = 16 nombres diffrents. En base seize, 16 nombres diffrents se
reprsentent avec un seul chiffre (de mme quen base 10, dix nombres se reprsentent avec un seul chiffre).
Quelssymboleschoisirpourleschiffres?Pourlesdixpremiers,onnapastchercherbienloin:onarecycllesdix
chiffresdelabasedcimale.Lesdixpremiersnombresdelabaseseizescriventdonctoutbtement0,1,2,3,4,5,
6,7,8,et9.L,ilnousmanqueencore6chiffres,pourreprsenterlesnombresquenouscrivonsendcimal10,11,
12, 13, 14 et 15. Plutt quinventer de nouveaux symboles (ce quon aurait trs bien pu faire), on a recycl les
premires lettres de lalphabet. Ainsi, par convention, A vaut 10, B vaut 11, etc. jusqu F qui vaut 15.
Or,onsaperoitquecettebasehexadcimalepermetunereprsentationtrssimpledesoctetsdubinaire.Prenons
unoctetauhasard:
10011110
Pourconvertircenombreenhexadcimal,ilyadeuxmthodes:luneconsistefaireungranddtour,enrepassant
par la base dcimale. Cest un peu plus long, mais on y arrive. Lautre mthode consiste faire le voyage direct du
binaireverslhexadcimal.Aveclhabitude,cestnettementplusrapide!
Premiremthode:
Onretombesurunraisonnementdjabord.Cetoctetreprsenteenbasedix:
1x2
7
+0x2
6
+0x2
5
+1x2
4
+1x2
3
+1x2
2
+1x2
1
+0x2
0
=
1x128+1x16+1x8+1x4+1x2+0x1=
Cours Algorithmique Auteur : Christophe Darmangeat
7
128+16+8+4+2=
158
Del,ilfautrepartirverslabasehexadcimale.
Dans158,ontrouve9x16,cest--dire9x16
1
.Onretranche144de158etonobtient14.
Dans14,ontrouve14x1,cest--dire14x16
0
.Onyest.
Lenombrescritdoncenhexadcimal:9E
Deuximemthode:
Divisons10011110en1001(partiegauche)et1110(partiedroite).
1001,cest8+1,donc9
1110,cest8+4+2donc14
Le nombre scrit donc en hexadcimal: 9 E. Cest la mme conclusion quavec la premire mthode. Encore
heureux!
Le codage hexadcimal est trs souvent utilis quand on a besoin de reprsenter les octets
individuellement, car dans ce codage, tout octet correspond seulement deux signes.
Allez,assezbavard,onpasseauxchosessrieuses:lesarcanesdelalgorithmique
Lalgorithmique est un terme dorigine arabe, comme algbre, amiral ou znith. Ce nest pas une excuse pour
massacrersonorthographe,ousaprononciation.
Ainsi,lalgonestpasrythmique,ladiffrencedubonrocknroll.Lalgonestpasnonpluslagglo.
Alors,neconfondezpaslalgorithmiqueaveclagglorythmique,quiconsisteposerdesparpaingsencadence.
1. Quest-ce que lalgomachin ?
Avez-vousdjouvertunlivrederecettesdecuisine?Avezvousdjdchiffrunmodedemploitraduitdirectement
ducorenpourfairefonctionnerunmagntoscopeouunrpondeurtlphoniquerticent?Sioui,sanslesavoir,vous
avezdjexcutdesalgorithmes.
Plus fort: avez-vous dj indiqu un chemin un touriste gar? Avez vous fait chercher un objet quelquun par
tlphone? crit une lettre anonyme stipulant comment procder une remise de ranon? Si oui, vous avez dj
fabriquetfaitexcuterdesalgorithmes.
Comme quoi, lalgorithmique nest pas un savoir sotrique rserv quelques rares initis touchs par la grce
divine,maisuneaptitudepartageparlatotalitdelhumanit.Donc,pasdexcuses
Un algorithme, cest une suite dinstructions qui, une fois excute correctement, conduit un rsultat donn. Si
lalgorithmeestjuste,lersultatestlersultatvoulu,etletouristeseretrouveloilvoulaitaller.Silalgorithmeest
faux,lersultatest,disons,alatoire,etdcidment,cettesaloperiederpondeurneveutriensavoir.
Compltonstoutefoiscettedfinition.Aprstout,eneffet,silalgorithme,commeonvientdeledire,nestquunesuite
dinstructionsmenantceluiquilexcutersoudreunproblme,pourquoinepasdonnercommeinstructionunique:
Cours Algorithmique Auteur : Christophe Darmangeat
9
rsous le problme, et laisser linterlocuteur se dbrouiller avec a? A ce tarif, nimporte qui serait champion
dalgorithmiquesansfaireaucuneffort.Pasdea,ceseraittropfacile.
Lemalheur(oulebonheur,toutdpenddupointdevue)estquejustement,siletouristevousdemandesonchemin,
cestquilneleconnatpas.Donc,sionnestpasungoujatintgral,ilnesertriendeluidiredeletrouvertoutseul.
De mme les modes demploi contiennent gnralement (mais pas toujours) un peu plus dinformations que
dbrouillezvouspourqueamarche.
Pour fonctionner, un algorithme doit donc contenir uniquement des instructions comprhensibles par celui qui devra
lexcuter.Cestdailleurslundespointsdlicatspourlesrdacteursdemodesdemploi: lesrfrencesculturelles,
oulexicales,desutilisateurs,tantvariables,unmmemodedemploipeuttretrsclairpourcertainsetparfaitement
absconspourdautres.
Eninformatique,heureusement,ilnyapasceproblme:leschosesauxquellesondoitdonnerdesinstructionssont
les ordinateurs, et ceux-ci ont le bon got dtre tous strictement aussi idiots les uns que les autres.
Lamatrisedelalgorithmiquerequiertdeuxqualits,trscomplmentairesdailleurs:
il faut avoir une certaine intuition, car aucune recette ne permet de savoir a priori quelles instructions
permettrontdobtenirlersultatvoulu.Cestl,si lonytient,quintervientlaformedintelligencerequise
pourlalgorithmique.Alors,cestcertain,ilyadesgensquipossdentaudpartdavantagecetteintuitionque
les autres. Cependant, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalement que de
lexpriencetellementrptequeleraisonnement,audpartlaborieux,finitpardevenirspontan.
ilfauttremthodiqueetrigoureux.Eneffet,chaquefoisquoncritunesriedinstructionsquoncroitjustes,
il faut systmatiquement se mettre la place de la machine qui va les excuter, pour vrifier si le rsultat
obtenuestbienceluiquelonvoulait.Cetteoprationnerequiertpaslamoindreoncedintelligence.Maiselle
restenanmoinsindispensable,silonneveutpascrirelaveuglette.
Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plus souvent lconomie de cette
dernire tape: lexprience fera quevous verrez le rsultat produit par vos instructions, au fur et mesure que
vouslescrirez.Naturellement,cetapprentissageestlong,etdemandedesheuresdetravailpatient.Aussi,dansun
premiertemps,vitezdesauterlestapes:lavrificationdechacundevosalgorithmesdoittreconsidrecomme
lamoitidutravailaccomplir.
Cours Algorithmique Auteur : Christophe Darmangeat
10
3. LADN, les Shadoks, et les ordinateurs
Quelrapport,direz-vous?Ehbienlepointcommunest:quatremotsdevocabulaire.
LuniverslexicalShadok,cestbienconnu,selimiteauxtermesGa,Bu,Zo,etMeu.Cequileuratout
de mme permis de formuler quelques fortes maximes, telles que: Mieux vaut pomper e quil ne se passe rien,
pluttquarrterdepomperetrisquerquilsepassequelquechosedepire.
t
LADN,quiestenquelquesorteleprogrammegntique,lalgorithmelabasedeconstructiondestresvivants,est
une chane construite partir de quatre lments invariables. Ce nest que le nombre de ces lments, ainsi que
lordre dans lequel ils sont arrangs, qui vont dterminer si on obtient une puce ou un lphant. Et tous autant que
noussommes,splendidesrussitesdelaNature(noussommesenScienceprofane),avonstconstruitsparun
programmeconstituuniquementdecesquatrebriques,cequidevraitnousinciterlamodestie.
Enfin, lesordinateurs,quelsquilssoient,nesontfondamentalementcapablesdecomprendrequequatrecatgories
d'ordres(enprogrammation,onn'emploierapasletermed'ordre,maispluttceluid'instructions).Cesquatrefamilles
d'instructionssont:
laffectationdevariables;
lalecture/criture;
lestests;
lesboucles.
Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de ces quatre petites
briquesdebase.Ilpeutyenavoirquelquesunes,quelquesdizaines,etjusquplusieurscentainesdemilliersdans
certains programmes de gestion. Rassurez-vous, nous nirons pas jusque l (cependant, la taille dun algorithme ne
conditionne pas en soi sa complexit: de longs algorithmes peuvent tre finalement assez simples, et de petits trs
compliqus).
4. Algorithmique et programmation
Pourquoi apprendre lalgorithmique pour apprendre programmer? En quoi a-t-on besoin dun langage spcial,
distinctdeslangagesdeprogrammationcomprhensiblesparlesordinateurs?
Parcequelalgorithmiqueexprimelesinstructionsrsolvantunproblmedonnindpendammentdesparticularitsde
teloutellangage.Pourprendreuneimage,siunprogrammetaitunedissertation,lalgorithmiqueseraitleplan,une
foismisdectlardactionetlorthographe.Or,voussavezquilvautmieuxfairedabordleplanetrdigerensuite,
quelinverse
Apprendre lalgorithmique, cest apprendre manier la structure logique dun programme informatique. Cette
dimensionestprsentequellequesoitlelangagedeprogrammation;maislorsquonprogrammedansunlangage(en
C,enVisualBasic,etc.)ondoitenplussecolleterlesproblmesdesyntaxe,oudetypesdinstructions,propresce
langage. Apprendre lalgorithmique de manire spare, cest donc srier les difficults pour mieux les vaincre.
Cours Algorithmique Auteur : Christophe Darmangeat
11
Acela,ilfautajouterquedesgnrationsdeprogrammeurs,souventautodidactes(maispastoujours,hlas!),ayant
directement appris programmer dans tel ou tel langage,ne font pas mentalement clairement la diffrence entre ce
quirelvedelastructurelogiquegnraledetouteprogrammation(lesrglesfondamentalesdelalgorithmique)etce
qui relve du langage particulier quils ont appris. Ces programmeurs, non seulement ont beaucoup plus de mal
passerensuiteunlangagediffrent,maisencorecriventbiensouventdesprogrammesquimmesilssontjustes,
restent laborieux. Car on nignore pas impunment les rgles fondamentales de lalgorithmique Alors, autant
lapprendreentantquetelle!
Bon,maintenantpassonsauvifdusujet
Le pseudo-code que vous dcouvrirez dans les pages qui suivent possde quelques spcificits mineures.
Rassurez-vouscependant,celles-cirestentdansleslimitestoutfaitacceptables.
Leslangagesinformatiquesplusvolus(cesontceuxquepresquetoutlemondeemploie)sechargentprcisment,
entre autres rles, dpargner au programmeur la gestion fastidieuse des emplacements mmoire et de leurs
adresses.Et,commevouscommencezlecomprendre,ilestbeaucoupplusfaciledemployerlestiquettesdeson
choix,quededevoirmanierdesadressesbinaires.
2. Dclaration des variables
Lapremirechosefaireavantdepouvoirutiliserunevariableestdecrerlaboteetdeluicollerunetiquette.Ceci
se fait tout au dbut de lalgorithme, avant mme les instructions proprement dites. Cest ce quon appelle la
dclaration des variables. Cest un genre de dclaration certes moins romantique quune dclaration damour, mais
dunautrectmoinsdsagrablequunedclarationdimpts.
Lenomdelavariable(ltiquettedelabote)obitdesimpratifschangeantselonleslangages.Toutefois,unergle
absolueestquunnomdevariablepeutcomporterdeslettresetdeschiffres,maisquilexclutlaplupartdessignesde
ponctuation, en particulier les espaces. Un nom de variable correct commence galement imprativement par une
lettre. Quant au nombre maximal de signes pour un nom de variable, il dpend du langage utilis.
Cours Algorithmique Auteur : Christophe Darmangeat
13
Enpseudo-codealgorithmique,onestbiensrlibredunombredesignespourunnomdevariable,mmesipourdes
raisonspurementpratiques,onvitegnralementlesnomsrallonge.
Lorsquondclareunevariable,ilnesuffitpasdecrerunebote(rserverunemplacementmmoire);encoredoit-on
prcisercequelonvoudramettrededans,cardeceladpendentlatailledelabote(delemplacementmmoire)etle
typedecodageutilis.
2.1. Types numriques classiques
Commenonsparlecastrsfrquent,celuidunevariabledestinerecevoirdesnombres.
Si lon rserve un octet pour coder un nombre, en rappel on ne pourra coder que 2
8
= 256 valeurs diffrentes. Cela
peut signifier par exemple les nombres entiers de 1 256, ou de 0 255, ou de 127 +128 Si lon rserve deux
octets, on adroit 65 536 valeurs; avec trois octets, 16 777 216, etc. Et l se pose un autre problme: ce codage
doit-ilreprsenterdesnombresdcimaux?desnombresngatifs?
Bref,letypedecodage(autrementdit,letypedevariable)choisipourunnombrevadterminer:
lesvaleursmaximalesetminimalesdesnombrespouvanttrestocksdanslavariable
laprcisiondecesnombres(danslecasdenombresdcimaux).
Tous les langages, quels quils soient offrent un bouquet de types numriques, dont le dtail est susceptible de
varierlgrementdunlangagelautre.Grossomodo,onretrouvecependantlestypessuivants:
TypeNumrique Plage
Byte(octet) 0255
Entiersimple -3276832767
Entierlong -21474836482147483647
Relsimple
-3,40x10
38
-1,40x10
45
pourlesvaleursngatives
1,40x10
-45
3,40x10
38
pourlesvaleurspositives
Reldouble
1,79x10
308
-4,94x10
-324
pourlesvaleursngatives
4,94x10
-324
1,79x10
308
pourlesvaleurspositives
Pourquoi ne pas dclarer toutes les variables numriques en rel double, histoire de btonner et
dtre certain quil ny aura pas de problme ? En vertu du principe de lconomie de moyens.
Un bon algorithme ne se contente pas de marcher ; il marche en vitant de gaspiller les
ressources de la machine. Sur certains programmes de grande taille, labus de variables
surdimensionnes peut entraner des ralentissements notables lexcution, voire un plantage
pur et simple de lordinateur. Alors, autant prendre ds le dbut de bonnes habitudes dhygine.
Enalgorithmique,onnesetracasserapastropaveclessous-typesdevariablesnumriques.Onsecontenteradonc
deprciserqu'ils'agitd'unnombre,engardantenttequedansunvrailangage,ilfaudratreplusprcis.
Cours Algorithmique Auteur : Christophe Darmangeat
14
Enpseudo-code,unedclarationdevariablesauraainsicettette:
Variable g en Numrique
Ou encore
Variables PrixHT, TauxTVA, PrixTTC en Numrique
2.2. Autres types numriques
Certainslangagesautorisentdautrestypesnumriques,notamment:
letypemontaire(avecstrictementdeuxchiffresaprslavirgule)
letypedate(jour/mois/anne).
Nous nemploierons pas ces types dans ce cours; mais vous ne manquerez pas de les rencontrer en
programmationproprementdite.
2.3. Type alphanumrique
Fort heureusement, les botes que sont les variables peuvent contenir bien dautres informations que des nombres.
Sans cela, on serait un peu embt ds que lon devrait stocker un nom de famille, par exemple.
Ondisposedoncgalementdutypealphanumrique(galementappeltypecaractre,typechaneouenanglais,le
type string ). Dans une variable de ce type, on stocke des caractres, quil sagisse de lettres, de signes de
ponctuation,despaces,oummedechiffres.Lenombremaximaldecaractrespouvanttrestocksdansuneseule
variable string dpend du langage utilis. Un groupe de caractres (y compris un groupe de un, ou de zro
caractres),quilsoitounonstockdansunevariable,dailleurs,estdoncsouventappelchanedecaractres.
En pseudo-code, une chane de caractres est toujours note entre guillemets
Pourquoi?Pourviterdeuxsourcesprincipalesdepossiblesconfusions:
la confusion entre des nombres et des suites de chiffres. Par exemple, 423 peut reprsenter le nombre 423
(quatrecentvingt-trois),oulasuitedecaractres4,2,et3.Etcenestpasdutoutlammechose!Avecle
premier, on peut faire des calculs, avec le second, point du tout. Ds lors, les guillemets permettent dviter
toute ambigut: sil ny en a pas, 423 est quatre cent vingt trois. Sil y en a, "423" reprsente la suite des
chiffres4,2,3.
Maiscen'estpaslepire.L'autreconfusion,bienplusgrave-etbienplusfrquenteconsistesemlanger
les pinceaux entre le nom d'une variable et son contenu. Pour parler simplement, cela consiste confondre
l'tiquette d'une bote et ce qu'il y a l'intrieur On reviendra sur ce point crucial dans quelques instants.
Cours Algorithmique Auteur : Christophe Darmangeat
15
2.4. Type boolen
Le dernier type de variables est le type boolen: on y stocke uniquement les valeurs logiques VRAI et FAUX.
OnpeutreprsentercesnotionsabstraitesdeVRAIetdeFAUXpartoutcequ'onveut:del'anglais(TRUEetFALSE)
oudesnombres(0et1).Peuimporte.Cequicompte,c'estdecomprendrequeletypeboolenesttrsconomique
en termes de place mmoire occupe, puisque pour stocker une telle information binaire, un seul bit suffit.
Le type boolen est trs souvent nglig par les programmeurs, tort.
Il est vrai qu'il n'est pas proprement parler indispensable, et qu'on pourrait crire peu prs
nimporte quel programme en l'ignorant compltement. Pourtant, si le type boolen est mis
disposition des programmeurs dans tous les langages, ce n'est pas pour rien. Le recours aux
variables boolennes s'avre trs souvent un puissant instrument de lisibilit des algorithmes :
il peut faciliter la vie de celui qui crit l'algorithme, comme de celui qui le relit pour le corriger.
Alors, maintenant, c'est certain, en algorithmique, il y a une question de style : c'est exactement
comme dans le langage courant, il y a plusieurs manires de s'exprimer pour dire sur le fond la
mme chose. Nous verrons plus loin diffrents exemples de variations stylistiques autour d'une
mme solution. En attendant, vous tes prvenus : l'auteur de ce cours est un adepte fervent
(mais pas irraisonn) de l'utilisation des variables boolennes.
3. Linstruction daffectation
3.1. Syntaxe et signification
Abordonsmaintenantnospremiresvritablesmanipulationsdalgorithmique.Pastroptt,certes,maispasmoyende
faireautrement!
En fait, la variable (la bote) n'est pas un outil bien sorcier manipuler. On ne peut pas faire trente-six mille choses
avecunevariable,maisseulementuneetuneseule.
Cette seule chose quon puisse faire avec une variable, cest laffecter, cest--dire lui attribuer une valeur. Pour
poursuivrelasuperbemtaphorefiledjemploye,onpeutremplirlabote.
En pseudo-code, l'instruction d'affectation se note avec le signe
Ainsi:
Toto 24
Cours Algorithmique Auteur : Christophe Darmangeat
16
Attribuelavaleur24lavariableToto.
Ceci, soit dit en passant, sous-entend imprativement que Toto soit une variable de type numrique. Si Toto a t
dfinidansunautretype,ilfautbiencomprendrequecetteinstructionprovoquerauneerreur.Cestunpeucommesi,
en donnant un ordre quelquun, on accolait un verbe et un complment incompatibles, du genre Epluchez la
casserole.Mmedotedelameilleurevolontdumonde,lamnagrelisantcettephrasenepourraitquinterrompre
dubitativementsatche.Alors,unordinateur,vouspensezbien
On peut en revanche sans aucun problme attribuer une variable la valeur dune autre variable, telle quelle ou
modifie.Parexemple:
Tutu Toto
SignifiequelavaleurdeTutuestmaintenantcelledeToto.
NotezbienquecetteinstructionnaenrienmodifilavaleurdeToto:uneinstructiondaffectationnemodifiequece
quiestsitugauchedelaflche.
Tutu Toto + 4
SiTotocontenait12,Tutuvautmaintenant16.Demmequeprcdemment,Totovauttoujours12.
Tutu Tutu + 1
SiTutuvalait6,ilvautmaintenant7.LavaleurdeTutuestmodifie,puisqueTutuestlavariablesituegauchedela
flche.
Pourrevenirprsentsurlerledesguillemetsdansleschanesdecaractresetsurlaconfusionnumro2signale
plushaut,comparonsmaintenantdeuxalgorithmessuivants:
Exemple n1 Exemple n2
Dbut Dbut
Riri "Loulou" Riri "Loulou"
Fifi "Riri" Fifi Riri
Fin Fin
Laseulediffrenceentrelesdeuxalgorithmesconsistedanslaprsenceoudanslabsencedesguillemetslorsdela
secondeaffectation.Etl'onvoitquecelachangetout!
Dans l'exemple n1, ce que l'on affecte la variable Fifi, c'est la suite de caractres R i r - i. Et la fin de
lalgorithme,lecontenudelavariableFifiestdoncRiri.
Dans l'exemple n2, en revanche, Riri tant dpourvu de guillemets, n'est pas considr comme une suite de
caractres,maiscommeunnomdevariable.Lesensdelalignedevientdonc:affectelavariableFifilecontenu
de la variable Riri. A la fin de lalgorithme n2, la valeur de la variable Fifi est donc Loulou. Ici, loubli des
guillemetsconduitcertesunrsultat,maisunrsultatdiffrent.
Cours Algorithmique Auteur : Christophe Darmangeat
17
A noter, car cest un cas trs frquent, que gnralement, lorsquon oublie les guillemets lors dune affectation de
chane, ce qui se trouve droite du signe daffectation ne correspond aucune variable prcdemment dclare et
affecte.Danscecas,loublidesguillemetssesoldeimmdiatementparuneerreurdexcution.
Ceciestunesimpleillustration.Maisellersumelensembledesproblmesquisurviennentlorsquonoublielargle
desguillemetsauxchanesdecaractres.
3.2. Ordre des instructions
Il va de soi que lordre dans lequel les instructions sont crites va jouer un rle essentiel dans le rsultat final.
Considronslesdeuxalgorithmessuivants:
Variable A en Entier Variable A en Entier
Dbut Dbut
A 34 A 12
A 12 A 34
Fin Fin
IlestclairquedanslepremiercaslavaleurfinaledeAest12,danslautreelleest34.
Il est tout aussi clair que ceci ne doit pas nous tonner. Lorsquon indique le chemin quelquun, dire prenez tout
droit sur 1km, puis droite nenvoie pas les gens au mme endroit que si lon dit prenez droite puis tout droit
pendant1km.
Enfin, il est galement clair que si lon met de ct leur vertu pdagogique, les deux algorithmes ci-dessus sont
parfaitementidiots;toutlemoinsilscontiennentuneincohrence.Ilnyaaucunintrtaffecterunevariablepour
laffecter diffremment juste aprs. En loccurrence, on aurait tout aussi bien atteint le mme rsultat en
crivantsimplement:
Variable A en Entier Variable A en Entier
Dbut Dbut
A 12 A 34
Fin Fin
Tousleslmentssontmaintenantenvotrepossessionpourquecesoitvousdejouer!
Exercice 1.1
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?
Variables A, B en Entier
Dbut
A 1
B A + 3
A 3
Fin
Cours Algorithmique Auteur : Christophe Darmangeat
18
Exercice 1.2
Quelles seront les valeurs des variables A, B et C aprs excution des
instructions suivantes ?
Variables A, B, C en Entier
Dbut
A 5
B 3
C A + B
A 2
C B A
Fin
Exercice 1.3
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?
Variables A, B en Entier
Dbut
A 5
B A + 4
A A + 1
B A 4
Fin
Exercice 1.4
Quelles seront les valeurs des variables A, B et C aprs excution des
instructions suivantes ?
Variables A, B, C en Entier
Dbut
A 3
B 10
C A + B
B A + B
A C
Fin
Exercice 1.5
Quelles seront les valeurs des variables A et B aprs excution des instructions
suivantes ?
Variables A, B en Entier
Dbut
A 5
B 2
Cours Algorithmique Auteur : Christophe Darmangeat
19
A B
B A
Fin
Moralit : les deux dernires instructions permettent-elles dchanger les deux
valeurs de B et A ? Si lon inverse les deux dernires instructions, cela change-
t-il quelque chose ?
Exercice 1.6
Plus difficile, mais cest un classique absolu, quil faut absolument matriser :
crire un algorithme permettant dchanger les valeurs de deux variables A et
B, et ce quel que soit leur contenu pralable.
Exercice 1.7
Une variante du prcdent : on dispose de trois variables A, B et C. Ecrivez un
algorithme transfrant B la valeur de A, C la valeur de B et A la valeur de
C (toujours quels que soient les contenus pralables de ces variables).
4. Expressions et oprateurs
Sionfaitlepoint,onsaperoitquedansuneinstructiondaffectation,ontrouve:
gauchedelaflche,unnomdevariable,etuniquementcela.Encemondeemplidedoutesquestceluide
lalgorithmique,cestunedesraresrglesdorquimarchetouslescoups:sionvoitgaucheduneflche
daffectationautrechosequunnomdevariable,onpeuttrecertain100%quilsagitduneerreur.
droitedelaflche,cequonappelleuneexpression.Voilencoreunmotquiesttrompeur;eneffet,cemot
existedanslelangagecourant,oilrevtbiendessignifications.Maiseninformatique,letermedexpression
nedsignequuneseulechose,etquiplusestunechosetrsprcise:
Une expression est un ensemble de valeurs, relies par des oprateurs, et quivalent une seule
valeur
Cette dfinition vous parat peut-tre obscure. Mais rflchissez-y quelques minutes, et vous verrez quelle recouvre
quelquechosedassezsimplesurlefond.Parexemple,voyonsquelquesexpressionsdetypenumrique.Ainsi:
7 5+4 123-45+844 Toto-12+5-Riri
sont des expressions valides, pour peu que Toto et Riri soient bien des nombres. Car dans le cas contraire, la
quatrimeexpressionnapasdesens.Enloccurrence,lesoprateursemployssontladdition(+)etlasoustraction(-
Cours Algorithmique Auteur : Christophe Darmangeat
20
).
Revenonspourlemomentsurlaffectation.Uneconditionsupplmentaire(enplusdesdeuxprcdentes)devalidit
duneinstructiondaffectationestque:
lexpression situe droite de la flche soit du mme type que la variable situe gauche. Cest trs
logique:onnepeutpasrangerconvenablementdesoutilsdansunsacprovision,nideslgumesdans
unetrousseoutilssaufprovoquerunrsultatcatastrophique.
Si lun des trois points numrs ci-dessus nest pas respect, la machine sera incapable dexcuter laffectation, et
dclenchera une erreur (est-il besoin de dire que si aucun de ces points nest respect, il y aura aussi erreur!)
Onvamaintenantdtaillercequelonentendparletermedoprateur.
Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat.
Les oprateurs possibles dpendent du type des valeurs qui sont en jeu. Allons-y, faisons le tour, cest un peu
fastidieux,maiscommeditlesageaupetitscarabe,quandcestfait,cestplusfaire.
4.1. Oprateurs numriques :
Cesontlesquatreoprationsarithmtiques,toutcequilyadeclassique.
+addition;
-soustraction;
*multiplication;
/division.
Mentionnonsgalementle^quisignifiepuissance.45aucarrscriradonc45^2.
Enfin,onaledroitdutiliserlesparenthses,aveclesmmesrglesquenmathmatiques.Lamultiplicationetla
divisionontnaturellementprioritsurladditionetlasoustraction.Lesparenthsesnesontainsiutilesquepour
modifiercetteprioritnaturelle.
Celasignifiequeninformatique,12*3+5et(12*3)+5valentstrictementlammechose,savoir41.Pourquoids
lorssefatiguermettredesparenthsesinutiles?
Enrevanche,12*(3+5)vaut12*8soit96.Riendedifficilel-dedans,quedunormal.
Exemple
Variables A, B, C en Caractre
Dbut
A Gloubi
B Boulga
C A & B
Fin
La valeur de C la fin de lalgorithme est GloubiBoulga
Cours Algorithmique Auteur : Christophe Darmangeat
21
4.3. Oprateurs logiques (ou boolens) :
IlsagitduET,duOU,duNONetdumystrieux(maisrarissimeXOR).Nousleslaisseronsdectprovisoirement,
soyez-ensrs.
Exercice 1.8
Que produit lalgorithme suivant ?
Variables A, B, C en Caractres
Dbut
A 423
B 12
C A + B
Fin
Exercice 1.9
Que produit lalgorithme suivant ?
Variables A, B en Caractres
Dbut
A 423
B 12
C A & B
Fin
5. Deux remarques pour terminer
Maintenantquenoussommesfamiliersdesvariablesetquenouslesmanipulonslesyeuxferms(maislesneurones
enveil,toutefois),nousattironsvotreattentionsurlatrompeusesimilitudedevocabulaireentrelesmathmatiqueset
linformatique. En mathmatiques, une variable est gnralement une inconnue, qui recouvre un nombre non
prcisdevaleurs.Lorsquoncrit:
y=3x+2
les variables xet ysatisfaisant lquation existent en nombre infini (graphiquement, lensemble des solutions
cettequationdessineunedroite).Lorsquoncrit:
ax+bx+c=0
lavariablexdsignelessolutionscettequation,cest--direzro,uneoudeuxvaleurslafois.
Cours Algorithmique Auteur : Christophe Darmangeat
23
P
PA AR RT TI IE E 2 (LECTURE ET CRITURE)
Un programme est un sort jet sur un ordinateur, qui transforme tout texte saisi au clavier en message
derreur.
Anonyme
Un clavier Azerty en vaut deux
Anonyme
1. De quoi parle-t-on ?
Trifouillerdesvariablesenmmoireviveparunchouetteprogramme,cestvraiquecesttrsmarrant,etdailleurson
atousbienrigolauchapitreprcdent.Celadit,lafindelafoire,onpeuttoutdemmesedemanderquoiasert.
Eneffet.Imaginonsquenousayonsfaitunprogrammepourcalculerlecarrdunnombre,mettons12.Sionafaitau
plussimple,onacrituntrucdugenre:
Variable A en Numrique
Dbut
A 12^2
Fin
Dune part, ce programme nous donne le carr de 12. Cest trs gentil lui. Mais si lon veut le carr dun autre
nombreque12,ilfautrcrireleprogramme.Bof.
Dautrepart,lersultatestindubitablementcalculparlamachine.Maisellelegardesoigneusementpourelle,etle
pauvre utilisateur qui fait excuter ce programme, lui, ne saura jamais quel est le carr de 12. Re-bof.
Cestpourquoi,heureusement,ilexistedesinstructionspourpermettrelamachinededialogueraveclutilisateur(et
au Lyce de Versailles, et ajout lestim Pierre Dac, qui en prcurseur mconnu de lalgorithmique, affirmait tout
aussiprofondmentque rien ne sert de penser, il faut rflchir avant ).
Dansunsens,cesinstructionspermettentlutilisateurderentrerdesvaleursauclavierpourquellessoientutilises
parleprogramme.Cetteoprationestlalecture.
Dans lautre sens, dautres instructions permettent au programme de communiquer des valeurs lutilisateur en les
affichantlcran.Cetteoprationestlcriture.
Remarqueessentielle:Apremirevue,onpeutavoirlimpressionquelesinformaticienstaientbeurrscommedes
petits lus lorsquils ont baptis ces oprations; puisque quand lutilisateur doit crire au clavier, on appelle a la
lecture,etquandildoitliresurlcranonappellelcriture.Maisavantdagonirdinsultesunedignecorporation,il
fautrflchirunpeuplusloin.Unalgorithme,cestunesuitedinstructionsquiprogrammelamachine,paslutilisateur!
Doncquandonditlamachinedelireunevaleur,celaimpliquequelutilisateurvadevoircrirecettevaleur.Etquand
Cours Algorithmique Auteur : Christophe Darmangeat
24
on demande la machine dcrire une valeur, cest pour que lutilisateur puisse la lire. Lecture et criture sont donc
des termes qui comme toujours en programmation, doivent tre compris du point de vue de la machine qui sera
chargedelesexcuter.Etl,toutdevientparfaitementlogique.
Exercice 2.1
Quel rsultat produit le programme suivant ?
Variables val, double numriques
Dbut
Val 231
Double Val * 2
Ecrire Val
Ecrire Double
Fin
Exercice 2.2
Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le
carr de ce nombre.
Exercice 2.3
Ecrire un programme qui lit le prix HT dun article, le nombre darticles et le taux de TVA,
et qui fournit le prix total TTC correspondant. Faire en sorte que des libells apparaissent
clairement.
Exercice 2.4
Ecrire un algorithme utilisant des variables de type chane de caractres, et affichant
quatre variantes possibles de la clbre belle marquise, vos beaux yeux me font mourir
damour . On ne se soucie pas de la ponctuation, ni des majuscules.
Cours Algorithmique Auteur : Christophe Darmangeat
26
P
PA AR RT TI IE E 3 (LES TESTS)
Cest assez difficile de trouver une erreur dans son code quand on la cherche. Cest encore bien plus dur quand
on est convaincu que le code est juste.
Steve McConnell
Il nexiste pas, et il nexistera jamais, de langage dans lequel il soit un tant soit peu difficile dcrire de mauvais
programmes .
Anonyme
Si le dboguage est lart denlever les bogues, alors la programmation doit tre lart de les crer.
Anonyme
Onavaitditquelalgorithmique,cestlacombinaisondequatrestructureslmentaires.Nousenavonsdjvudeux,
voicilatroisime.Autrementdit,onaquasimentfinileprogramme.
Maisnon,onrigole.
1. De quoi sagit-il ?
Reprenonslecasdenotreprogrammationalgorithmiquedutouristegar.Normalement,lalgorithmeressemblera
quelquechosecomme:Alleztoutdroitjusquauprochaincarrefour,puisprenezdroiteetensuiteladeuxime
gauche,etvousytes.
Maisencasdedoutelgitimedevotrepart,celapourraitdevenir:Alleztoutdroitjusquauprochaincarrefouretl
regardezdroite.Silarueestautoriselacirculation,alorsprenezlaetensuitecestladeuximegauche.Maissi
en revanche elle est en sens interdit, alors continuez jusqu la prochaine droite, prenez celle-l, et ensuite la
premiredroite.
Cedeuximealgorithmeacecidesuprieuraupremierquilprvoit,enfonctiondunesituationpouvantseprsenter
dedeuxfaonsdiffrentes,deuxfaonsdiffrentesdagir.Celasupposequelinterlocuteur(letouriste)sacheanalyser
la condition que nous avons fixe son comportement (la rue est-elle en sens interdit?) pour effectuer la srie
dactionscorrespondante.
Ehbien,croyezleounon,maislesordinateurspossdentcetteaptitude,sanslaquelledailleursnousaurionsbiendu
mal les programmer. Nous allons donc pouvoir parler notre ordinateur comme notre touriste, et lui donner des
sries dinstructions effectuer selon que la situation se prsente dune manire ou dune autre. Cette structure
logiquerpondaudouxnomdetest.Toutefois,ceuxquitiennentabsolumentbrillerensocitparlerontgalement
destructurealternative.
Cours Algorithmique Auteur : Christophe Darmangeat
27
2. Structure dun test
Il ny a que deux formes possibles pour un test; la forme de gauche est la forme complte, celle de droite la forme
simple.
Si boolen Alors Si boolen Alors
Instructions 1 Instructions
Sinon Finsi
Instructions 2
Finsi
Ceciappellequelquesexplications.
UnboolenestuneexpressiondontlavaleurestVRAIouFAUX.Celapeutdonctre(ilnyaquedeuxpossibilits):
unevariabledetypeboolen;
unecondition.
Nousreviendronsdansquelquesinstantssurcequestuneconditioneninformatique.
Toujours est-il que la structure dun test est relativement claire. Arriv la premire ligne (SiAlors) la machine
examine la valeur du boolen. Si ce boolen a pour valeur VRAI, elle excute la srie dinstructions 1. Cette srie
dinstructions peut tre trs brve comme trs longue, cela na aucune importance. A la fin de cette srie
dinstructions, au moment o elle arrive au mot Sinon, la machine saute directement la premire instruction
situeaprsleFinsi.Demme,aucasoleboolenacommevaleurFaux,lamachinesautedirectementla
premirelignesitueaprsleSinonetexcutelensembledesinstructions2.
LaformesimplifiecorrespondaucasolunedesdeuxbranchesduSiestvide.Dslors,pluttqucriresinon
nerienfairedutout,ilestplussimpledeneriencrire.
Exprim sous forme de pseudo-code, la programmation de notre touriste de tout lheure donnerait donc quelque
chosedugenre:
NonC1
C1Vrai Faux
C1Faux Vrai
LE GAG DE LA JOURNE
Il consiste formuler dans un test une condition qui ne pourra jamais tre vraie, ou
jamais tre fausse. Si ce nest pas fait exprs, cest assez rigolo. Si cest fait exprs, cest
encore plus drle, car une condition dont on sait davance quelle sera toujours fausse nest pas
une condition. Dans tous les cas, cela veut dire quon a crit un test qui nen est pas un, et qui
fonctionne comme sil ny en avait pas.
Cela peut tre par exemple : Si Toto < 10 ET Toto > 15 Alors (il est trs difficile de trouver un
nombre qui soit la fois infrieur 10 et suprieur 15 !)
Cours Algorithmique Auteur : Christophe Darmangeat
31
Exercice 3.2
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si
leur produit est ngatif ou positif (on laisse de ct le cas o le produit est nul).
Attention toutefois : on ne doit pas calculer le produit des deux nombres.
Exercice 3.3
Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils
sont rangs ou non dans lordre alphabtique.
5. Tests imbriqus
Graphiquement,onpeuttrsfacilementreprsenterunSIcommeunaiguillagedechemindefer(ouunaiguillagede
trainlectrique,cestmoinslourdporter).UnSIouvredoncdeuxvoies,correspondantdeuxtraitementsdiffrents.
Maisilyadestasdesituationsodeuxvoiesnesuffisentpas.Parexemple,unprogrammedevantdonnerltatde
leauselonsatempraturedoitpouvoirchoisirentretroisrponsespossibles(solide,liquideougazeuse).
Unepremiresolutionseraitlasuivante:
Variable Temp en Entier
Dbut
Ecrire Entrez la temprature de leau :
Lire Temp
Si Temp =< 0 Alors
Ecrire Cest de la glace
Finsi
Si Temp > 0 Et Temp < 100 Alors
Ecrire Cest du liquide
Finsi
Si Temp > 100 Alors
Ecrire Cest de la vapeur
Finsi
Fin
Vous constaterez que cest un peu laborieux. Les conditions se ressemblent plus ou moins, et surtout on oblige la
machineexaminertroistestssuccessifsalorsquetousportentsurunemmechose,latemprature(lavaleurdela
variableTemp).Ilseraitainsibienplusrationneldimbriquerlestestsdecettemanire:
Variable Temp en Entier
Dbut
Ecrire Entrez la temprature de leau :
Lire Temp
Si Temp =< 0 Alors
Ecrire Cest de la glace
Sinon
Si Temp < 100 Alors
Ecrire Cest du liquide
Sinon
Ecrire Cest de la vapeur
Finsi
Finsi
Fin
Exercice 3.4
Ecrire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce
nombre est positif ou ngatif (on inclut cette fois le traitement du cas o le nombre vaut
zro).
Exercice 3.5
Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si le
produit est ngatif ou positif (on inclut cette fois le traitement du cas o le produit peut
tre nul). Attention toutefois, on ne doit pas calculer le produit !
Exercice 3.6
Ecrire un algorithme qui demande lge dun enfant lutilisateur. Ensuite, il linforme
de sa catgorie :
- Poussin de 6 7 ans
- Pupille de 8 9 ans
- Minime de 10 11 ans
- Cadet aprs 12 ans
Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?
6. De laiguillage la gare de tri
J'ai l'me ferroviaire : je regarde passer les vaches (Lo Ferr)
Cettecitationnapportepeut-trepasgrandchosecetexpos,maisnouslaimonsbien,alorsctaitlemomentou
jamais.
En effet, dans un programme, une structure SI peut tre facilement compare un aiguillage de train. La voie
principalesespareendeux,letraindevantroulerousurlune,ousurlautre,etlesdeuxvoiesserejoignantttou
tardpourneplusenformerquuneseule,lorsduFinSi.Onpeutschmatisercelaainsi:
Cours Algorithmique Auteur : Christophe Darmangeat
33
Maisdanscertainscas,cenesontpasdeuxvoiesquilnousfaut,maistrois,oummeplus.Danslecasdeltatde
leau, il nous faut trois voies pour notre train, puisque leau peut tre solide, liquide ou gazeuse. Alors, nous
navonspaseulechoix:pourdeuxvoies,ilnousfallaitunaiguillage,pourtroisvoiesilnousenfautdeux,imbriqus
lundanslautre.
Cettestructure(tellequenouslavonsprogrammelapageprcdente)devraittreschmatisecommesuit:
Soyonsbienclairs:cettestructureestlaseulepossibledupointdevuelogique(mmesionpeuttoujoursmettrele
bas en haut et le haut en bas). Mais du point de vue de lcriture, le pseudo-code algorithmique admet une
simplificationsupplmentaire.Ainsi,ilestpossible(maisnonobligatoire),quelalgorithmeinitial:
Variable Temp en Entier
Dbut
Ecrire Entrez la temprature de leau :
Lire Temp
Si Temp =< 0 Alors
Ecrire Cest de la glace
Sinon
Si Temp < 100 Alors
Ecrire Cest du liquide
Sinon
Ecrire Cest de la vapeur
Finsi
Finsi
Fin
devienne :
Variable Temp en Entier
Dbut
Ecrire Entrez la temprature de leau :
Lire Temp
Si Temp =< 0 Alors
Ecrire Cest de la glace
SinonSi Temp < 100 Alors
Ecrire Cest du liquide
Sinon
Ecrire Cest de la vapeur
Finsi
F n i
Cours Algorithmique Auteur : Christophe Darmangeat
34
Dans le cas de tests imbriqus, le Sinon et le Si peuvent tre fusionns en un SinonSi. On
considre alors quil sagit dun seul bloc de test, conclu par un seul FinSi
LeSinonSipermetenquelquesortedecrer(enralit,desimuler)desaiguillagesplusdedeuxbranches.Onpeut
ainsi enchaner les SinonSi les uns derrire les autres pour simuler un aiguillage autant de branches que lon
souhaite.
7. Variables Boolennes
Jusquici, nous avons utilis uniquement desconditions pour fairedes tests. Mais vousvousrappelez quil existeun
typedevariables(lesboolennes)susceptiblesdestockerlesvaleursVRAIouFAUX.Enfait,onpeutdoncentrerdes
conditionsdanscesvariables,ettesterensuitelavaleurdecesvariables.
Reprenonslexempledeleau.Onpeutlercrireainsi:
Variable Temp en Entier
Variables A, B en Boolen
Dbut
Ecrire Entrez la temprature de leau :
Lire Temp
A Temp =< 0
B Temp < 100
Si A Alors
Ecrire Cest de la glace
SinonSi B Alors
Ecrire Cest du liquide
Sinon
Ecrire Cest de la vapeur
Finsi
Fin
A priori, cette technique ne prsente gure dintrt: on a alourdi plutt quallg lalgorithme de dpart, en ayant
recoursdeuxvariablessupplmentaires.Mais:
souvenons-nous: une variable boolenne na besoin que dun seul bit pour tre stocke. De ce point de
vue,lalourdissementnestdoncpasconsidrable.
danscertainscas,notammentceluideconditionscomposestrslourdes(avecpleindeETetdeOUtout
partout) cette technique peut faciliter le travail du programmeur, en amliorant nettement la lisibilit de
lalgorithme.Lesvariablesboolennespeuventgalementsavrertrsutilespourservirdeflag,technique
dontonreparleraplusloin.
Cours Algorithmique Auteur : Christophe Darmangeat
35
P
PA AR RT TI IE E 4
4 (
(ENCORE DE LA LOGIQUE)
La programmation peut tre un plaisir ; de mme que la cryptographie. Toutefois, il faut viter de combiner
les deux.
Kreitzberg et Sneidermann
1. Faut-il mettre un ET ? Faut-il mettre un OU ?
Uneremarquepourcommencer:danslecasdeconditionscomposes,lesparenthsesjouentunrlefondamental.
Variables A, B, C, D, E en Boolen
Variable X en Entier
Dbut
Lire X
A X < 2
B X > 12
C X < 6
D (A ET B) OU C
E A ET (B OU C)
Ecrire D, E
Fin
SiX=3,alorsonremarquequeDseraVRAIalorsqueEseraFAUX.
SilnyadansuneconditionquedesET,ouquedesOU,enrevanche,lesparenthsesnechangentstrictementrien.
Dans une condition compose employant la fois des oprateurs ET et des oprateurs OU, la
prsence de parenthses possde une influence sur le rsultat, tout comme dans le cas dune
expression numrique comportant des multiplications et des additions.
OnenarriveuneautrepropritdesETetdesOU,bienplusintressante.
Spontanment, on pense souvent que ET et OU sexcluent mutuellement, au sens o un problme donn sexprime
soitavecunET,soitavecunOU.Pourtant,cenestpassivident.
Quandfaut-ilouvrirlafentredelasalle?Uniquementsilesconditionslimposent,savoir:
Si il fait trop chaud ET il ne pleut pas Alors
Ouvrir la fentre
Sinon
Fermer la fentre
Finsi
Cettepetiterglepourraittoutaussibientreformulecommesuit:
Si il ne fait pas trop chaud OU il pleut Alors
Fermer la fentre
Sinon
Ouvrir la fentre
Finsi
Cesdeuxformulationssontstrictementquivalentes.Cequinousamnelaconclusionsuivante:
Cours Algorithmique Auteur : Christophe Darmangeat
36
Toute structure de test requrant une condition compose faisant intervenir loprateur ET peut tre
exprime de manire quivalente avec un oprateur OU, et rciproquement.
Ceci est moins surprenant quil ny parat au premier abord. Jetez pour vous en convaincre un il sur les tables de
vrit,etvousnoterezlasymtrieentrecelleduETetcelleduOU.Danslesdeuxtables,ilyatroiscassurquatrequi
mnent un rsultat, et un sur quatre qui mne au rsultat inverse. Alors, rien dtonnant ce quune situation qui
sexprime avec une des tables (un des oprateurs logiques) puisse tout aussi bien tre exprime avec lautre table
(lautreoprateurlogique).Toutelastuceconsistesavoireffectuercorrectementcepassage.
Bien sr, on ne peut pas se contenter de remplacer purement et simplement les ET par des OU; ce serait un peu
facile.Largledquivalenceestlasuivante(onpeutlavrifiersurlexempledelafentre) :
Si A ET B Alors Si NON A OU NON B Alors
Instructions 1 Instructions 2
Sinon Sinon
Instructions 2 Instructions 1
Finsi Finsi
CettergleportelenomdetransformationdeMorgan,dunomdumathmaticienanglaisquil'aformule.
Exercice 4.1
Formulez un algorithme quivalent lalgorithme suivant :
Si Tutu > Toto + 4 OU Tata = OK Alors
Tutu Tutu + 1
Sinon
Tutu Tutu 1
Finsi
Exercice 4.2
Cet algorithme est destin prdire l'avenir, et il doit tre infaillible !
Il lira au clavier lheure et les minutes, et il affichera lheure quil sera une minute plus tard.
Par exemple, si l'utilisateur tape 21 puis 32, l'algorithme doit rpondre : "Dans une minute, il
sera 21 heure(s) 33".
NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vrifier.
Exercice 4.3
De mme que le prcdent, cet algorithme doit demander une heure et en afficher une autre.
Mais cette fois, il doit grer galement les secondes, et afficher l'heure qu'il sera une seconde
plus tard.
Par exemple, si l'utilisateur tape 21, puis 32, puis 8, l'algorithme doit rpondre : "Dans une
seconde, il sera 21 heure(s), 32 minute(s) et 9 seconde(s)".
NB : l encore, on suppose que l'utilisateur entre une date valide.
Cours Algorithmique Auteur : Christophe Darmangeat
37
Exercice 4.4
Un magasin de reprographie facture 0,10 E les dix premires photocopies, 0,09 E les vingt
suivantes et 0,08 E au-del.
Ecrivez un algorithme qui demande lutilisateur le nombre de photocopies effectues et qui
affiche la facture correspondante.
Exercice 4.5
Les habitants de Zorglub paient limpt selon les rgles suivantes :
les hommes de plus de 20 ans paient limpt
les femmes paient limpt si elles ont entre 18 et 35 ans
les autres ne paient pas dimpt
Le programme demandera donc lge et le sexe du Zorglubien, et se prononcera donc ensuite
sur le fait que lhabitant est imposable.
2. Au-del de la logique : le style
Ce titre un peu provocateur (mais nanmoins justifi) a pour but dattirer maintenant votre attention sur un fait
fondamental en algorithmique, fait que plusieurs remarques prcdentes ont dj d vous faire souponner : il nya
jamais une seule manire juste de traiter les structures alternatives. Et plus gnralement, il ny a jamais une seule
manirejustedetraiterunproblme.Entrelesdiffrentespossibilits,quinesontparfoispasmeilleureslesunesque
lesautres,lechoixestuneaffairedestyle.
Cestpourcelaquaveclhabitude,onreconnatlestyledunprogrammeuraussisrementquesilsagissaitdestyle
littraire.
Reprenonsnosoprateursdecomparaisonmaintenantfamiliers,leETetleOU.Enfait,onsaperoitquelonpourrait
toutfaitsenpasser!Parexemple,pourreprendrelexempledelafentredelasalle:
Si il fait trop chaud ET il ne pleut pas Alors
Ouvrir la fentre
Sinon
Fermer la fentre
Finsi
Possdeunparfaitquivalentalgorithmiquesouslaformede:
Si il fait trop chaud Alors
Si il ne pleut pas Alors
Ouvrir la fentre
Sinon
Fermer la fentre
Finsi
Sinon
Fermer la fentre
Finsi
Danscettedernireformulation,nousnavonsplusrecoursuneconditioncompose(maisauprixduntestimbriqu
supplmentaire).
Cours Algorithmique Auteur : Christophe Darmangeat
38
Et comme tout ce qui sexprime par un ET peut aussi tre exprim par un OU, nous en concluons que le OU peut
galementtreremplacparuntestimbriqusupplmentaire.Onpeutainsiposercetterglestylistiquegnrale:
Dans une structure alternative complexe, les conditions composes, limbrication des structures
de tests et lemploi des variables boolennes ouvrent la possibilit de choix stylistiques
diffrents. Lalourdissement des conditions allge les structures de tests et le nombre des
boolens ncessaires ; lemploi de boolens supplmentaires permet dallger les conditions et
les structures de tests, et ainsi de suite.
Exercice 4.6
Les lections lgislatives, en Guignolerie Septentrionale, obissent la rgle suivante :
- lorsque l'un des candidats obtient plus de 50% des suffrages, il est lu ds le premier tour.
- en cas de deuxime tour, peuvent participer uniquement les candidats ayant obtenu au
moins 12,5% des voix au premier tour.
Vous devez crire un algorithme qui permette la saisie des scores de quatre candidats au
premier tour. Cet algorithme traitera ensuite le candidat numro 1 (et uniquement lui) : il
dira s'il est lu, battu, s'il se trouve en ballottage favorable (il participe au second tour en
tant arriv en tte l'issue du premier tour) ou dfavorable (il participe au second tour
sans avoir t en tte au premier tour).
Exercice 4.7
Une compagnie d'assurance automobile propose ses clients quatre familles de tarifs
identifiables par une couleur, du moins au plus onreux : tarifs bleu, vert, orange et rouge.
Le tarif dpend de la situation du conducteur :
- un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit
attribuer le tarif rouge, si toutefois il n'a jamais t responsable d'accident. Sinon, la
compagnie refuse de l'assurer.
- un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de
plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange
s'il n'a jamais provoqu d'accident, au tarif rouge pour un accident, sinon il est refus.
- un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bnficie du
tarif vert s'il n'est l'origine d'aucun accident et du tarif orange pour un accident, du tarif
rouge pour deux accidents, et refus au-del
De plus, pour encourager la fidlit des clients accepts, la compagnie propose un contrat
de la couleur immdiatement la plus avantageuse s'il est entr dans la maison depuis plus
d'un an.
Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) et
de traiter ce problme. Avant de se lancer corps perdu dans cet exercice, on pourra
rflchir un peu et s'apercevoir qu'ils est plus simple qu'il en a l'air (cela s'appelle faire une
analyse !)
Cours Algorithmique Auteur : Christophe Darmangeat
39
Exercice 4.8
Ecrivez un algorithme qui a prs avoir demand un numro de jour, de mois et d'anne
l'utilisateur, renvoie s'il s'agit ou non d'une date valide.
Cet exercice est certes dun manque doriginalit affligeant, mais aprs tout, en
algorithmique comme ailleurs, il faut connatre ses classiques ! Et quand on a fait cela une
fois dans sa vie, on apprcie pleinement lexistence dun type numrique date dans
certains langages).
Il n'est sans doute pas inutile de rappeler rapidement que le mois de fvrier compte 28
jours, sauf si lanne est bissextile, auquel cas il en compte 29. Lanne est bissextile si elle
est divisible par quatre. Toutefois, les annes divisibles par 100 ne sont pas bissextiles, mais
les annes divisibles par 400 le sont. Ouf !
Un dernier petit dtail : vous ne savez pas, pour linstant, exprimer correctement en
pseudo-code lide quun nombre A est divisible par un nombre B. Aussi, vous vous
contenterez dcrire en bons tlgraphistes que A divisible par B se dit A dp B .
Sivousavezcompriscequiprcde,etquel'exercicedeladatenevousposeplusaucunproblme,alorsvoussavez
toutcequ'ilyasavoirsurlestestspouraffrontern'importequellesituation.Non,cen'estpasdeladmagogie!
Malheureusement, nous ne sommes pas tout fait au bout de nos peines ; il reste une dernire structure logique
examiner,etpasdesmoindres
Cours Algorithmique Auteur : Christophe Darmangeat
40
P
PA AR RT TI IE E 5
5
(
(LES BOUCLES)
Les premiers 90% du code prennent les premiers 90% du temps de dveloppement. Les 10% restants prennent
les autres 90% du temps de dveloppement
Tom Cargill
Etayest,onyest,onestarrivs,lavoil,cestBroadway,laquatrimeetdernirestructure:aestlesboucles.Si
vous voulez pater vos amis, vous pouvez galement parler de structures rptitives, voire carrment de structures
itratives.Ici,entrenous,onparleradeboucles.
Les boucles, c'est gnralement le point douloureux de l'apprenti programmeur. C'est l que a coince, car autant il
estassezfaciledecomprendrecommentfonctionnentlesboucles,autantilestsouventlongd'acqurirlesrflexesqui
permettentdeleslaborerjudicieusementpourtraiterunproblmedonn.
Onpeutdireenfaitquelesbouclesconstituentlaseulevraiestructurelogiquecaractristiquedelaprogrammation.Si
vousavezutilisuntableurcommeExcel,parexemple,vousavezsansdoutepumanierdeschosesquivalentesaux
variables(lescellules,lesformules)etauxtests(lafonctionSI).Maislesboucles,a,an'aaucunquivalent.Cela
n'existequedansleslangagesdeprogrammationproprementdits.
Lemaniementdesboucles,s'ilnediffrenciecertespasl'hommedelabte(ilnefauttoutdemmepasexagrer),est
toutdemmecequispareeninformatiqueleprogrammeurdel'utilisateur,mmeaverti.
Alors,vosfuturesetinvitables-difficultssurlesujet,ilyatroisremdes:delarigueur,delapatience,etencore
delarigueur!
1. A quoi cela sert-il donc ?
Prenons le cas dune saisie au clavier (une lecture), o par exemple, le programme pose une question laquelle
lutilisateurdoitrpondreparO(Oui)ouN(Non).Maisttoutard,lutilisateur,factieuxoumaladroit,risquedetaper
autrechosequelarponseattendue.Dslors,leprogrammepeutplantersoitparuneerreurdexcution(parceque
le type de rponse ne correspond pas au type de la variable attendu) soit par une erreur fonctionnelle (il se droule
normalementjusquaubout,maisenproduisantdesrsultatsfantaisistes).
Alors,danstoutprogrammeuntantsoitpeusrieux,onmetenplacecequonappelleuncontrledesaisie,afinde
vrifierquelesdonnesentresauclaviercorrespondentbiencellesattenduesparlalgorithme.
Avuedenez,onpourraitessayeravecunSI.Voyonsvoircequeadonne:
Variable Rep en Caractre
Dbut
Ecrire Voulez vous un caf ? (O/N)
Lire Rep
Si Rep <> O ET Rep <> N Alors
Ecrire Saisie erronne. Recommencez
Lire Rep
FinSi
Fin
Cours Algorithmique Auteur : Christophe Darmangeat
41
Cest impeccable. Du moins tant que lutilisateur a le bon got de ne se tromper quune seule fois, et dentrer une
valeur correcte la deuxime demande. Si lon veut galement btonner en cas de deuxime erreur, il faudrait
rajouterunSI.Etainsidesuite,onpeutrajouterdescentainesdeSI,etcrireunalgorithmeaussilourdquuneblague
desGrossesTtes,onnensortirapas,ilyauratoujoursmoyenquunacharnflanqueleprogrammeparterre.
La solution consistant aligner des SI en pagaille est donc une impasse. La seule issue est donc de flanquer une
structuredeboucle,quiseprsenteainsi:
TantQue boolen
Instructions
FinTantQue
Le principe est simple: le programme arrive sur la ligne du TantQue. Il examine alors la valeur du boolen (qui,
rappelons-le, peut tre une variable boolenne ou, plus frquemment, une condition). Si cette valeur est VRAI, le
programmeexcutelesinstructionsquisuivent,jusqucequilrencontrelaligneFinTantQue.Ilretourneensuitesur
la ligne du TantQue, procde au mme examen, et ainsi de suite. Le mange enchant ne sarrte que lorsque le
boolenprendlavaleurFAUX.
Illustrationavecnotreproblmedecontrledesaisie.Unepremireapproximationdelasolutionconsistecrire:
Variable Rep en Caractre
Dbut
Ecrire Voulez vous un caf ? (O/N)
TantQue Rep <> O ET Rep <> N
Lire Rep
FinTantQue
Fin
L, on a le squelette de lalgorithme correct. Mais de mme quun squelette ne suffit pas pour avoir un tre vivant
viable, il va nous falloir ajouter quelques muscles et organes sur cet algorithme pour quil fonctionne correctement.
Sonprincipaldfautestdeprovoqueruneerreurchaqueexcution.Eneffet,lexpressionboolennequifigureaprs
leTantQueinterrogelavaleurdelavariableRep.Malheureusement,cettevariable,sielleatdclare,napast
affecte avant lentre dans la boucle. On teste donc une variable qui na pas de valeur, ce qui provoque larrt
immdiat de lexcution. Pour viter ceci, on na pas le choix: il faut que la variable Rep ait dj t affecte avant
quonenarriveaupremiertourdeboucle.Pourcela,onpeutfaireunepremirelecturedeRepavantlaboucle.Dans
cecas,celle-cineserviraquencasdemauvaisesaisielorsdecettepremirelecture.Lalgorithmedevientalors:
VariableRepenCaractre
Dbut
EcrireVoulezvousuncaf?(O/N)
LireRep
TantQueRep<>OETRep<>N
LireRep
FinTantQue
Fin
Uneautrepossibilit,frquemmentemploye,consistenepaslire,maisaffecterarbitrairementlavariableavantla
boucle. Arbitrairement? Pas tout fait, puisque cette affectation doit avoir pour rsultat de provoquer lentre
obligatoire dans la boucle. Laffectation doit donc faire en sorte que le boolen soit mis VRAI pour dclencher le
premiertourdelaboucle.Dansnotreexemple,onpeutdoncaffecterRepavecnimportequellevaleur,hormisO
etN:cardanscecas,lexcutionsauteraitlaboucle,etRepneseraitpasdutoutlueauclavier.Celadonnerapar
exemple:
Cours Algorithmique Auteur : Christophe Darmangeat
42
Variable Rep en Caractre
Dbut
Rep X
Ecrire Voulez vous un caf ? (O/N)
TantQue Rep <> O ET Rep <> N
Lire Rep
FinTantQue
Fin
Cettemaniredeprocderestconnatre,carelleestemployetrsfrquemment.
Ilfautremarquerquelesdeuxsolutions(lectureinitialedeRependehorsdelaboucleouaffectationdeRep)rendent
toutesdeuxlalgorithmesatisfaisant,maisprsententunediffrenceassezimportantedansleurstructurelogique.
Eneffet,si lonchoisitdeffectuerunelecturepralabledeRep,laboucleultrieureseraexcuteuniquementdans
lhypothse dune mauvaise saisie initiale. Si lutilisateur saisit une valeur correcte la premire demande de Rep,
lalgorithmepasserasurlabouclesansentrerdedans.
Enrevanche,avecladeuximesolution(celleduneaffectationpralabledeRep),lentredelaboucleestforce,et
lexcutiondecelle-ci,aumoinsunefois,estrendueobligatoirechaqueexcutionduprogramme.Dupointdevue
delutilisateur,cettediffrenceesttoutfaitmineure;etlalimite,ilnelaremarquerammepas.Maisdupointde
vueduprogrammeur,ilimportedebiencomprendrequelescheminementsdesinstructionsneserontpaslesmmes
dansuncasetdanslautre.
Pourterminer,remarquonsquenouspourrionspeaufinernossolutionsenajoutantdesaffichagesdelibellsquifont
encore un peu dfaut. Ainsi, si lon est un programmeur zl, la premire solution (celle qui inclut deux lectures de
Rep,uneendehorsdelaboucle,lautrelintrieur)pourraitdevenir:
Variable Rep en Caractre
Dbut
Ecrire Voulez vous un caf ? (O/N)
Lire Rep
TantQue Rep <> O ET Rep <> N
Ecrire Vous devez rpondre par O ou N. Recommencez
Lire Rep
FinTantQue
Ecrire Saisie accepte
Fin
Quantladeuximesolution,ellepourradevenir:
Variable Rep en Caractre
Dbut
Rep X
Ecrire Voulez vous un caf ? (O/N)
TantQue Rep <> O ET Rep <> N
Lire Rep
Si Rep <> O ET Rep <> N Alors
Ecrire Saisie Errone, Recommencez
FinSi
FinTantQue
Fin
Bon,ehbienvousallezpouvoirfairedechouettesalgorithmes,djrienquaveca
Combiendefoisaucoursdunecarrire(brillante)dedveloppeura-t-onbesoinderangerdesvaleursdansunordre
donn?Cestinimaginable.Aussi,pluttquavoirrinventerchaquefoislaroue,lefusiltirerdanslescoins,lefil
couper le roquefort et la poudre maquiller, vaut-il mieux avoir assimil une ou deux techniques solidement
prouves,mmesiellesparaissentunpeuarduesaudpart.
Ilexisteplusieursstratgiespossiblespourtrierleslmentsduntableau;nousenverronsdeux:letriparinsertion,
etletribulles.
Commenonsparletriparinsertion.
Admettonsquelebutdelamanuvresoitdetrieruntableaude12lmentsdanslordrecroissant.Latechniquedu
triparslectionestlasuivante:onmetenbonnepositionllmentnumro1,cest--direlepluspetit.Puisonmeten
bonnepositionllmentsuivant.Etainsidesuitejusquaudernier.Parexemple,silonpartde:
45 122 12 3 21 78 64 53 89 28 84 46
Oncommenceparrechercher,parmiles12valeurs,quelestlepluspetitlment,etoilsetrouve.Onlidentifieen
quatrime position (cest le nombre 3), et on lchange alors avec le premier lment (le nombre 45). Le tableau
devientainsi:
3 122 12 45 21 78 64 53 89 28 84 46
Onrecommencechercherlepluspetitlment,maiscettefois,seulementpartirdudeuxime(puisquelepremier
estmaintenantcorrect,onnytoucheplus).Onletrouveentroisimeposition(cestlenombre12).Onchangedonc
ledeuximeavecletroisime:
Cours Algorithmique Auteur : Christophe Darmangeat
56
3 12 122 45 21 78 64 53 89 28 84 46
Onrecommencechercherlepluspetitlmentpartirdutroisime(puisquelesdeuxpremierssontmaintenantbien
placs),etonleplacecorrectement,enlchangeant,cequidonnerainfine:
3 12 21 45 122 78 64 53 89 28 84 46
Etcetera,etcetera,jusqulavantdernier.
Enbonfranaisnouspourrionsdcrireleprocessusdelamaniresuivante:
Boucle principale: prenons comme point de dpart le premier lment, puis le second, etc, jusqu lavant
dernier.
Bouclesecondaire:partirdecepointdedpartmouvant,recherchonsjusqulafindutableauquelestleplus
petitlment.Unefoisquenouslavonstrouv,nouslchangeonsaveclepointdedpart.
Celascrit:
Pour i 0 10 boucle principale : le point de dpart se dcale chaque tour
posmini i on considre provisoirement que t(i) est le plus petit lment
Pour j i + 1 11 on examine tous les lments suivants
Si t(j) < t(posmini) Alors
posmini j
Finsi
j suivant
A cet endroit, on sait maintenant o est le plus petit lment. Il ne reste plus qu' effectuer la permutation.
temp t(posmini)
t(posmini) t(i)
t(i) temp
i suivant
2. Un exemple de flag : la recherche dans un tableau
Nousallonsmaintenantnousintresseraumaniementhabiledunevariableboolenne:latechniquediteduflag.
Leflag,enanglais,estunpetitdrapeau,quivaresterbaissaussilongtempsquelvnementattenduneseproduit
pas.Et,aussittquecetvnementalieu,lepetitdrapeauselve(lavariableboolennechangedevaleur).Ainsi,la
valeurfinaledelavariableboolennepermetauprogrammeurdesavoirsilvnementaeulieuounon.
Toutcecipeutvoussemblerunpeufumeux,maisceladevraitsclairerlaidedunexempleextrmementfrquent:
la recherche de loccurrence dune valeur dans un tableau. On en profitera au passage pour corriger une erreur
particulirementfrquentechezleprogrammeurdbutant.
Soituntableaucomportant,disons,20valeurs.Londoitcrireunalgorithmesaisissantunnombreauclavier,etqui
informelutilisateurdelaprsenceoudelabsencedelavaleursaisiedansletableau.
Cours Algorithmique Auteur : Christophe Darmangeat
57
La premire tape, vidente, consiste crire les instructions de lecture / criture, et la boucle car il y en a
manifestementunedeparcoursdutableau:
Dim Tab(19) en Numrique
Dim N en Numrique
Ecrire "Entrez la valeur rechercher"
Lire N
Pour i 0 19
???
i suivant
Il nous reste combler les points d'interrogation de la boucle Pour. videmment, il va falloir comparer N chaque
lment du tableau : si les deux valeurs sont gales, alors bingo, N fait partie du tableau. Cela va se traduire, bien
entendu,parunSiAlorsSinon.Etvoilleprogrammeurraisonnanthtivementquisevautreencrivant:
Dim Tab(19) en Numrique
Dim N en Numrique
Ecrire "Entrez la valeur rechercher"
Lire N
Pour i 0 19
Si N = Tab(i) Alors
Ecrire "N fait partie du tableau"
Sinon
Ecrire "N ne fait pas partie du tableau"
FinSi
i suivant
Etpatatras,cetalgorithmeestunevritablecatastrophe.
Ilsuffitd'ailleursdelefairetournermentalementpours'enrendrecompte.Dedeuxchosesl'une:oubienlavaleurN
figure dans le tableau, ou bien elle n'y figure pas. Mais dans tous les cas, l'algorithmenedoitproduirequ'uneseule
rponse,quelquesoitlenombred'lmentsquecompteletableau.Or,l'algorithmeci-dessusenvoiel'cranautant
demessagesqu'ilyadevaleursdansletableau,enl'occurrencepasmoinsde20!
Ilyadoncuneerreurmanifestedeconception:l'crituredumessagenepeutsetrouverl'intrieurdelaboucle:elle
doitfigurerl'extrieur.Onsaitsilavaleurtaitdansletableauounonuniquementlorsquelebalayagedutableauest
entirementaccompli.
Nous rcrivons donc cet algorithme en plaant le test aprs la boucle. Faute de mieux, on se contentera de faire
dpendrepourlemomentlarponsed'unevariableboolennequenousappelleronsTrouv.
Dim Tab(19) en Numrique
Dim N en Numrique
Ecrire "Entrez la valeur rechercher"
Lire N
Pour i 0 19
???
i suivant
Si Trouv Alors
Ecrire "N fait partie du tableau"
Cours Algorithmique Auteur : Christophe Darmangeat
58
Sinon
Ecrire "N ne fait pas partie du tableau"
FinSi
Ilnenousresteplusqu'grerlavariableTrouv.Cecisefaitendeuxtapes.
un test figurant dans la boucle, indiquant lorsque la variable Trouv doit devenir vraie ( savoir, lorsque la
valeurNestrencontredansletableau).Etattention:letestestasymtrique.Ilnecomportepasde"sinon".
Onreviendraldessusdansuninstant.
Last,butnotleast,l'affectationpardfautdelavariableTrouv,dontlavaleurdedpartdoittrevidemment
Faux.
Autotal,l'algorithmecompletetjuste!donne:
Dim Tab(19) en Numrique
Dim N en Numrique
Ecrire "Entrez la valeur rechercher"
Lire N
Trouv Faux
Pour i 0 19
Si N = Tab(i) Alors
Trouv Vrai
FinSi
i suivant
Si Trouv Alors
Ecrire "N fait partie du tableau"
Sinon
Ecrire "N ne fait pas partie du tableau"
FinSi
Mditonsunpeusurcetteaffaire.
La difficult est de comprendre que dans une recherche, le problme ne se formule pas de la mme manire selon
qu'onleprendparunboutouparunautre.Onpeutrsumerl'affaireainsi:ilsuffitqueNsoitgaluneseulevaleur
de Tab pour qu'elle fasse partie du tableau. En revanche, il faut qu'elle soit diffrente de toutes les valeurs de Tab
pourqu'ellen'enfassepaspartie.
Voillaraisonquinousobligepasserparunevariableboolenne,undrapeauquipeutselever,maisjamaisse
rabaisser.Etcettetechniquedeflag(quenouspourrionslgammentsurnommergestionasymtriquedevariable
boolenne)doittremiseenuvrechaquefoisquelonsetrouvedevantpareillesituation.
Autrementdit,connatrecetypederaisonnementestindispensable,etsavoirlereproduirebonescientnel'estpas
moins.
3. Tri de tableau + flag = tri bulles
Etmaintenant,nousenarrivonslaformulemagique:tridetableau+flag=tribulles.
Lidededpartdutribullesconsistesedirequuntableautrienordrecroissant,cestuntableaudanslequeltout
lmentestpluspetitqueceluiquilesuit.
Eneffet,prenonschaquelmentduntableau,etcomparons-leavecllmentquilesuit.Silordrenestpasbon,on
permute ces deux lments. Et on recommence jusqu ce que lon nait plus aucune permutation effectuer. Les
Cours Algorithmique Auteur : Christophe Darmangeat
59
lments les plus grands remontent ainsi peu peu vers les dernires places, ce qui explique la charmante
dnomination de tri bulle. Comme quoi lalgorithmique nexclut pas un minimum syndical de sens potique.
Enquoiletribullesimplique-t-illutilisationdunflag?Ehbien,parcequonnesaitjamaisparavancecombiende
remontesdebullesondoiteffectuer.Enfait,toutcequonpeutdire,cestquondevraeffectuerletrijusqucequil
nyaitplusdlmentsquisoientmalclasss.Ceciesttypiquementuncasdequestionasymtrique:ilsuffitque
deuxlmentssoientmalclassspourquuntableaunesoitpastri.Enrevanche,ilfautquetousleslmentssoient
bienrangspourqueletableausoittri.
NousbaptiseronsleflagYapermute,carcettevariableboolennevanousindiquersinousvenonsounondeprocder
unepermutationaucoursdudernierbalayagedutableau(danslecascontraire,cestsignequeletableauesttri,et
doncquonpeutarrterlamachinebulles).Laboucleprincipaleseraalors:
TantQue Yapermute
FinTantQue
Que va-t-on faire lintrieur de la boucle? Prendre les lments du tableau, du premier jusqu lavant-dernier, et
procderunchangesincessaire.Cestparti:
TantQue Yapermute
Pour i 0 10
Si t(i) > t(i+1) alors
temp t(i)
t(i) t(i+1)
t(i+1) temp
Finsi
i suivant
FinTantQue
Maisilnefautpasoublierundtailcapital:lagestiondenotreflag.Lide,cestquecettevariablevanoussignalerle
faitquilyaeuaumoinsunepermutationeffectue.Ilfautdonc:
lui attribuer la valeur Vrai ds quune seule permutation a t faite (il suffit quil y en ait eu une seule pour
quondoivetoutrecommencerencoreunefois).
laremettreFauxchaquetourdelaboucleprincipale(quandonrecommenceunnouveautourgnralde
bulles,ilnyapasencoreeudlmentschangs),
dernierpoint,ilnefautpasoublierdelancerlaboucleprincipale,etpourceladedonnerlavaleurVraiauflag
autoutdpartdelalgorithme.
Lasolutioncompltedonnedonc:
Yapermut Vrai
TantQue Yapermut
Yapermut Faux
Pour i 0 10
Si t(i) > t(i+1) alors
temp t(i)
t(i) t(i+1)
t(i+1) temp
Yapermut Vrai
Finsi
i suivant
FinTantQue
Cours Algorithmique Auteur : Christophe Darmangeat
60
Aurisquedenousrpter,lacomprhensionetlamatriseduprincipeduflagfontpartiedelarsenalduprogrammeur
bienarm.
4. La recherche dichotomique
Nous allons terminer ce chapitre migraineux par une technique clbre de recherche, qui rvle toute son utilit
lorsquelenombred'lmentsesttrslev.Parexemple,imaginonsquenousayonsunprogrammequidoivevrifier
si un mot existe dans le dictionnaire. Nous pouvonssupposerque le dictionnaire a t pralablement entr dans un
tableau(raisond'unmotparemplacement).Cecipeutnousmener,disonslalouche,40000mots.
Unepremiremaniredevrifiersiunmotsetrouvedansledictionnaireconsisteexaminersuccessivementtousles
mots du dictionnaire, du premier au dernier, et les comparer avec le mot vrifier. a marche, mais cela risque
d'trelong:silemotnesetrouvepasdansledictionnaire,leprogrammenelesauraqu'aprs40000toursdeboucle
!Etmmesilemotfiguredansledictionnaire,larponseexigeratoutdemmeenmoyenne20000toursdeboucle.
C'estbeaucoup,mmepourunordinateur.
Or,ilyauneautremaniredechercher,bienplusintelligentepourrait-ondire,etquimetprofitlefaitquedansun
dictionnaire, les mots sont tris par ordre alphabtique. D'ailleurs, un tre humain qui cherche un mot dans le
dictionnairenelitjamaistouslesmots,dupremieraudernier:ilutiliseluiaussilefaitquelesmotssonttris.
Pourunemachine, quelle est la manire la plus rationnelle de chercher dansun dictionnaire ?C'est decomparer le
motvrifieraveclemotquisetrouvepilepoilaumilieududictionnaire.Silemotvrifierestantrieurdansl'ordre
alphabtique, on sait qu'on devra le chercher dornavantdans la premire moiti du dico. Sinon, onsait maintenant
qu'ondevralechercherdansladeuximemoiti.
A partir de l, on prend la moiti de dictionnaire qui nous reste, et on recommence : on compare le mot chercher
avec celui qui se trouve au milieu du morceau de dictionnaire restant. On carte la mauvaise moiti, et on
recommence,etainsidesuite.
Aforcedecoupernotredictionnaireendeux,puisencoreendeux,etc.onvafinirparseretrouveravecdesmorceaux
quinecontiennentplusqu'unseulmot.Etsionn'estpastombsurlebonmotunmomentouunautre,c'estquele
motvrifiernefaitpaspartiedudictionnaire.
Regardonscequeceladonneentermedenombred'oprationseffectuer,enchoisissantlepirecas:celuiolemot
estabsentdudictionnaire.
Audpart,oncherchelemotparmi40000.
Aprsletestn1,onnelechercheplusqueparmi20000.
Aprsletestn2,onnelechercheplusqueparmi10000.
Aprsletestn3,onnelechercheplusqueparmi5000.
etc.
Aprsletestn15,onnelechercheplusqueparmi2.
Aprsletestn16,onnelechercheplusqueparmi1.
Etl,onsaitquelemotn'existepas.
Moralit:onaobtenunotrerponseen16oprationscontre40000prcdemment!Iln'yapasphotosurl'cartde
performancesentrelatechniquebarbareetlatechniquefute.Attention,toutefois,mmesic'estvident,rptons-le
avecforce:larecherchedichotomiquenepeuts'effectuerquesurdeslmentspralablementtris.
Cours Algorithmique Auteur : Christophe Darmangeat
61
Ehbienmaintenantquonvousaexpliqucommentfaire,vousn'avezplusqu'traduire!
Aurisquedenousrpter,lacomprhensionetlamatriseduprincipeduflagfontpartiedelarsenalduprogrammeur
bienarm.
Exercice 7.1
Ecrivez un algorithme qui permette de saisir un nombre quelconque de valeurs, et qui les
range au fur et mesure dans un tableau. Le programme, une fois la saisie termine, doit dire
si les lments du tableau sont tous conscutifs ou non.
Par exemple, si le tableau est : 12 - 13 - 14 - 15 - 16 - 17 - 18, ses lments sont tous conscutifs.
Si le tableau est : 9 - 10 - 11 - 15 - 16 - 17, ses lments ne sont pas tous conscutifs.
Exercice 7.2
Ecrivez un algorithme qui trie un tableau dans lordre dcroissant
Vous crirez bien entendu deux versions de cet algorithme, l'une employant le tri par
insertion, l'autre le tri bulles.
Exercice 7.3
Ecrivez un algorithme qui inverse lordre des lments dun tableau dont on suppose qu'il a
t pralablement saisi ( les premiers seront les derniers )
Exercice 7.4
Ecrivez un algorithme qui permette lutilisateur de supprimer une valeur dun tableau
pralablement saisi. Lutilisateur donnera lindice de la valeur quil souhaite supprimer.
Attention, il ne sagit pas de remettre une valeur zro, mais bel et bien de la supprimer du
tableau lui-mme ! Si le tableau de dpart tait
12 8 4 45 64 9 2 7
Et que lutilisateur souhaite supprimer la valeur dindice 4, le nouveau tableau sera :
12 8 4 45 9 2 - 7
Exercice 7.5
Ecrivez l'algorithme qui recherche un mot saisi au clavier dans un dictionnaire. Le dictionnaire
est suppos tre cod dans un tableau pralablement rempli et tri.
Cours Algorithmique Auteur : Christophe Darmangeat
62
P
PA AR RT TI IE E 8 (TABLEAUX MULTIDIMENSIONNELS)
Le vrai problme nest pas de savoir si les machines pensent, mais de savoir si les hommes pensent
B.F.Skinner
La question de savoir si un ordinateur peut penser n'est pas plus intressante que celle de savoir si un sous-
marin peut nager
Edgar W. Dijkstra
Ceci nest pas un drglement de votre tlviseur. Nous contrlons tout, nous savons tout, et les phnomnes
paranormaux que vous constatez sont dus au fait que vous tes passs dans la quatrime dimension (musique
angoissante:tintintin).
Oui,enfinbon,avantdattaquerlaquatrime,onvadjsecoltinerladeuxime.
1. Pourquoi plusieurs dimensions ?
Une seule ne suffisait-elle pas dj amplement notre bonheur, demanderez-vous? Certes, mais vous allez voir
quavecdeux(etdavantageencore)cestcarrmentlenirvana.
Prenons le cas de la modlisation dun jeu de dames, et du dplacement des pions sur le damier. Rappelons quun
pionquiestsurunecaseblanchepeutsedplacer(poursimplifier)surlesquatrecasesblanchesadjacentes.
Avec les outils que nous avons abords jusque l, le plus simple serait videmment de modliser le damier sous la
formeduntableau.Chaquecaseestunemplacementdutableau,quicontientparexemple0sielleestvide,et1sily
a un pion. On attribuecomme indicesaux cases les numros 1 8pour la premire ligne, 9 16pour la deuxime
ligne,etainsidesuitejusqu64.
Unpionplacdanslacasenumroi,autrementditlavaleur1deCases(i),peutbougerverslescasescontigusen
diagonale. Cela va nous obliger de petites acrobaties intellectuelles: la case situe juste au-dessus de la case
numroiayantcommeindicei-8,lescasesvalablessontcellesdindicei-7eti-9.Demme,lacasesituejusteen
dessousayantcommeindicei+8,lescasesvalablessontcellesdindicei+7eti+9.
Bien sr, on peut fabriquer tout un programme comme cela, mais le moins quon puisse dire est que cela ne facilite
paslaclartdelalgorithme.
Ilseraitvidemmentplussimpledemodliserundamierparundamier!
Cours Algorithmique Auteur : Christophe Darmangeat
63
2. Tableaux deux dimensions
Linformatique nous offre la possibilit de dclarer des tableaux dans lesquels les valeurs ne sont pas repres par
uneseule,maispardeuxcoordonnes.
Unteltableausedclareainsi:
Tableau Cases(7, 7) en Entier
Cela veut dire: rserve moi un espace de mmoire pour 8 x 8 entiers, et quand on aura besoin de lune de ces
valeurs,onlesreprerapardeuxindices(commelabataillenavale,ouExcel,laseulediffrencetantquepourles
coordonnes,onnutilisepasdelettres,justedeschiffres).
Pournotreproblmededames,leschosesvontsrieusementsclaircir.Lacasequicontientlepionestdornavant
Cases(i,j).EtlesquatrecasesdisponiblessontCases(i-1,j-1),Cases(i-1,j+1),Cases(i+1,j-1)etCases(i+1,j+1).
REMARQUE ESSENTIELLE
Il ny a aucune diffrence qualitative entre un tableau deux dimensions ( i, j ) et un tableau
une dimension ( i * j ). De mme que le jeu de dames quon vient dvoquer, tout problme qui
peut tre modlis dune manire peut aussi tre modlis de lautre. Simplement, lune ou
lautre de ces techniques correspond plus spontanment tel ou tel problme, et facilite donc
(ou complique, si on a choisi la mauvaise option) lcriture et la lisibilit de lalgorithme.
Une autre remarque: une question classique propos des tableaux deux dimensions est de savoir si le premier
indicereprsenteleslignesouledeuximelescolonnes,oulinverse.Nousnerpondronspascettequestionnon
parce que nous avons dcid de bouder, mais parce quelle na aucun sens. Lignes et Colonnes sont des
conceptsgraphiques,visuels,quisappliquentdesobjetsdumonderel;lesindicesdestableauxnesontquedes
coordonneslogiques,pointantsurdesadressesdemmoirevive.Sicelanevousconvaincpas,pensezunjeude
bataille navale classique: les lettres doivent-elles dsigner les lignes et les chiffres les colonnes? Aucune
importance!Chaquejoueurpeutmmechoisiruneconventiondiffrente,aucuneimportance!Lessentielestquune
foisuneconventionchoisie,unjoueurconservelammetoutaulongdelapartie,bienentendu.
Exercice 9.2
Ecrivez un algorithme qui demande un mot lutilisateur et qui affiche lcran le nombre
de lettres de ce mot (c'est vraiment tout bte).
Exercice 9.3
Ecrivez un algorithme qui demande une phrase lutilisateur et qui affiche lcran le
nombre de mots de cette phrase. On suppose que les mots ne sont spars que par des
espaces (et c'est dj un petit peu moins bte).
Exercice 9.4
Ecrivez un algorithme qui demande une phrase lutilisateur et qui affiche lcran le
nombre de voyelles contenues dans cette phrase.
On pourra crire deux solutions. La premire dploie une condition compose bien
fastidieuse. La deuxime, en utilisant la fonction Trouve, allge considrablement
l'algorithme.
Exercice 9.5
Ecrivez un algorithme qui demande une phrase lutilisateur. Celui-ci entrera ensuite le rang
dun caractre supprimer, et la nouvelle phrase doit tre affiche (on doit rellement
supprimer le caractre dans la variable qui stocke la phrase, et pas uniquement lcran).
Cours Algorithmique Auteur : Christophe Darmangeat
70
Exercice 9.6 - Cryptographie 1
Un des plus anciens systmes de cryptographie (aisment dchiffrable) consiste dcaler les
lettres dun message pour le rendre illisible. Ainsi, les A deviennent des B, les B des C, etc.
Ecrivez un algorithme qui demande une phrase lutilisateur et qui la code selon ce principe.
Comme dans le cas prcdent, le codage doit seffectuer au niveau de la variable stockant la
phrase, et pas seulement lcran.
3. Trois fonctions numriques classiques
Partie Entire
Unefonctionextrmementrpandueestcellequipermetdercuprerlapartieentiredunnombre:
Aprs : A Ent(3,228) A vaut 3
Cette fonction est notamment indispensable pour effectuer le clbrissime test de parit (voir exercice dans pas
longtemps).
Modulo
Cette fonction permet de rcuprer le reste de la division dun nombre par un deuxime nombre. Par exemple:
A Mod(10,3) A vaut 1 car 10 = 3*3 + 1
B Mod(12,2) B vaut 0 car 12 = 6*2
C Mod(44,8) C vaut 4 car 44 = 5*8 + 4
Cette fonction peut paratre un peu bizarre, est rserve aux seuls matheux. Mais vous aurez l aussi loccasion de
voirdanslesexercicesvenirquecenestpaslecas.
Gnration de nombres alatoires
Uneautrefonctionclassique,cartrsutile,estcellequignreunnombrechoisiauhasard.
Touslesprogrammesdejeu,oupresque,ontbesoindecetypedoutils,quilsagissedesimulerunlancerdedsou
le dplacement chaotique du vaisseau spatial de lenfer de la mort pilot par linfme Zorglub, qui veut faire main
bassesurlUnivers(heureusementvousteslpourlenempcher,ouf).
Mais il ny a pas que les jeux qui ont besoin de gnrer des nombres alatoires. La modlisation (physique,
gographique, conomique, etc.) a parfois recours des modles dits stochastiques. Ce sont des modles dans
lesquels les variables se dduisent les unes des autres par des relations dterministes (autrement dit des calculs),
maisolonsimulelapartdincertitudeparunefourchettedehasard.
Par exemple, un modle dmographique supposera quune femme a en moyenne x enfants au cours de sa vie,
mettons1,5.Maisilsupposeraaussiquesurunepopulationdonne,cechiffrepeutfluctuerentre1,35et1,65(sion
Cours Algorithmique Auteur : Christophe Darmangeat
71
laisse une part dincertitude de 10%). Chaque anne, cest--dire chaque srie de calcul des valeurs du modle, on
auraainsibesoindefairechoisirlamachineunnombreauhasardcomprisentre1,35et1,65.
Danstousleslangages,cettefonctionexisteetproduitlersultatsuivant:
Aprs : Toto Alea() On a : 0 =< Toto < 1
En fait, on se rend compte avec un tout petit peu de pratique que cette fonction Ala peut nous servir pour gnrer
nimporte quel nombre compris dans nimporte quelle fourchette. Nous savons bien que nos lecteurs ne sont gure
matheux,maisl,onrestefranchementendeduniveaudefeuleBEPC:
siAleagnreunnombrecomprisentre0et1,Aleamultipliparzproduitunnombreentre0etz.Donc,il
fautestimerlalargeurdelafourchettevoulueetmultiplierAleaparcettelargeurdsire.
ensuite, si la fourchette ne commence pas zro, il va suffire dajouter ou de retrancher quelque chose
pourcalerlafourchetteaubonendroit.
Parexemple,sijeveuxgnrerunnombreentre1,35et1,65;lafourchettemesure0,30delarge.Donc:
0=<Alea()*0,30<0,30
Ilsuffitdajouter1,35pourobtenirlafourchettevoulue.Sioncritque:
TotoAlea()*0,30+1,35
Totoaurabienunevaleurcompriseentre1,35et1,65.Etletourestjou!
Bon,ilestgrandtempsquevousmontriezcequevousavezappris
Exercice 9.7 - Cryptographie 2 - le chiffre de Csar
Une amlioration (relative) du principe prcdent consiste oprer avec un dcalage non
de 1, mais dun nombre quelconque de lettres. Ainsi, par exemple, si lon choisit un
dcalage de 12, les A deviennent des M, les B des N, etc.
Ralisez un algorithme sur le mme principe que le prcdent, mais qui demande en
plus quel est le dcalage utiliser. Votre sens proverbial de l'lgance vous interdira bien
sr une srie de vingt-six "Si...Alors"
Exercice 9.8 - Cryptographie 3
Une technique ultrieure de cryptographie consista oprer non avec un dcalage
systmatique, mais par une substitution alatoire. Pour cela, on utilise un alphabet-cl,
dans lequel les lettres se succdent de manire dsordonne, par exemple :
HYLUJPVREAKBNDOFSQZCWMGITX
Cest cette cl qui va servir ensuite coder le message. Selon notre exemple, les A
deviendront des H, les B des Y, les C des L, etc.
Ecrire un algorithme qui effectue ce cryptage (lalphabet-cl sera saisi par lutilisateur, et
on suppose qu'il effectue une saisie correcte).
Cours Algorithmique Auteur : Christophe Darmangeat
72
Exercice 9.9 - Cryptographie 4 - le chiffre de Vigenre
Un systme de cryptographie beaucoup plus difficile briser que les prcdents fut
invent au XVIe sicle par le franais Vigenre. Il consistait en une combinaison de
diffrents chiffres de Csar.
On peut en effet crire 25 alphabets dcals par rapport lalphabet normal :
- lalphabet qui commence par B et finit par YZA
- lalphabet qui commence par C et finit par ZAB
- etc.
Le codage va seffectuer sur le principe du chiffre de Csar : on remplace la lettre
dorigine par la lettre occupant la mme place dans lalphabet dcal.
Mais la diffrence du chiffre de Csar, un mme message va utiliser non un, mais
plusieurs alphabets dcals. Pour savoir quels alphabets doivent tre utiliss, et dans
quel ordre, on utilise une cl.
Si cette cl est VIGENERE et le message Il faut coder cette phrase , on procdera
comme suit :
La premire lettre du message, i , est la 9e lettre de lalphabet normal. Elle doit tre
code en utilisant lalphabet commenant par la premire lettre de la cl, V . Dans cet
alphabet, la 9e lettre est le d . i devient donc d
La deuxime lettre du message, l , est la 11e lettre de lalphabet normal. Elle doit tre
code en utilisant lalphabet commenant par la deuxime lettre de la cl, I . Dans cet
alphabet, la 11e lettre est le s . l devient donc s , etc.
Quand on arrive la dernire lettre de la cl, on recommence la premire.
Ecrire lalgorithme qui effectue un cryptage de Vigenre, en demandant bien sr au
dpart la cl lutilisateur.
Exercice 9.10
Ecrivez un algorithme qui demande un nombre entier lutilisateur. Lordinateur affiche
ensuite le message Ce nombre est pair ou Ce nombre est impair selon le cas.
Cours Algorithmique Auteur : Christophe Darmangeat
73
Exercice 9.11
Ecrivez les algorithmes qui gnrent un nombre Glup alatoire tel que
a) 0 =< Glup < 2
b) 1 =< Glup < 1
c) 1,35 =< Glup < 1,65
d) Glup mule un d six faces
e) 10,5 =< Glup < +6,5
f) Glup mule la somme du jet simultan de deux ds six faces
4. Les fonctions de conversion
Dernire grande catgorie de fonctions, l aussi disponibles dans tous les langages, car leur rle est parfois
incontournable,lesfonctionsditesdeconversion.
Rappelez-vous ce quenous avons vudans les premires pages de cecours: il existe diffrents typesde variables,
quidterminentnotammentletypedecodagequiserautilis.Prenonslechiffre3.Sionlestockedansunevariable
de type alphanumrique, il sera cod en tant que caractre, sur un octet. Si en revanche on le stocke dans une
variabledetypeentier,ilseracodsurdeuxoctets.Etlaconfigurationdesbitsseracompltementdiffrentedansles
deuxcas.
Uneconclusionvidente,etsurlaquelleonadjeul'occasiond'insister,c'estqu'onnepeutpasfairen'importequoi
avecn'importequoi,etqu'onnepeutpasparexemplemultiplier"3"et"5",si3et5sontstocksdansdesvariablesde
typecaractre.
Pourquoinepasentirerlesconsquences,etstockerconvenablementlesnombresdansdesvariablesnumriques,
lescaractresdansdesvariablesalphanumriques,commenousl'avonstoujoursfait?
Parcequ'ilyadessituationsoonn'apaslechoix!Nousallonsvoirdslechapitresuivantunmodedestockage(les
fichiers textes) o toutes les informations, quelles qu'elles soient, sont obligatoirement stockes sous forme de
caractres.Dslors,sil'onveutpouvoirrcuprerdesnombresetfairedesoprationsdessus,ilvabienfalloirtre
capabledeconvertirceschanesennumriques.
Aussi,tousleslangagesproposent-ilsunepalettedefonctionsdestinesoprerdetellesconversions.Ontrouvera
au moins une fonction destine convertir une chane en numrique (appelons-la Cnum en pseudo-code), et une
convertissantunnombreencaractre(Ccar).
Cours Algorithmique Auteur : Christophe Darmangeat
74
P
PA AR RT TI IE E 10 (LES FICHIERS)
On ne peut pas davantage crer des fichiers numriques non copiables que crer de leau non humide
Bruce Schneier
Jusqu prsent, les informations utilises dans nos programmes ne pouvaient provenir que de deux sources: soit
ellestaientincluesdanslalgorithmelui-mme,parleprogrammeur,soitellestaiententresencoursderoutepar
lutilisateur.Maisvidemment,celanesuffitpascomblerlesbesoinsrelsdesinformaticiens.
Imaginons que lon veuille crire un programme grant un carnet dadresses. Dune excution du programme
lautre,lutilisateur doit pouvoir retrouver son carnet jour, avec les modifications quil y a apportes la dernire fois
quil a excut le programme. Les donnes du carnet dadresse ne peuvent donc tre inclues dans lalgorithme, et
encoremoinstreentresauclavierchaquenouvelleexcution!
Les fichiers sont l pour combler ce manque. Ils servent stocker des informations de manire permanente, entre
deux excutions dun programme. Car si les variables, qui sont, rappelons-le des adresses de mmoire vive,
disparaissent chaque fin dexcution, les fichiers, eux sont stocks sur des priphriques mmoire de masse
(disquette,disquedur,CDRom).
1. Organisation des fichiers
Vousconnaisseztouslecoupdespapous:chezlespapous,i yalespapouspapasetlespapouspaspapas.Chez
lespapouspapas,ilyalespapouspapaspouxetlespapouspapaspaspoux,etc.Ehbienlesfichiers,c'estun
peupareil:ilyadescatgories,etdanslescatgories,dessortes,etdanslessortesdesespces.Essayonsdoncde
dbroussaillerunpeutoutcela...
l
Unpremiergrandcritre,quidiffrencielesdeuxgrandescatgoriesdefichiers,estlesuivant:lefichierest-ilounon
organissousformedelignessuccessives? Sioui,celasignifie vraisemblablementquecefichiercontientlemme
genred'informationchaqueligne.Ceslignessontalorsappelesdesenregistrements.
Afin d'illuminer ces propos obscurs, prenons le cas classique, celui d'un carnet d'adresses. Le fichier est destin
mmoriser les coordonnes (ce sont toujours les plus mal chausses, bien sr) d'un certain nombre de personnes.
Pourchacune,ilfaudranoterlenom,leprnom,lenumrodetlphoneetl'email.Danscecas,ilpeutparatreplus
simpledestockerunepersonneparlignedufichier(parenregistrement).Ditautrement,quandonprendrauneligne,
onserasrqu'ellecontientlesinformationsconcernantunepersonne,etuniquementcela.Unfichierainsicodsous
formed'enregistrementsestappelunfichiertexte.
Enfait,entrechaqueenregistrement,sontstockslesoctetscorrespondantsauxcaractresCR(codeAscii13)etLF
(codeAscii10),signifiantunretouraudbutdelalignesuivante.Leplussouvent,lelangagedeprogrammation,ds
Cours Algorithmique Auteur : Christophe Darmangeat
75
lorsqu'ils'agitd'unfichiertexte,greralui-mmelalectureetl'crituredecesdeuxcaractreschaquefindeligne:
c'estautantdemoinsdontleprogrammeurauras'occuper.Leprogrammeur,lui,n'auraqu'direlamachinedelire
uneligne,oud'encrireune.
Cetypedefichierestcourammentutilisdslorsquel'ondoitstockerdesinformationspouvanttreassimilesune
basededonnes.
Lesecondtypedefichier,vousl'aurezdevin,sedfinitacontrario:ilrassemblelesfichiersquinepossdentpasde
structure de lignes (d'enregistrement).Les octets, quels qu'il soient, sont crits la queue leu leu. Ces fichiers sont
appels des fichiers binaires. Naturellement, leur structure diffrente implique un traitement diffrent par le
programmeur. Tous les fichiers qui ne codent pas une base de donnes sont obligatoirement des fichiers binaires :
celaconcerneparexempleunfichierson,uneimage,unprogrammeexcutable,etc.Toutefois,onendiraquelques
mots un peu plus loin, il est toujours possible d'opter pour une structure binaire mme dans le cas o le fichier
reprsenteunebasededonnes.
Autrediffrencemajeureentrefichierstexteetfichiersbinaires:dansunfichiertexte,touteslesdonnessontcrites
sousformede...texte.Celaveutdirequelesnombresysontreprsentssousformedesuitedechiffres(deschanes
decaractres).Cesnombresdoiventdonctreconvertisenchaneslorsdel'crituredanslefichier.Inversement,lors
delalecturedufichier,ondevraconvertirceschanesennombresil'onveutpouvoirlesutiliserdansdescalculs.En
revanche,danslesfichiersbinaires,lesdonnessontcritesl'imageexactedeleurcodageenmmoirevive,cequi
pargnetoutescesoprationsdeconversion.
Ceciacommeautreimplicationqu'unfichiertexteestlisible,alorsqu'unfichierbinairenel'estpas(saufbiensren
crivant soi-mme un programme appropri). Si l'on ouvre un fichier texte via un diteur de textes, comme le bloc-
notes de Windows, ony reconnatra toutes les informations (ce sont descaractres, stockscomme tels). Lamme
choseavecunfichierbinairenenousproduitl'cranqu'ungalimatiasdescribouillisincomprhensibles.
2. Structure des enregistrements
Savoir que les fichiers peuvent tre structurs en enregistrements, c'est bien. Mais savoir comment sont leur tour
structurscesenregistrements,c'estmieux.Or,laussi,ilyadeuxgrandespossibilits.Cesdeuxgrandesvariantes
pourstructurerlesdonnesauseindunfichiertextesontladlimitationetleschampsdelargeurfixe.
Reprenonslecasducarnetdadresses,avecdedanslenom,leprnom,letlphoneetl'email.Lesdonnes,surle
fichiertexte,peuventtreorganisesainsi:
Structure n1
Fonfec;Sophie;0142156487;fonfec@yahoo.fr
Ztofrais;Mlanie;0456912347;ztofrais@free.fr
Herbien;Jean-Philippe;0289765194;vantard@free.fr
Hergbel;Octave;0149875231;rg@aol.fr
ouainsi:
Cours Algorithmique Auteur : Christophe Darmangeat
76
Structure n2
Fonfec Sophie 0142156487fonfec@yahoo.fr
Ztofrais Mlanie 0456912347ztofrais@free.fr
Herbien Jean-Philippe 0289765194vantard@free.fr
Hergbel Octave 0149875231rg@aol.fr
La structure n1 est dite dlimite; Elle utilise un caractre spcial, appel caractre de dlimitation, qui permet de
reprer quand finit un champ et quand commence le suivant. Il va de soi que ce caractre de dlimitation doit tre
strictement interdit lintrieur de chaque champ, faute de quoi la structure devient proprement illisible.
Lastructuren2,elle,estditechampsdelargeurfixe.Ilnyapasdecaractrededlimitation,maisonsaitquelesx
premierscaractresdechaquelignestockentlenom,lesysuivantsleprnom,etc.Celaimposebienentendudene
passaisirunrenseignementpluslongquelechampprvupourlaccueillir.
Lavantagedelastructuren1estsonfaibleencombrementenplacemmoire;ilnyaaucunespaceperdu,
et un fichier texte cod de cette manire occupe le minimum de place possible. Mais elle possde en
revancheuninconvnientmajeur,quiestlalenteurdelalecture.Eneffet,chaquefoisquelonrcupreune
ligne dans le fichier, il faut alors parcourir un par un tous les caractres pour reprer chaque occurrence du
caractredesparationavantdepouvoirdcoupercetteligneendiffrentschamps.
Lastructuren2,linverse,gaspilledelaplacemmoire,puisquelefichierestunvraigruyrepleindetrous.
Mais dun autre ct, la rcupration des diffrents champs est trs rapide. Lorsquon rcupre une ligne, il
suffitdeladcouperendiffrenteschanesdelongueurprdfinie,etletourestjou.
A lpoque o la place mmoire cotait cher, la structure dlimite tait souvent privilgie. Mais depuis bien des
annes, la quasi-totalit des logiciels et des programmeurs optent pour la structure en champs de largeur fixe.
Aussi,saufmentioncontraire,nousnetravailleronsquavecdesfichiersbtissurcettestructure.
Remarqueimportante:lorsqu'onchoisitdecoderunebasededonnessousformedechampsdelargeurfixe,onpeut
alorstrsbienopterpourunfichierbinaire.Lesenregistrementsyserontcerteslaqueueleuleu,sansquerienne
noussignalelajointureentrechaqueenregistrement.Maissionsaitcombiend'octetsmesureinvariablementchaque
champ, on sait du coup combien d'octets mesure chaque enregistrement. Et on peut donc trs facilement rcuprer
lesinformations:sinoussavonsquedansnotrecarnetd'adresse,chaqueindividuoccupe75octets,alorsdansnotre
fichierbinaire,nousdduisonsquel'individun1occupelesoctets175,l'individun2lesoctets76150,l'individu
n3lesoctets151225,etc.
3. Types daccs
Onvientdevoirquelorganisationdesdonnesauseindesenregistrementsdufichierpouvaitseffecteurselondeux
grands choix stratgiques. Mais il existe une autre ligne de partage des fichiers: le type daccs, autrement dit la
maniredontlamachinevapouvoirallerrechercherlesinformationscontenuesdanslefichier.
Ondistingue:
Laccssquentiel:onnepeutaccderquladonnesuivantcellequonvientdelire.Onnepeutdonc
accderuneinformationqu'enayantaupralableexamincellequilaprcde.Danslecasd'unfichier
texte,celasignifiequ'onlitlefichierligneparligne(enregistrementparenregistrement).
Cours Algorithmique Auteur : Christophe Darmangeat
77
Laccsdirect(oualatoire):onpeutaccderdirectementlenregistrementdesonchoix,enprcisantle
numrodecetenregistrement.Maiscelaveutsouventdireunegestionfastidieusedesdplacementsdans
lefichier.
Laccsindex:poursimplifier,ilcombinelarapiditdel'accsdirectetlasimplicitdel'accssquentiel
(enrestanttoutefoispluscompliqu).Ilestparticulirementadaptautraitementdesgrosfichiers,comme
lesbasesdedonnesimportantes.
Aladiffrencedelaprcdente,cettetypologieneserefltepasdanslastructureelle-mmedufichier.Enfait,tout
fichier peut tre utilis avec lun ou lautre des trois types daccs. Le choix du type daccs nest pas un choix qui
concerne le fichier lui-mme, mais uniquement la manire dont il va tre trait par la machine. Cest donc dans le
programme,etseulementdansleprogramme,quelonchoisitletypedaccssouhait.
Pourconcluresurtoutcela,voiciunpetittableaurcapitulatif:
Fichiers Texte Fichiers Binaires
On les utilise pour stocker... des bases de donnes tout, y compris des bases de donnes.
Ils sont structurs sous
forme de...
lignes (enregistrements) Ils n'ont pas de structure apparente. Ce
sont des octets crits la suite les uns
des autres.
Les donnes y sont crites... exclusivement en tant que caractres comme en mmoire vive
Les enregistrements sont
eux-mmes structurs...
au choix, avec un sparateur ou en
champs de largeur fixe
en champs de largeur fixe, s'il s'agit d'un
fichier codant des enregistrements
Lisibilit Le fichier est lisible clairement avec
n'importe quel diteur de texte
Le fichier a l'apparence d'une suite
d'octets illisibles
Lecture du fichier On ne peut lire le fichier que ligne par
ligne
On peut lire les octets de son choix (y
compris la totalit du fichier d'un coup)
Danslecadredececours,onselimiteravolontairementautypedebase:lefichiertexteenaccssquentiel.Pour
des informations plus compltes sur la gestion des fichiers binaires et des autres types d'accs, il vous faudra...
chercherailleurs.
4. Instructions (fichiers texte en accs squentiel)
Si lon veut travailler sur un fichier, la premire chose faire est de louvrir. Cela se fait en attribuant au fichier un
numrodecanal.Onnepeutouvrirquunseulfichierparcanal,maisquelquesoitlelangage,ondisposetoujoursde
plusieurscanaux,doncpasdesoucis.
Limportantestquelorsquonouvreunfichier,onstipulecequonvaenfaire:lire,crireouajouter.
Sionouvreunfichierpourlecture,onpourrauniquementrcuprerlesinformationsquilcontient,sansles
modifierenaucunemanire.
Cours Algorithmique Auteur : Christophe Darmangeat
78
Sionouvreunfichierpourcriture,onpourramettrededanstouteslesinformationsquelonveut.Maisles
informationsprcdentes,siellesexistent,serontintgralementcrases.Etonnepourrapasaccderaux
informationsquiexistaientprcdemment.
Sionouvreunfichierpourajout,onnepeutnilire,nimodifierlesinformationsexistantes.Maisonpourra,
comme vous commencez vous en douter, ajouter de nouvelles lignes (rappelons qu'au terme de lignes,
onprfreraceluidenregistrements).
Aupremierabord,ceslimitationspeuventsemblerinfernales.Audeuximeabord,elleslesonteffectivement.Iln'ya
mmepasd'instructionsquipermettentdesupprimerunenregistrementd'unfichier!
Toutefois,avecunpeudhabitude,onserendcomptequemalgrtout,mmesicenestpastoujoursmarrant,onpeut
quandmmefairetoutcequonveutaveccesfichierssquentiels.
Pourouvrirunfichiertexte,oncriraparexemple:
Ouvrir Exemple.txt sur 4 pour Lecture
Ici,Exemple.txtestlenomdufichiersurledisquedur,4estlenumrodecanal,etcefichieradonctouverten
lecture.Vouslaviezsansdoutepressenti.Allonsplusloin:
Ouvrir Exemple.txt sur 4 en Lecture
Variables Truc, Nom, Prnom, Tel, Mail en Caractres
...
LireFichier 4, Truc
Nom Mid(Truc, 1, 20)
Prnom Mid(Truc, 21, 15)
Tel Mid(Truc, 36, 10)
Mail Mid(Truc, 46, 20)
Linstruction LireFichier rcupre donc dans la variable spcifie lenregistrement suivant dans le fichier... "suivant",
oui,maisparrapportquoi?Parrapportaudernierenregistrementlu.Cestencelaquelefichierestditsquentiel.
Enloccurrence,onrcupredonclapremireligne,donc,lepremierenregistrementdufichier,danslavariableTruc.
Ensuite, le fichier tant organis sous forme de champs de largeur fixe, il suffit de trononner cette variable Truc en
autantdemorceauxquilyadechampsdanslenregistrement,etdenvoyercestrononsdansdiffrentesvariables.
Etletourestjou.
Lasuiteduraisonnementsimposeavecunelogiqueimpitoyable:lireunfichiersquentiel deboutenboutsuppose
de programmer une boucle. Comme on sait rarement lavance combien denregistrements comporte le fichier, la
combine consiste neuf fois sur dix utiliser la fonction EOF (acronyme pour End Of File). Cette fonction renvoie la
valeur Vrai si on a atteint la fin du fichier (auquel cas une lecture supplmentaire dclencherait une erreur).
Lalgorithme,ultraclassique,enpareilcasestdonc:
Variable Truc en Caractre
Ouvrir Exemple.txt sur 5 en Lecture
Tantque Non EOF(5)
LireFichier 5, Truc
FinTantQue
Cours Algorithmique Auteur : Christophe Darmangeat
79
Et neuf fois sur dixgalement, si lon veutstockerau fur et mesureen mmoire vive les informations luesdans le
fichier,onarecoursdestableaux.Etcommeonnesavaitpasdavancecombienilyauraitdenregistrementsdansle
fichier, on ne sait pas davantage combien il doit y avoir demplacements dans les tableaux. Quimporte, les
programmeursavertisquevoustesconnaissentlacombinedestableauxdynamiques.
En rassemblant lensemble des connaissances acquises, nous pouvons donc crire le prototype de lecture intgrale
dunfichiersquentiel,lecturequirecopielensembledesinformationsenmmoirevive:
Tableaux Nom(), Prnom(), Tel(), Mail() en Caractre
Ouvrir Exemple.txt sur 5 en Lecture
i -1
Tantque Non EOF(5)
LireFichier 5, Truc
i i + 1
Redim Nom(i)
Redim Prnom(i)
Redim Tel(i)
Redim Mail(i)
Nom(i) Mid(Truc, 1, 20)
Prnom(i) Mid(Truc, 21, 15)
Tel(i) Mid(Truc, 36, 10)
Mail(i) Mid(Truc, 46, 20)
FinTantQue
Ici, on a fait le choix de recopier le fichier dans quatre tableaux distincts. Comme on va le voir bientt, il y a encore
mieux,maisnenousimpatientonspas,chaquechoseensontemps.
Pouruneoprationdcriture,oudajout,ilfautdabordconstituerunechanequivalentelanouvellelignedufichier.
Cette chane doit donc tre calibre de la bonne manire, avec les diffrents champs qui tombent aux
emplacements corrects. Le moyen le plus simple pour spargner de longs traitements est de procder avec des
chanescorrectementdimensionnesdsleurdclaration(laplupartdeslangagesoffrentcettepossibilit):
Ouvrir Exemple.txt sur 3 en Ajout
Variable Truc en Caractre
Variables Nom*20, Prnom*15, Tel*10, Mail*20 en Caractre
une telle dclaration assure que quel que soit le contenu de la variable Nom, par exemple, celle-ci comptera toujours
20 caractres. Si son contenu est plus petit, alors un nombre correct despaces sera automatiquement ajout pour
combler. Si on tente dy entrer un contenu trop long, celui-ci sera automatiquement tronqu.
Nom Jokers
Prnom Midnight
Tel 0348946532
Mail allstars@rockandroll.com
Truc Nom & Prnom & Tel & Mail
EcrireFichier 3, Truc
Cours Algorithmique Auteur : Christophe Darmangeat
80
Etpourfinir, unefoisquonenaterminavecunfichier,ilnefautpasoublierdefermercefichier.Onlibreainsile
canalquiloccupait(etaccessoirement,onpourrautilisercecanaldanslasuiteduprogrammepourunautrefichier
oupourlemme).
Exercice 10.1
Quel rsultat cet algorithme produit-il ?
Variable Truc en Caractre
Ouvrir Exemple.txt sur 5 en Lecture
Tantque Non EOF(5)
LireFichier 5, Truc
Ecrire Truc
FinTantQue
Fermer 5
Exercice 10.2
Ecrivez lalgorithme qui produit un rsultat similaire au prcdent, mais le fichier texte
Exemple.txt est cette fois de type dlimit (caractre de dlimitation : /). On produira
l'cran un affichage o pour des raisons esthtiques, ce caractre sera remplac avec des
espaces.
Exercice 10.3
On travaille avec le fichier du carnet dadresses en champs de largeur fixe.
Ecrivez un algorithme qui permet lutilisateur de saisir au clavier un nouvel individu qui
sera ajout ce carnet dadresses.
5. Stratgies de traitement
Ilexisteglobalementdeuxmaniresdetraiterlesfichierstextes:
luneconsistesenteniraufichierproprementdit,c'est--diremodifierdirectementlesinformationssur
le disque dur. Cest parfois un peu acrobatique, lorsquon veut supprimer un lment dun fichier: on
programme alors une boucle avec un test, qui recopie dans un deuxime fichier tous les lments du
premier fichier sauf un; et il faut ensuite recopier intgralement le deuxime fichier la place du premier
fichierOuf.
lautre stratgie consiste, comme on la vu, passer par un ou plusieurs tableaux. En fait, le principe
fondamental de cette approche est de commencer, avant toute autre chose, par recopier lintgralit du
fichier de dpart en mmoire vive. Ensuite, on ne manipule que cette mmoire vive (concrtement, un ou
plusieurstableaux).Etlorsqueletraitementesttermin,onrecopienouveaudansl'autresens,depuisla
mmoireviveverslefichierdorigine.
Pourquoi,alors,demanderez-voushaletants,nefait-onpascelatouslescoups?Ya-t-ildescasoilvautmieuxen
resterauxfichiersetnepaspasserpardestableaux?
larecopieduntrsgrosfichierenmmoireviveexigedesressourcesquipeuventatteindredesdimensions
considrables.Donc,danslecasd'immensesfichiers(trsrares,cependant),larecopieenmmoirepeut
s'avrerproblmatique.
silefichiercontientdesdonnesdetypenonhomognes(chanes,numriques,etc.)celarisquedtre
cotonpourlestockerdansuntableau:ilvafalloirdclarerplusieurstableaux,dontlemaniementaufinal
peuttreaussilourdqueceluidesfichiersdedpart.Amoins...d'utiliseruneruse:crerdestypesde
variablespersonnaliss,compossduncollagedeplusieurstypesexistants(10caractres,puisun
numrique,puis15caractres,etc.).Cetypedevariables'appelleuntypestructur.Cettetechnique,bien
quellenesoitpasvraimentdifficile,exigetoutdemmeunecertaineaisance...Voilpourquoionva
maintenantendirequelquesmots.
6. Donnes structures
Attention toutefois ; lorsque nous utilisions des variables de type prdfini, comme des entiers, des boolens, etc.
nous n'avions qu'une seule opration effectuer : dclarer la variable en utilisant un des types existants. A prsent
que nous voulons crer un nouveau type de variable (par assemblage de types existants), il va falloir faire deux
choses:d'abord,crerletype.Ensuiteseulement,dclarerla(les)variable(s)d'aprscetype.
Reprenonsunefoisdeplusl'exempleducarnetd'adresses.
Nous allons donc, avant mme la dclaration des variables, crer un type, une structure, calque sur celle de nos
enregistrements,etdoncprtelesaccueillir:
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Caractre * 20
Fin Structure
Ici,Bottinestlenomdemastructure.Cemotjoueraparlasuitedansmonprogrammeexactementlemmerleque
lestypesprdfiniscommeNumrique,CaractreouBoolen.Maintenantquelastructureestdfinie,onvapouvoir,
dans la section du programme o s'effectuent les dclarations, crer une ou des variables correspondant cette
structure:
Variable Individu en Bottin
Etsicelamechantait,nouspourrionsremplirlesdiffrentesinformationscontenuesauseindelavariableIndividude
lamaniresuivante:
Individu Joker,Midnight,0348946532,allstars@rock.com
Onpeutaussiavoirbesoind'accderunseuldeschampsdelavariablestructure.Danscecas,onemploielepoint
:
Individu.Nom Jokers
Individu.Prnom Midnight
Individu.Tel 0348946532
Individu.Mail allstars@rockandroll.com
Ainsi,crirecorrectementuneinformationdanslefichierestunjeud'enfant,puisqu'ondisposed'unevariableIndividu
au bon gabarit. Une fois remplis les diffrents champs de cette variable - ce qu'on vient de faire -, il n'y a plus qu'
envoyercelle-cidirectementdanslefichier.Etzou!
EcrireFichier 3, Individu
Cours Algorithmique Auteur : Christophe Darmangeat
83
De la mme manire, dans l'autre sens, lorsquon effectue une opration de lecture dans le fichier Adresses : la
structuretantfaitepourcela,onpeutdornavantsecontenterderecopierunelignedufichierdansunevariablede
typeBottin,etletourserajou.Pourchargerl'individusuivantdufichierenmmoirevive,ilsuffiradoncd'crire:
LireFichier 5, Individu
Etl,direct,nousavonsbiennosquatrerenseignementsaccessiblesdanslesquatrechampsdelavariableindividu.
Tout cela, videmment, parce que la structure de notre variable Individu correspond parfaitement la structure des
enregistrementsdenotrefichier.Danslecascontraire,pourreprendreuneexpressionconnue,onnedcouperapas
selonlespointills,etalors,imaginezlecarnage...
6.2. Tableaux de donnes structures
Et encoreplus loin, encore plus vite etencore plus fort. Si partir des typessimples, onpeut crer desvariableset
destableauxdevariables,partirdestypesstructurs,onpeutcrerdesvariablesstructures...etdestableauxde
variablesstructures.
L, bien que pas si difficile que cela, a commence devenir vraiment balze. Parce que cela veut dire que nous
disposons d'une manire de grer la mmoire vive qui va correspondre exactement la structure d'un fichier texte
(d'une base de donnes). Comme les structures se correspondent parfaitement, le nombre de manipulations
effectuer, autrement dit de lignes de programme crire, va tre rduit au minimum. En fait, dans notre tableau
structur, les champs des emplacements du tableau correspondront aux champs du fichier texte, et les indices des
emplacementsdutableaucorrespondrontauxdiffrenteslignesdufichier.
Voici, titre d'illustration, l'algorithme complet de lecture du fichier Adresses et de sa recopie intgrale en mmoire
vive,enemployantuntableaustructur.
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Carctre * 20
Fin Structure
Tableau Mespotes() en Bottin
Ouvrir Exemple.txt sur 3 en Ajout
i -1
Tantque Non EOF(5)
i i + 1
Redim Mespotes(i)
LireFichier 5, Mespotes(i)
FinTantQue
Unefoisquececiestrgl,onatoutcequ'ilfaut!Sionvoulaitcrire,unmoment,lemaildel'individun13dufichier
(donclen12dutableau)l'cran,ilsuffiraitdepasserl'ordre:
Ecrire Mespotes(12).Mail
Cours Algorithmique Auteur : Christophe Darmangeat
84
Etvoilletravail.Simplissime,non?
REMARQUE FINALE SUR LES DONNEES STRUCTUREES
Mme si le domaine de prdilection des donnes structures est la gestion de fichiers, on peut
tout fait y avoir recours dans d'autres contextes, et organiser plus systmatiquement les
variables d'un programme sous la forme de telles structures.
En programmation dite procdurale, celle que nous tudions ici, ce type de stratgie reste
relativement rare. Mais rare ne veut pas dire interdit, ou mme inutile.
Et nous aurons l'occasion de voir qu'en programmation objet, ce type d'organisation des
donnes devient fondamental.
Mais ceci est un autre cours...
7. Rcapitulatif gnral
Lorsqu'onestamentravailleravecdesdonnessituesdansunfichier,plusieurschoix,enpartieindpendantsles
unsdesautres,doiventtrefaits:
surl'organisationenenregistrementsdufichier(choixentrefichiertexteoufichierbinaire);
surlemoded'accsauxenregistrementsdufichier(directousquentiel);
surl'organisationdeschampsauseindesenregistrements(prsencedesparateursoulargeurfixe);
surlamthodedetraitementdesinformations(recopieintgraledufichierenmmoireviveounon);
sur le type de variables utilises pour cette recopie en mmoire vive (plusieurs tableaux de type simple, ou
unseultableaudetypestructur).
Chacune de ces options prsente avantages et inconvnients, et il est impossible de donner une rgle de conduite
valable en toute circonstance. Il faut connatre ces techniques, et savoir choisir la bonne option selon le problme
traiter.
Voiciunesriede(pastoujours)petitsexercicessurlesfichierstexte,quel'onpourratraiterenemployantlestypes
structurs(c'estentoutcaslecasdanslescorrigs).
La manire la plus vidente, mais aussi la moins habile, de programmer ce genre de choses, c'est bien entendu de
rpterlecodecorrespondantautantdefoisquencessaire.Apparemment,onnesecassepaslatte:quandilfaut
quelamachineinterrogel'utilisateur,onrecopiepresquemotmotleslignesdecodesvoulues.Maisenprocdantde
cettemanire,lapirequisoit,onseprparedeslendemainsquidchantent...
D'abord, parce que si la structure d'un programme crit de cette manire peut paratre simple, elle est en ralit
inutilement lourdingue. Elle contient des rptitions, et pour peu que le programme soit joufflu, il peut devenir
parfaitement illisible. Or, c'est un critre essentiel pour un programme informatique, qu'il soit facilement modifiable
donclisible,ycompris-etsurtout-parceuxquinel'ontpascrit!Dsquel'onprogrammenonpoursoi-mme,mais
danslecadred'uneorganisation(entrepriseouautre),cettencessitsefaitsentirdemanireaigu.
En plus, un autre niveau, une telle structure pose des problmes considrables de maintenance: car en cas de
modificationducode,ilvafalloirtraquertouteslesapparitionsdececodepourfaireconvenablementlamodification!
Etsil'onenoublieune,patatras,onalaissunbug.
Ilfautdoncopterpouruneautrestratgie,quiconsistesparercetraitementducorpsduprogrammeetappeler
cesinstructions(quinefigurentdoncplusquenunseulexemplaire)chaquefoisquonenabesoin.Ainsi,lalisibilit
estassure;leprogrammedevientmodulaire,etilsuffitdefaireuneseulemodificationaubonendroit,pourquecette
modificationprenneeffetdanslatotalitdelapplication.
Le corps du programme sappelle alors la procdure principale, et ces groupes dinstructions auxquels on a recours
sappellentdesfonctionsetdessous-procdures(nousverronsunpeuplusloinladiffrenceentrecesdeuxtermes).
Reprenonsunexempledequestionlaquellelutilisateurdoitrpondreparouiouparnon.
Nousallonsdonccrerunefonctiondontlerleseraderenvoyerlarponse(ouiounon)del'utilisateur.Cemotde
"fonction", en l'occurrence, ne doit pas nous surprendre : nous avons tudi prcdemment des fonctions fournies
aveclelangage,etnousavonsvuquelebutd'unefonctiontaitderenvoyerunevaleur.Ehbien,c'estexactementla
mme chose ici, sauf que c'est nous qui allons crer notre propre fonction, que nous appellerons RepOuiNon :
Fonction RepOuiNon()
Truc ""
TantQue Truc <> "Oui" et Truc <> "Non"
Ecrire "Tapez Oui ou Non"
Lire Truc
FinTantQue
Renvoyer Truc
Fin Fonction
On remarque au passage lapparition dun nouveau mot-cl: Renvoyer, qui indique quelle valeur doit prendre la
fonction lorsqu'elle est utilise par le programme. Cette valeur renvoye par la fonction (ici, la valeur de la variable
Truc)estenquelquesortecontenuedanslenomdelafonctionlui-mme,exactementcommectaitlecasdansles
fonctionsprdfinies.
Une fonction s'crit toujours en-dehors de la procdure principale. Selon les langages, cela peut prendre diffrentes
formes.Maiscequ'ilfautcomprendre,c'estquecesquelqueslignesdecodessontenquelquesortedessatellites,qui
existent en dehors du traitement lui-mme. Simplement, elles sont sa disposition, et il pourra y faire appel chaque
foisquencessaire.Sil'onreprendnotreexemple,unefoisnotrefonctionRepOuiNoncrite,leprogrammeprincipale
comprendraleslignes:
Ecrire Etes-vous mari ?
Rep1 RepOuiNon()
Ecrire Avez-vous des enfants ?
Rep2 RepOuiNon()
Cours Algorithmique Auteur : Christophe Darmangeat
89
Et le tour est jou ! On a ainsi vit les rptitions inutiles, et si d'aventure, il y avait un bug dans notre contrle de
saisie, il suffirait de faire une seule correction dans la fonction RepOuiNon pour que ce bug soit limin de toute
l'application.
Toutefois, les plus sagaces d'entre vous auront remarqu, tant dans le titre de la fonction , que dans chacun des
appels, la prsence de parenthses. Celles-ci, ds qu'on cre ou qu'on appelle une fonction, sont obligatoires. Et si
vousavezbiencompristoutcequiprcde,vousdevezavoirunepetiteidedecequ'onvapouvoirmettrededans...
1.2. Passage d'arguments
Reprenons lexemple qui prcde et analysons-le. Nous crivons un message l'cran, puis appelons la fonction
RepOuiNon pour poser une question; puis, un peu plus loin, on crit un autre message l'cran, et on appelle de
nouveau la fonction pour poser la mme question, etc. Cest une dmarche acceptable, mais qui peut encore tre
amliore: puisque avant chaque question, on doit crire un message, autant que cette criture du message figure
directementdanslafonctionappele.Celaimpliquedeuxchoses:
lorsquonappellelafonction,ondoitluiprciserquelmessageelledoitafficheravantdelirelarponse;
la fonction doit tre prvenue quelle recevra un message, et tre capable de le rcuprer pour
lafficher.
En langage algorithmique, on dira que le message devient un argument de la fonction. Cela n'est certes pas une
dcouverte pour vous : nous avons longuement utilis les arguments propos des fonctions prdfinies. Eh bien,
quitte construire nos propres fonctions, nous pouvons donc construire nos propres arguments. Voil comment
laffaireseprsente...
Lafonctionseradornavantdclarecommesuit:
Fonction RepOuiNon(Msg en Caractre)
Ecrire Msg
Truc ""
TantQue Truc <> "Oui" et Truc <> "Non"
Ecrire "Tapez Oui ou Non"
Lire Truc
FinTantQue
Renvoyer Truc
Fin Fonction
Il y a donc maintenant entre les parenthses une variable, Msg, dont on prcise le type, et qui signale la fonction
quunargumentdoitluitreenvoychaqueappel.Quantcesappels,justement,ilssesimplifierontencoredansla
procdureprincipale,pourdevenir:
Rep1 RepOuiNon(Etes-vous mari ?)
Rep2 RepOuiNon(Avez-vous des enfants ?)
Etvoilletravail.
Une remarque importante : l, on n'a pass quun seul argument en entre. Mais bien entendu, on peut en passer
autant quon veut, et crer des fonctions avec deux, trois, quatre, etc. arguments; Simplement, il faut viter d'tre
gourmands,etilsuffitdepassercedontonabesoin,niplus,nimoins!
Cours Algorithmique Auteur : Christophe Darmangeat
90
Dans le cas que l'on vient de voir, le passage d'un argument la fonction tait lgant, mais pas indispensable. La
preuve, cela marchait dj trs bien lors de la premire version. Nous allons voir maintenant une situation o il faut
absolumentpasserdeuxargumentsunefonctionsil'onveutqu'ellepuisseremplirsatche.
Imaginons qu' plusieurs reprises au cours du programme, on ait calculer la moyenne des lments de diffrents
tableaux. Plutt que rpter le code chaque fois, on va donc crer une fonction Moy, charge spcialement de
calculercettemoyenne.Voyonsvoirunpeudequoicettefonctionabesoin:
-dutableau,biensr.Commentcalculerlamoyennedeseslmentssanscela?
- mais il faut galement le nombre d'lments du tableau, ou, au choix, l'indice maximal du tableau. Enfin, quelque
chosequipermettelafonctiondesavoircombiendetoursdeboucleelledevrafaire.
Voildoncunesituationolafonctionaabsolumentbesoindedeuxarguments.Ecrivons-la,justehistoiredevrifier
qu'onestbiend'accord:
Fonction Moy(T en tableau numrique, n en entier)
Som 0
Pour i 0 n-1
Som Som + T(i)
i suivant
m som / n
Renvoyer m
Fin Fonction
Quantauxdiffrentsappelsdanslaprocdureprincipale,sionauntableauRiride43lments,untableauFifide5
lmentsetuntableauLouloudeklments,etquonrangerespectivementlesmoyennesdanslesvariablesM1,M2
etM3,celadonnera:
M1 Moy (Riri, 43)
M2 Moy (Fifi, 5)
M2 Moy (Fifi, k)
En fait, tout cela, c'est simple comme bonjour... Le plus important, c'est d'acqurir le rflexe de constituer
systmatiquementlesfonctionsadquatesquandondoittraiterunproblmedonn.
Cette partie de la rflexion s'appelle d'ailleurs l'analyse fonctionnelle d'un problme, et c'est toujours par l qu'il faut
commencer:engros,dansunpremiertemps,ondcoupeletraitementenmodules,etdansundeuximetemps,on
critchaquemodule.Cependant,avantd'envenirl,ilnousfautdcouvrirundernieroutil,quiprendlerelaisloles
fonctionsdeviennentincapablesdenousaider.
Exercice 11.1
Ecrivez une fonction qui renvoie la somme de cinq nombres fournis en argument.
Cours Algorithmique Auteur : Christophe Darmangeat
91
Exercice 11.2
Ecrivez une fonction qui renvoie le nombre de voyelles contenues dans une chane de caractres
passe en argument. Au passage, notez qu'une fonction a tout fait le droit d'appeler une autre
fonction.
Exercice 11.3
Rcrivez la fonction Trouve, vue prcdemment, laide des fonctions Mid et Len (comme quoi,
Trouve, la diffrence de Mid et Len, nest pas une fonction indispensable dans un langage)
2. Sous-Procdures
Lesfonctions,c'estbien,maisdanscertainscas,anenousrendgureservice.
Il peut en effet arriver que dans un programme, on ait raliser des tches rptitives, mais que ces tches n'aient
paspourrledegnrerunevaleurparticulire,ouqu'ellesaientpourrled'engnrerplusd'unelafois.Prenons
deuxexemples.
Premier exemple. Imaginons qu'au cours de notre application, on ait plusieurs fois besoin d'effacer l'cran et de
rafficherunbidulecommeunpetitlogoenhautgauche.Onpourraitsedirequ'ilfautcrerunefonctionpourfaire
cela.Maisquelleseraitlavaleurrenvoyeparlafonction?Aucune!Effacerl'cran,cen'estpasproduireunrsultat
stockabledansunevariable,etafficherunlogononplus.Voildoncunesituationoonabesoinderpterducode,
maisocecoden'apascommerledeproduireunevaleur.
Deuxime exemple. Au cours de notre application, on doit plusieurs fois faire saisir un tableau d'entiers (mais
chaquefois,untableaudiffrent).Lencore,onseraittentd'effectuertoutescessaisiesdetableauxdansuneseule
fonction. Mais problme, une fonction ne peut renvoyer qu'une seule valeur la fois. Elle ne peut donc renvoyer un
tableau,quiestunesriedevaleursdistinctes.
Alors,danscesdeuxcas,fautedepouvoirtraiterl'affaireparunefonction,devra-t-onenresteraucoderptitifdont
nousvenonsdednoncersivigoureusementlesfaiblesses?Vousvousdoutezbienquenon.Heureusement,toutest
prvu,ilyaunesolution.Etcelle-ciconsisteutiliserdessous-procdures.
Enfait,lesfonctions-quenousavonsvues-nesontqu'uncasparticulierdessous-procdures-quenousallonsvoir:
celuiodoittrerenvoyverslaprocdureappelanteunevaleuretuneseule.Danstouslesautrescas,ilfautdonc
avoir recours non la forme particulire et simplifie (la fonction), mais la forme gnrale (la sous-procdure).
Parlonsdoncdecequiestcommunauxsous-procduresetauxfonctions,maisaussidecequilesdiffrencie.Voici
commentseprsenteunesous-procdure:
Cours Algorithmique Auteur : Christophe Darmangeat
92
Procdure Bidule( ... )
...
Fin Procdure
Danslaprocdureprincipale,lappellasous-procdureBiduledevientquantlui:
...
Appeler Bidule(...)
...
tablissonsunpremiertatdeslieux.
1. Alors qu'une fonction se caractrisait par les mots-cls Fonction ... Fin Fonction, une sous-procdure est
identifieparlesmots-clsProcdure...FinProcdure.Oui,c'estunpeutrivialcommeremarque,maisonne
saitjamais.
2. Lorsqu'une fonction tait appele, sa valeur (retourne) tait toujours affecte une variable. L'appel une
procdure,lui,estaucontrairetoujoursuneinstructionautonome."ExcutelaprocdureBidule"estunordre
quisesuffitlui-mme.
3. Toutefonctiondevait,pourcetteraison,comporterl'instruction"Renvoyer".Pourlammeraison,l'instruction
"Renvoyer"n'estjamaisutilisedansunesous-procdure.Lafonctionestunevaleurcalcule,quirenvoieson
rsultatverslaprocdureprincipale.Lasous-procdure,elle,estuntraitement;ellene"vaut"rien.
4. Mmeunefoisqu'onabiencomprislestroispremierspoints,onn'estpasauboutdenospeines.
En effet, il nous reste examiner ce qui peut bien se trouver dans les parenthses, la place des points de
suspension, aussi bien dans la dclaration de la sous-procdure que dans l'appel. Vous vous en doutez bien :
c'estlquevontsetrouverlesoutilsquivontpermettrel'changed'informationsentrelaprocdureprincipaleetla
sous-procdure (en fait, cette dernire phrase est trop restrictive : mieux vaudrait dire : entre la procdure
appelanteetlaprocdureappele.Carunesous-procdurepeuttrsbienenappelerelle-mmeuneautreafinde
pouvoiraccomplirsatche).
Dans une fonction, les valeurs qui circulaient depuis la procdure (ou la fonction) appelante jusqu' la fonction
portaientlenomd'arguments.L,lesvaleursquicirculentdepuislaprocdure(oulafonction)appelanteverslasous-
procdure appele se nomment des paramtres en entre de la sous-procdure. Mais seul le nom change :
"paramtres en entre" pour les procdures ou "arguments" pour les fonctions, on parle en fait exactement de la
mmechose.
Inversement, dans une fonction, la valeur retourne par la fonction portait le nom de la fonction elle-mme, et elle
faisaitl'objetd'uneinstructionspciale("renvoyer").Avecunesous-procdure,lesvaleursretournes,quandilyena,
s'appellentdesparamtresensortiedelasous-procdure,quidoiventtredclarsexplicitementcommetels.
Ceci nous permet de reformuler en termes un peu diffrents la vrit fondamentale apprise un peu plus haut :toute
sous-procdurepossdantunetunseulparamtreensortiepeutgalementtrecritesousformed'unefonction(et
entrenous,c'estprfrablecarunpeuplusfacile).
Cours Algorithmique Auteur : Christophe Darmangeat
93
Ilnevousresteplusqu'uneseulechosesavoiravantdepouvoirpasserlapratique.C'estquedanslaplupartdes
langages,onneparlerapasdeparamtres"enentre"ou"ensortie",maisdeparamtrestransmis:
parvaleur(correspondantunparamtreenentre);
parrfrence(correspondantunparamtreensortie).
Onpeutgalementimaginerlecasdunparamtrequiseraitpassuneprocdurelafoisenentreetensortie:
on envoie une variable une procdure, afin quelle la traite et la renvoie modifie. Dans ce cas, le paramtre aura
galementlestatutdunetransmissionparrfrence(quipeutlepluspeutlemoins).
Toutcelapeutsembleruntantinetcompliqu.Maissurleprincipe,c'estenralitassezsimple,etdsquevousaurez
pratiquunpeu,vousferezcelalesyeuxferms.Reprenonslecasd'unprogrammeaucoursduquelonaplusieurs
tableaux d'entiers faire saisir par l'utilisateur. Puisqu'un tableau comporte plusieurs valeurs, nous savons qu'il ne
peut,pardfinition,trerenvoyparunefonction.Maisunesous-procdure,elle,comporteautantdeparamtresen
sortie qu'on veut. Elle peut donc sans problme renvoyer un tableau vers la procdure qui l'appelle. Ecrivons donc
notresous-procdure:
3. Variables publiques et prives
Lexistence de sous-procdures, de paramtres, pose comme on la vu le problme de la dure de vie des
variables,cequonappelleleurporte.Pouradopteruneclassificationsimple(maisquidevientparfoispluscomplexe
danscertainslangages),unevariablepeuttredclare:
Commeprive,oulocale(cestneuffoissurdixloptionpardfaut).Celasignifiequelavariabledisparat
(etsavaleuravec)dsqueprendfinlaprocdureouelleatcre.
Comme publique, ou globale. Ce qui signifie quune telle variable est conserve intacte pour toute
lapplication,au-deldesouverturesetfermeturesdeprocdures.Lavariableconservesavaleuretpeut
tretraitepardiffrentesprocduresduprogramme.
Lamaniredontcesdclarationsdoiventtrefaitesestvidemmentfonctiondechaquelangagedeprogrammation.
Enpseudo-codealgorithmique,vouspourrezutiliserlemot-clPubliquepourdclarerunevariablepublique:
Variable Publique Toto en Entier
Comment choisir de dclarer une variable en Public ou en Priv? Cest trs simple: les variables globales
consomment normment de ressources en mmoire. En consquence, le principe qui doit prsider au choix entre
variables publiques et prives doit tre celui de lconomie de moyens: on ne dclare comme publiques que les
variablesquidoiventabsolumentltre.Etchaquefoisquepossible,lorsquoncreunesous-procdure,onutilisele
passagedeparamtrespluttquedesvariablespubliques.
4. Algorithmes fonctionnels
Pour clore ce chapitre, quelques mots propos de la structure gnrale dune application. Celle-ci va couramment
tre forme dune procdure principale, et de fonctions et de sous-procdures (qui vont au besoin elles-mmes en
appeler dautres, etc.). Lexemple typique est celui dun menu, ou dun sommaire, qui branche sur diffrents
traitements,doncdiffrentessous-procdures.
Lalgorithme fonctionnel de lapplication est le dcoupage et/ou la reprsentation graphique de cette structure
gnrale, ayant comme objectif de faire comprendre dun seul coup dil quelle procdure fait quoi, et quelle
procdure appelle quelle autre. Lalgorithme fonctionnel est donc en quelque sorte la construction du squelette de
lapplication.Ilsesitueunniveauplusgnral,plusabstrait,quelalgorithmenormal,quilui,dtaillepaspasles
traitementseffectusauseindechaqueprocdure.
Danslaconstructionetlacomprhensionduneapplication,lesdeuxdocumentssontindispensables,etconstituent
deuxtapessuccessivesdellaborationdunprojet.Latroisimeetderniretape,consistecrire,pourchaque
procdureetfonction,lalgorithmedtaill.
Cours Algorithmique Auteur : Christophe Darmangeat
95
Exemplederalisationdunalgorithmefonctionnel:LeJeuduPendu
Vous connaissez tous ce jeu: lutilisateur doit deviner un mot choisi au hasard par lordinateur, en un minimum
dessais.Pourcela,ilproposedeslettresdelalphabet.Silalettrefiguredanslemottrouver,ellesaffiche.Sielleny
figure pas, le nombre des mauvaises rponses augmente de 1. Au bout de dix mauvaises rponses, la partie est
perdue.
Cepetitjeuvanouspermettredemettreenrelieflestroistapesdelaralisationdunalgorithmeunpeucomplexe;
bienentendu,onpourraittoujoursignorercestroistapes,etselancercommeundratdirectementdanslagueule
du loup, savoir lcriture de lalgorithme dfinitif. Mais, sauf tre particulirement dou, mieux vaut respecter le
canevasquisuit,carlesdifficultssersolventmieuxquandonlessaucissonne
Etape1:ledictionnairedesdonnes
Lebutdecettetapeestdidentifierlesinformationsquiserontncessairesautraitementduproblme,etdechoisir
letypedecodagequiseraleplussatisfaisantpourtraitercesinformations.Cestunmomentessentieldelarflexion,
quilnefautsurtoutpasprendrelalgreOr,neufprogrammeursdbutantssurdixbclentcetterflexion,quand
ils ne la zappent pas purement et simplement. La punition ne se fait gnralement pas attendre longtemps;
lalgorithmetantbtisurdemauvaisesfondations,leprogrammeurserendcomptetoutenlcrivantquelechoixde
codage des informations, par exemple, mne des impasses. La prcipitation est donc punie par le fait quon est
obligdetoutreprendredepuisledbut,etquonaautotalperdubiendavantagedetempsquonenacruengagner
Donc,avantmmedcrirequoiquecesoit,lesquestionsquilfautseposersontlessuivantes:
dequellesinformationsleprogrammeva-t-ilavoirbesoinpourvenirboutdesatche?
pourchacunedecesinformations,quelestlemeilleurcodage?Autrementdit,celuiqui,sansgaspillerdela
placemmoire,permettradcrirelalgorithmeleplussimple?
Encoreunefois,ilnefautpashsiterpasserdutempssurcesquestions,carcertaineserreurs,oucertainsoublis,
sepayentcherparlasuite.
Pourlejeudupendu,voicilalistedesinformationsdontonvaavoirbesoin:
1. une liste de mots (si lon veut viter que le programme ne propose toujours le mme mot trouver, ce qui
risqueraitdedevenirassezrapidementlassant);
2. lemottrouver;
3. lalettreproposeparlejoueur;
4. lenombreactueldemauvaisesrponses;
5. etenfin,lastbutnotleast,lensembledeslettresdjtrouvesparlejoueur.Cetteinformationestcapitale;le
programmeenaurabesoinaumoinspourdeuxchoses:dunepart,poursavoirsilemotentierattrouv.
Dautrepart,pourafficherchaquetourltatactueldumot(rappelonsquchaquetour,leslettrestrouves
sontaffichesenclairparlamachine,leslettresrestantdevinertantremplacespardestirets);
Cours Algorithmique Auteur : Christophe Darmangeat
96
6. cela,onpourraitajouterunelistecomprenantlensembledeslettresdjproposesparlejoueur,quelles
soientcorrectesounon;cecipermettradinterdireaujoueurdeproposernouveauunelettreprcdemment
joue.
Cette liste dinformations nest peut-tre pas exhaustive; nous aurons vraisemblablement besoin, au cours de
lalgorithme,dequelquesvariablessupplmentaires(descompteursdeboucles,desvariablestemporaires,etc.).Mais
lesinformationsessentiellessontbeletbienl.Seposemaintenantleproblmedechoisirlemodedecodageleplus
fut. Si, pour certaines informations, la question va tre vite rgle, pour dautres, il va falloir faire des choix (et si
possible,deschoixintelligents!).Cestparti:
1.Pourlalistedesmotstrouver,ilsagitdunensembledinformationsdetypealphanumrique.Cesinformations
pourraientfairepartieducorpsdelaprocdureprincipale,ettreainsistockesenmmoirevive,souslaforme
dun tableau de chanes. Mais ce nest certainement pas le plus judicieux. Toute cette place occupe risque de
peser lourd inutilement, car il ny a aucun intrt stocker lensemble des mots en mmoire vive. Et si lon
souhaiteenrichirlalistedesmotstrouver,onseraobligdercriredeslignesdeprogrammeConclusion,la
listedesmotsserabienplussaplacedansunfichiertexte,danslequelleprogrammeirapiocherunseulmot,
celuiquilfaudratrouver.Nousconstitueronsdoncunfichiertexte,appeldico.txt,danslequelfigureraunmotpar
ligne(parenregistrement).
2.Le mot trouver, lui, ne pose aucun problme: il sagit dune information simple de type chane, qui pourra tre
stockdansunevariableappelemot,detypecaractre.
3.De mme, la lettre propose par le joueur est une information simple de type chane, qui serastocke dansune
variableappelelettre,detypecaractre.
4.Le nombre actuel de mauvaises rponses est une information qui pourra tre stocke dans une variable
numriquedetypeentiersimpleappeleMovRep.
5.Lensemble des lettres trouves par le joueur est typiquement une information qui peut faire lobjet de plusieurs
choixdecodage;rappelonsquaumomentdelaffichage,nousauronsbesoindesavoirpourchaquelettredumot
deviner si elle a t trouve ou non. Une premire possibilit, immdiate, serait de disposer dune chane de
caractrescomprenantlensembledeslettresprcdemmenttrouves.Cettesolutionestloindtremauvaise,et
onpourraittoutfaitladopter.Maisici,onferaunautrechoix,neserait-cequepourvarierlesplaisirs:onvase
doter dun tableau de boolens, comptant autant demplacements quil y a de lettres dans le mot deviner.
Chaqueemplacementdutableaucorrespondraunelettredumottrouver,etindiqueraparsavaleursilalettre
a t dcouverte ou non (faux, la lettre na pas t devine, vrai, elle la t). La correspondance entre les
lmentsdutableauetlemotdevinertantimmdiate,laprogrammationdenosbouclesenserafacilite.Nous
baptiseronsnotretableaudeboolensdujolinomdeverif.
6.Enfin,lensembledeslettresproposesserastocksanssoucisdansunechanedecaractresnommePropos.
Nous avonsmaintenant suffisamment gamberg pour dresser le tableau final de cette tape, savoir le dictionnaire
desdonnesproprementdit.
Etape2:lalgorithmefonctionnel
Onpeutprsentpasserlaralisationdelalgorithmefonctionnel,cest--direaudcoupagedenotreproblmeen
blocslogiques.Lebutdelamanuvreestmultiple:
faciliterlaralisationdelalgorithmedfinitifenletrononnantenpluspetitsmorceaux.
Gagner du temps et de la lgret en isolant au mieux les sous-procdures et fonctions qui mritent de
ltre. viter ainsi ventuellement des rptitions multiples de code au cours du programme, rptitions
quinediffrentlesunesdesautresqu'quelquesvariantesprs.
Permettre une division du travail entre programmeurs, chacun se voyant assigner la programmation de
sous-procdures ou de fonctions spcifiques (cet aspect est essentiel ds quon quitte le bricolage
personnelpourentrerdanslemondedelaprogrammationprofessionnelle,donccollective).
Dansnotrecasprcis,unpremierblocsedtache:ilsagitdecequonpourraitappelerlesprparatifsdujeu(choix
dumotdeviner).Puisquelebutestderenvoyerunevaleuretuneseule(lemotchoisiparlamachine),nouspouvons
confiercettetcheunefonctionspcialiseChoixDuMot(noterquecedcoupageestunchoixdelisibilit,etpas
unencessitabsolue;onpourraittoutaussibienfaireceladanslaprocdureprincipale).
Cetteprocdureprincipale,justement,vaensuiteavoirncessairementlaformeduneboucleTantque:eneffet,tant
quelapartienestpasfinie,onrecommencelasriedestraitementsquireprsententuntourdejeu.Maiscomment,
justement,savoirsilapartieestfinie?Ellepeutseterminersoitparcequelenombredemauvaisesrponsesaatteint
10, soit parce que toutes les lettres du mot ont t trouves. Lemieux sera donc de confier lexamen de tout cela
unefonctionspcialise,PartieFinie,quirenverraunevaleurnumrique(0poursignifierquelapartieestencours,1
encasdevictoire,2encasdedfaite).
Passonsmaintenantautourdejeu.
Lapremirechosefaire,cestdafficherlcranltatactueldumotdeviner:unmlangedelettresenclair(celles
quiontttrouves)etdetirets(correspondantauxlettresnonencoretrouves).Toutcecipourratreprisencharge
parunesous-procdurespcialise,appeleAffichageMot.Quantlinitialisationdesdiffrentesvariables,ellepourra
treplace,demanireclassique,danslaprocdureprincipaleelle-mme.
Ensuite,ondoitprocderlasaisiedelalettrepropose,enveillanteffectuerlescontrlesdesaisieadquats.L
encore,unefonctionspcialise,SaisieLettre,seratouteindique.
Une fois la proposition faite,il convient de vrifier si elle correspond ou non une lettre deviner, et en tirer les
consquences.Ceciserafaitparunesous-procdureappeleVrifLettre.
Cours Algorithmique Auteur : Christophe Darmangeat
98
Enfin, une fois la partie termine, on doit afficher les conclusions lcran; on dclare cet effet une dernire
procdure,FinDePartie.
Nous pouvons, dans un algorithme fonctionnel complet, dresser un tableau des diffrentes procdures et fonctions,
exactementcommenouslavonsfaitjusteavantpourlesdonnes(onspargneracettepeinedanslecasprsent,ce
que nous avons crit ci-dessus suffisant amplement. Mais dans le cas dune grosse application, un tel travail serait
ncessaireetnouspargneraitbiendessoucis).
Onpeutaussischmatiserlefonctionnementdenotreapplicationsousformedeblocs,chacundesblocsreprsentant
unefonctionouunesous-procdure:
A cestade, lanalyse dite fonctionnelle est termine. Les fondations (solides, esprons-le) sont poses pour finaliser
lapplication.
Etape3:Algorithmesdtaills
Normalement,ilnenousresteplusqutraiterchaqueprocdureisolment.Oncommenceraparlessous-procdures
etfonctions,pourterminerparlardactiondelaprocdureprincipale.
Fonction ChoixDuMot
Quelques explications : on lit intgralement le fichier contenant la liste des mots. Au fur et mesure, on
range ces mots dans le tableau Liste, qui est redimensionn chaque tour de boucle. Un tirage alatoire
intervient alors, qui permet de renvoyer un des mots au hasard.
Fonction ChoixDuMot()
Tableau Liste() en Caractre
Variable Nbmots en Numrique
Variable Choisi en Entier
Ouvrir Dico.txt sur 1 pour Lecture
Nbmots -1
Tantque Non EOF(1)
Nbmots Nbmots + 1
Redim Liste(Nbmots)
LireFichier 1, Liste(Nbmots)
FinTantQue
Fermer 1
Choisi Ent(Alea() * Nbmots)
Renvoyer Liste(Choisi)
FinFonction
Fonction PartieFinie
On commence par vrifier le nombre de mauvaise rponses, motif de dfaite. Ensuite, on regarde si la
partie est gagne, traitement qui sapparente une gestion de Flag : il suffit que lune des lettres du mot
deviner nait pas t trouve pour que la partie ne soit pas gagne. La fonction aura besoin, comme
arguments, du tableau Verif, de son nombre dlments et du nombre actuel de mauvaises rponses.
Fonction PartieFinie(t() en Booleen, n, x en Entier)
Variable i, issue en Numerique
Si x = 10 Alors
Renvoyer 2
Sinon
Issue 1
Cours Algorithmique Auteur : Christophe Darmangeat
99
Pour i 0 n
Si Non t(i) Alors
Issue 0
FinSi
i suivant
Renvoyer Issue
FinSi
FinFonction
Procdure AffichageMot
Une mme boucle nous permet de considrer une par une les lettres du mot trouver (variable m), et de
savoir si ces lettres ont t identifies ou non.
Procdure AffichageMot(m en Caractre par Valeur, t() en Boolen par Valeur)
Variable Aff en Caractere
Variable i en Numerique
Aff
Pour i 0 len(m) - 1
Si Non t(i) Alors
Aff Aff & -
Sinon
Aff Aff & Mid(mot, i + 1, 1)
FinSi
i suivant
Ecrire Aff
FinProcdure
Remarque : cette procdure aurait galement pu tre crite sous la forme d'une fonction, qui aurait renvoy
vers la procdure principale la chane de caractres Aff. L'criture l'cran de cette chane Aff aurait alors
t faite par la procdure principale.
Voil donc une situation o on peut assez indiffremment opter pour une sous-procdure ou pour une
fonction.
Procdure SaisieLettre
On vrifie que le signe entr (paramtre b) est bien une seule lettre, qui ne figure pas dans les propositions
prcdemment effectues (paramtre a)
Procdure SaisieLettre(a en caractre par Rfrence, b en Caractre par Rfrence)
Variable Correct en Booleen
Variable Alpha en Caractere
Dbut
Correct Faux
Alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
TantQue Non Correct
Ecrire Entrez la lettre propose :
Lire b
Si Trouve(alpha, b) = 0 Ou len(b) <> 1 Alors
Ecrire Ce nest pas une lettre !
SinonSi Trouve(a, b) <> 0 Alors
Ecrire Lettre dj propose !
Sinon
Correct Vrai
a a & b
FinSi
FinTantQue
Fin Procdure
Cours Algorithmique Auteur : Christophe Darmangeat
100
Procdure VerifLettre
Les paramtres se multiplient L est la lettre propose, t() le tableau de boolens, M le mot trouver et N
le nombre de mauvaises propositions. Il ny a pas de difficult majeure dans cette procdure : on examine
les lettres de M une une, et on en tire les consquences. Le flag sert savoir si la lettre propose
faisait ou non partie du mot deviner.
Procdure VerifLettre(L, M en Caractre par Valeur, t() en Boolen par Rfrence, N
en Entier par Rfrence)
Variable Correct en Booleen
Dbut
Correct Faux
Pour i 1 Len(M)
Si Mid(M, i, 1) = L Alors
Correct Vrai
T(i - 1) Vrai
FinSi
FinTantQue
Si Non Correct Alors
N N + 1
FinSi
Fin Procdure
Procdure Epilogue
Procdure Epilogue(M en Caractre par Valeur, N en Entier par Valeur)
Dbut
Si N = 2 Alors
Ecrire Une mauvaise proposition de trop Partie termine !"
Ecrire Le mot deviner tait : , M
Sinon
Ecrire Bravo ! Vous avez trouv !
FinSi
Fin Procdure
Procdure Principale
Procdure Principale
Variables Lettre, Mot, Propos en Caractere
Variables i, MovRep en Numrique
Tableau Verif() en Booleen
Dbut
Mot ChoixDuMot()
Propos ""
Lettre ""
Redim Verif(Len(Mot)-1)
Pour i 0 Len(Mot)-1
Verif(i) Faux
i suivant
k 0
Tantque k = 0
AffichageMot(Mot, Verif())
SaisieLettre(Propos, Lettre)
VerifLettre(Lettre, Mot, Verif(), MovRep)
k PartieFinie(Verif(), len(mot), MovRep)
FinTantQue
Epilogue(Mot, k)
Fin
Cours Algorithmique Auteur : Christophe Darmangeat
101
P
PA AR RT TI IE E 12 (NOTIONS COMPLMENTAIRES)
Le danger, avec les ordinateurs, ce nest pas tellement quils deviennent aussi intelligents que les hommes, mais cest
que nous tombions daccord avec eux pour les rencontrer mi-chemin
Bernard Avishai
Unefoisnestpascoutume,cechapitreneseralobjetdaucunexercice.Celaneveutpasdirepourautantquecequi
sytrouvenestpasintressant.
Nonmaisdesfois.
1. Programmation structure
Petit retour sur une notion trs rapidement survole plus haut:celle de programmation structure. En fait, nous
avons jusqu prsent, fait de la programmation structure sans le savoir. Aussi, plutt quexpliquer longuement en
quoicelaconsiste,ilseraitprfrabledeprendreleproblmeparl'autrebout:enquoicelaneconsistepas.
Danscertainslangages(historiquement,cesontsouventdeslangagesanciens),leslignesdeprogrammationportent
des numros. Et les lignes sont excutes par la machine dans lordre de ces numros. Jusquici, en soi, pas de
problme. Mais lastuce est que tous ces langages, il existe une instruction de branchement, note aller en
pseudo-code, instruction qui envoie directement le programme la ligne spcifie. Inversement, ce type de langage
necomportepasdinstructionscommeFinTantQue,ouFinSi,quifermentunbloc.
PrenonslexempledunestructureSiAlorsSinon
Programmation Structure
Si condition Alors
instructions 1
Sinon
instructions 2
FinSi
Programmation non structure
1000 Si condition Alors Aller En 1200
1100 instruction 1
1110 etc.
1120 etc.
1190 Aller en 1400
1200 instruction 2
1210 etc.
1220 etc.
1400 suite de lalgorithme
Cours Algorithmique Auteur : Christophe Darmangeat
102
Vous voyez le topo: un programme crit dans ce type de langages se prsente comme une suite de branchements
emmlslesunsdanslesautres.Dunepart,onnepeutpasdirequecelafavoriselalisibilitduprogramme.Dautre
part,cestunesourceimportantederreurs,carttoutardonoublieunaller,ouonmetundetrop,etc.Afortiori
lorsquoncompliqueunalgorithmeexistant,celapeutdevenirunejungleinextricable.
Alinverse,laprogrammationstructure,surtoutsilonprendsoinderationaliserlaprsentationenmettantdeslignes
decommentairesetenpratiquantlindentation,vitedeserreurs,etrvlesastructurelogiquedemaniretrsclaire.
Le danger est que si la plupart des langages de programmation utiliss sont structurs, ils offrent tout de mme la
plupart du temps la possibilit de pratiquer la programmation non structure. Dans ce cas, les lignes ne sont pas
dsignes par des numros, mais certaines peuvent tre repres par des noms (dits tiquettes) et on dispose
duneinstructiondebranchement.
Unergledhygineabsolueestdeprogrammersystmatiquementdemanirestructure,saufimpratifcontrairefix
parlelangage.
Autrement dit, mme quand un langage vous offre une possibilit de faire des entorses la programmation
structure,ilnefautsensaisirsousaucunprtexte.
2. Interprtation et compilation
Avecceparagraphe,onsortunpeudelalgorithmiqueproprementditepourentrerdansledomaineplustechniquede
la ralisation pratique. Ou, si lon prfre, ces dernires lignes sont lapothose, le bouquet final, lextase ultime, la
conscrationgrandiose,dececours.
Entoutemodestie,biensr.
Jusquici,nousavonstravaillsurlapremiretapedelaralisationdunprogramme:
Si lalgorithme est bien crit, sans faute logique, ltape suivante ne doit normalement poser aucun problme
conceptuel.Cestunesimpletraductionquevousdevezeffectuer:
Apartirdel,votretravailestvirtuellementtermin(silonexceptelinvitablephasedetests,corrections,etc.).Mais
pour lordinateur, cest l que les ennuis commencent. En effet, aucun ordinateur nest en soi apte excuter les
instructionstellesquellessontrdigesdansteloutellangage;lordinateur,lui,necomprendquunseullangage,qui
estunlangagecodenbinaire(larigueurenhexadcimal)etquisappellelelangagemachine(ouassembleur).
Cours Algorithmique Auteur : Christophe Darmangeat
103
Cest cela que sert un langage: vous pargner la programmation en binaire et vous permettre de vous faire
comprendredelordinateurdunemanire(relativement)lisible.
Cestpourquoitoutlangage,partirdunprogrammecrit,doitobligatoirementprocderunetraductionenlangage
machinepourqueceprogrammesoitexcutable.
Ilexistedeuxstratgiesdetraduction,cesdeuxstratgiestantparfoisdisponiblesauseindummelangage.
lelangagetraduitlesinstructionsaufuretmesurequellesseprsentent.Celasappellelacompilationla
vole,oulinterprtation.
lelangagecommencepartraduirelensembleduprogrammeenlangagemachine,constituantainsiun
deuximeprogramme(undeuximefichier)distinctphysiquementetlogiquementdupremier.Ensuite,et
ensuiteseulement,ilexcutecesecondprogramme.Celasappellelacompilation.
Ilvadesoiquunlangageinterprtestplusmaniable:onpeutexcuterdirectementsoncode-etdoncletester-au
furetmesurequonletape,sanspasserchaquefoisparltapesupplmentairedelacompilation.Maisilvaaussi
de soi quun programme compil sexcute beaucoup plus rapidement quun programme interprt: le gain est
courammentdunfacteur10,voire20ouplus.
Toute application destine un usage professionnel (ou mme, tout simplement srieux) est forcment une
applicationcompile.
Pourconcluresurlarcursivit,troisremarquesfondamentales.
la programmation rcursive, pour traiter certains problmes, est trs conomique pour le programmeur;
ellepermetdefaireleschosescorrectement,entrspeud'instructions.
en revanche, elle est trs dispendieuse de ressources machine. Car lexcution, la machine va tre
obligedecrerautantdevariablestemporairesquedetoursdefonctionenattente.
Last but not least, et cest le gag final, tout problme formul en termes rcursifs peut galement tre
formulentermesitratifs!Donc,silaprogrammationrcursivepeutfaciliterlavieduprogrammeur,elle
nest jamais indispensable. Mais a nous faisait tant plaisir de vous en parler que nous navons pas pu
rsister