Vous êtes sur la page 1sur 142

COURS DALGORITHMIQUE

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!

2. La numrotation de position en base dcimale


Lhumanitactuelle,pourreprsenternimportequelnombre,utiliseunsystmedenumrotationdeposition,base
dcimale.Quest-cequisecachederrirecetobscurjargon?
Commenons par la numrotationdeposition. Pour reprsenter un nombre,aussi grand soit-il, nous disposons dun
alphabet spcialis: une srie de 10 signes qui sappellent les chiffres. Et lorsque nous crivons un nombre en
mettant certains de ces chiffres les uns derrire les autres, lordre dans lequel nous mettons les chiffres est capital.
Ainsi, par exemple, 2 569 nest pas du tout le mme nombre que 9 562. Et pourquoi? Quelle opration, quel
dcodage mental effectuons-nous lorsque nous lisons une suite de chiffres reprsentant un nombre? Le problme,
cest que nous sommes tellement habitus faire ce dcodage de faon instinctive que gnralement nous nen
Cours Algorithmique Auteur : Christophe Darmangeat

3
connaissons plus les rgles. Mais ce nest pas trs compliqu de les reconstituer Et cest l que nous mettons le
doigt en plein dans la deuxime caractristique de notre systme de notation numrique: son caractre dcimal.
Lorsquenouscrivons9562,dequelnombreest-cequenousparlons?Dcomposonslalecturechiffreparchiffre,de
gauchedroite:
9562,cest9000+500+60+2.
Allonsplusloin,mmesicelaparatunpeubbte:
9000 cest9x1000 parcequele9estlequatrimechiffreenpartantdeladroite
500 cest5x100 parcequele5estletroisimechiffreenpartantdeladroite
60 cest6x10 parcequele6estledeuximechiffreenpartantdeladroite
2 cest2x1 parcequele2estlepremierchiffreenpartantdeladroite
Onpeutencorecrirecemmenombredunemanirelgrementdiffrente.Aulieude:
9562=9x1000+5x100+6x10+2,
Oncritque:
9562=(9x10x10x10)+(5x10x10)+(6x10)+(2)
Arrivscestadedelacomptition,toutesnosexcusesauxallergiques,maisilnousfautemployerunpetitpeude
jargonmathmatique.Cenestpasgrand-chose,etontoucheaubut.Alors,courage!Enfait,cejargonsersumeau
faitquelesmatheuxnotentlaligneci-dessuslaidedusymboledepuissance.Celadonne:
9562=9x10
3
+5x10
2
+6x10
1
+2x10
0
Etvoil,nousysommes.Nousavonsdgaglemcanismegnraldelareprsentationparnumrotationdeposition
enbasedcimale.
Alors, nous en savons assez pour conclure sur les consquences du choix de la base dcimale. Il y en a deux, qui
nenformentenfindecomptequuneseule:
parce que nous sommes en base dcimale, nous utilisons un alphabet numrique de dix symboles. Nous
nousservonsdedixchiffres,pasundeplus,pasundemoins.
toujoursparcenoussommesenbasedcimale,lapositiondundecesdixchiffresdansunnombredsigne
lapuissancededixparlaquellecechiffredoittremultiplipourreconstituerlenombre.Sijetrouveun7en
cinquimepositionpartirdeladroite,ce7nereprsentepas7mais7fois10
4
,soit70000.
Underniermotconcernantlechoixdelabasedix.Pourquoicelle-letpasuneautre?Aprstout,labasedixntait
pas le seul choix possible. Les babyloniens, qui furent de brillants mathmaticiens, avaient en leur temps adopt la
base 60 (dite sexagsimale). Cette base 60 impliquait certes dutiliser un assez lourd alphabet numrique de 60
chiffres. Mais ctait somme toute un inconvnient mineur, et en retour, elle possdait certains avantages non
ngligeables. 60 tant un nombre divisible par beaucoup dautres (cest pour cette raison quil avait t choisi), on
pouvait,rienquenregardantledernierchiffre,savoirsiunnombretaitdivisiblepar2,3,4,5,6,10,12,15,20et30.
Alorsquenbase10,nousnepouvonsimmdiatementrpondrelammequestionquepourlesdiviseurs2et5.La
base sexagsimale a certes disparu en tant que systmede notation des nombres. MaisBabylone nous a laiss en
hritage sa base sexagsimale dans la division du cercle en soixante parties (pour compter le temps en minutes et
secondes), et celle en 6 x 60 parties (pour les degrs de la gomtrie et de lastronomie).

Cours Algorithmique Auteur : Christophe Darmangeat



4
Alors,pourquoiavons-nousadoptlabasedcimale,moinspratiquebiendesgards?Nuldoutequecelatienneau
dispositif matriel grce auquel tout tre humain normalement constitu stocke spontanment une information
numrique:sesdoigts!

3. La numrotation de position en base binaire
Les ordinateurs, eux, comme on la vu, ont un dispositif physique fait pour stocker (de multiples faons) des
informations binaires. Alors, lorsquon reprsente une information stocke par un ordinateur, le plus simple est
dutiliserunsystmedereprsentationdeuxchiffres:lesfameux0et1.Maisunefoisdeplus,lechoixdu0etdu1
estunepureconvention,etonauraitpuchoisirnimportequelleautrepairedesymbolesleurplace.
Dans un ordinateur, le dispositif qui permet destocker de linformation est donc rudimentaire, bien plus rudimentaire
quelesmainshumaines.Avecdesmainshumaines,onpeutcoderdixchosesdiffrentes(enfaitbienplus,silonfait
desacrobatiesavecsesdoigts,maiscartonscecas).Avecunemplacementdinformationdordinateur,onestlimit
deux choses diffrentesseulement. Avec une telle information binaire, on neva pas loin. Voil pourquoi, ds leur
invention, les ordinateurs ont t conus pour manier ces informations par paquets de 0 et de 1. Et la taille de ces
paquetsatfixe8informationsbinaires.

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

Cours Algorithmique Auteur : Christophe Darmangeat



8

INTRODUCTION A LALGORITHMIQUE

Un langage de programmation est une convention pour donner des ordres un ordinateur. Ce nest pas cens
tre obscur, bizarre et plein de piges subtils. a, ce sont les caractristiques de la magie.
Dave Small

C'est illogique, Capitaine
Mr Spock

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.

2. Faut-il tre matheux pour tre bon en algorithmique ?


Consacrons quelques lignes cette question, car cette opinion aussi fortement affirme que faiblement fonde sert
rgulirement dexcuse: moi, de toute faon, je suis mauvais(e) en algo, jai jamais rien pig aux maths. Faut-il
trebonenmathspourexpliquercorrectementsoncheminquelquun?Nousvouslaissonsjuge.

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

5. Avec quelles conventions crit-on un algorithme ?


Historiquement,plusieurstypesdenotationsontreprsentdesalgorithmes.
Il y a eu notamment une reprsentation graphique, avec des carrs, des losanges, etc. quon appelait des
organigrammes.Aujourdhui,cettereprsentationestquasimentabandonne,pourdeuxraisons.Dabord,parceque
ds que lalgorithme commence grossir un peu, ce nest plus pratique du tout du tout. Ensuite parce que cette
reprsentation favorise le glissement vers un certain type de programmation, dite non structure (nous dfinirons ce
termeplustard),quelontenteaucontrairedviter.
Cest pourquoi on utilise gnralement une srie de conventions appele pseudo-code, qui ressemble un
langagedeprogrammationauthentiquedontonauraitvaculaplupartdesproblmesdesyntaxe.Cepseudo-code
est susceptible de varier lgrement dun livre (ou dun enseignant) un autre. Cest bien normal: le pseudo-code,
encore une fois, est purement conventionnel; aucune machine nest cense le reconnatre. Donc, chaque cuisinier
peut faire sa sauce sa guise, avec ses petites pices bien lui, sans que cela prte consquence.

Le pseudo-code que vous dcouvrirez dans les pages qui suivent possde quelques spcificits mineures.
Rassurez-vouscependant,celles-cirestentdansleslimitestoutfaitacceptables.

Cours Algorithmique Auteur : Christophe Darmangeat



12
P
PA AR RT TI IE E 1 (LES VARIABLES)
Nattribuez jamais la malveillance ce qui sexplique trs bien par lincomptence.
Napolon Bonaparte

A lorigine de toute erreur attribue lordinateur, vous trouverez au moins deux erreurs humaines. Dont
celle consistant attribuer lerreur lordinateur.
Anonyme
1. A quoi servent les variables ?
Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs. Il peut
sagir de donnes issues du disque dur, fournies par lutilisateur (frappes au clavier), etc. Il peut aussi sagir de
rsultatsobtenusparleprogramme,intermdiairesoudfinitifs.Cesdonnespeuventtredeplusieurstypes(onen
reparlera): elles peuvent tre des nombres, du texte, etc. Toujours est-il que ds que lon a besoin de stocker une
informationaucoursdunprogramme,onutiliseunevariable.
Pour employer une image, une variable est une bote, que le programme (lordinateur) va reprer par une tiquette.
Pouravoiraccsaucontenudelabote,ilsuffitdeladsignerparsontiquette.
En ralit, dans la mmoire vive de lordinateur, il ny a bien sr pas une vraie bote, et pas davantage de vraie
tiquettecolledessus.Danslordinateur,physiquement,ilyaunemplacementdemmoire,reprparuneadresse
binaire. Si on programmait dans un langage directement comprhensible par la machine, on devrait se fader de
dsigner nos donnes par de superbes 10011001 et autres 01001001 (enchant!). Mauvaise nouvelle: de tels
langages existent! Ils portent le doux nom dassembleur. Bonne nouvelle: ce ne sont pas les seuls langages
disponibles.

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.

4.2. Oprateur alphanumrique : &


Cetoprateurpermetdeconcatner,autrementditdagglomrer,deuxchanesdecaractres.

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



22
En informatique, une variable possde un moment donn une valeur et une seule. A la rigueur, elle peut ne pas
avoirdevaleurdutout(unefoisquelleatdclare,ettantquonnelapasaffecte.Asignalerquedanscertains
langages,lesvariablesnonencoreaffectessontconsidrescommevalantautomatiquementzro).Maiscequiest
important, cest que cette valeur justement, ne varie pas proprement parler. Du moins ne varie-t-elle que
lorsquelleestlobjetduneinstructiondaffectation.
La deuxime remarque concerne le signe de laffectation. En algorithmique, comme on la vu, cest le . Mais en
pratique, la quasi totalit des langages emploient le signe gal =. Et l, pour les dbutants, la confusion avec les
maths est galement facile. En maths, A = B et B = A sont deux propositions strictement quivalentes. En
informatique,absolumentpas,puisquecelarevientcrireABetBA,deuxchosesbiendiffrentes.Demme,
A=A+1,quienmathmatiques,constitueunequationsanssolution,reprsenteenprogrammationuneactiontout
fait licite (et de surcrot extrmement courante). Donc, attention !!! La meilleure des vaccinations contre cette
confusion consiste bien employer le signe en pseudo-code, signe qui a le mrite de ne pas laisser place
lambigut. Une fois acquis les bons rflexes avec ce signe, vous naurez plus aucune difficult passer au = des
langagesdeprogrammation.


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.

2. Les instructions de lecture et dcriture


Toutbtement,pourquelutilisateurentrela(nouvelle)valeurdeTiti,onmettra:
Lire Titi

Ds que le programme rencontre une instruction Lire, lexcution sinterrompt, attendant la frappe
dune valeur au clavier
Dslors,aussittquelatoucheEntre(Enter)atfrappe,lexcutionreprend.
Danslesensinverse,pourcrirequelquechoselcran,cestaussisimpleque :
Ecrire Toto
AvantdeLireunevariable,ilesttrsfortementconseilldcriredeslibellslcran,afindeprvenirlutilisateurde
cequildoitfrapper(sinon,lepauvreutilisateurpassesontempssedemandercequelordinateurattenddeluiet
cesttrsdsagrable!):
Ecrire Entrez votre nom :
Lire NomFamille
LectureetEcrituresontdesinstructionsalgorithmiquesquineprsententpasdedifficultsparticulires,unefoisquon
abienassimilceproblmedusensdudialogue(homme machine,oumachine homme).
Cours Algorithmique Auteur : Christophe Darmangeat

25

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:

Allez tout droit jusquau prochain carrefour


Si la rue droite est autorise la circulation Alors
Tournez droite
Avancez
Prenez la deuxime gauche
Sinon
Continuez jusqu la prochaine rue droite
Prenez cette rue
Prenez la premire droite
Finsi


Cours Algorithmique Auteur : Christophe Darmangeat

28
3. Quest ce quune condition ?
Une condition est une comparaison
Cettedfinitionestessentielle!Ellesignifiequuneconditionestcomposedetroislments:
unevaleur;
unoprateurdecomparaison;
uneautrevaleur.
Les valeurs peuvent tre a priori de nimporte quel type (numriques, caractres). Mais si lon veut que la
comparaisonaitunsens,ilfautquelesdeuxvaleursdelacomparaisonsoientdummetype!
Lesoprateursdecomparaisonsont:
= gal;
<> diffrentde;
< strictementpluspetitque;
> strictementplusgrandque;
=< pluspetitougal;
>= plusgrandougal
Lensemble des trois lments constituant la condition constitue donc, si lon veut, une affirmation qui, un moment
donn,estVRAIEouFAUSSE.
A noter que ces oprateurs de comparaison peuvent tout fait semployer avec des caractres. Ceux-ci sont cods
par la machine dans lordre alphabtique (rappelez vous le code ASCII vu dans le prambule), les majuscules tant
systmatiquementplacesavantlesminuscules.Ainsiona:
t < w VRAI
Maman > Papa FAUX
maman > Papa VRAI

REMARQUE TRS IMPORTANTE
En formulant une condition dans un algorithme, il faut se mfier comme de la peste de certains
raccourcis du langage courant, ou de certaines notations valides en mathmatiques, mais qui
mnent des non-sens informatiques. Prenons par exemple la phrase Toto est compris entre
5 et 8 . On peut tre tent de la traduire par : 5 < Toto < 8.
Or, une telle expression, qui a du sens en franais, comme en mathmatiques, ne veut rien
dire en programmation. En effet, elle comprend deux oprateurs de comparaison, soit un de
trop, et trois valeurs, soit l aussi une de trop. On va voir dans un instant comment traduire
convenablement une telle condition.

Cours Algorithmique Auteur : Christophe Darmangeat

29
Exercice 3.1
Ecrire un algorithme qui demande un nombre lutilisateur, et linforme ensuite si
ce nombre est positif ou ngatif (on laisse de ct le cas o le nombre vaut zro).

4. Conditions composes
Certainsproblmesexigentparfoisdeformulerdesconditionsquinepeuventpastreexprimessouslaformesimple
exposeci-dessus.ReprenonslecasTotoestinclusentre5et8.Enfaitcettephrasecachenonune,maisdeux
conditions. Car elle revient dire que Toto est suprieur 5 et Toto est infrieur 8. Il y a donc bien l deux
conditions,reliesparcequonappelleunoprateurlogique,lemotET.
Commeonlavoquplushaut,linformatiquemetnotredispositionquatreoprateurslogiques:ET,OU,NON,et
XOR.
LeETalemmesenseninformatiquequedanslelangagecourant.Pourque:
Condition1ETCondition2
soitVRAI,ilfautimprativementqueCondition1soitVRAIetqueCondition2soitVRAI.
IlfautsemfierunpeuplusduOU.Pourque:
Condition1OUCondition2
soit VRAI, il suffit que Condition1 soit VRAIE ou que Condition2 soit VRAIE. Le point important est que si
Condition1 est VRAIE et que Condition2 est VRAIE aussi, Condition1 OU Condition2 est VRAIE. Le OU
informatique ne veut donc pas dire ou bien (sauf dans certaines formes rares, dnommes OU exclusif et
notesXOR).
LeXOR(ouOUexclusif)fonctionnedelamaniresuivante.Pourque
Condition1XORCondition2
soit VRAI, il faut que Condition1 soit VRAI, ou bien que Condition2 soit VRAI. Mais si toutes les deux sont
fausses,ouquetouteslesdeuxsontVRAI,alorslersultatglobalestconsidrcommeFAUX.
NousinsistonssurlefaitqueleXORestuneraret,dontilnestpasstrictementindispensabledesencombreren
programmation.
Enfin,leNONinverseunecondition:
NON(Condition1)
estVRAIsiCondition1estFAUX,etilseraFAUXsiCondition1estVRAI.
Vousvous demandezpeut-tre quoi sertceNON. Aprs tout, plutt qucrire NON(Prix > 20), il serait plus simple
dcriretoutbonnementPrix=<20.Danscecas,cestvidentquonsecompliqueinutilementlavieavecleNON.
Maisonrencontreraplusloindessituationsdanslesquellesilrenddeprcieuxservices.
On reprsente frquemment tout ceci dans des tables de vrit(C1 et C2 reprsentent deux conditions, et on
envisagechaquefoislesquatrecaspossibles):
Cours Algorithmique Auteur : Christophe Darmangeat

30

C1etC2 C2Vrai C2Faux


C1Vrai Vrai Faux
C1Faux Faux Faux

C1ouC2 C2Vrai C2Faux


C1Vrai Vrai Vrai
C1Faux Vrai Faux

C1xorC2 C2Vrai C2Faux


C1Vrai Faux Vrai
C1Faux Vrai Faux

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

Cours Algorithmique Auteur : Christophe Darmangeat



32
Nousavonsfaitdesconomies:aulieudedevoirtapertroisconditions,dontunecompose,nousnavonsplusque
deux conditions simples. Mais aussi, et surtout, nous avons fait des conomies sur le temps dexcution de
lordinateur.Silatempratureestinfrieurezro,celui-cicritdornavantCestdelaglaceetpassedirectement
lafin,sanstreralentiparlexamendautrespossibilits(quisontforcmentfausses).
Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle est galement plus
performantelexcution.
Les structures de tests imbriqus sont donc un outil indispensable la simplification et loptimisation des
algorithmes.

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

Cours Algorithmique Auteur : Christophe Darmangeat



43
Exercice 5.1
Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la
rponse convienne.


Exercice 5.2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu ce que la rponse
convienne. En cas de rponse suprieure 20, on fera apparatre un message : Plus petit ! , et
inversement, Plus grand ! si le nombre est infrieur 10.

Exercice 5.3
Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite affiche les dix nombres
suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de
18 27.

LE GAG DE LA JOURNE
Cest dcrire une structure TantQue dans laquelle le boolen nest jamais VRAI. Le
programme ne rentre alors jamais dans la superbe boucle sur laquelle vous avez tant su !
Mais la faute symtrique est au moins aussi dsopilante.
Elle consiste crire une boucle dans laquelle le boolen ne devient jamais FAUX. Lordinateur
tourne alors dans la boucle comme un drat et nen sort plus. Seule solution, quitter le
programme avec un dmonte-pneu ou un bton de dynamite. La boucle infinie est une des
hantises les plus redoutes des programmeurs. Cest un peu comme le verre baveur, le poil
gratter ou le bleu de mthylne : cest cul, mais a fait toujours rire.
Cette faute de programmation grossire mais frquente - ne manquera pas dgayer
lambiance collective de cette formation et accessoirement dtancher la soif proverbiale de
vos enseignants.

2. Boucler en comptant, ou compter en bouclant
Dans le dernier exercice, vous avez remarqu quune boucle pouvait tre utilise pour augmenter la valeur dune
variable. Cette utilisation des boucles est trs frquente, et dans ce cas, il arrive trs souvent quon ait besoin
deffectuerunnombredtermindepassages.Or,apriori,notrestructureTantQuenesaitpaslavancecombiende
toursdeboucleellevaeffectuer(puisquelenombredetoursdpenddelavaleurdunboolen).

Cours Algorithmique Auteur : Christophe Darmangeat



44
Cestpourquoiuneautrestructuredeboucleestnotredisposition:
Variable Truc en Entier
Dbut
Truc 0
TantQue Truc < 15
Truc = Truc + 1
Ecrire Passage numro : , Truc
FinTantQue
Fin

Equivaut :

Variable Truc en Entier
Dbut
Pour Truc = 1 15
Ecrire Passage numro : , Truc
Truc Suivant
Fin
Insistons:lastructurePourSuivantnestpasdutoutindispensable;onpourraitfortbienprogrammertoutesles
situationsdeboucleuniquementavecunTantQue.LeseulintrtduPourestdpargnerunpeudefatigueau
programmeur, en lui vitant de grer lui-mme la progression de la variable qui lui sert de compteur (on parle
dincrmentation,encoreunmotquiferaforteimpression).
Dit dune autre manire, la structure Pour Suivant est un cas particulier de TantQue: celui o le programmeur
peutdnombrerlavancelenombredetoursdebouclesncessaires.
IlfautnoterquedansunestructurePourSuivant,laprogressionducompteurestlaissevotrelibredisposition.
Danslaplupartdescas,onabesoindunevariablequiaugmentede1chaquetourdeboucle.Onneprcisealors
rien linstruction Pour; celle-ci, par dfaut, comprend quil va falloir procder cette incrmentation de 1
chaquepassage,encommenantparlapremirevaleuretenterminantparladeuxime.
Maissivoussouhaitezuneprogressionplusspciale,de2en2,oude3en3,ouenarrire,de1en1,oude10en
10,cenestpasunproblme:ilsuffiradeleprciservotreinstructionPourenluirajoutantlemotPasetla
valeurdecepas(Lepasdontnousparlons,cestlepasdumarcheur,stepenanglais).
Naturellement,quandonstipuleunpasngatifdansuneboucle,lavaleurinitialeducompteurdoittresuprieure
sa valeur finale si lon veut que la boucle tourne! Dans le cas contraire, on aura simplement crit une boucle dans
laquelleleprogrammenerentrerajamais.
NouspouvonsdoncmaintenantdonnerlaformulationgnraledunestructurePour.Sasyntaxegnraleest:
Pour Compteur = Initial Final Pas ValeurDuPas

Instructions

Compteur suivant
LesstructuresTantQuesontemployesdanslessituationsolondoitprocderuntraitementsystmatiquesurles
lmentsdunensembledontonneconnatpasdavancelaquantit,commeparexemple:
lecontrledunesaisie;
lagestiondestoursdunjeu(tantquelapartienestpasfinie,onrecommence);
lalecturedesenregistrementsdunfichier(cf.Partie9).
Cours Algorithmique Auteur : Christophe Darmangeat

45
Les structures Pour sont employes dans les situations o lon doit procder un traitement systmatique sur les
lmentsdunensembledontonconnatdavancelaquantit.
Nous verrons dans les chapitres suivants des sries dlments appels tableaux (parties 7 et 8) et chanes de
caractres(partie9).Selonlescas,lebalayagesystmatiquedeslmentsdecessriespourratreeffectuparun
Pour ou par un TantQue : tout dpend si la quantit dlments balayer (donc le nombre de tours de boucles
ncessaires)peuttrednombrelavanceparleprogrammeurounon.

3. Des boucles dans des boucles
( Tout est dans tout, et rciproquement )
Onrigole,onrigole!
Demmequelespoupesrussescontiennentdautrespoupesrusses,demmequunestructureSIALORSpeut
contenirdautresstructuresSIALORS,unebouclepeuttoutfaitcontenirdautresboucles.Yapasderaison.
Variables Truc, Trac en Entier
Pour Truc 1 15
Ecrire Il est pass par ici
Pour Trac 1 6
Ecrire Il repassera par l
Trac Suivant
Truc Suivant
Danscetexemple,leprogrammecriraunefoisilestpassparicipuissixfoisdesuiteilrepasseraparl,etceci
quinzefoisentout.Alafin,ilyauradonceu15x6=90passagesdansladeuximeboucle(celledumilieu),donc90
critureslcrandumessageilrepasseraparl.Notezladiffrencemarquanteaveccettestructure:
Variables Truc, Trac en Entier
Pour Truc 1 15
Ecrire Il est pass par ici
Truc Suivant
Pour Trac 1 6
Ecrire Il repassera par l
Trac Suivant
Ici,ilyauraquinzecrituresconscutivesdeilestpassparici,puissixcrituresconscutivesdeilrepasserapar
l,etceseratout.
Desbouclespeuventdonctreimbriques(casn1)ousuccessives(casn2).Cependant,ellesnepeuventjamais,
augrandjamais,trecroises.Celanauraitaucunsenslogique,etdeplus,bienpeudelangagesvousautoriseraient
neserait-cequcrirecettestructureaberrante.
Variables Truc, Trac en Entier
Pour Truc
instructions
Pour Trac
instructions
Truc Suivant
instructions
Trac Suivant
Pourquoi imbriquer des boucles? Pour la mme raison quon imbrique des tests. La traduction en
Cours Algorithmique Auteur : Christophe Darmangeat

46
bonfranaisduntest,cestuncas.Ehbienuncas(parexemple,est-ceunhommeouunefemme?)peut
trsbiensesubdiviserendautrescas(a-t-ilplusoumoinsde18ans?).
Demme,uneboucle,cestuntraitementsystmatique,unexamendunesriedlmentsunparun(parexemple,
prenons tous les employs de lentreprise un par un). Eh bien, on peut imaginer que pour chaque lment ainsi
considr (pour chaque employ), on doive procder un examen systmatique dautre chose (prenons chacune
des commandes que cet employ a traites). Voil un exemple typique de boucles imbriques: on devra
programmer une boucle principale (celle qui prend les employs un par un) et lintrieur, une boucle secondaire
(cellequiprendlescommandesdecetemployuneparune).
Dans la pratique de la programmation, la matrise des boucles imbriques est ncessaire, mme si elle nest pas
suffisante.ToutlecontrairedAlainDelon,enquelquesorte.

4. Et encore une btise ne pas faire !
Examinonslalgorithmesuivant:
Variable Truc en Entier
Pour Truc 1 15
Truc Truc * 2
Ecrire Passage numro : , Truc
Truc Suivant
VousremarquerezquenousfaisonsicigrerendoublelavariableTruc,cesdeuxgestionstantcontradictoires.
Dunepart,lalignePouraugmentelavaleurdeTrucde1chaquepassage.DautrepartlaligneTrucTruc*
2doublelavaleurdeTrucchaquepassage.Ilvasansdirequedetellesmanipulationsperturbentcompltementle
droulementnormaldelaboucle,etsontcauses,sinondeplantages,toutaumoinsdexcutionserratiques.
LE GAG DE LA JOURNE
Il consiste donc manipuler, au sein dune boucle Pour, la variable qui sert de compteur cette
boucle. Cette technique est proscrire absolument sauf bien sr, si vous cherchez un
prtexte pour rgaler tout le monde au bistrot.
Mais dans ce cas, nayez aucune inhibition, proposez-le directement, pas besoin de prtexte.




Cours Algorithmique Auteur : Christophe Darmangeat

47
Exercice 5.4
Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite crit la table de
multiplication de ce nombre, prsente comme suit (cas o l'utilisateur entre le nombre 7) :

Table de 7 :

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70


Exercice 5.5
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers
jusqu ce nombre. Par exemple, si lon entre 5, le programme doit calculer :

1 + 2 + 3 + 4 + 5 = 15

Exercice 5.6
Ecrire un algorithme qui demande un nombre de dpart, et qui calcule sa factorielle.

NB : la factorielle de 8, note 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8


Exercice 5.7
Ecrire un algorithme qui demande successivement 20 nombres lutilisateur, et qui lui dise
ensuite quel tait le plus grand parmi ces 20 nombres :

Entrez le nombre numro 1 : 12
Entrez le nombre numro 2 : 14
Etc.
Entrez le nombre numro 20 : 6

Le plus grand de ces nombres est : 14

Modifiez ensuite lalgorithme pour que le programme affiche de surcrot en quelle position
avait t saisie ce nombre :

Ctait le nombre numro 2



Cours Algorithmique Auteur : Christophe Darmangeat

48
Exercice 5.8
Rcrire lalgorithme prcdent, mais cette fois-ci on ne connat pas davance combien
lutilisateur souhaite saisir de nombres. La saisie des nombres sarrte lorsque lutilisateur
entre un zro.

Exercice 5.9
Lire la suite des prix (en euros entiers et termine par zro) des achats dun client. Calculer la
somme quil doit, lire la somme quil paye, et simuler la remise de la monnaie en affichant les
textes 10 E , 5 E et 1 E autant de fois quil y a de coupures de chaque sorte rendre.

Exercice 5.10
Ecrire un algorithme qui permette de connatre ses chances de gagner au tierc, quart,
quint et autres impts volontaires.

On demande lutilisateur le nombre de chevaux partants, et le nombre de chevaux jous.
Les deux messages affichs devront tre :

Dans lordre : une chance sur X de gagner
Dans le dsordre : une chance sur Y de gagner

X et Y nous sont donns par la formule suivante, si n est le nombre de chevaux partants et p
le nombre de chevaux jous :

X = n ! / (n - p) !
Y = n ! / (p ! * (n p) !)

NB : cet algorithme peut tre crit dune manire simple, mais relativement peu performante.
Ses performances peuvent tre singulirement augmentes par une petite astuce. Vous
commencerez par crire la manire la plus simple, puis vous identifierez le problme, et
crirez une deuxime version


Cours Algorithmique Auteur : Christophe Darmangeat

49
P
PA AR RT TI IE E 6 (LES TABLEAUX)
Si on ment un compilateur, il prendra sa revanche.
Henry Spencer.

Bonne nouvelle! On vous avait annonc quil y a avait en tout et pour tout quatre structures logiques dans la
programmation.Ehbien,ayest,onlesatoutespassesenrevue.
Mauvaisenouvelle,ilvousrestetoutdemmequelquespetiteschosesapprendre
1. Utilit des tableaux
Imaginons que dans un programme, nous ayons besoin simultanment de 12 valeurs (par exemple, des notes pour
calculer une moyenne). videmment, la seule solution dont nous disposons lheure actuelle consiste dclarer
douze variables, appeles par exemple Notea, Noteb, Notec, etc. Bien sr, on peut opter pour une notation un peu
simplifie, par exemple N1, N2, N3, etc. Mais cela ne change pas fondamentalement notre problme, car arriv au
calcul,etaprsunesuccessiondedouzeinstructionsLiredistinctes,celadonneraobligatoirementuneatrocitdu
genre:
Moy = (N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9 + N10 + N11 + N12 ) / 12
Ouf!Cesttoutdemmebigrementlaborieux.Etpourunpeuquenoussoyonsdansunprogrammedegestionavec
quelquescentainesouquelquesmilliersdevaleurstraiter,alorslcestlesuicidedirect.
Cerise sur le gteau, si en plus on est dans une situation on lon ne peut pas savoir davance combien il y aura de
valeurstraiter,lonestcarrmentcuits.
Cest pourquoi la programmation nous permet de rassembler toutes ces variables en une seule, au sein de laquelle
chaquevaleurseradsigneparunnumro.Enbonfranais,celadonneraitdoncquelquechosedugenrelanote
numro1,lanotenumro2,lanotenumro8.Cestlargementpluspratique,vousvousendoutez.
Un ensemble de valeurs portant le mme nom de variable et repres par un nombre, sappelle un
tableau, ou encore une variable indice.
Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle surprise lindice.
Chaque fois que lon doit dsigner un lment du tableau, on fait figurer le nom du tableau, suivi de
lindice de llment, entre parenthses.

2. Notation et utilisation algorithmique
Dans notre exemple, nous crerons donc un tableau appel Note. Chaque note individuelle (chaque lment du
tableau Note) sera donc dsigne Note(0), Note(1), etc. Eh oui, attention, les indices des tableaux commencent
gnralement0,etnon1.
Cours Algorithmique Auteur : Christophe Darmangeat

50
Untableaudoittredclarcommetel,enprcisantleplusgrandindiceetletypedevaleursquilcontiendra.Comme
nousvenonsdevoirquelesindicescommencentzro,consquenceimparable,sionveut12emplacements,leplus
grandindicesera11(audbut,adroute,maisavecletemps,onsefaittout).
Tableau Note(11) en Entier
On peut crer des tableaux contenant des variables de tous types: tableaux de numriques, bien sr,mais aussi
tableauxdecaractres,tableauxdeboolens,tableauxdetoutcequiexistedansunlangagedonncommetypede
variables. Par contre, hormis dans quelques rares langages, on ne peut pas faire un mixage de types diffrents de
valeursauseindunmmetableau.
Lnormeavantagedestableaux,cestquonvapouvoirlestraiterenfaisantdesboucles.Parexemple,poureffectuer
notrecalculdemoyenne,celadonneraparexemple:
Tableau Note(11) en Entier
Variables i, Som en Entier
Variable Moy en Rel
Pour i 0 11
Ecrire Entrez la note n, i
Lire Note(i)
i Suivant
Som 0
Pour i 0 11
Som = Som + Note(i)
i Suivant
Moy = Som / 12
NB: On a fait deux boucles successives pour plus de lisibilit, mais on aurait tout aussi bien pu nen crire quune
seuledanslaquelleonauraittoutfaitdunseulcoup.
Remarquegnrale:lindicequisertdsignerleslmentsduntableaupeuttreexprimdirectementcommeun
nombreenclair,maisilpeuttreaussiunevariable,ouuneexpressioncalcule.
Lavaleurdunindicedoittoujours:
tre gale au moins 0 (dans quelques rares langages, le premier lment dun tableau porte lindice 1).
Mais nous avons choisi ici de commencer la numrotation des indices zro, comme cest le cas en
langageCetenVisualBasic.Doncattention,Truc(6)estleseptimelmentdutableauTruc!
treunnombreentier.Quelquesoitlelangage,llmentTruc(3,1416)nexistejamais.
tre infrieure ou gale au nombre dlments du tableau (moins 1, si lon commence la numrotation
zro). Si le tableau Bidule a t dclar comme ayant 25 lments, la prsence dans une ligne, sous une
formeousousuneautre,deBidule(32)dclencheraautomatiquementuneerreur.
NB:Silonestdansunlangageolesindicescommencentzro,ilfautentenircompteladclaration:
Tableau Note(12) en Entier
creraenfaituntableaude13lments,lepluspetitindicetant0etleplusgrand12.

Cours Algorithmique Auteur : Christophe Darmangeat



51
LE GAG DE LA JOURNE
Il consiste confondre, dans sa tte et / ou dans un algorithme, lindice dun lment dun
tableau avec le contenu de cet lment. La troisime maison de la rue na pas forcment trois
habitants, et la vingtime vingt habitants. En notation algorithmique, il ny a aucun rapport entre i
et truc(i).

Exercice 6.1
Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les
mettant toutes zro.

Exercice 6.2
Ecrire un algorithme qui dclare et remplisse un tableau contenant les six voyelles de
lalphabet latin.

Exercice 6.3
Ecrire un algorithme qui dclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs
par lutilisateur.

Exercice 6.4
Que produit lalgorithme suivant ?

Tableau Nb(5) en Entier
Variable i en Entier
Dbut
Pour i 0 5
Nb(i) i * i
i Suivant
Pour i 0 5
Ecrire Nb(i)
i Suivant
Fin

Peut-on simplifier cet algorithme avec le mme rsultat ?




Cours Algorithmique Auteur : Christophe Darmangeat

52
Exercice 6.5
Que produit lalgorithme suivant ?

Tableau N(6) en Entier
Variables i, k en Entier

Dbut
N(0) 1
Pour k 1 6
N(k) N(k-1) + 2
k Suivant
Pour i 0 6
Ecrire N(i)
i Suivant
Fin

Peut-on simplifier cet algorithme avec le mme rsultat ?

Exercice 6.6
Que produit lalgorithme suivant ?

Tableau Suite(7) en Entier
Variable i en Entier
Dbut
Suite(0) 1
Suite(1) 1
Pour i 2 7
Suite(i) Suite(i-1) + Suite(i-2)
i suivant
Pour i 0 7
Ecrire Suite(i)
i suivant
Fin

3. Tableaux dynamiques
Il arrive frquemment que lon ne connaisse pas lavance le nombre dlments que devra comporter un tableau.
Bien sr, une solution consisterait dclarer un tableau gigantesque (10 000 lments, pourquoi pas, au diable les
varices)pourtresrquearentre.Maisdunepart,onnenserajamaisparfaitementsr,dautrepart,enraison
de limmensit de la place mmoire rserve et la plupart du temps non utilise, cest un gchis prjudiciable la
rapidit,voirelaviabilit,denotrealgorithme.
Aussi, pour parer ce genre de situation, a-t-on la possibilit de dclarer le tableau sans prciser au dpart son
nombredlments.Cenestquedansunsecondtemps,aucoursduprogramme,quelonvafixercenombreviaune
instructionderedimensionnement:Redim.Notezque tantquonnapasprcis lenombredlmentsdun tableau,
dunemanireouduneautre,cetableauestinutilisable.
Exemple:onveutfairesaisirdesnotespouruncalculdemoyenne,maisonnesaitpascombienilyauradenotes
saisir.Ledbutdelalgorithmeseraquelquechosedugenre:
Cours Algorithmique Auteur : Christophe Darmangeat

53
Tableau Notes() en Entier
Variable nb en Entier
Dbut
Ecrire Combien y a-t-il de notes saisir ?
Lire nb
Redim Notes(nb-1)


Cettetechniquenariendesorcier,maisellefaitpartiedelarsenaldebasedelaprogrammationengestion.
Exercice 6.7
Ecrivez la fin de lalgorithme 6.3 afin que le calcul de la moyenne des notes soit effectu et affich
lcran.

Exercice 6.8
Ecrivez un algorithme permettant lutilisateur de saisir un nombre quelconque de valeurs, qui
devront tre stockes dans un tableau. Lutilisateur doit donc commencer par entrer le nombre de
valeurs quil compte saisir. Il effectuera ensuite cette saisie. Enfin, une fois la saisie termine, le
programme affichera le nombre de valeurs ngatives et le nombre de valeurs positives.

Exercice 6.9
Ecrivez un algorithme calculant la somme des valeurs dun tableau (on suppose que le tableau a t
pralablement saisi).

Exercice 6.10
Ecrivez un algorithme constituant un tableau, partir de deux tableaux de mme longueur
pralablement saisis. Le nouveau tableau sera la somme des lments des deux tableaux de dpart.

Exemple :

Tableau 1 : 4 8 7 9 1 5 4 6
Tableau 2 : 7 6 5 2 1 3 7 4
Tableau constituer : 11 14 12 11 2 8 11 - 10

Exercice 6.11
Toujours partir de deux tableaux prcdemment saisis, crivez un algorithme qui calcule le
schtroumpf des deux tableaux. Pour calculer le schtroumpf, il faut multiplier chaque lment du
tableau 1 par chaque lment du tableau 2, et additionner le tout.

Cours Algorithmique Auteur : Christophe Darmangeat

54
Exemple :

Tableau 1 : 4 8 7 - 12
Tableau 2 : 3 6
Le Schtroumpf :
3*4 + 3*8 + 3*7 + 3*12 + 6*4 + 6*8 + 6*7 + 6*12 = 279

Exercice 6.12
Ecrivez un algorithme qui permette la saisie dun nombre quelconque de valeurs, sur le principe de
lex 6.8. Toutes les valeurs doivent tre ensuite augmentes de 1, et le nouveau tableau sera affich
lcran.

Exercice 6.13
Ecrivez un algorithme permettant, toujours sur le mme principe, lutilisateur de saisir un nombre
dtermin de valeurs. Le programme, une fois la saisie termine, renvoie la plus grande valeur en
prcisant quelle position elle occupe dans le tableau. On prendra soin deffectuer la saisie dans un
premier temps, et la recherche de la plus grande valeur du tableau dans un second temps.

Exercice 6.14
Toujours et encore sur le mme principe, crivez un algorithme permettant, lutilisateur de saisir
les notes d'une classe. Le programme, une fois la saisie termine, renvoie le nombre de ces notes
suprieures la moyenne de la classe.

Cours Algorithmique Auteur : Christophe Darmangeat

55
P
PA AR RT TI IE E 7 (TECHNIQUES RUSES )
Informatique : alliance d'une science inexacte et d'une activit humaine faillible
Luc Fayard

Unefoisnestpascoutume,cechapitrenapaspourbutdeprsenterunnouveautypededonnes,unnouveaujeu
dinstructions,...
Sonproposestdedtaillerquelquestechniquesdeprogrammationquipossdentdeuxgrandspointscommuns:
leurconnaissanceestparfaitementindispensable;
ellessontunrienfinaudes.
Et que valent quelques kilos daspirine, compar lineffable bonheur procur par la comprhension suprme des
arcanesdelalgorithmique?
1. Tri dun tableau : le tri par insertion
Premire de ces ruses de sioux, et par ailleurs tarte la crme absolue du programmeur, donc: le tri de tableau.

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.

Cours Algorithmique Auteur : Christophe Darmangeat



64
Exercice 8.1
Ecrivez un algorithme remplissant un tableau de 6 sur 13, avec des zros.


Exercice 8.2
Quel rsultat produira cet algorithme ?

Tableau X(1, 2) en Entier
Variables i, j, val en Entier

Dbut
Val 1
Pour i 0 1
Pour j 0 2
X(i, j) Val
Val Val + 1
j Suivant
i Suivant
Pour i 0 1
Pour j 0 2
Ecrire X(i, j)
j Suivant
i Suivant
Fin

Exercice 8.3
Quel rsultat produira cet algorithme ?

Tableau X(1, 2) en Entier
Variables i, j, val en Entier

Dbut
Val 1
Pour i 0 1
Pour j 0 2
X(i, j) Val
Val Val + 1
j Suivant
i Suivant
Pour j 0 2
Pour i 0 1
Ecrire X(i, j)
i Suivant
j Suivant
Fin



Cours Algorithmique Auteur : Christophe Darmangeat

65
Exercice 8.4
Quel rsultat produira cet algorithme ?

Tableau T(3, 1) en Entier
Variables k, m, en Entier

Dbut
Pour k 0 3
Pour m 0 1
T(k, m) k + m
m Suivant
k Suivant
Pour k 0 3
Pour m 0 1
Ecrire T(k, m)
m Suivant
k Suivant
Fin

Exercice 8.5
Mmes questions, en remplaant la ligne :

T(k, m) k + m

par

a) T(k, m) 2 * k + (m + 1)

b) T(k, m) (k + 1) + 4 * m

Exercice 8.6
Soit un tableau T deux dimensions (12, 8) pralablement rempli de valeurs numriques.

Ecrire un algorithme qui recherche la plus grande valeur au sein de ce tableau.






Cours Algorithmique Auteur : Christophe Darmangeat

66
Exercice 8.7
Ecrire un algorithme de jeu de dames trs simplifi.

Lordinateur demande lutilisateur dans quelle case se trouve son pion (quelle ligne,
quelle colonne). On met en place un contrle de saisie afin de vrifier la validit des
valeurs entres.

Ensuite, on demande lutilisateur quel mouvement il veut effectuer : 0 (en haut
gauche), 1 (en haut droite), 2 (en bas gauche), 3 (en bas droite).

Si le mouvement est impossible (i.e. on sort du damier ), on le signale lutilisateur et on
sarrte l . Sinon, on dplace le pion et on affiche le damier rsultant, en affichant un
O pour une case vide et un X pour la case o se trouve le pion.


3. Tableaux n dimensions
Si vous avez compris le principe des tableaux deux dimensions, sur le fond, il ny a aucun problme passer au
maniement de tableaux trois, quatre, ou pourquoi pas neuf dimensions. Cest exactement la mme chose. Si on
dclareuntableauTiti(2,4,3,3),ilsagitdunespacemmoirecontenant3x5x4x4=240valeurs.Chaquevaleury
estrepreparquatrecoordonnes.
Leprincipalobstacleaumaniementsystmatiquedecestableauxplusdetroisdimensionsestqueleprogrammeur,
quand il conoit son algorithme, aime bien faire des petits gribouillis, des dessins immondes, imaginer les boucles
dans sa tte, etc. Or, autant il est facile dimaginer concrtement un tableau une dimension, autant cela reste
faisable pour deux dimensions, autant cela devient lapanage dune minorit privilgie pour les tableaux trois
dimensions et hors de porte de tout mortel au-del. Cest comme a, lesprit humain a du mal se reprsenter les
chosesdanslespace,etcriegrcedsquilsautedanslhyperespace(oui,cestcommeaqueasappelleaudel
detroisdimensions).
Donc,pourdesraisonsuniquementpratiques,lestableauxplusdetroisdimensionssontrarementutilisspardes
programmeurs non matheux (car les matheux, de par leur formation, ont une fcheuse propension manier des
espaces ndimensionscomme qui rigole, mais ce sont bien les seuls, et laissons les dans leur coin, cest pas des
genscommenous).



Cours Algorithmique Auteur : Christophe Darmangeat

67
P
PA AR RT TI IE E 9 (LES FONCTIONS PRDFINIES)
Il y a deux mthodes pour crire des programmes sans erreurs. Mais il ny a que la troisime qui marche
Anonyme
Certainstraitementsnepeuventtreeffectusparunalgorithme,aussisavantsoit-il.Dautresnepeuventltrequau
prixdesouffrancesindicibles.
Cestparexemplelecasducalculdusinusdunangle:pourenobtenirunevaleurapproche,ilfaudraitappliquerune
formule dune complexit vous glacer le sang. Aussi, que se passe-t-il sur les petites calculatrices que vous
connaissez tous? On vous fournit quelques touches spciales, dites touches de fonctions, qui vous permettent par
exempledeconnatreimmdiatementcersultat.Survotrecalculatrice,sivousvoulezconnatrelesinusde35,vous
taperez35,puislatoucheSIN,etvousaurezlersultat.
Tout langage de programmation propose ainsi un certain nombre de fonctions; certaines sont indispensables, car
elles permettent deffectuer des traitements qui seraient sans elles impossibles. Dautres servent soulager le
programmeur,enluipargnantdelongsetpnibles-algorithmes.
1. Structure gnrale des fonctions
Reprenons lexemple du sinus. Les langages informatiques, qui se doivent tout de mme de savoir faire la mme
chosequunecalculatrice19F90,proposentgnralementunefonctionSIN.Sinousvoulonsstockerlesinusde35
danslavariableA,nouscrirons:
A Sin(35)
Unefonctionestdoncconstituedetroisparties:
lenomproprementditdelafonction.Cenomnesinventepas!Ildoit imprativementcorrespondreune
fonctionproposeparlelangage.Dansnotreexemple,cenomestSIN.
deuxparenthses,uneouvrante,unefermante.
une liste de valeurs, indispensables la bonne excution de la fonction. Ces valeurs sappellent des
arguments,oudesparamtres.Certainesfonctionsexigentunseulargument,dautresdeux,etc.etdautres
encoreaucun.Anoterquemmedanslecasdecesfonctionsnexigeantaucunargument,lesparenthses
restent obligatoires. Le nombre darguments ncessaire pour une fonction donne ne sinvente pas: il est
fix par le langage. Par exemple, la fonction sinus a besoin dun argument (ce nest pas surprenant, cet
argumentestlavaleurdelangle).Sivousessayezdelexcuterenluidonnantdeuxarguments,ouaucun,
cela dclenchera une erreur lexcution. Notez galement que les arguments doivent tre dun certain
type,etquilfautrespectercestypes.

Cours Algorithmique Auteur : Christophe Darmangeat

68
Exercice 9.1
Parmi ces affectations (considres indpendamment les unes des autres), lesquelles
provoqueront des erreurs, et pourquoi ?

Variables A, B, C en Numrique
Variables D, E en Caractre

...
A Sin(B)
...
A Sin(A + B * C)
...
B Sin(A) Sin(D)
...
D Sin(A / B)
...
C Cos(Sin(A)


2. Les fonctions de texte
Unecatgorieprivilgiedefonctionsestcellequinouspermetdemanipulerdeschanesdecaractres.Nousavons
djvuquonpouvaitfacilementcollerdeuxchaneslunelautreavecloprateurdeconcatnation&.Maisce
quenousnepouvionspasfaire,etquivatremaintenantpossible,cestpratiquerdesextractionsdechanes(moins
douloureuses,ilfautlenoter,quelesextractionsdentaires).
Tous les langages proposent peuouprou les fonctionssuivantes,mmesi le nom et la syntaxe peuventvarier dun
langagelautre:
Len(chane):renvoielenombredecaractresdunechane.
Mid(chane,n1,n2):renvoieunextraitdelachane,commenantaucaractren1etfaisantn2caractresdelong.
Ce sont les deux seules fonctions de chanes rellement indispensables. Cependant, pour nous pargner des
algorithmesfastidieux,leslangagesproposentgalement:
Left(chane,n):renvoielesncaractreslesplusgauchedanschane.
Right(chane,n):renvoielesncaractreslesplusdroitedanschane.
Trouve(chane1,chane2):renvoieunnombrecorrespondantlapositiondechane2danschane1.Sichane2nest
pascomprisedanschane1,lafonctionrenvoiezro.
Exemples:
Len(Bonjour, a va ?) vaut 16
Len() vaut 0
Mid(Zorro is back, 4, 7) vaut ro is b
Mid(Zorro is back, 12, 1) vaut c
Left(Et pourtant, 8) vaut Et pourt
Right(Et pourtant, 4) vaut t
Trouve(Un pur bonheur, pur) vaut 4
Trouve(Un pur bonheur, techno) vaut 0
Cours Algorithmique Auteur : Christophe Darmangeat

69
Il existe aussi dans tous les langages une fonction qui renvoie le caractre correspondant un code Ascii donn
(fonctionAsc),etLycedeVersailles(fonctionChr):
Asc(N) vaut 78
Chr(63) vaut ?
Nous insistons; moins de programmer avec un langage un peu particulier, comme le C, qui traite en ralit les
chanesdecaractrescommedestableaux,onnepourraitpassepasserdesdeuxfonctionsLenetMidpourtraiter
les chanes. Or, si les programmes informatiques ont frquemment traiter des nombres, ils doivent tout aussi
frquemment grer des sries de caractres (des chanes). Bien vrai que cela devient un refrain, mais connatre les
techniquesdebasesurleschanesestplusquutile:cestindispensable.

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.

Cours Algorithmique Auteur : Christophe Darmangeat



81
Lesavantagesdelasecondetechniquesontnombreux,et99foissur100,c'estainsiqu'ilfaudraprocder:
larapidit:lesaccsenmmoirevivesontdesmilliersdefoisplusrapides(nanosecondes)quelesaccs
auxmmoiresdemasse(millisecondesaumieuxpourundisquedur).Enbasculantlefichierdudpartdans
un tableau, on minimise le nombre ultrieur d'accs disque, tous les traitements tant ensuite effectus en
mmoire.
lafacilitdeprogrammation:bienquilfaillecrirelesinstructionsderecopiedufichierdansletableau,pour
peuquondoivetripoterlesinformationsdanstouslessens,cestlargementplusfaciledefairecelaavecun
tableauquavecdesfichiers.

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

6.1. Donnes structures simples


Nostalgiques du Lego, cette partie va vous plaire. Comment construire des trucs pas possibles et des machins pas
croyablesavecjustequelqueslmentsdebase?Vousn'allezpastarderlesavoir...
Jusqu'prsent,voilcommentseprsentaientnospossibilitsenmatiredemmoirevive:nouspouvionsrserver
un emplacement pour une information, d'un certain type. Un tel emplacement s'appelle une variable. Nous pouvions
aussirserverunesried'emplacementsnumrotspourunesried'informationdemmetype.Untelemplacement
s'appelleuntableau.
Ehbientoujoursplushaut,toujoursplusfort,voicimaintenantquenouspouvonsrserverunesried'emplacements
pourdesdonnesdetypediffrents.Untelemplacements'appelleunevariablestructure.Sonutilit,lorsqu'ontraite
desfichierstexte(etmme,desfichiersengnral),sauteauxyeux:caronvapouvoircalquerchacunedeslignesdu
fichierenmmoirevive,etconsidrerquechaqueenregistrementserarecopidansunevariableetuneseule,quilui
sera adapte. Ainsi, le problme du "dcoupage" de chaque enregistrement en diffrentes variables (le nom, le
prnom, le numro de tlphone, etc.) sera rsolu d'avance, puisqu'on aura une structure, un gabarit, en quelque
sorte,toutprtd'avancepouraccueilliretprdcoupernosenregistrements.
Cours Algorithmique Auteur : Christophe Darmangeat

82

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).

Cours Algorithmique Auteur : Christophe Darmangeat



85
Exercice 10.4
Mme question, mais cette fois le carnet est suppos tre tri par ordre alphabtique.
Lindividu doit donc tre insr au bon endroit dans le fichier.

Exercice 10.5
crivez un algorithme qui permette de modifier un renseignement (pour simplifier,
disons uniquement le nom de famille) dun membre du carnet dadresses. Il faut donc
demander lutilisateur quel est le nom modifier, puis quel est le nouveau nom, et
mettre jour le fichier. Si le nom recherch n'existe pas, le programme devra le
signaler.

Exercice 10.6
Ecrivez un algorithme qui trie les individus du carnet dadresses par ordre
alphabtique.

Exercice 10.7
Soient Toto.txt et Tata.txt deux fichiers dont les enregistrements ont la mme structure.
Ecrire un algorithme qui recopie tout le fichier Toto dans le fichier Tutu, puis sa
suite, tout le fichier Tata (concatnation de fichiers).

Exercice 10.8
Ecrire un algorithme qui supprime dans notre carnet d'adresses tous les individus
dont le mail est invalide (pour employer un critre simple, on considrera que sont
invalides les mails ne comportant aucune arobase, ou plus d'une arobase).

Exercice 10.9
Les enregistrements dun fichier contiennent les deux champs Nom (chane de
caractres) et Montant (Entier). Chaque enregistrement correspond une vente
conclue par un commercial dune socit.

On veut mmoriser dans un tableau, puis afficher l'cran, le total de ventes par
vendeur. Pour simplifier, on suppose que le fichier de dpart est dj tri
alphabtiquement par vendeur.

Etenconclusiondelaconclusion,voilplusieursremarquesfondamentales:

Cours Algorithmique Auteur : Christophe Darmangeat

86
REMARQUE N1
Lorsqu'on veut rcuprer des donnes numriques inscrites dans un fichier texte, il ne faut
surtout pas oublier que ces donnes se prsentent forcment sous forme de caractres. La
rcupration elle-mme transmettra donc obligatoirement des donnes de type alphanumrique
; pour utiliser ces donnes des fins ultrieures de calcul, il sera donc ncessaire d'employer
une fonction de conversion.
Cette remarque ne s'applique pas aux fichiers binaires.
REMARQUE N1BIS
Voil pourquoi une structure s'appliquant aux fichiers textes est forcment compose
uniquement de types caractres. Une structure traitant de fichiers binaires pourrait en revanche
tre compose de caractres, de numriques et de boolens.

REMARQUE N2
Plusieurs langages interdisent l'criture d'une variable structure dans un fichier texte, ne
l'autorisant que pour un fichier binaire.
Si l'on se trouve dans ce cas, cela signifie qu'on peut certes utiliser une structure, ou un tableau
de structures, mais condition d'crire sur le fichier champ par champ, ce qui annule une partie
du bnfice de la structure.
Nous avons postul ici que cette interdiction n'existait pas ; en tenir compte ne changerait pas
fondamentalement les algorithmes, mais alourdirait un peu le code pour les lignes traitant de
l'criture dans les fichiers.

Cours Algorithmique Auteur : Christophe Darmangeat

87
P
PA AR RT TI IE E 11 (PROCDURES ET FONCTIONS)

Linformatique semble encore chercher la recette miracle qui permettra aux gens dcrire des programmes corrects
sans avoir rflchir. Au lieu de cela, nous devons apprendre aux gens comment rflchir
Anonyme

1. Fonctions personnalises
1.1. De quoi s'agit-il ?
Uneapplication,surtoutsielleestlongue,atoutesleschancesdedevoirprocderauxmmestraitements,oudes
traitements similaires, plusieurs endroits de son droulement. Par exemple, la saisie dune rponse par oui ou par
non (et le contrle quelle implique), peuvent tre rpts dix fois des moments diffrents de la mme application.

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.

Cours Algorithmique Auteur : Christophe Darmangeat



88
Mauvaise Structure

Ecrire Etes-vous mari ?
Rep1 ""
TantQue Rep1 <> "Oui" et Rep1 <> "Non"
Ecrire "Tapez Oui ou Non"
Lire Rep1
FinTantQue

Ecrire Avez-vous des enfants ?
Rep2 ""
TantQue Rep2 <> "Oui" et Rep2 <> "Non"
Ecrire "Tapez Oui ou Non"
Lire Rep2
FinTantQue
On le voit bien, il y a l une rptition quasi identique du traitement accomplir. A chaque fois, on demande une
rponseparOuiouNon,aveccontrledesaisie.Laseulechosequichange,c'estlenomdelavariabledanslaquelle
onrangelarponse.Alors,ildoitbienyavoiruntruc.
LasolutionconsisteisolerlesinstructionsdemandantunerponseparOuiouNon,etappelercesinstructions
chaquefoisquencessaire.Ainsi,onvitelesrptitionsinutiles,etonadcoupnotreproblmeenpetitsmorceaux
autonomes.

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:

Procdure SaisieTab(T en tableau par rfrence, N en entier par valeur)


Pour i 0 N-1
Ecrire "Saisie de la valeur n " & i + 1
Lire T(i)
i suivant
Fin Procdure
Etsonappel:
Tableau Truc(5), Machin(12) en Entier
...
Appeler SaisieTab(Truc, 5)
...
Appeler SaisieTab(Machin, 12)
...
Fin Procdure
La seule chose remarquer, c'est que les variables manipules par la sous-procdure (notamment le tableau T) ne
sontpascellesquisontmanipulesdanslaprocdureappelante(lestableauxTrucetMachin).
Cecin'estpasuneobligation:onpourraitimaginerunearchitectureoceseraientlesmmesvariablesquiseraient
trituresdanslaprocdureappelanteetdanslasous-procdure(cesvariablesporteraientalorslemmenom).Mais
une telle architecture, si elle est possible, doit rester l'exception laquelle on n'a recours qu'en cas de besoin trs
particulier.Eneffet,pourqu'unetellechosesoitpossible,ilfautquelavariableaitlacapacitdeconserversavaleur
d'une procdure l'autre ; en quelque sorte, qu'elle survive mme si la procdure qui la manipulait se termine. Ce
genredevariabledopel'EPOexiste,onenreparleradansuninstant,maiselleesttrsgourmandeenressources
mmoire.Donc,commetoujours,vousconnaissezlachanson,onappliqueleprincipedel'conomiedemoyens.
Conclusion : une sous-procdure est un morceau de code qui comporte ventuellement des paramtres en entre
(transmis par valeur) et des paramtres en sortie (transmis par rfrence). La sous-procdure manipule donc des
variablesquiluisontpropres,etlaprocdureappelanteagitdemme.Laprsencedesparamtresdansl'appella
sous-procdure et dans le titre de celle-ci assure le fait que la valeur des uns sera recopie dans les autres
Cours Algorithmique Auteur : Christophe Darmangeat

94
(transmission par valeur) et qu'en retour, celle des autres sera recopie dans les uns (transmission par rfrence).


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.

Cours Algorithmique Auteur : Christophe Darmangeat



97
Nom Type Description
Dico.txt Fichiertexte Listedesmotsdeviner
Mot Caractre Motdeviner
Lettre Caractre Lettrepropose
MovRep Entier Nombredemauvaisesrponses
Verif() TableaudeBoolens
Lettres prcdemment devines, en correspondance avec
Mot
Propos Caractre Listedeslettresproposes

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.

3. Une logique vicelarde : la programmation rcursive


Vous savez comment sont les informaticiens: on ne peut pas leur donner quoi que ce soit sans quils essayent de
joueravec,etlepire,cestquilsyrussissent.
La programmation des fonctions personnalises a donn lieu l'essor dune logique un peu particulire, adapte en
particulier au traitement de certains problmes mathmatiques (ou de jeux): la programmation rcursive. Pour vous
expliquerdequoiilretourne,nousallonsreprendreunexemplechervoscurs:lecalculdunefactorielle.
Rappelez-vous:laformuledecalculdelafactorielledunnombrenscrit:
N!=1x2x3xxn
Nous avions programm cela aussi sec avec une boucle Pour. Mais une autre manire de voir les choses, ni plus
juste,nimoinsjuste,seraitdedirequequelquesoitlenombren:
n!=nx(n-1)!
Enbonfranais:lafactorielledunnombre,cestcenombremultipliparlafactorielledunombreprcdent.Encore
une fois, cest une manire ni plus juste ni moins juste de prsenter les choses; cest simplement une manire
diffrente.
Silondoitprogrammercela,onpeutalorsimaginerunefonctionFact,chargedecalculerlafactorielle.Cettefonction
Cours Algorithmique Auteur : Christophe Darmangeat

104
effectuelamultiplicationdunombrepassenargumentparlafactorielledunombreprcdent.Etcettefactorielledu
nombreprcdentvabienentendutreelle-mmecalculeparlafonctionFact.
Autrement dit, on va crer une fonction qui, pour fournir son rsultat, va sappeler elle-mme un certain nombre de
fois.Cestcela,larcursivit.
Toutefois, il nous manque une chose pour finir: quand ces auto-appels de la fonction Fact vont-ils sarrter? Cela
naura-t-ildoncjamaisdefin?Si,biensr,rassure-toi,public,larcursivit,cenestpasLesFeuxdeLAmour.On
sarrtequandonarriveaunombre1,pourlequellafactorielleestpardfinition1.
Celaproduitlcrituresuivante,unpeudconcertantecertes,maisparfoistrspratique:
Fonction Fact ) N en Numrique (
Si N = 0 alors
Renvoyer 1
Sinon
Renvoyer N * (Fact(N-))
Finsi
FinFonction
Vousremarquerezqueleprocessusrcursifremplaceenquelquesortelaboucle,cest--direunprocessusitratif.Et
en plus, avec tous ces nouveaux mots qui riment, vous allez pouvoir crire de trs chouettes pomes. Vous
remarquerez aussi quon traite le problme lenvers: on part du nombre, et on remonte rebours jusqu 1 pour
pouvoir calculer la factorielle. Cet effet de rebours est caractristique de la programmation rcursive.

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

Cours Algorithmique Auteur : Christophe Darmangeat



a
ANNEXE (CORRIGS DES EXERCICES)
PARTIE 1
Exercice 1.1
Aprs : La valeur des variables est :

A 1 A = 1 B = ?
B A + 3 A = 1 B = 4
A 3 A = 3 B = 4

Exercice 1.2
Aprs : La valeur des variables est :

A 5 A = 5 B = ? C = ?
B 3 A = 5 B = 3 C = ?
C A + B A = 5 B = 3 C = 8
A 2 A = 2 B = 3 C = 8
C B A A = 2 B = 3 C = 1

Exercice 1.3
Aprs : La valeur des variables est :

A 5 A = 5 B = ?
B A + 4 A = 5 B = 9
A A + 1 A = 6 B = 9
B A 4 A = 6 B = 2

Exercice 1.4
Aprs : La valeur des variables est :

A 3 A = 3 B = ? C = ?
B 10 A = 3 B = 10 C = ?
C A + B A = 3 B = 10 C = 13
B A + B A = 3 B = 13 C = 13
A C A = 13 B = 13 C = 13

Cours Algorithmique Auteur : Christophe Darmangeat

b
Exercice 1.5
Aprs : La valeur des variables est :

A 5 A = 5 B = ?
B 2 A = 5 B = 2
A B A = 2 B = 2
B A A = 2 B = 2

Les deux dernires instructions ne permettent donc pas dchanger les deux valeurs de B et A,
puisque lune des deux valeurs (celle de A) est ici crase.
Si lon inverse les deux dernires instructions, cela ne changera rien du tout, hormis le fait que
cette fois cest la valeur de B qui sera crase.

Exercice 1.6
Dbut

C A
A B
B C
Fin

On est oblig de passer par une variable dite temporaire (la variable C).


Exercice 1.7
Dbut

D C
C B
B A
A D
Fin

En fait, quel que soit le nombre de variables, une seule variable temporaire suffit


Exercice 1.8
Il ne peut produire quune erreur dexcution, puisquon ne peut pas additionner des caractres.


Exercice 1.9En revanche, on peut les concatner. A la fin de lalgorithme, C vaudra donc
42312.

Cours Algorithmique Auteur : Christophe Darmangeat

c
PARTIE 2
Exercice 2.1
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)


Exercice 2.2
Variables nb, carr en Entier
Dbut
Ecrire Entrez un nombre :
Lire nb
carr nb * nb
Ecrire Son carr est : , carr
Fin
En fait, on pourrait tout aussi bien conomiser la variable carr en remplaant les deux avant-
dernires lignes par :
Ecrire Son carr est : , nb*nb
C'est une question de style ; dans un cas, on privilgie la lisibilit de l'algorithme, dans l'autre, on
privilgie l'conomie d'une variable.

Exercice 2.3
Variables pht, ttva, pttc en Rel
Variable nb en Entier
Dbut
Ecrire Entrez le prix hors taxes :
Lire pht
Ecrire Entrez le nombre darticles :
Lire nb
Ecrire Entrez le taux de TVA :
Lire ttva
pttc nb * pht * (1 + ttva)
Ecrire Le prix toutes taxes est : , pttc
Fin
L aussi, on pourrait squeezer une variable et une ligne en crivant directement. :
Ecrire Le prix toutes taxes est : , nb * pht * (1 + ttva)
C'est plus rapide, plus lger en mmoire, mais plus difficile relire (et crire !)

Exercice 2.4
Variables t1, t2, t3, t4 en Caractre
Dbut
t1 belle Marquise
t2 vos beaux yeux
t3 me font mourir
t4 damour
Ecrire t1 & " " & t2 & " " & t3 & " " & t4
Ecrire t3 & " " & t2 & " " & t4 & " " & t1
Ecrire t2 & " " & t3 & " " & t1 & " " & t4
Ecrire t4 & " " & t1 & " " & t2 & " " & t3
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

d
PARTIE 3
Exercice 3.1
Variable n en Entier
Dbut
Ecrire Entrez un nombre :
Lire n
Si n > 0 Alors
Ecrire Ce nombre est positif
Sinon
Ecrire Ce nombre est ngatif
Finsi
Fin

Exercice 3.2
Variables m, n en Entier
Dbut
Ecrire Entrez deux nombres :
Lire m, n
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors
Ecrire Leur produit est positif
Sinon
Ecrire Leur produit est ngatif
Finsi
Fin

Exercice 3.3
Variables a, b, c en Caractre
Dbut
Ecrire Entrez successivement trois noms :
Lire a, b, c
Si a < b et b < c Alors
Ecrire Ces noms sont classs alphabtiquement
Sinon
Ecrire Ces noms ne sont pas classs
Finsi
Fin

Exercice 3.4
Variable n en Entier
Dbut
Ecrire Entrez un nombre :
Lire n
Si n < 0 Alors
Ecrire Ce nombre est ngatif
SinonSi n = 0 Alors
Ecrire Ce nombre est nul
Sinon
Ecrire Ce nombre est positif
Finsi
Fin

Exercice 3.5
Variables m, n en Entier
Cours Algorithmique Auteur : Christophe Darmangeat

e
Dbut
Ecrire Entrez deux nombres :
Lire m, n
Si m = 0 OU n = 0 Alors
Ecrire Le produit est nul
SinonSi (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
Ecrire Le produit est positif
Sinon
Ecrire Le produit est ngatif
Finsi
Fin
Si on souhaite simplifier lcriture de la condition lourde du SinonSi, on peut toujours passer par des
variables boolennes intermdiaires. Une astuce de sioux consiste galement employer un Xor
(c'est l'un des rares cas dans lesquels il est pertinent)


Exercice 3.6
Variable age en Entier
Dbut
Ecrire Entrez lge de lenfant :
Lire age
Si age >= 12 Alors
Ecrire Catgorie Cadet
SinonSi age >= 10 Alors
Ecrire Catgorie Minime
SinonSi age >= 8 Alors
Ecrire Catgorie Pupille
SinonSi age >= 6 Alors
Ecrire Catgorie Poussin
Finsi
Fin
On peut videmment crire cet algorithme de diffrentes faons, ne serait-ce quen commenant
par la catgorie la plus jeune.

Cours Algorithmique Auteur : Christophe Darmangeat

f
PARTIE 4
Exercice 4.1
Aucune difficult, il suffit dappliquer la rgle de la transformation du OU en ET vue en cours (loi de
Morgan). Attention toutefois la rigueur dans la transformation des conditions en leur contraire...
Si Tutu <= Toto + 4 et Tata <> OK Alors
Tutu Tutu - 1
Sinon
Tutu Tutu + 1
Finsi

Exercice 4.2
Variables h, m en Entier
Dbut
Ecrire Entrez les heures, puis les minutes :
Lire h, m
m m + 1
Si m = 60 Alors
m 0
h h + 1
FinSi
Si h = 24 Alors
h 0
FinSi
Ecrire Dans une minute il sera , h, heure(s) , m, minute(s)
Fin

Exercice 4.3
Variables h, m, s en Entier
Dbut
Ecrire Entrez les heures, puis les minutes, puis les secondes :
Lire h, m, s
s s + 1
Si s = 60 Alors
s 0
m m + 1
FinSi
Si m = 60 Alors
m 0
h h + 1
FinSi
Si h = 24 Alors
h 0
FinSi
Ecrire Dans une seconde il sera , h, heure(s), m, minute(s) et , s,
seconde(s)
Fin

Exercice 4.4
Variable n en Entier
Variable p en Rel
Cours Algorithmique Auteur : Christophe Darmangeat

g
Dbut
Ecrire Nombre de photocopies :
Lire n
Si n <= 10 Alors
p n * 0,1
SinonSi n <= 30
p 10 * 0,1 + (n 10) * 0,09
Sinon
p 10 * 0,1 + 20 * 0,09 + (n 30) * 0,08
FinSi
Ecrire Le prix total est : , p
Fin

Exercice 4.5
Variable sex en Caractre
Variable age en Entier
Dbut
Ecrire Entrez le sexe (M/F) :
Lire sex
Ecrire Entrez lge :
Lire age
C1 sex = M et age > 20
C2 sex = F et (age > 18 et age < 35)
Si C1 ou C2 Alors
Ecrire Imposable
Sinon
Ecrire Non Imposable
FinSi
Fin

Exercice 4.6
Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsente
dignement la catgorie des noncs pigs. En effet, rien de plus facile que d'crire : si le candidat
a plus de 50%, il est lu, sinon s'il a plus de 12,5 %, il est au deuxime tour, sinon il est limin. H
h h... mais il ne faut pas oublier que le candidat peut trs bien avoir eu 20 % mais tre tout de
mme limin, tout simplement parce que l'un des autres a fait plus de 50 % et donc qu'il n'y a
pas de deuxime tour !... Moralit : ne jamais se jeter sur la programmation avant d'avoir
soigneusement men l'analyse du problme traiter.
Variables A, B, C, D en Caractre
Dbut
Ecrire Entrez les scores des quatre prtendants :
Lire A, B, C, D
C1 A > 50
C2 B > 50 ou C > 50 ou D > 50
C3 A >= B et A >= B et A >= D
C4 A >= 12,5
Si C1 Alors
Ecrire Elu au premier tour"
Sinonsi C2 ou Non(C4) Alors
Ecrire Battu, limin, sorti !!!
SinonSi C3 Alors
Ecrire "Ballotage favorable"
Sinon
Ecrire "Ballotage dfavorable"
FinSi
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

h
Exercice 4.7
L encore, on illustre l'utilit d'une bonne analyse. Je propose deux corrigs diffrents. Le premier
suit l'nonc pas pas. C'est juste, mais c'est vraiment lourd. La deuxime version s'appuie sur
une vraie comprhension d'une situation pas si embrouille qu'elle n'en a l'air.
Dans les deux cas, un recours aux variables boolennes are srieusement l'criture.
Donc, premier corrig, on suit le texte de l'nonc pas pas :
Variables age, perm, acc, assur en Entier
Variable situ en Caractre
Dbut
Ecrire Entrez lge :
Lire age
Ecrire Entrez le nombre d'annes de permis :
Lire perm
Ecrire Entrez le nombre d'accidents :
Lire acc
Ecrire Entrez le nombre d'annes d'assurance :
Lire assur
C1 age >=25
C2 perm >=2
C3 assur >1
Si Non(C1) et Non(C2) Alors
Si acc =0 Alors
situ "Rouge"
Sinon Alors
situ "Refus"
FinSi
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) Alors
Si acc =0 Alors
situ "Orange"
SinonSi acc =1 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
Sinon
Si acc =0 Alors
situ "Vert"
SinonSi acc =1 Alors
situ "Orange"
SinonSi acc =2 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
FinSi
Si C3 Alors
Si situ ="Rouge" Alors
situ ="Orange"
SinonSi situ ="Orange" Alors
Cours Algorithmique Auteur : Christophe Darmangeat

i
situ ="Orange"
SinonSi situ ="Vert" Alors
situ ="Bleu"
FinSi
FinSi
Ecrire "Votre situation : ", situ
Fin
Vous trouvez cela compliqu ? Oh, certes oui, a l'est ! Et d'autant plus qu'en lisant entre les lignes,
on pouvait s'apercevoir que ce galimatias de tarifs recouvre en fait une logique trs simple : un
systme points. Et il suffit de comptabiliser les points pour que tout s'claire... Reprenons juste
aprs l'affectation des trois variables boolennes C1, C2, et C3. On crit :
P 0
Si Non(C1) Alors
P P +1
FinSi
Si Non(C2) Alors
P P +1
FinSi
P P +acc
Si P <3 et C3 Alors
P P - 1
FinSi
Si P =-1 Alors
situ ="Bleu"
SinonSi P =0 Alors
situ ="Vert"
SinonSi P =1 Alors
situ ="Orange"
SinonSi P =2 Alors
situ ="Rouge"
Sinon
situ ="Refus"
FinSi
Ecrire "Votre situation : ", situ
Fin

Exercice 4.8
En ce qui concerne le dbut de cet algorithme, il ny a aucune difficult. Cest de la saisie bte et
mme pas mchante :
Variables J, M, A, JMax en Entier
Variables VJ, VM, B en Booleen
Dbut
Ecrire "Entrez le numro du jour"
Lire J
Ecrire "Entrez le numro du mois"
Lire M
Ecrire "Entrez l'anne"
Lire A
C'est videmment ensuite que les ennuis commencent La premire manire d'aborder la chose
consiste se dire que fondamentalement, la structure logique de ce problme est trs simple. Si
nous crons deux variables boolennes VJ et VM, reprsentant respectivement la validit du jour et
du mois entrs, la fin de l'algorithme sera d'une simplicit biblique (lanne est valide par dfinition,
si on vacue le dbat byzantin concernant lexistence de lanne zro) :
Cours Algorithmique Auteur : Christophe Darmangeat

j
Si VJ et VM alors
Ecrire "La date est valide"
Sinon
Ecrire "La date n'est pas valide"
FinSi
Toute la difficult consiste affecter correctement les variables VJ et VM, selon les valeurs des
variables J, M et A. Dans l'absolu, VJ et VM pourraient tre les objets d'une affectation
monstrueuse, avec des conditions atrocement composes. Mais franchement, crire ces conditions
en une seule fois est un travail de bndictin sans grand intrt. Pour viter d'en arriver une telle
extrmit, on peut srier la difficult en crant deux variables supplmentaires :
B : variable boolenne qui indique s'il s'agit d'une anne bissextile
JMax : variable numrique qui indiquera le dernier jour valable pour le mois entr.
Avec tout cela, on peut y aller et en ressortir vivant.
On commence par initialiser nos variables boolennes, puis on traite les annes, puis les mois, puis
les jours.
On note "dp" la condition "divisible par" :
B A dp 400 ou (non(A dp 100) et A dp 4)
Jmax 0
VM M >= 1 et M =< 12
Si VM Alors
Si M = 2 et B Alors
JMax = 29
SinonSi M = 2 Alors
JMax = 28
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11 Alors
JMax = 30
Sinon
JMax = 31
FinSi
VJ J >= 1 et J =< Jmax
FinSi
Cette solution a le mrite de ne pas trop compliquer la structure des tests, et notamment de ne pas
rpter l'criture finale l'cran. Les variables boolennes intermdiaires nous pargnent des
conditions composes trop lourdes, mais celles-ci restent nanmoins srieuses.

Une approche diffrente consisterait limiter les conditions composes, quitte le payer par une
structure beaucoup plus exigeante de tests imbriqus. L encore, on vite de jouer les extrmistes
et l'on s'autorise quelques conditions composes lorsque cela nous simplifie l'existence. On
pourrait aussi dire que la solution prcdente "part de la fin" du problme (la date est elle valide ou
non ?), alors que celle qui suit "part du dbut" (quelles sont les donnes entres au clavier ?) :
Si M < 1 ou M > 12 Alors
Ecrire "Date Invalide"
SinonSi M = 2 Alors
Si A dp 400 Alors
Si J < 1 ou J > 29 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 100 Alors
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 4 Alors
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
Sinon
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
FinSi
Cours Algorithmique Auteur : Christophe Darmangeat

k
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11 Alors
Si J < 1 ou J > 30 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
Sinon
Si J < 1 ou J > 31 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
FinSi
On voit que dans ce cas, l'alternative finale (Date valide ou invalide) se trouve rpte un grand
nombre de fois. Ce n'est en soi ni une bonne, ni une mauvaise chose. C'est simplement une
question de choix stylistique.
Personnellement, j'avoue prfrer assez nettement la premire solution, qui fait ressortir beaucoup
plus clairement la structure logique du problme (il n'y a qu'une seule alternative, autant que cette
alternative ne soit crite qu'une seule fois).

Il convient enfin de citer une solution trs simple et lgante, un peu plus difficile peut-tre
imaginer du premier coup, mais qui avec le recul apparat comme trs immdiate. Sur le fond, cela
consiste dire qu'il y a quatre cas pour qu'une date soit valide : celui d'un jour compris entre 1 et
31 dans un mois 31 jours, celui d'un jour compris entre 1 et 30 dans un mois 30 jours, celui d'un
jour compris entre 1 et 29 en fvrier d'une anne bissextile, et celui d'un jour de fvrier compris
entre 1 et 28. Ainsi :
B (A dp 4 et Non(A dp 100)) ou A dp 400
K1 (m=1 ou m=3 ou m=5 ou m=7 ou m=8 ou m=10 ou m=12) et (J>=1 et J=<31)
K2 (m=4 ou m=6 ou m=9 ou m=11) et (J>=1 et J=<30)
K3 m=2 et B et J>=1 et J=<29
K3 m=2 et J>=1 et J=<28
Si K1 ou K2 ou K3 ou K4 Alors
Ecrire "Date valide"
Sinon
Ecrire "Date non valide"
FinSi
Fin
Tout est alors rgl avec quelques variables boolennes et quelques conditions composes, en un
minimum de lignes de code.
La morale de ce long exercice - et non moins long corrig, c'est qu'un problme de test un peu
compliqu admet une pliade de solutions justes.


Cours Algorithmique Auteur : Christophe Darmangeat

l
PARTIE 5
Exercice 5.1
Variable N en Entier
Debut
N 0
Ecrire Entrez un nombre entre 1 et 3
TantQue N < 1 ou N > 3
Lire N
Si N < 1 ou N > 3 Alors
Ecrire Saisie errone. Recommencez
FinSi
FinTantQue
Fin

Exercice 5.2
Variable N en Entier
Debut
N 0
Ecrire Entrez un nombre entre 10 et 20
TantQue N < 10 ou N > 20
Lire N
Si N < 10 Alors
Ecrire Plus grand !
SinonSi N > 20 Alors
Ecrire Plus petit !
FinSi
FinTantQue
Fin

Exercice 5.3
Variables N, i en Entier
Debut
Ecrire Entrez un nombre :
Lire N
Ecrire Les 10 nombres suivants sont :
Pour i N + 1 N + 10
Ecrire i
i Suivant
Fin

Exercice 5.4
Variables N, i en Entier
Debut
Ecrire Entrez un nombre :
Lire N
Ecrire La table de multiplication de ce nombre est :
Pour i 1 10
Ecrire N, x ,i, = , n*i
i Suivant
Fin


Cours Algorithmique Auteur : Christophe Darmangeat

m
Exercice 5.5
Variables N, i, Som en Entier
Debut
Ecrire Entrez un nombre :
Lire N
Som 0
Pour i 1 N
Som Som + i
i Suivant
Ecrire La somme est : , Som
Fin

Exercice 5.6
Variables N, i, F en Entier
Debut
Ecrire Entrez un nombre :
Lire N
F 1
Pour i 2 N
F F * i
i Suivant
Ecrire La factorielle est : , F
Fin

Exercice 5.7
Variables N, i, PG en Entier
Debut
PG 0
Pour i 1 20
Ecrire Entrez un nombre :
Lire N
Si i = 1 ou N > PG Alors
PG N
FinSi
i Suivant
Ecrire Le nombre le plus grand tait : , PG
Fin
En ligne 3, on peut mettre nimporte quoi dans PG, il suffit que cette variable soit affecte pour que
le premier passage en ligne 7 ne provoque pas d'erreur.

Pour la version amliore, cela donne :
Variables N, i, PG, IPG en Entier
Debut
PG 0
Pour i 1 20
Ecrire Entrez un nombre :
Lire N
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
i Suivant
Ecrire Le nombre le plus grand tait : , PG
Ecrire Il a t saisi en position numro , IPG
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

n
Exercice 5.8
Variables N, i, PG, IPG en Entier
Debut
N 1
i 0
PG 0
TantQue N <> 0
Ecrire Entrez un nombre :
Lire N
i i + 1
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
FinTantQue
Ecrire Le nombre le plus grand tait : , PG
Ecrire Il a t saisi en position numro , IPG
Fin

Exercice 5.9
Variables FF, somdue, M, IPG, Reste, Nb10F, Nb5F En Entier
Debut
FF 1
somdue 0
TantQue FF <> 0
Ecrire Entrez le montant :
Lire FF
somdue somdue + FF
FinTantQue
Ecrire Vous devez :, FF, francs
Ecrire Montant vers :
Lire M
Reste M - FF
Nb10F 0
TantQue Reste >= 10
Nb10F Nb10F + 1
Reste Reste 10
FinTantQue
Nb5F 0
Si Reste >= 5
Nb5F 1
Reste Reste 5
FinSi
Ecrire Rendu de la monnaie :
Ecrire Pices de 10 F : , Nb10F
Ecrire Pices de 5 F : , Nb5F
Ecrire Pices de 1 F : , reste
Fin







Cours Algorithmique Auteur : Christophe Darmangeat

o
Exercice 5.10

Spontanment, on est tent d'crire l'algorithme suivant :
Variables N, P, i, Num, Dno1, Dno2 en Entier
Debut
Ecrire Entrez le nombre de chevaux partants :
Lire N
Ecrire Entrez le nombre de chevaux jous :
Lire P
Num 1
Pour i 2 N
Num Num * i
i Suivant
Dno1 1
Pour i 2 N-P
Dno1 Dno1 * i
i Suivant
Dno2 1
Pour i 2 P
Dno2 Dno2 * i
i Suivant
Ecrire Dans lordre, une chance sur , Num / Dno1
Ecrire Dans le dsordre, une sur , Num / (Dno1 * Dno2)
Fin

Cette version, formellement juste, comporte tout de mme deux faiblesses.
La premire, et la plus grave, concerne la manire dont elle calcule le rsultat final. Celui-ci est le
quotient d'un nombre par un autre ; or, ces nombres auront rapidement tendance tre trs
grands. En calculant, comme on le fait ici, d'abord le numrateur, puis ensuite le dnominateur, on
prend le risque de demander la machine de stocker des nombres trop grands pour qu'elle soit
capable de les coder (cf. le prambule). C'est d'autant plus bte que rien ne nous oblige procder
ainsi : on n'est pas oblig de passer par la division de deux trs grands nombre pour obtenir le
rsultat voulu.
La deuxime remarque est qu'on a programm ici trois boucles successives. Or, en y regardant
bien, on peut voir qu'aprs simplification de la formule, ces trois boucles comportent le mme
nombre de tours ! (si vous ne me croyez pas, crivez un exemple de calcul et biffez les nombres
identiques au numrateur et au dnominateur). Ce triple calcul (ces trois boucles) peut donc tre
ramen(es) un(e) seul(e). Et voil le travail, qui est non seulement bien plus court, mais aussi
plus performant :

Variables N, P, i, O, F en Entier
Debut
Ecrire Entrez le nombre de chevaux partants :
Lire N
Ecrire Entrez le nombre de chevaux jous :
Lire P
O 1
F 1
Pour i P + 1 N
O O * i
F F * (i P)
i Suivant
Ecrire Dans lordre, une chance sur , O
Ecrire Dans le dsordre, une chance sur , O / F
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

p
PARTIE 6
Exercice 6.1
Tableau Truc(6) en Entier
Variable i en Entier
Debut
Pour i 0 6
Truc(i) 0
i Suivant
Fin


Exercice 6.2
Tableau Truc(5) en Caractre
Debut
Truc(0) a
Truc(1) e
Truc(2) i
Truc(3) o
Truc(4) u
Truc(5) y
Fin

Exercice 6.3
Tableau Notes(8) en Entier
Variable i en Entier
Dbut
Pour i 0 8
Ecrire "Entrez la note numro ", i + 1
Lire Notes(i)
i Suivant
Fin

Exercice 6.4
Cet algorithme remplit un tableau avec six valeurs : 0, 1, 4, 9, 16, 25. Il les crit ensuite lcran.
Simplification :
Tableau Nb(5) en Entier
Variable i en Entier
Dbut
Pour i 0 5
Nb(i) i * i
Ecrire Nb(i)
i Suivant
Fin


Exercice 6.5
Cours Algorithmique Auteur : Christophe Darmangeat

q
Cet algorithme remplit un tableau avec les sept valeurs : 1, 3, 5, 7, 9, 11, 13. Il les crit ensuite
lcran. Simplification :
Tableau N(6) en Entier
Variables i, k en Entier
Dbut
N(0) 1
Ecrire N(0)
Pour k 1 6
N(k) N(k-1) + 2
Ecrire N(k)
k Suivant
Fin

Exercice 6.6
Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21


Exercice 6.7
Variable S en Entier
Tableau Notes(8) en Entier
Debut
s 0
Pour i 0 8
Ecrire Entrez la note n , i + 1
Lire Notes(i)
s s + Notes(i)
i Suivant
Ecrire Moyenne : , s/9
Fin


Exercice 6.8
Variables Nb, Nbpos, Nbneg en Entier
Tableau T() en Entier
Debut
Ecrire Entrez le nombre de valeurs :
Lire Nb
Redim T(Nb - 1)
Nbpos 0
Nbneg 0
Pour i 0 Nb - 1
Ecrire Entrez le nombre n , i + 1
Lire T(i)
Si T(i) > 0 alors
Nbpos Nbpos + 1
Sinon
Nbneg Nbneg + 1
Finsi
i Suivant
Ecrire Nombre de valeurs positives : , Nbpos
Ecrire Nombre de valeurs ngatives : , Nbneg
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

r
Exercice 6.9
Variables i, Som, N en Entier
Tableau T() en Entier
Debut
(on ne programme pas la saisie du tableau, dont on suppose quil compte N lments)
Redim T(N - 1)

Som 0
Pour i 0 N - 1
Som Som + T(i)
i Suivant
Ecrire Somme des lments du tableau : , Som
Fin

Exercice 6.10
Variables i, N en Entier
Tableaux T1(), T2(), T3() en Entier
Debut
(on suppose que T1 et T2 comptent N lments, et quils sont dj saisis)
Redim T3(N - 1)

Pour i 0 N - 1
T3(i) T1(i) + T2(i)
i Suivant
Fin

Exercice 6.11
Variables i, j, N1, N2, S en Entier
Tableaux T1(), T2() en Entier
Debut
On ne programme pas la saisie des tableaux T1 et T2.
On suppose que T1 possde N1 lments, et que T2 en possde T2)

S 0
Pour i 0 N1 1
Pour j 0 N2 1
S S + T1(i) * T2(j)
j Suivant
i Suivant
Ecrire "Le schtroumpf est : ", S
Fin

Exercice 6.12
Variables Nb, i en Entier
Tableau T() en Entier
Debut
Ecrire Entrez le nombre de valeurs :
Lire Nb
Redim T(Nb - 1)
Pour i 0 Nb - 1
Ecrire Entrez le nombre n , i + 1
Lire T(i)
Cours Algorithmique Auteur : Christophe Darmangeat

s
i Suivant
Ecrire "Nouveau tableau :"
Pour i 0 Nb 1
T(i) T(i) + 1
Ecrire T(i)
i Suivant
Fin

Exercice 6.13
Variables Nb, Posmaxi en Entier
Tableau T() en Entier
Ecrire Entrez le nombre de valeurs :
Lire Nb
Redim T(Nb - 1)
Pour i 0 Nb - 1
Ecrire Entrez le nombre n , i + 1
Lire T(i)
i Suivant
Posmaxi 0
Pour i 0 Nb - 1
Si T(i) > T(Posmaxi) alors
Posmaxi i
Finsi
i Suivant
Ecrire Element le plus grand : , T(Posmaxi)
Ecrire Position de cet lment : , Posmaxi
Fin

Exercice 6.14
Variables Nb, i, Som, Moy, Nbsup en Entier
Tableau T() en Entier
Debut
Ecrire Entrez le nombre de notes saisir :
Lire Nb
Redim T(Nb - 1)
Pour i 0 Nb - 1
Ecrire Entrez le nombre n , i + 1
Lire T(i)
i Suivant
Som 0
Pour i 0 Nb - 1
Som Som + T(i)
i Suivant
Moy Som / Nb
NbSup 0
Pour i 0 Nb - 1
Si T(i) > Moy Alors
NbSup NbSup + 1
FinSi
i Suivant
Ecrire NbSup, " lves dpassent la moyenne de la classe"
Fin
PARTIE 7
Cours Algorithmique Auteur : Christophe Darmangeat

t
Exercice 7.1
Variables Nb, i en Entier
Variable Flag en Booleen
Tableau T() en Entier
Debut
Ecrire Entrez le nombre de valeurs :
Lire Nb
Redim T(Nb - 1)
Pour i 0 Nb - 1
Ecrire Entrez le nombre n , i + 1
Lire T(i)
i Suivant
Flag Vrai
Pour i 1 Nb - 1
Si T(i) <> T(i 1) + 1 Alors
Flag Faux
FinSi
i Suivant
Si Flag Alors
Ecrire "Les nombres sont conscutifs"
Sinon
Ecrire "Les nombres ne sont pas conscutifs"
FinSi
Fin
Cette programmation est sans doute la plus spontane, mais elle prsente le dfaut d'examiner la
totalit du tableau, mme lorsqu'on dcouvre ds le dpart deux lments non conscutifs. Aussi,
dans le cas d'un grand tableau, est-elle dispendieuse en temps de traitement. Une autre manire
de procder serait de sortir de la boucle ds que deux lments non conscutifs sont dtects.
La deuxime partie de l'algorithme deviendrait donc :
i 1
TantQue T(i) = T(i 1) + 1 et i < Nb - 1
i i + 1
FinTantQue
Si T(i) = T(i 1) + 1 Alors
Ecrire "Les nombres sont conscutifs"
Sinon
Ecrire "Les nombres ne sont pas conscutifs"
FinSi

Exercice 7.2
On suppose que N est le nombre dlments du tableau. Tri par insertion :

Pour i 0 N - 2
posmaxi = i
Pour j i + 1 N - 1
Si t(j) > t(posmaxi) alors
posmaxi j
Finsi
j suivant
temp t(posmaxi)
t(posmaxi) t(i)
t(i) temp
i suivant
Fin

Tri bulles :

Yapermut Vrai
TantQue Yapermut
Cours Algorithmique Auteur : Christophe Darmangeat

u
Yapermut Faux
Pour i 0 N - 2
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
Fin

Exercice 7.3
On suppose que n est le nombre dlments du tableau pralablement saisi

Pour i 0 (N-1)/2
Temp T(i)
T(i) T(N-1-i)
T(N-1-i) Temp
i suivant
Fin


Exercice 7.4
Pour un tel traitement, on n'aura pas le choix ; il va falloir passer par un deuxime tableau,
temporaire. L'algorithme qui suit suppose que le tableau T, comptant N lments, a dj t saisi.

Ecrire "Rang de la valeur supprimer ?"
Lire S
Redim Temp(N 2)
Pour i 0 N - 1
Si i < S Alors
Temp(i) T(i)
SinonSi i > S Alors
Temp(i-1) T(i)
Finsi
i suivant
On recopie Temp dans T
Redim T(N 2)
Pour i 0 N - 2
T(i) Temp(i)
i suivant
Fin



Exercice 7.5
Cours Algorithmique Auteur : Christophe Darmangeat

v
N est le nombre d'lments du tableau Dico(), contenant les mots du dictionnaire, tableau
pralablement rempli.
Variables Sup, Inf, Comp en Entier
Variables Fini en Boolen
Dbut
Ecrire "Entrez le mot vrifier"
Lire Mot
On dfinit les bornes de la partie du tableau considrer
Sup N - 1
Inf 0
Fini Faux
TantQue Non Fini
Comp dsigne l'indice de l'lment comparer. En bonne rigueur, il faudra veiller ce que Comp
soit bien un nombre entier, ce qui pourra s'effectuer de diffrentes manires selon les langages.
Comp (Sup + Inf)/2
Si le mot se situe avant le point de comparaison, alors la borne suprieure change, la borne
infrieure ne bouge pas.
Si Mot < Dico(Comp) Alors
Sup Comp - 1
Sinon, c'est l'inverse
Sinon
Inf Comp + 1
FinSi
Fini Mot = Dico(Comp) ou Sup < Inf
FinTantQue
Si Mot = Dico(Comp) Alors
Ecrire "le mot existe"
Sinon
Ecrire "Il n'existe pas"
Finsi
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

w
PARTIE 8
Exercice 8.1
Tableau Truc(5, 12) en Entier
Debut
Pour i 0 5
Pour j 0 12
Truc(i, j) 0
j Suivant
i Suivant
Fin

Exercice 8.2
Cet algorithme remplit un tableau de la manire suivante :
X(0, 0) = 1
X(0, 1) = 2
X(0, 2) = 3
X(1, 0) = 4
X(1, 1) = 5
X(1, 2) = 6
Il crit ensuite ces valeurs lcran, dans cet ordre.

Exercice 8.3
Cet algorithme remplit un tableau de la manire suivante :
X(0, 0) = 1
X(1, 0) = 4
X(0, 1) = 2
X(1, 1) = 5
X(0, 2) = 3
X(1, 2) = 6
Il crit ensuite ces valeurs lcran, dans cet ordre.

Exercice 8.4
Cet algorithme remplit un tableau de la manire suivante :
T(0, 0) = 0
T(0, 1) = 1
T(1, 0) = 1
T(1, 1) = 2
T(2, 0) = 2
T(2, 1) = 3
T(3, 0) = 3
T(3, 1) = 4
Il crit ensuite ces valeurs lcran, dans cet ordre.



Cours Algorithmique Auteur : Christophe Darmangeat

x
Exercice 8.5
Version a : cet algorithme remplit un tableau de la manire suivante :
T(0, 0) = 1
T(0, 1) = 2
T(1, 0) = 3
T(1, 1) = 4
T(2, 0) = 5
T(2, 1) = 6
T(3, 0) = 7
T(3, 1) = 8
Il crit ensuite ces valeurs lcran, dans cet ordre.

Version b : cet algorithme remplit un tableau de la manire suivante :
T(0, 0) = 1
T(0, 1) = 5
T(1, 0) = 2
T(1, 1) = 6
T(2, 0) = 3
T(2, 1) = 7
T(3, 0) = 4
T(3, 1) = 8
Il crit ensuite ces valeurs lcran, dans cet ordre.

Exercice 8.6
Variables i, j, iMax, jMax en Numrique
Tableau T(12, 8) en Numrique
Le principe de la recherche dans un tableau deux dimensions est strictement le mme que
dans un tableau une dimension, ce qui ne doit pas nous tonner. La seule chose qui change,
c'est qu'ici le balayage requiert deux boucles imbriques, au lieu d'une seule.
Debut
...
iMax 0
jMax 0
Pour i 0 12
Pour j 0 8
Si T(i,j) > T(iMax,jMax) Alors
iMax i
jMax j
FinSi
j Suivant
i Suivant
Ecrire "Le plus grand lment est", T(iMax, jMax)
Ecrire "Il se trouve aux indices", iMax, " ", jMax
Fin





Cours Algorithmique Auteur : Christophe Darmangeat

y
Exercice 8.7
Variables i, j , posi, posj, i2, j2 en Entier
Variables Correct, MoveOK en Boolen
Tableau Damier(7, 7) en Boolen
Tableau Mouv(3, 1) en Entier
Le damier contenant un seul pion, on choisit de le coder l'conomie, en le reprsentant par un
tableau de boolens deux dimensions. Dans chacun des emplacements de ce damier, Faux
signifie l'absence du pion, Vrai sa prsence
Par ailleurs, on emploie une mchante astuce, pas obligatoire, mais bien pratique dans beaucoup
de situations. L'ide est de faire correspondre les choix possibles de l'utilisateur avec les
mouvements du pion. On entre donc dans un tableau Mouv deux dimensions, les dplacements
du pion selon les quatre direction, en prenant soin que chaque ligne du tableau corresponde
une saisie de lutilisateur. La premire valeur tant le dplacement en i, la seconde le
dplacement en j. Ceci nous pargnera par la suite de faire quatre fois les mmes tests.
Debut
Choix 0 : pion en haut droite
Mouv(0, 0) -1
Mouv(0, 1) -1
Choix 1 : pion en haut droite
Mouv(1, 0) -1
Mouv(1, 1) 1
Choix 2 : pion en bas gauche
Mouv(2, 0) 1
Mouv(2, 1) -1
Choix 3 : pion en bas droite
Mouv(3, 0) 1
Mouv(3, 1) 1
Initialisation du damier ; le pion nest pour le moment nulle part
Pour i 0 7
Pour j 0 7
Damier(i, j) Faux
j suivant
i suivant
Saisie de la coordonne en i ("posi") avec contrle de saisie
Correct Faux
TantQue Non Correct
Ecrire Entrez la ligne de votre pion :
Lire posi
Si posi >= 0 et posi <= 7 alors
Correct = vrai
Finsi
Fintantque
Saisie de la coordonne en j ("posj") avec contrle de saisie
Correct Faux
TantQue Non Correct
Ecrire Entrez la colonne de votre pion :
Lire posj
Si posj >= 0 et posj <= 7 alors
Correct = vrai
Finsi
Fintantque
Positionnement du pion sur le damier virtuel.
Damier(posi, posj) Vrai
Saisie du dplacement, avec contrle
Ecrire Quel dplacement ?
Ecrire - 0 : en haut gauche
Ecrire - 1 : en haut droite
Ecrire - 2 : en bas gauche
Ecrire - 3 : en bas droite
Correct Faux
TantQue Non Correct
Cours Algorithmique Auteur : Christophe Darmangeat

z
Lire Dep
Si Dep >= 0 et Dep <= 3 alors
Correct Vrai
FinSi
FinTantQue
i2 et j2 sont les futures coordonnes du pion. La variable boolenne MoveOK vrifie la validit de
ce futur emplacement
i2 posi + Mouv(Dep, 0)
j2 posj + Mouv(Dep, 1)
MoveOK i2 >= 0 et i2 <= 7 et j2 >= 0 et j2 <= 7
Cas o le dplacement est valide
Si MoveOK Alors
Damier(posi, posj) Faux
Damier(i2, j2) Vrai
Affichage du nouveau damier
Pour i 0 7
Pour j 0 7
Si Damier(i, j) Alors
Ecrire O ;
Sinon
Ecrire X ;
FinSi
j suivant
Ecrire
i suivant
Sinon
Cas o le dplacement nest pas valide
Ecrire Mouvement impossible
FinSi
Fin

Cours Algorithmique Auteur : Christophe Darmangeat

aa
PARTIE 9
Exercice 9.1
Parmi ces affectations (considres indpendamment les unes des autres), lesquelles
provoqueront des erreurs, et pourquoi ?

Variables A, B, C en Numrique
Variables D, E en Caractre

...
A Sin(B)
...
A Sin(A + B * C)
...
B Sin(A) Sin(D)
...
D Sin(A / B)
...
C Cos(Sin(A)



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

bb
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.

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).

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
Cours Algorithmique Auteur : Christophe Darmangeat

cc
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.

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


Cours Algorithmique Auteur : Christophe Darmangeat

dd
PARTIE 10
Exercice 10.1
Cet algorithme crit l'intgralit du fichier "Exemple.txt" l'cran

Exercice 10.2
Variable Truc en Caractre
Variable i en Entier
Debut
Ouvrir Exemple.txt sur 5 en Lecture
Tantque Non EOF(5)
LireFichier 5, Truc
Pour i 1 Len(Truc)
Si Mid(Truc, i, 1) = "/" Alors
Ecrire " "
Sinon
Ecrire Mid(Truc, i, 1)
FinSi
Suivant
FinTantQue
Fermer 5

Exercice 10.3
Variables Nom*20, Prnom*17, Tel*10, Mail*20, Lig en Caractre
Debut
Ecrire "Entrez le nom : "
Lire Nom
Ecrire "Entrez le prnom : "
Lire Prnom
Ecrire "Entrez le tlphone : "
Lire Tel
Ecrire "Entrez le nom : "
Lire Mail
Lig Nom & Prnom & Tel & Mail
Ouvrir Adresse.txt sur 1 pour Ajout
EcrireFichier 1, Lig
Fermer 1
Fin

Exercice 10.4
L, comme indiqu dans le cours, on passe par un tableau de strutures en mmoire vive, ce qui
est la technique la plus frquemment employe. Le tri - qui est en fait un simple test - sera
effectu sur le premier champ (nom).
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Carctre * 20
Fin Structure
Tableau Mespotes() en Bottin
Variables MonPote, Nouveau en Bottin
Variables i, j en Numrique
Debut
Ecrire "Entrez le nom : "
Lire Nouveau.Nom
Ecrire "Entrez le prnom : "
Cours Algorithmique Auteur : Christophe Darmangeat

ee
Lire Nouveau.Prnom
Ecrire "Entrez le tlphone : "
Lire Nouveau.Tel
Ecrire "Entrez le mail : "
Lire Nouveau.Mail
On recopie l'intgralit de "Adresses" dans MesPotes(). Et aprs tout, c'est l'occasion : quand on
tombe au bon endroit, on insre subrepticement notre nouveau copain dans le tableau.
Ouvrir Adresse.txt sur 1 pour Lecture
i -1
insr Faux
Tantque Non EOF(1)
i i + 1
Redim MesPotes(i)
LireFichier 1, MonPote
Si MonPote.Nom > Nouveau.Nom et Non Insr Alors
MesPotes(i) Nouveau
Insr Vrai
i i + 1
Redim MesPotes(i)
FinSi
MesPotes(i) MonPote
FinTantQue
Fermer 1
Et le tour est quasiment jou. Il ne reste plus qu' rebalancer tel quel l'intgralit du tableau
MesPotes dans le fichier, en crasant l'ancienne version.
Ouvrir Adresse.txt sur 1 pour Ecriture
Pour j 0 i
EcrireFichier 1, MesPotes(j)
j suivant
Fermer 1
Fin


Exercice 10.5
C'est un peu du mme tonneau que ce qu'on vient de faire, quelques variantes prs. Il y a
essentiellement une petite gestion de flag pour faire bonne mesure.
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Carctre * 20
Fin Structure
Tableau Mespotes() en Bottin
Variables MonPote en Bottin
Variables Ancien, Nouveau en Caractre*20
Variables i, j en Numrique
Variable Trouv en Boolen
Debut
Ecrire "Entrez le nom modifier : "
Lire Ancien
Ecrire "Entrez le nouveau nom : "
Lire Nouveau
On recopie l'intgralit de "Adresses" dans Fic, tout en recherchant le clampin. Si on le trouve, on
procde la modification.
Ouvrir Adresse.txt sur 1 pour Lecture
i -1
Trouv Faux
Tantque Non EOF(1)
i i + 1
Redim MesPotes(i)
LireFichier 1, MonPote
Cours Algorithmique Auteur : Christophe Darmangeat

ff
Si MonPote.Nom = Ancien.Nom Alors
Trouv Vrai
MonPote.Nom Nouveau
FinSi
MesPotes(i) MonPote
FinTantQue
Fermer 1
On recopie ensuite l'intgralit de Fic dans "Adresse"
Ouvrir Adresse.txt sur 1 pour Ecriture
Pour j 0 i
EcrireFichier 1, MesPotes(j)
j Suivant
Fermer 1
Et un petit message pour finir !
Si Trouv Alors
Ecrire "Modification effectue"
Sinon
Ecrire "Nom inconnu. Aucune modification effectue"
FinSi
Fin

Exercice 10.6
L, c'est un tri sur un tableau de structures, rien de plus facile. Et on est bien content de disposer
des structures, autrement dit de ne se coltiner qu'un seul tableau...
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Carctre * 20
Fin Structure
Tableau Mespotes() en Bottin
Variables Mini en Bottin
Variables i, j en Numrique
Debut
On recopie l'intgralit de "Adresses" dans MesPotes...
Ouvrir Adresse.txt sur 1 pour Lecture
i -1
Tantque Non EOF(1)
i i + 1
Redim MesPotes(i)
LireFichier 1, MesPotes(i)
FinTantQue
Fermer 1
On trie le tableau selon l'algorithme de tri par insertion dj tudi, en utilisant le champ Nom de
la structure :
Pour j 0 i - 1
Mini MesPotes(j)
posmini = j
Pour k j + 1 i
Si MesPotes(k).Nom < Mini.Nom Alors
mini MesPotes(k)
posmini k
Finsi
k suivant
MesPotes(posmini) MesPotes(j)
MesPotes(j) Mini
j suivant
On recopie ensuite l'intgralit du tableau dans "Adresse"
Ouvrir Adresse.txt sur 1 pour Ecriture
Pour j 0 i
Cours Algorithmique Auteur : Christophe Darmangeat

gg
EcrireFichier 1, MesPotes(j)
j suivant
Fermer 1
Fin

Exercice 10.7
Bon, celui-l est tellement idiot qu'on n'a mme pas besoin de passer par des tableaux en
mmoire vive.
Variable Lig en Caractre
Debut
Ouvrir "Tutu.txt" sur 1 pour Ajout
Ouvrir Toto.txt sur 2 pour Lecture
Tantque Non EOF(2)
LireFichier 2, Lig
EcrireFichier 1, Lig
FinTantQue
Fermer 2
Ouvrir Tata.txt sur 3 pour Lecture
Tantque Non EOF(3)
LireFichier 2, Lig
EcrireFichier 1, Lig
FinTantQue
Fermer 3
Fermer 1

Exercice 10.8
On va liminer les mauvaises entres ds la recopie : si l'enregistrement ne prsente pas un mail
valide, on l'ignore, sinon on le copie dans le tableau.
Structure Bottin
Nom en Caractre * 20
Prnom en Caractre * 15
Tel en caractre * 10
Mail en Caractre * 20
Fin Structure
Tableau Mespotes() en Bottin
Variable MonPote en Bottin
Variables i, j en Numrique
Debut
On recopie "Adresses" dans MesPotes en testant le mail...
Ouvrir Adresse.txt sur 1 pour Lecture
i -1
Tantque Non EOF(1)
LireFichier 1, MonPote
nb 0
Pour i 1 Len(MonPote.Mail)
Si Mid(MonPote.Mail, i, 1) = "@" Alors
nb nb + 1
FinSi
i suivant
Si nb = 1 Alors
i i + 1
Redim MesPotes(i)
MesPotes(i) MonPote
FinSi
FinTantQue
Fermer 1
On recopie ensuite l'intgralit de Fic dans "Adresse"
Ouvrir Adresse.txt sur 1 pour Ecriture
Pour j 0 i
EcrireFichier 1, MesPotes(j)
Cours Algorithmique Auteur : Christophe Darmangeat

hh
j Suivant
Fermer 1
Fin

Exercice 10.9
Une fois de plus, le passage par un tableau de structures est une stratgie commode. Attention
toutefois, comme il s'agit d'un fichier texte, tout est stock en caractre. Il faudra donc convertir
en numrique les caractres reprsentant les ventes, pour pouvoir effectuer les calculs
demands.
Pour le traitement, il y a deux possibilits.
Soit on recopie le fichier l'identique dans un premier tableau, et on traite ensuite ce tableau pour
faire la somme par vendeur. Soit on fait le traitement directement, ds la lecture du fichier. C'est
cette option qui est choisie dans ce corrig.
Structure Vendeur
Nom en Caractre * 20
Montant en Numrique
Fin Structure
Tableau MesVendeurs() en Vendeur
Variables NomPrec * 20, Lig, Nom en caractre
Variables Somme, Vente en Numrique
On balaye le fichier en faisant nos additions. Ds que le nom a chang (on est pass au vendeur
suivant), on range le rsultat et on remet tout zro
Debut
Ouvrir Ventes.txt sur 1 pour Lecture
i -1
Somme 0
NomPrc ""
Tantque Non EOF(1)
LireFichier 1, Lig
Nom Mid(Lig, 1, 20)
Vente CNum(Mid(Lig, 21, 10)
Si Nom = NomPrec Alors
Somme Somme + Vente
Sinon
i i + 1
Redim MesVendeurs(i)
MesVendeurs(i).Nom NomPrec
MesVendeurs(i).Montant Somme
Somme 0
NomPrec Nom
FinSi
FinTantQue
Et n'oublions pas un petit tour de plus pour le dernier de ces messieurs
i i + 1
Redim MesVendeurs(i)
MesVendeurs(i).Nom NomPrec
MesVendeurs(i).Montant Somme
Fermer 1
Pour terminer, on affiche le tableau l'cran
Pour j 0 i
Ecrire MesVendeurs(j)
j suivant
Fin

Vous aimerez peut-être aussi