Vous êtes sur la page 1sur 147

COUR8 D'ALGORTHME

P PP PARTE ARTE ARTE ARTE 1 11 1












3
NTRODUCTON A L'ALGORTHMOUE
un langage de rogrammaton est une conventon our donner des ordres un ordnateur. ce n'est
as cense tre obscur, bzarre et len de eges subtls. ca, ce sont les caracterstques de la mage.
Luve Smull c'est llogque, catane Mr Sock
L'ulgorlthmlque est un terme d'orlglne urube, comme ulgebre, umlrul ou zenlth. Ce n'est us une
excuse our mussucrer son orthogruhe, ou su rononclutlon. Alnsl, l'ulgo n'est us rythmlque ,
lu dlfference du bon rock'n roll. L'ulgo n'est us non lus l'ugglo .
Alors, ne confondez pas l'algorithmique avec l'agglo rythmique, qui consiste
poser des parpaings en cadence.

1. OU'E8T-CE OUE L'ALGOMACHN ?
Avezvous dej ouvert un llvre de recettes de culslne ? Avezvous dej dechlffre un mode d'emlol
trudult dlrectement du coreen our fulre fonctlonner un mugnetoscoe ou un reondeur
telehonlque retlcent ? Sl oul, suns le suvolr, vous uvez dej execute des ulgorlthmes.
Plus fort : uvezvous dej lndlque un chemln un tourlste egure ? Avezvous fult chercher un objet
quelqu'un ur telehone ? Lcrlt une lettre unonyme stlulunt comment roceder une remlse de
runon ? Sl oul, vous uvez dej fubrlque - et fult executer - des ulgorlthmes.
Comme quol, l'ulgorlthmlque n'est us un suvolr esoterlque reserve quelques rures lnltles
touches ur lu grce dlvlne, muls une utltude urtugee ur lu totullte de l'humunlte. Lonc, us
d'excuses.
Un algorithme, c'est une suite d'instructions, qui une fois excute correctement,
conduit un rsultat donn. Sl l'ulgorlthme est juste, le resultut est le resultut voulu, et le
tourlste se retrouve l ou ll voulult uller. Sl l'ulgorlthme est fuux, le resultut est, dlsons, uleutolre, et
decldement, cette suloerle de reondeur ne veut rlen suvolr.
Comletons toutefols cette deflnltlon. Ares tout, en effet, sl l'ulgorlthme, comme on vlent de le
dlre, n'est qu'une sulte d'lnstructlons menunt celul qul l'execute resoudre un robleme, ourquol
ne us donner comme lnstructlon unlque : resous le robleme , et lulsser l'lnterlocuteur se
debroulller uvec u ? A ce turlf, n'lmorte qul serult chumlon d'ulgorlthmlque suns fulre uucun effort.
Pus de u Llsette, ce serult tro fuclle.
Le mulheur (ou le bonheur, tout deend du olnt de vue) est que justement, sl le tourlste vous
demunde son chemln, c'est qu'll ne le connuit us. Lonc, sl on n'est us un goujut lntegrul, ll ne sert
rlen de lul dlre de le trouver tout seul. Le meme les modes d'emlol contlennent generulement (muls
us toujours) un eu lus d'lnformutlons que debroulllez vous our que u murche .
Pour fonctlonner, un algorithme doit donc contenir uniquement des instructions
comprhensibles par celui qui devra l'excuter. C'est d'ullleurs l'un des olnts dellcuts our les
reducteurs de modes d'emlol : les references culturelles, ou lexlcules, des utlllsuteurs, etunt
vurlubles, un meme mode d'emlol eut etre tres clulr our certulns et urfultement ubscons our
d'uutres.
Ln lnformutlque, heureusement, ll n'y u us ce robleme : les choses uuxquelles ont dolt donner
des lnstructlons sont les ordlnuteurs, et ceuxcl ont le bon got d'etre tous strlctement uussl ldlots
les uns que les uutres


4
2. FAUT-L ETRE MATHEUX POUR ETRE BON EN ALGORTHMOUE ?
'e consucre quelques llgnes cette questlon, cur cette olnlon uussl fortement ufflrmee que
fulblement fondee sert regullerement d'excuse : mol, de toute fuon, je suls muuvuls(e) en ulgo, j'ul
jumuls rlen lge uux muths . luutll etre bon en muths our exllquer correctement son chemln
quelqu'un ? 'e vous lulsse juge.
Lu muitrlse de l'ulgorlthmlque requlert deux quulltes, tres comlementulres d'ullleurs :
o ll fuut uvolr une certulne intuition, cur uucune recette ne ermet de suvolr u rlorl quelles
lnstructlons ermettront d'obtenlr le resultut voulu. C'est l, sl l'on y tlent, qu'lntervlent lu
forme d'lntelllgence requlse our l'ulgorlthmlque. Alors, c'est certuln, ll y u des gens qul
ossedent uu deurt duvuntuge cette lntultlon que les uutres. Ceendunt, et j'lnslste sur ce
olnt, les reflexes, celu s'ucqulert. Lt ce qu'on uelle l'lntultlon n'est flnulement que de
l'exerlence tellement reetee que le rulsonnement, uu deurt luborleux, flnlt ur devenlr
sontune .
o ll fuut etre mthodique et rigoureux. Ln effet, chuque fols qu'on ecrlt une serle d'lnstructlons
qu'on crolt justes, ll fuut systmatiquement se mettre mentulement lu luce de lu muchlne
qul vu les executer, urme d'un uler et d'un cruyon, ufln de verlfler sl le resultut obtenu est
blen celul que l'on voulult. Cette oerutlon ne requlert us lu molndre once d'lntelllgence.
Muls elle reste neunmolns lndlsensuble, sl l'on ne veut us ecrlre l'uveuglette.
Lt etlt etlt, force de rutlque, vous verrez que vous ourrez fulre de lus en lus souvent
l'economle de cette dernlere etue : l'exerlence feru que vous verrez le resultut rodult ur vos
lnstructlons, uu fur et mesure que vous les ecrlrez. Nuturellement, cet urentlssuge est long, et
demunde des heures de truvull utlent. Aussl, duns un remler tems, evltez de suuter les etues : la
vrification mthodique, pas pas, de chacun de vos algorithmes reprsente plus de la moiti du
travail accomplir... et le gage de vos progrs.

3. L'ADN, LE8 8HADOK8, ET LE8 ORDNATEUR8
Quel ruort me dlrezvous ? Lh blen le olnt commun est : quutre mots de vocubululre. L'unlvers
lexlcul Shudok, c'est blen connu, se llmlte uux termes Cu , 8u , 2o , et Meu . Ce qul leur u
tout de meme ermls de formuler quelques fortes muxlmes, telles que : Veux vaut omer et qu'l
ne se asse ren, lutt qu'arrter de omer et rsquer qu'l se asse quelque cnose de re (our
d'uutres fortes muxlmes Shudok, n'hesltez us vlslter leur slte lnternet, ll y en u toute une
collectlon qul vuut le detour).
L'ALN, qul est en quelque sorte le rogrumme genetlque, l'ulgorlthme lu buse de constructlon
des etres vlvunts, est une chuine construlte urtlr de quutre elements lnvurlubles. Ce n'est que le
nombre de ces elements, ulnsl que l'ordre duns lequel lls sont urrunges, qul vont determlner sl on
obtlent une uce ou un elehunt. Lt tous uutunt que nous sommes, slendldes reussltes de lu
Nuture, uvons ete constrults ur un rogrumme constltue unlquement de ces quutre brlques, ce
qul devrult nous lnclter lu modestle.
Lnfin, les ordinateurs, quels qu'ils soient, ne sont fondamentalement capables de
comprendre que quatre catgories d'ordres (en programmation, on n'emploiera pas
le terme d'ordre, mais plutt celui d'instructions). Ces quatre familles d'instructions
sont :
l'affectation de variables
la lecture j criture

3
les tests
les boucles
Un ulgorlthme lnformutlque se rumene donc toujours uu bout du comte lu comblnulson de ces
quutre etltes brlques de buse. ll eut y en uvolr quelques unes, quelques dlzulnes, et jusqu'
lusleurs centulnes de mllllers duns certulns rogrummes de gestlon. Russurezvous, duns le cudre de
ce cours, nous n'lrons us jusque l (ceendunt, lu tullle d'un ulgorlthme ne condltlonne us en sol su
comlexlte : de longs ulgorlthmes euvent etre flnulement ussez slmles, et de etlts tres
comllques).

4. ALGORTHMOUE ET PROGRAMMATON
Pourquol urendre l'ulgorlthmlque our urendre rogrummer ? Ln quol uton besoln d'un
lunguge seclul, dlstlnct des lunguges de rogrummutlon comrehenslbles ur les ordlnuteurs ?
Purce que l'ulgorlthmlque exrlme les lnstructlons resolvunt un robleme donne
indpendamment des particularits de tel ou tel langage. Pour rendre une lmuge, sl un rogrumme
etult une dlssertutlon, l'ulgorlthmlque serult le lun, une fols mls de cte lu reductlon et
l'orthogruhe. Cr, vous suvez qu'll vuut mleux fulre d'ubord le lun et redlger ensulte que l'lnverse.
Arendre l'ulgorlthmlque, c'est urendre munler lu structure logique d'un rogrumme
lnformutlque. Cette dlmenslon est resente quelle que solt le lunguge de rogrummutlon , muls
lorsqu'on rogrumme duns un lunguge (en C, en vlsuul 8uslc, etc.) on dolt en lus se colleter les
roblemes de syntuxe, ou de tyes d'lnstructlons, rores ce lunguge. Arendre l'ulgorlthmlque
de munlere seuree, c'est donc serler les dlfflcultes our mleux les vulncre.
A celu, ll fuut ujouter que des generutlons de rogrummeurs, souvent uutodlductes (muls us
toujours, helus !), uyunt dlrectement urls rogrummer duns tel ou tel lunguge, ne font us
mentulement clulrement lu dlfference entre ce qul releve de lu structure loglque generule de toute
rogrummutlon (les regles fondumentules de l'ulgorlthmlque) et ce qul releve du lunguge urtlculler
qu'lls ont urls. Ces rogrummeurs, non seulement ont beuucou lus de mul usser ensulte un
lunguge dlfferent, muls encore ecrlvent blen souvent des rogrummes qul meme s'lls sont justes,
restent luborleux. Cur on n'lgnore us lmunement les regles fondumentules de l'ulgorlthmlque.
Alors, uutunt l'urendre en tunt que telle !
8on, mulntenunt que j'ul blen fult l'urtlcle our vendre mu murchundlse, on vu resque ouvolr
usser uu vlf du sujet.

5. AVEC OUELLE8 CONVENTON8 ECRT-ON UN ALGORTHME ?
Elstorlquement, lusleurs tyes de notutlons ont reresente des ulgorlthmes. ll y u eu notumment
une reresentutlon gruhlque, uvec des curres, des losunges, etc. qu'on uelult des
organigrammes. Aujourd'hul, cette reresentutlon est quuslment ubundonnee, our deux rulsons.
L'ubord, urce que des que l'ulgorlthme commence grosslr un eu, ce n'est lus rutlque du tout
du tout. Lnsulte urce que cette reresentutlon fuvorlse le gllssement vers un certuln tye de
rogrummutlon, dlte non structuree (nous deflnlrons ce terme lus turd), que l'on tente uu contrulre
d'evlter.
C'est ourquol on utlllse generulement une serle de conventlons uelee pseudocode , qul
ressemble un lunguge de rogrummutlon uuthentlque dont on uurult evucue lu luurt des
roblemes de syntuxe. Ce seudocode est suscetlble de vurler legerement d'un llvre (ou d'un
enselgnunt) un uutre. C'est blen normul : le seudocode, encore une fols, est urement

6
conventlonnel , uucune muchlne n'est censee le reconnuitre. Lonc, chuque culslnler eut fulre su
suuce su gulse, uvec ses etltes elces blen lul, suns que celu rete consequence.
Comme je n'ul us molns de etltes munles que lu mujorlte de mes semblubles, le seudocode
que vous decouvrlrez duns les uges qul sulvent ossede quelques seclflcltes mlneures qul ne
dolvent qu' mes nevroses ersonnelles.
Russurezvous ceendunt, cellescl restent duns les llmltes tout fult uccetubles. Ln tout cus,
ersonnellement, je les uccete tres blen.


7
LE8 VARABLE8
N'uttrlbuez jumuls lu mulvelllunce ce qul s'exllque tres blen ur l'lncometence. Nuoleon
8onuurte

A l'orlglne de toute erreur uttrlbuee l'ordlnuteur, vous trouverez uu molns deux erreurs
humulnes. Lont celle conslstunt uttrlbuer l'erreur l'ordlnuteur. Anonyme

1. A OUO 8ERVENT LE8 VARABLE8 ?
Luns un rogrumme lnformutlque, on vu uvolr en ermunence besoln de stocker rovlsolrement
des vuleurs. ll eut s'uglr de donnees lssues du dlsque dur, fournles ur l'utlllsuteur (fruees uu
cluvler), ou que sulsje encore. ll eut uussl s'uglr de resultuts obtenus ur le rogrumme,
lntermedlulres ou deflnltlfs. Ces donnees euvent etre de lusleurs tyes (on en reurleru) : elles
euvent etre des nombres, du texte, etc. 1oujours estll que des que l'on u besoln de stocker une
lnformutlon uu cours d'un rogrumme, on utlllse une variable.
Pour emloyer une lmuge, une vurluble est une bote, que le rogrumme (l'ordlnuteur) vu reerer
ur une tiquette. Pour uvolr ucces uu contenu de lu boite, ll sufflt de lu deslgner ur son etlquette.
Ln reullte, duns lu memolre vlve de l'ordlnuteur, ll n'y u blen sr us une vrule boite, et us
duvuntuge de vrule etlquette collee dessus (j'uvuls blen revenu que lu boite et l'etlquette, c'etult
une lmuge). Luns l'ordlnuteur, hyslquement, ll y u un emlucement de memolre, reere ur une
udresse blnulre. Sl on rogrummult duns un lunguge dlrectement comrehenslble ur lu muchlne, on
devrult se fuder de deslgner nos donnees ur de suerbes cccc et uutres ccccc (enchunte !).
Muuvulse nouvelle : de tels lunguges exlstent ! lls ortent le doux nom d'ussembleur. 8onne
nouvelle : ce ne sont us les seuls lunguges dlsonlbles.
Les lunguges lnformutlques lus evolues (ce sont ceux que resque tout le monde emlole) se
churgent reclsement, entre uutres rles, d'eurgner uu rogrummeur lu gestlon fustldleuse des
emlucements memolre et de leurs udresses. Lt, comme vous commencez le comrendre, ll est
beuucou lus fuclle d'emloyer les etlquettes de son cholx, que de devolr munler des udresses
blnulres.

2. DECLARATON DE8 VARABLE8
Lu remlere chose fulre uvunt de ouvolr utlllser une vurluble est de crer la bote et de lui coller
une tiquette. Cecl se fult tout uu debut de l'ulgorlthme, uvunt meme les lnstructlons rorement
dltes. C'est ce qu'on uelle lu dclaration des variables. C'est un genre de declurutlon certes molns
romuntlque qu'une declurutlon d'umour, muls d'un uutre cte molns desugreuble qu'une declurutlon
d'lmts.
Le nom de lu vurluble (l'etlquette de lu boite) obelt des lmerutlfs chungeunt selon les lunguges.
1outefols, une regle ubsolue est qu'un nom de vurluble eut comorter des lettres et des chlffres,
muls qu'll exclut lu luurt des slgnes de onctuutlon, en urtlculler les esuces. Un nom de vurluble
correct commence egulement lmerutlvement ur une lettre. Quunt uu nombre muxlmul de slgnes
our un nom de vurluble, ll deend du lunguge utlllse.
Ln seudocode ulgorlthmlque, on est blen sr llbre du nombre de slgnes our un nom de
vurluble, meme sl our des rulsons urement rutlques, et uu grund desesolr de Stehune 8ern, on
evlte generulement les noms rullonge.

8
Lorsqu'on declure une vurluble, ll ne sufflt us de creer une boite (reserver un emlucement
memolre) , encore dolton reclser ce que l'on voudru mettre deduns, cur de celu deendent lu taille
de lu boite (de l'emlucement memolre) et le type de codage utlllse.

2.1 Types numriques classiques
Commenons ur le cus tres frequent, celul d'une vurluble destlnee recevolr des nombres. Sl l'on
reserve un octet our coder un nombre, je ruelle our ceux qul dormulent en llsunt le chultre
recedent qu'on ne ourru coder que z
8
= z6 vuleurs dlfferentes. Celu eut slgnlfler ur exemle les
nombres entlers de z6, ou de c z, ou de -z, z8. Sl l'on reserve deux octets, on u drolt
6 6 vuleurs , uvec trols octets, 6 ,,, z6, etc. Lt l se ose un uutre robleme : ce coduge doltll
reresenter des nombres declmuux ? des nombres negutlfs ?
8ref, le tye de coduge (uutrement dlt, le tye de vurluble) cholsl our un nombre vu determlner :
les vuleurs muxlmules et mlnlmules des nombres ouvunt etre stockes duns lu vurluble
lu reclslon de ces nombres (duns le cus de nombres declmuux).
1ous les lunguges, quels qu'lls solent offrent un bouquet de tyes numerlques, dont le detull
est suscetlble de vurler legerement d'un lunguge l'uutre. Crosso modo, on retrouve ceendunt les
tyes sulvunts :

1ype Numrique Plage
8yte (octet) c z
Lntler slmle z ,68 z ,6,
Lntler long z , 8 68 z , 8 6,
Reel slmle
,cxc
8
,cxc

our les vuleurs negutlves


,cxc

,cxc
8
our les vuleurs osltlves
Reel double
,,xc
c8
,xc
z
our les vuleurs negutlves
,xc
z
,,xc
c8
our les vuleurs osltlves

Pourquol ne us declurer toutes les vurlubles numerlques en reel double, hlstolre de betonner et
d'etre certuln qu'll n'y uuru us de robleme ? Ln vertu du rlncle de l'conomie de moyens. Un bon
ulgorlthme ne se contente us de murcher , ll murche en evltunt de guslller les ressources de lu
muchlne. Sur certulns rogrummes de grunde tullle, l'ubus de vurlubles surdlmenslonnees eut
entruiner des rulentlssements notubles l'executlon, volre un luntuge ur et slmle de l'ordlnuteur.
Alors, uutunt rendre des le debut de bonnes hubltudes d'hyglene.
Ln ulgorlthmlque, on ne se trucusseru us tro uvec les soustyes de vurlubles numerlques
(suchunt qu'on uuru toujours ussez de soucls comme u, ullez). Cn se contenteru donc de reclser
qu'll s'uglt d'un nombre, en gurdunt en tete que duns un vrul lunguge, ll fuudru etre lus recls.

Ln seudocode, une declurutlon de vurlubles uuru ulnsl cette tete :
variable g en Numrique
ou encore
variables PrlxE1, 1uux1vA, Prlx11C en Numrique


9
2.2 Autres types numriques
Certulns lunguges uutorlsent d'uutres tyes numerlques, notumment :
le tye montaire (uvec strlctement deux chlffres ures lu vlrgule)
le tye date (jourjmolsjunnee).
Nous n'emlolerons us ces tyes duns ce cours , muls je les slgnule, cur vous ne munquerez us
de les rencontrer en rogrummutlon rorement dlte.

2.3 Type alphanumrique
lort heureusement, les boites que sont les vurlubles euvent contenlr blen d'uutres lnformutlons
que des nombres. Suns celu, on serult un eu embete des que l'on devrult stocker un nom de fumllle,
ur exemle.
Cn dlsose donc egulement du type alphanumrique (egulement uele type caractre, type
chane ou en ungluls, le type string - muls ne funtusmez us tro vlte, les strlng, c'est loln d'etre uussl
excltunt que le nom le suggere. Une etudlunte qul se reconnuitru sl elle llt ces llgnes u d'ullleurs mls le
dolgt sl j'ose m'exrlmer ulnsl sur le fult qu'll en vu de meme en ce qul concerne les bytes).
Luns une vurluble de ce tye, on stocke des caractres, qu'll s'uglsse de lettres, de slgnes de
onctuutlon, d'esuces, ou meme de chlffres. Le nombre muxlmul de curucteres ouvunt etre
stockes duns une seule vurluble string deend du lunguge utlllse.
Un groue de curucteres (y comrls un groue de un, ou de zero curucteres), qu'll solt ou non
stocke duns une vurluble, d'ullleurs, est donc souvent uele chane de curucteres.
Ln pseudocode, une chane de caractres est tou[ours note entre guillemets
Pourquol dluble ? Pour evlter deux sources rlnclules de osslbles confuslons :
lu confuslon entre des nombres et des sultes de chlffres. Pur exemle, z eut
reresenter le nombre z (quutre cent vlngttrols), ou lu sulte de curucteres , z, et . Lt ce
n'est us du tout lu meme chose ! Avec le remler, on eut fulre des culculs, uvec le second,
olnt du tout. Les lors, les gulllemets ermettent d'evlter toute umblguite : s'll n'y en u us,
z est quutre cent vlngt trols. S'll y en u, "z" reresente lu sulte des chlffres , z, .
.Muls ce n'est us le lre. L'uutre confuslon, blen lus gruve et blen lus frequente -
conslste se melunger les lnceuux entre le nom d'une vurluble et son contenu. Pour urler
slmlement, celu conslste confondre l'etlquette d'une boite et ce qu'll y u l'lnterleur. Cn
revlendru sur ce olnt cruclul duns quelques lnstunts.
2.4 Type boolen
Le dernler tye de vurlubles est le tye boolen : on y stocke unlquement les vuleurs loglques
vRAl et lAU.
Cn eut reresenter ces notlons ubstrultes de vRAl et de lAU ur tout ce qu'on veut : de
l'ungluls (1RUL et lALSL) ou des nombres (c et ). Peu lmorte. Ce qul comte, c'est de comrendre
que le tye booleen est tres economlque en termes de luce memolre occuee, ulsque our
stocker une telle lnformutlon blnulre, un seul blt sufflt.




10
Le tye booleen est tres souvent negllge ur les rogrummeurs, tort.
ll est vrul qu'll n'est us rorement urler lndlsensuble, et qu'on ourrult ecrlre eu res
n'lmorte quel rogrumme en l'lgnorunt comletement. Pourtunt, sl le tye booleen est mls
dlsosltlon des rogrummeurs duns tous les lunguges, ce n'est us our rlen. Le recours uux
vurlubles booleennes s'uvere tres souvent un ulssunt lnstrument de lisibilit des ulgorlthmes : ll
eut fuclllter lu vle de celul qul ecrlt l'ulgorlthme, comme de celul qul le rellt our le corrlger.

Alors, mulntenunt, c'est certuln, en ulgorlthmlque, ll y u une questlon de style : c'est exuctement
comme duns le lunguge courunt, ll y u lusleurs munleres de s'exrlmer our dlre sur le fond lu meme
chose. Nous verrons lus loln dlfferents exemles de vurlutlons styllstlques uutour d'une meme
solutlon. Ln uttendunt, vous etes revenus : l'uuteur de ce cours est un udete fervent (muls us
lrrulsonne) de l'utlllsutlon des vurlubles booleennes.



11













PARTE 2













12
LECTURE ET ECRTURE
un rogramme est un sort jete sur un ordnateur, qu transjorme tout texte sas au claver en message
d'erreur. Anonyme un claver Azerty en vaut deux Anonyme
1. DE OUO PARLE-T-ON ?
1rlfoulller des vurlubles en memolre vlve ur un chouette rogrumme, c'est vrul que c'est tres
murrunt, et d'ullleurs on u tous blen rlgole uu chultre recedent. Celu dlt, lu fln de lu folre, on eut
tout de meme se demunder quol u sert.
Ln effet. lmuglnons que nous uyons fult un rogrumme our culculer le curre d'un nombre,
mettons z. Sl on u fult uu lus slmle, on u ecrlt un truc du genre :
variable A en Numrique
Dbut
A z^z
Iin
L'une urt, ce rogrumme nous donne le curre de z. C'est tres gentll lul. Muls sl l'on veut le
curre d'un uutre nombre que z, ll fuut reecrlre le rogrumme. 8of.
L'uutre urt, le resultut est lndubltublement culcule ur lu muchlne. Muls elle le gurde
solgneusement our elle, et le uuvre utlllsuteur qul fult executer ce rogrumme, lul, ne suuru jumuls
quel est le curre de z. Rebof.
C'est ourquol, heureusement, ll exlste des d'lnstructlons our ermettre lu muchlne de
dluloguer uvec l'utlllsuteur (et Lycee de versullles, et ujoute l'estlme Plerre Luc, qul en recurseur
meconnu de l'ulgorlthmlque, ufflrmult tout uussl rofondement que ren ne sert de enser, l jaut
rejlecnr avant ).
Dans un sens, ces instructions permettent l'utilisateur de rentrer des valeurs au clavier pour
qu'elles soient utilises par le programme. Cette opration est la lecture.
Dans l'autre sens, d'autres instructions permettent au programme de communiquer des valeurs
l'utilisateur en les affichant l'cran. Cette opration est l'criture.
Remarque essentielle : A remlere vue, on eut uvolr l'lmresslon que les lnformutlclens etulent
beurres comme des etlts lus lorsqu'lls ont butlse ces oerutlons , ulsque quund l'utlllsuteur dolt
ecrlre uu cluvler, on uelle u lu lecture, et quund ll dolt llre sur l'ecrun on uelle l'ecrlture. Muls
uvunt d'ugonlr d'lnsultes une dlgne cororutlon, ll fuut reflechlr un eu lus loln. Un ulgorlthme, c'est
une sulte d'lnstructlons qul rogrumme lu muchlne, us l'utlllsuteur ! Lonc quund on dlt lu
muchlne de llre une vuleur, celu lmllque que l'utlllsuteur vu devolr ecrlre cette vuleur. Lt quund on
demunde lu muchlne d'ecrlre une vuleur, c'est our que l'utlllsuteur ulsse lu llre. Lecture et
ecrlture sont donc des termes qul comme toujours en rogrummutlon, dolvent etre comrls du olnt
de vue de lu muchlne qul seru churgee de les executer. Lt l, tout devlent urfultement loglque. Lt
toc.

2. LE8 N8TRUCTON8 DE LECTURE ET D'ECRTURE
1out betement, our que l'utlllsuteur entre lu (nouvelle) vuleur de 1ltl, on mettru :
Lire 1ltl


13
Ds que le programme rencontre une instruction Lire, l'excution s'interrompt,
attendant la frappe d'une valeur au clavier
Les lors, uussltt que lu touche Lntree (Lnter) u ete fruee, l'executlon rerend. Luns le sens
lnverse, our ecrlre quelque chose l'ecrun, c'est uussl slmle que :
Lcrire 1oto
Avunt de Llre une vurluble, ll est tres fortement consellle d'ecrlre des libells l'ecrun, ufln de
revenlr l'utlllsuteur de ce qu'll dolt fruer (slnon, le uuvre utlllsuteur usse son tems se
demunder ce que l'ordlnuteur uttend de lul. et c'est tres desugreuble !) :
Lcrire "Lntrez votre nom : "
Lire Nomlumllle
Lecture et Lcrlture sont des lnstructlons ulgorlthmlques qul ne resentent us de dlfflcultes
urtlculleres, une fols qu'on u blen usslmlle ce robleme du sens du dlulogue (homme muchlne, ou
muchlne homme).
Lt u y est, vous suvez d'ores et dej sur cette questlon tout ce qu'll y u suvolr.


14
ENONCE DE8 EXERCCE8
Lxercice z.
Quel resultut rodult le rogrumme sulvunt ?
vurlubles vul, double numerlques
Lebut
vul z
Louble vul * z
Lcrlre vul
Lcrlre Louble
lln

Lxercice z.z
Lcrlre un rogrumme qul demunde un nombre l'utlllsuteur, uls qul culcule et ufflche
le curre de ce nombre.

Lxercice z.
Lcrlre un rogrumme qul llt le rlx E1 d'un urtlcle, le nombre d'urtlcles et le tuux de
1vA, et qul fournlt le rlx totul 11C corresondunt. lulre en sorte que des llbelles
uurulssent clulrement.


Lxercice z.q
Lcrlre un ulgorlthme utlllsunt des vurlubles de tye chuine de curucteres, et ufflchunt
quutre vurluntes osslbles de lu celebre belle murqulse, vos beuux yeux me font
mourlr d'umour . Cn ne se soucle us de lu onctuutlon, nl des mujuscules.



13
CORRGE8 DE8 EXERCCE8
Lxercice z.
Cn verru uuruitre l'ecrun z, uls 6z (qul vuut z * z)

Lxercice z.z
variables nb, curr en Lntier
Dbut
Lcrire "Lntrez un nombre :"
Lire nb
curr nb * nb
Lcrire "Son curre est : ", curr
Iin
Ln fult, on ourrult tout uussl blen economlser lu vurluble curr en remluunt les deux
uvuntdernleres llgnes ur :
Lcrire "Son curre est : ", nb*nb
C'est une questlon de style , duns un cus, on rlvllegle lu llslblllte de l'ulgorlthme, duns
l'uutre, on rlvllegle l'economle d'une vurluble.

Lxercice z.
variables nb, ht, ttvu, ttc en Numrique
Dbut
Lcrire "Lntrez le rlx hors tuxes :"
Lire ht
Lcrire "Lntrez le nombre d'urtlcles :"
Lire nb
Lcrire "Lntrez le tuux de 1vA :"
Lire ttvu
ttc nb * ht * ( ttvu)
Lcrire "Le rlx toutes tuxes est : ", ttc
Iin
L uussl, on ourrult squeezer une vurluble et une llgne en ecrlvunt dlrectement. :
Lcrire "Le rlx toutes tuxes est : ", nb * ht * ( ttvu)
C'est lus rulde, lus leger en memolre, muls un eu lus dlfflclle rellre (et ecrlre !)

Lxercice z.q
variables t, tz, t, t en Caractre
Dbut
t "belle Murqulse"
tz "vos beuux yeux"
t "me font mourlr"
t "d'umour"
Lcrire t & " " & tz & " " & t & " " & t
Lcrire t & " " & tz & " " & t & " " & t
Lcrire tz & " " & t & " " & t & " " & t
Lcrire t & " " & t & " " & tz & " " & t
Iin

16











PARTE 3













17
LE8 TE8T8
ll est assez djjcle de trouver une erreur dans son code quand on la cnercne. c'est encore ben
lus dur quand on est convancu que le code est juste. Steve McConnell
ll n'exste as, et l n'exstera jamas, de langage dans lequel l sot un tant sot eu djjcle
d'ecrre de mauvas rogrammes . - Anonyme
S le deboguage est l'art d'enlever les bogues, alors la rogrammaton dot tre l'art de les creer.
Anonyme
'e vous uvuls dlt que l'ulgorlthmlque, c'est lu comblnulson de quutre structures elementulres.
Nous en uvons dej vu deux, volcl lu trolsleme. Autrement dlt, on u quuslment flnl le rogrumme.
Muls non, je rlgole.

1. DE OUO 8'AGT-L ?
Rerenons le cus de notre rogrummutlon ulgorlthmlque du tourlste egure . Normulement,
l'ulgorlthme ressembleru quelque chose comme : Allez tout drot jusqu'au rocnan carrejour, us
renez drote et ensute la deuxeme gaucne, et vous y tes .
Muls en cus de doute legltlme de votre urt, celu ourrult devenlr : Allez tout drot jusqu'au
rocnan carrejour et l regardez drote. S la rue est autorsee la crculaton, alors renez la et
ensute c'est la deuxeme gaucne. Vas s en revancne elle est en sens nterdt, alors contnuez jusqu'
la rocnane drote, renez cellel, et ensute la remere drote .
Ce deuxleme ulgorlthme u cecl de suerleur uu remler qu'll revolt, en fonctlon d'une sltuutlon
ouvunt se resenter de deux fuons dlfferentes, deux fuons dlfferentes d'uglr. Celu suose que
l'lnterlocuteur (le tourlste) suche unulyser lu condltlon que nous uvons flxee son comortement
( lu rue estelle en sens lnterdlt ? ) our effectuer lu serle d'uctlons corresondunte.
Lh blen, croyez le ou non, muls les ordlnuteurs ossedent cette utltude, suns luquelle d'ullleurs
nous uurlons blen du mul les rogrummer. Nous ullons donc ouvolr urler notre ordlnuteur
comme notre tourlste, et lul donner des serles d'lnstructlons effectuer selon que lu sltuutlon se
resente d'une munlere ou d'une uutre. Cette structure loglque reond uu doux nom de test.
1outefols, ceux qul tlennent ubsolument brlller en soclete urleront egulement de structure
alternative.

2. 8TRUCTURE D'UN TE8T
ll n'y u que deux formes possibles our un test , lu remlere est lu lus slmle, lu seconde lu lus
comlexe.
Si booleen Alors
lnstructlons
Iinsi
Si booleen Alors
lnstructlons
Sinon
lnstructlons z
Iinsi


18
Cecl uelle quelques exllcutlons.
Un boolen est une expression dont lu vuleur est vRAl ou lAU. Celu eut donc etre (ll n'y u que
deux osslbllltes) :
une variable (ou une exresslon) de tye booleen
une condition
Nous revlendrons duns quelques lnstunts sur ce qu'est une condition en lnformutlque.
1oujours estll que lu structure d'un test est relutlvement clulre. Luns lu forme lu lus slmle,
urrlve lu remlere llgne (Sl. Alors) lu muchlne exumlne lu vuleur du booleen. Sl ce booleen u our
vuleur vRAl, elle execute lu serle d'lnstructlons. Cette serle d'lnstructlons eut etre tres breve
comme tres longue, celu n'u uucune lmortunce. Ln revunche, duns le cus ou le booleen est fuux,
l'ordlnuteur suute dlrectement uux lnstructlons sltuees ures le llnSl.
Luns le cus de lu structure comlete, c'est elne lus comllque. Luns le cus ou le booleen est
vRAl, et ures uvolr execute lu serle d'lnstructlons , uu moment ou elle urrlve uu mot Slnon , lu
muchlne suute dlrectement lu remlere lnstructlon sltuee ures le llnsl . Le meme, uu cus ou le
booleen u comme vuleur luux , lu muchlne suute dlrectement lu remlere llgne sltuee ures le
Slnon et execute l'ensemble des lnstructlons z . Luns tous les cus, les lnstructlons sltuees juste
ures le llnSl seront executees normulement.
Ln fult, lu forme slmllflee corresond uu cus ou l'une des deux brunches du Sl est vlde. Les
lors, lutt qu'ecrlre slnon ne rlen fulre du tout , ll est lus slmle de ne rlen ecrlre. Lt lulsser un
Sl... comlet, uvec une des deux brunches vldes, est consldere comme une tres grosse muludresse
our un rogrummeur, meme sl celu ne constltue us rorement urler une fuute.
Lxrlme sous forme de seudocode, lu rogrummutlon de notre tourlste de tout l'heure
donnerult donc quelque chose du genre :
Allez tout drolt jusqu'uu rochuln currefour
Si lu rue drolte est uutorlsee lu clrculutlon Alors
1ournez drolte
Avuncez
Prenez lu deuxleme guuche
Sinon
Contlnuez jusqu' lu rochulne rue drolte
Prenez cette rue
Prenez lu remlere drolte
Iinsi

3. OU'E8T CE OU'UNE CONDTON ?

Une condition est une comparaison
Cette deflnltlon est essentlelle ! Llle slgnlfle qu'une condltlon est comosee de trols elements :
une valeur
un oprateur de comparaison
une autre valeur

19
Les vuleurs euvent etre u rlorl de n'lmorte quel tye (numerlques, curucteres.). Muls sl l'on
veut que lu comurulson ult un sens, ll fuut que les deux vuleurs de lu comurulson solent du meme
tye !
Les oprateurs de comparaison sont :
gal .
diffrent de.
strictement plus petit que.
strictement plus grand que.
plus petit ou gal .
plus grand ou gal .
L'ensemble des trols elements constltuunt lu condltlon constltue donc, sl l'on veut, une
ufflrmutlon, qul u un moment donne est vRAlL ou lAUSSL.
A noter que ces oeruteurs de comurulson euvent tout fult s'emloyer uvec des curucteres.
Ceuxcl sont codes ur lu muchlne duns l'ordre ulhubetlque (ruelez vous le code ASCll vu duns le
reumbule), les mujuscules etunt systemutlquement lucees uvunt les mlnuscules. Alnsl on u :
"t' < "w' vRAl
"Mumun' > "Puu" lAU
"mumun' > "Puu' vRAl
Remarque trs importante : Ln formulunt une condltlon duns un ulgorlthme, ll fuut se mefler comme
de lu este de certulns ruccourcls du lunguge courunt, ou de certulnes notutlons vulldes en
muthemutlques, muls qul menent des nonsens lnformutlques. Prenons ur exemle lu hruse
1oto est comrls entre et 8 . Cn eut etre tente de lu trudulre ur : < 1oto < 8
Cr, une telle exresslon, qul u du sens en frunuls, comme en muthemutlques, ne veut rien dire en
programmation. Ln effet, elle comrend deux oeruteurs de comurulson, solt un de tro, et trols
vuleurs, solt l uussl une de tro. Cn vu volr duns un lnstunt comment trudulre convenublement une
telle condltlon.

4. CONDTON8 COMPO8EE8
Certulns roblemes exlgent urfols de formuler des condltlons qul ne euvent us etre exrlmees
sous lu forme slmle exosee cldessus. Rerenons le cus 1oto est lnclus entre et 8 . Ln fult cette
hruse cuche non une, muls deux condltlons. Cur elle revlent dlre que 1oto est suerleur et
1oto est lnferleur 8 . ll y u donc blen l deux condltlons, rellees ur ce qu'on uelle un oprateur
logique, le mot L1.
Comme on l'u evoque lus huut, l'lnformutlque met notre dlsosltlon quutre oeruteurs
loglques : L1, CU, NCN, et CR.
Le L1 u le meme sens en lnformutlque que duns le lunguge courunt. Pour que "Condltlon L1
Condltlonz" solt vRAl, ll fuut lmerutlvement que Condltlon solt vRAl et que Condltlonz solt
vRAl. Luns tous les uutres cus, "Condltlon et Condltlonz" seru fuux.
ll fuut se mefler un eu lus du CU. Pour que "Condltlon CU Condltlonz" solt vRAl, ll sufflt
que Condltlon solt vRAlL ou que Condltlonz solt vRAlL. Le olnt lmortunt est que sl
Condltlon est vRAlL et que Condltlonz est vRAlL uussl, Condltlon CU Condltlonz reste
vRAlL. Le CU lnformutlque ne veut donc us dlre ou blen


20
Le CR (ou CU excluslf) fonctlonne de lu munlere sulvunte. Pour que "Condltlon CR
Condltlonz" solt vRAl, ll fuut que solt Condltlon solt vRAl, solt que Condltlonz solt vRAl. Sl
toutes les deux sont fuusses, ou que toutes les deux sont vRAl, ulors le resultut globul est
consldere comme lAU. Le CR est donc l'equlvulent du "ou blen" du lunguge courunt.
''lnslste toutefols sur le fult que le CR est une rurete, dont ll n'est us strlctement
lndlsensuble de s'encombrer en rogrummutlon.
Lnfln, le NCN lnverse une condltlon : NCN(Condltlon) est vRAl sl Condltlon est lAU, et ll
seru lAU sl Condltlon est vRAl. C'est l'equlvulent our les booleens du slgne "molns" que
l'on luce devunt les nombres. Alors, vous vous demundez eutetre quol sert ce NCN.
Ares tout, lutt qu'ecrlre NCN(Prlx > zc), ll serult lus slmle d'ecrlre tout bonnement
Prlx=<zc. Luns ce cus recls, c'est evldent qu'on se comllque lnutllement lu vle uvec le NCN.
Muls sl le NCN n'est jumuls lndlsensuble, ll y u tout de meme des sltuutlons duns lesquelles ll
s'uvere blen utlle.
Cn reresente frequemment tout cecl duns des tables de vrit (C et Cz reresentent deux
condltlons, et on envlsuge chuque fols les quutre cus osslbles)
C et Cz Cz vrai Cz Iaux
C vrai vrul luux
C Iaux luux luux

C ou Cz Cz vrai Cz Iaux
C vrai vrul vrul
C Iaux vrul luux

C xor Cz Cz vrai Cz Iaux
C vrai luux vrul
C Iaux vrul luux

Non C
C vrai luux
C Iaux vrul

LL CAC DL LA 1OURNLL ......Conslste formuler duns un test une condition qui ne pourra [amais tre
vraie, ou [amais tre fausse. Sl ce n'est us fult exres, c'est ussez rlgolo. Sl c'est fult exres, c'est
encore lus drle, cur une condltlon dont on sult d'uvunce qu'elle seru toujours fuusse n'est us une
condltlon. Luns tous les cus, celu veut dlre qu'on u ecrlt un test qul n'en est us un, et qul fonctlonne
comme s'll n'y en uvult us.
Celu eut etre ur exemle : Sl 1oto < c L1 1oto > Alors. (ll est tres dlfflclle de trouver un
nombre qul solt lu fols lnferleur c et suerleur !)
8on, u, c'est un motlf lmmedlut our uyer une tournee generule, et je sens qu'on ne resteru us
longtems le gosler sec.



21
5. TE8T8 MBROUE8
Cruhlquement, on eut tres fucllement reresenter un Sl comme un ulgullluge de chemln de fer
(ou un ulgullluge de truln electrlque, c'est molns lourd orter). Un Sl ouvre donc deux voles,
corresondunt deux trultements dlfferents. Muls ll y u des tus de sltuutlons ou deux voles ne
sufflsent us. Pur exemle, un rogrumme devunt donner l'etut de l'euu selon su temeruture dolt
ouvolr cholslr entre trols reonses osslbles (sollde, llqulde ou guzeuse).
Une remlere solutlon serult lu sulvunte :
variable 1em en Lntier
Dbut
Lcrire "Lntrez lu temeruture de l'euu :"
Lire 1em
Sl 1em =< c Alors
Lcrire "C'est de lu gluce"
IinSi
Si 1em > c Lt 1em < cc Alors
Lcrire "C'est du llqulde"
Iinsi
Si 1em > cc Alors
Lcrire "C'est de lu vueur"
Iinsi
Iin
vous constuterez que c'est un eu luborleux. Les condltlons se ressemblent lus ou molns, et
surtout on obllge lu muchlne exumlner trols tests successlfs ulors que tous ortent sur une meme
chose, lu temeruture de l'euu (lu vuleur de lu vurluble 1em). ll serult ulnsl blen lus rutlonnel
d'imbriquer les tests de cette munlere :
variable 1em en Lntier
Dbut
Lcrire "Lntrez lu temeruture de l'euu :"
Lire 1em
Si 1em =< c Alors
Lcrire "C'est de lu gluce"
Sinon
Si 1em < cc Alors
Lcrire "C'est du llqulde"
Sinon
Lcrire "C'est de lu vueur"
Iinsi
Iinsi
Iin
Nous uvons fult des economles : uu lleu de devolr tuer trols condltlons, dont une comosee, nous
n'uvons lus que deux condltlons slmles. Muls uussl, et surtout, nous uvons fult des economles sur
le tems d'executlon de l'ordlnuteur. Sl lu temeruture est lnferleure zero, celulcl ecrlt dorenuvunt
C'est de lu gluce et usse directement lu fln, suns etre rulentl ur l'exumen d'uutres osslbllltes
(qul sont forcement fuusses).
Cette deuxleme verslon n'est donc us seulement lus slmle ecrlre et lus llslble, elle est
egulement lus erformunte l'executlon.

22
Les structures de tests lmbrlques sont donc un outll lndlsensuble lu slmllflcutlon et
l'otlmlsutlon des ulgorlthmes.

6. DE L'AGULLAGE A LA GARE DE TR
1'a l'me jerrovare : je regarde asser les vacnes (Leo |erre)
Cette cltutlon n'uorte eutetre us grund chose cet exose, muls je l'ulme blen, ulors c'etult
le moment ou jumuls.
Ln effet, duns un rogrumme, une structure Sl eut etre fucllement comuree un ulgullluge de
truln. Lu vole rlnclule se seure en deux, le truln devunt rouler ou sur l'une, ou sur l'uutre, et les
deux voles se rejolgnunt tt ou turd our ne lus en former qu'une seule, lors du llnSl. Cn eut
schemutlser celu ulnsl :






Muls duns certulns cus, ce ne sont us deux voles qu'll nous fuut, muls trols, ou meme lus. Luns le
cus de l'etut de l'euu, ll nous fuut trols voles our notre truln , ulsque l'euu eut etre sollde,
llqulde ou guzeuse. Alors, nous n'uvons us eu le cholx : our deux voles, ll nous fullult un ulgullluge,
our trols voles ll nous en fuut deux, lmbrlques l'un duns l'uutre.


Cette structure (telle que nous l'uvons rogrummee lu uge recedente) devrult etre
schemutlsee comme sult :



Soyons blen clulrs : cette structure est lu seule osslble du olnt de vue loglque (meme sl on eut
toujours mettre le bus en huut et le huut en bus). Muls du olnt de vue de l'ecrlture, le seudocode
ulgorlthmlque udmet une slmllflcutlon sulementulre. Alnsl, ll est osslble (muls non obllgutolre,
que l'ulgorlthme lnltlul :

23
variable 1em en Lntier
Dbut
Lcrire "Lntrez lu temeruture de l'euu :"
Lire 1em
Si 1em =< c Alors
Lcrire "C'est de lu gluce"
Sinon
Si 1em < cc Alors
Lcrire "C'est du llqulde"
Sinon
Lcrire "C'est de lu vueur"
Iinsi
Iinsi
Iin
devlenne :
variable 1em en Lntier
Dbut
Lcrire "Lntrez lu temeruture de l'euu :"
Lire 1em
Si 1em =< c Alors
Lcrire "C'est de lu gluce"
SinonSi 1em < cc Alors
Lcrire "C'est du llqulde"
Sinon
Lcrire "C'est de lu vueur"
Iinsi
Iin
Dans le cas de tests imbriqus, le Sinon et le Si peuvent tre fusionns en un SinonSi. On
considre alors qu'il s'agit d'un seul bloc de test, conclu par un seul IinSi
Le SinonSi ermet en quelque sorte de creer (en reullte, de slmuler) des ulgullluges lus de deux
brunches. Cn eut ulnsl enchuiner les SlnonSl les uns derrlere les uutres our slmuler un ulgullluge
uutunt de brunches que l'on souhulte.

7. VARABLE8 BOOLEENNE8
'usqu'lcl, our ecrlre nos des tests, nous uvons utlllse unlquement des conditions. Muls vous vous
ruelez qu'll exlste un tye de vurlubles (les booleennes) suscetlbles de stocker les vuleurs vRAl
ou lAU. Ln fult, on eut donc entrer des condltlons duns ces vurlubles, et tester ensulte lu vuleur de
ces vurlubles.








24
Rerenons l'exemle de l'euu. Cn ourrult le reecrlre ulnsl :

variable 1em en Lntier
variables A, 8 en 8oolen
Dbut
Lcrire "Lntrez lu temeruture de l'euu :"
Lire 1em
A 1em =< c
8 1em < cc
Si A Alors
Lcrire "C'est de lu gluce"
SinonSi 8 Alors
Lcrire "C'est du llqulde"
Sinon
Lcrire "C'est de lu vueur"
Iinsi
Iin
A rlorl, cette technlque ne resente guere d'lnteret : on u ulourdl lutt qu'ullege l'ulgorlthme de
deurt, en uyunt recours deux vurlubles sulementulres.
Muls souvenonsnous : une vurluble booleenne n'u besoln que d'un seul blt our etre stockee.
Le ce olnt de vue, l'ulourdlssement n'est donc us conslderuble.
duns certulns cus, notumment celul de condltlons comosees tres lourdes (uvec leln de L1 et
de CU tout urtout) cette technlque eut fuclllter le truvull du rogrummeur, en umellorunt
nettement lu llslblllte de l'ulgorlthme. Les vurlubles booleennes euvent egulement s'uverer
tres utlles our servlr de flag, technlque dont on reurleru lus loln (russurezvous, rlen volr
uvec le flugrunt dellt des ollclers).



23














PARTE 4














26
ENCORE DE LA LOGOUE
La rogrammaton eut tre un lasr , de mme que la crytograne. 1outejos, l jaut evter de
combner les deux. lreltzberg et Sneldermunn
1. FAUT-L METTRE UN ET ? FAUT-L METTRE UN OU ?
Une remurque our commencer : duns le cus de condltlons comosees, les urentheses jouent un
rle fondumentul.
variables A, 8, C, L, L en 8oolen
variable en Lntier
Dbut
Lire
A > z
8 > z
C < 6
L (A L1 8) CU C
L A L1 (8 CU C)
Lcrire L, L
Iin
Sl = , ulors on remurque que L seru vRAl ulors que L seru lAU.
S'll n'y u duns une condltlon que des L1, ou que des CU, en revunche, les urentheses ne chungent
strlctement rlen.
Dans une condition compose employant la fois des oprateurs L1 et des
oprateurs OU, la prsence de parenthses possde une influence sur le rsultat, tout
comme dans le cas d'une expression numrique comportant des multiplications et
des additions.
Cn en urrlve une uutre rorlete des L1 et des CU, blen lus lnteressunte.
Sontunement, on ense souvent que L1 et CU s'excluent mutuellement, uu sens ou un robleme
donne s'exrlme solt uvec un L1, solt uvec un CU. Pourtunt, ce n'est us sl evldent.
Quund fuutll ouvrlr lu fenetre de lu sulle ? Unlquement sl les condltlons l'lmosent, suvolr :
Si ll fult tro chuud L1 ll ne leut us Alors
Cuvrlr lu fenetre
Sinon
lermer lu fenetre
Iinsi
Cette etlte regle ourrult tout uussl blen etre formulee comme sult :
Si ll ne fult us tro chuud CU ll leut Alors
lermer lu fenetre
Sinon
Cuvrlr lu fenetre
Iinsi



27
Ces deux formulutlons sont strlctement equlvulentes. Ce qul nous umene lu concluslon sulvunte :
1oute structure de test requrant une condition compose faisant
intervenir l'oprateur L1 peut tre exprime de manire quivalente
avec un oprateur OU, et rciproquement.
Cecl est molns surrenunt qu'll n'y uruit uu remler ubord. 'etez our vous en convulncre un oll
sur les tubles de verlte, et vous noterez lu symetrle entre celle du L1 et celle du CU. Luns les deux
tubles, ll y u trols cus sur quutre qul menent un resultut, et un sur quutre qul mene uu resultut
lnverse. Alors, rlen d'etonnunt ce qu'une sltuutlon qul s'exrlme uvec une des tubles (un des
oeruteurs loglques) ulsse tout uussl blen etre exrlmee uvec l'uutre tuble (l'uutre oeruteur
loglque). 1oute l'ustuce conslste suvolr effectuer correctement ce ussuge.
8len sr, on ne eut us se contenter de remlucer urement et slmlement les L1 ur des CU , ce
serult un eu fuclle. Lu regle d'equlvulence est lu sulvunte (on eut lu verlfler sur l'exemle de lu
fenetre) :
Si A L1 8 Alors
lnstructlons
Sinon
lnstructlons z
Iinsi

equlvuut :

Si NCN A CU NCN 8 Alors
lnstructlons z
Sinon
lnstructlons
Iinsi


Cette regle orte le nom de transformation de Morgan, du nom du muthemutlclen ungluls qul l'u
formulee.

2. AU-DELA DE LA LOGOUE : LE 8TYLE
Ce tltre un eu rovocuteur (muls neunmolns justlfle) u our but d'uttlrer mulntenunt votre
uttentlon sur un fult fondumentul en ulgorlthmlque, fult que lusleurs remurques recedentes ont
dej d vous fulre souonner : ll n'y u jumuls une seule munlere juste de trulter les structures
ulternutlves. Lt lus generulement, ll n'y u jumuls une seule munlere juste de trulter un robleme.
Lntre les dlfferentes osslbllltes, qul ne sont urfols us mellleures les unes que les uutres, le cholx
est une uffulre de style.
C'est our celu qu'uvec l'hubltude, on reconnuit le style d'un rogrummeur uussl srement que s'll
s'uglssult de style lltterulre.





28
Rerenons nos oeruteurs de comurulson mulntenunt fumlllers, le L1 et le CU. Ln fult, on
s'uerolt que l'on ourrult tout fult s'en usser ! Pur exemle, our rerendre l'exemle de lu
fenetre de lu sulle :
Si ll fult tro chuud L1 ll ne leut us Alors
Cuvrlr lu fenetre
Sinon
lermer lu fenetre
Iinsi
Possede un urfult equlvulent ulgorlthmlque sous lu forme de :
Si ll fult tro chuud Alors
Si ll ne leut us Alors
Cuvrlr lu fenetre
Sinon
lermer lu fenetre
Iinsi
Sinon
lermer lu fenetre
Iinsi
Luns cette dernlere formulutlon, nous n'uvons lus recours une condltlon comosee (muls uu
rlx d'un test lmbrlque sulementulre)
Lt comme tout ce qul s'exrlme ur un L1 eut uussl etre exrlme ur un CU, nous en concluons
que le CU eut egulement etre remluce ur un test lmbrlque sulementulre. Cn eut ulnsl oser
cette regle styllstlque generule :
Dans une structure alternative complexe, les conditions composes, l'imbrication des
structures de tests et l'emploi des variables boolennes ouvrent la possibilit de
choix stylistiques diffrents. L'alourdissement des conditions allge les structures de
tests et le nombre des boolens ncessaires , l'emploi de boolens supplmentaires
permet d'allger les conditions et les structures de tests, et ainsi de suite.
Sl vous uvez comrls ce qul recede, et que l'exerclce de lu dute ne vous ose lus uucun
robleme, ulors vous suvez tout ce qu'll y u suvolr sur les tests our uffronter n'lmorte quelle
sltuutlon. Non, ce n'est us de lu demugogle !
Mulheureusement, nous ne sommes us tout fult uu bout de nos elnes , ll reste une dernlere
structure loglque exumlner, et us des molndres.









29
ENONCE DE8 EXERCCE8
Lxercice q.
lormulez un ulgorlthme equlvulent l'ulgorlthme sulvunt :
Si 1utu > 1oto CU 1utu = "Cl" Alors
1utu 1utu
Sinon
1utu 1utu -
Iinsi

Lxercice q.z
Cet ulgorlthme est destlne redlre l'uvenlr, et ll dolt etre lnfullllble !
ll llru uu cluvler l'heure et les mlnutes, et ll ufflcheru l'heure qu'll seru une mlnute lus
turd. Pur exemle, sl l'utlllsuteur tue z uls z, l'ulgorlthme dolt reondre :
"Luns une mlnute, ll seru z heure(s) ".
N8 : on suose que l'utlllsuteur entre une heure vullde. Pus besoln donc de lu verlfler.

Lxercice q.
Le meme que le recedent, cet ulgorlthme dolt demunder une heure et en ufflcher une
uutre. Muls cette fols, ll dolt gerer egulement les secondes, et ufflcher l'heure qu'll seru
une seconde lus turd.
Pur exemle, sl l'utlllsuteur tue z, uls z, uls 8, l'ulgorlthme dolt reondre : "Luns
une seconde, ll seru z heure(s), z mlnute(s) et seconde(s)".
N8 : l encore, on suose que l'utlllsuteur entre une dute vullde.

Lxercice q.q
Un mugusln de rerogruhle fucture c,c L les dlx remleres hotocoles, c,c L les
vlngt sulvuntes et c,c8 L uudel. Lcrlvez un ulgorlthme qul demunde l'utlllsuteur le
nombre de hotocoles effectuees et qul ufflche lu fucture corresondunte.

Lxercice q.
Les hubltunts de 2orglub ulent l'lmt selon les regles sulvuntes :
les hommes de lus de zc uns ulent l'lmt
les femmes ulent l'lmt sl elles ont entre 8 et uns
les uutres ne ulent us d'lmt
Le rogrumme demunderu donc l'ge et le sexe du 2orglublen, et se rononceru donc
ensulte sur le fult que l'hubltunt est lmosuble.





30
Lxercice q.6
Les electlons leglslutlves, en Culgnolerle Setentrlonule, obelssent lu regle sulvunte :
lorsque l'un des cundlduts obtlent lus de c des suffruges, ll est elu des
le remler tour.
en cus de deuxleme tour, euvent urtlcler unlquement les cundlduts
uyunt obtenu uu molns z, des volx uu remler tour.
vous devez ecrlre un ulgorlthme qul ermette lu sulsle des scores de quutre cundlduts
uu remler tour. Cet ulgorlthme trulteru ensulte le cundldut numero (et uniquement
lul) : ll dlru s'll est elu, buttu, s'll se trouve en bullottuge fuvoruble (ll urtlcle uu
second tour en etunt urrlve en tete l'lssue du remler tour) ou defuvoruble (ll
urtlcle uu second tour suns uvolr ete en tete uu remler tour).

Lxercice q.)
Une comugnle d'ussurunce uutomoblle roose ses cllents quutre fumllles de turlfs
ldentlflubles ur une couleur, du molns uu lus onereux : turlfs bleu, vert, orunge et
rouge. Le turlf deend de lu sltuutlon du conducteur :
un conducteur de molns de z uns et tltululre du ermls deuls molns de
deux uns, se volt uttrlbuer le turlf rouge, sl toutefols ll n'u jumuls ete
resonsuble d'uccldent. Slnon, lu comugnle refuse de l'ussurer.
un conducteur de molns de z uns et tltululre du ermls deuls lus de
deux uns, ou de lus de z uns muls tltululre du ermls deuls molns de
deux uns u le drolt uu turlf orunge s'll n'u jumuls rovoque d'uccldent, uu
turlf rouge our un uccldent, slnon ll est refuse.
un conducteur de lus de z uns tltululre du ermls deuls lus de deux
uns beneflcle du turlf vert s'll n'est l'orlglne d'uucun uccldent et du turlf
orunge our un uccldent, du turlf rouge our deux uccldents, et refuse uu
del
Le lus, our encouruger lu fldellte des cllents uccetes, lu comugnle
roose un contrut de lu couleur lmmedlutement lu lus uvuntugeuse s'll
est entre duns lu mulson deuls lus d'un un.
Lcrlre l'ulgorlthme ermettunt de sulslr les donnees necessulres (suns contrle de
sulsle) et de trulter ce robleme. Avunt de se luncer cors erdu duns cet exerclce, on
ourru reflechlr un eu et s'uercevolr qu'll est lus slmle qu'll n'en u l'ulr (celu
s'uelle fulre une unulyse !)

Lxercice q.8
Lcrlvez un ulgorlthme qul u res uvolr demunde un numero de jour, de mols et d'unnee
l'utlllsuteur, renvole s'll s'uglt ou non d'une dute vullde.
Cet exerclce est certes d'un munque d'orlglnullte uffllgeunt, muls ures tout, en
ulgorlthmlque comme ullleurs, ll fuut connuitre ses clusslques ! Lt quund on u fult celu
une fols duns su vle, on urecle lelnement l'exlstence d'un tye numerlque dute
duns certulns lunguges.).
ll n'est suns doute us lnutlle de rueler ruldement que le mols de fevrler comte z8
jours, suuf sl l'unnee est blssextlle, uuquel cus ll en comte z. L'unnee est blssextlle sl

31
elle est dlvlslble ur quutre. 1outefols, les unnees dlvlslbles ur cc ne sont us
blssextlles, muls les unnees dlvlslbles ur cc le sont. Cuf !
Un dernler etlt detull : vous ne suvez us, our l'lnstunt, exrlmer correctement en
seudocode l'ldee qu'un nombre A est dlvlslble ur un nombre 8. Aussl, vous vous
contenterez d'ecrlre en bons telegruhlstes que A dlvlslble ur 8 se dlt A d 8 .


32
CORRGE8 DE8 EXERCCE8
Lxercice q.
Aucune dlfflculte, ll sufflt d'ullquer lu regle de lu trunsformutlon du CU en L1 vue en
cours (lol de Morgun). Attentlon toutefols lu rlgueur duns lu trunsformutlon des
condltlons en leur contrulre...
Si 1utu <= 1oto L1 1utu <> "Cl" Alors
1utu 1utu
Sinon
1utu 1utu
Iinsi

Lxercice q.z
variables h, m en Numrique
Dbut
Lcrire "Lntrez les heures, uls les mlnutes : "
Lire h, m
m m
Si m = 6c Alors
m c
h h
IinSi
Si h = z Alors
h c
IinSi
Lcrire "Luns une mlnute ll seru ", h, "heure(s) ", m, "mlnute(s)"
Iin

Lxercice q.
variables h, m, s en Numrique
Dbut
Lcrire "Lntrez les heures, uls les mlnutes, uls les secondes : "
Lire h, m, s
s s
Si s = 6c Alors
s c
m m
IinSi
Si m = 6c Alors
m c
h h
IinSi
Si h = z Alors
h c
IinSi
Lcrire "Luns une seconde ll seru ", h, "h", m, "m et ", s, "s"
Iin

33
Lxercice q.q
variables n, en Numrique
Dbut
Lcrire "Nombre de hotocoles : "
Lire n
Si n <= c Alors
n * c,
SinonSi n <= c Alors
c * c, (n - c) * c,c
Sinon
c * c, zc * c,c (n - c) * c,c8
IinSi
Lcrire "Le rlx totul est: ",
Iin

Lxercice q.
variable sex en Caractre
variable uge en Numrique
variables C, Cz en 8oolen
Dbut
Lcrire "Lntrez le sexe (Mjl) : "
Lire sex
Lcrire "Lntrez l'ge: "
Lire uge
C sex = "M" L1 uge > zc
Cz sex = "l" L1 (uge > 8 L1 uge < )
Si C ou Cz Alors
Lcrire "lmosuble"
Sinon
Lcrire "Non lmosuble"
IinSi
Iin

Lxercice q.6
Cet exerclce, du ur olnt de vue ulgorlthmlque, n'est us tres mechunt. Ln revunche, ll
reresente dlgnement lu cutegorle des enonces leges.
Ln effet, rlen de lus fuclle que d'ecrlre : sl le cundldut u lus de c, ll est elu, slnon s'll
u lus de z, , ll est uu deuxleme tour, slnon ll est ellmlne. Ee he he... muls ll ne fuut
us oubller que le cundldut eut tres blen uvolr eu zc muls etre tout de meme
ellmlne, tout slmlement urce que l'un des uutres u fult lus de c et donc qu'll n'y u
us de deuxleme tour !...
Morullte : ne jumuls se jeter sur lu rogrummutlon uvunt d'uvolr solgneusement mene
l'unulyse du robleme trulter.
variables A, 8, C, L en Numrique
Dbut
Lcrire "Lntrez les scores des quutre retendunts :"
Lire A, 8, C, L
C A > c

34
Cz 8 > c ou C > c ou L > c
C A >= 8 et A >= C et A >= L
C A >= z,
Si C Alors
Lcrire "Llu uu remler tour"
Sinonsi Cz ou Non(C) Alors
Lcrire "8uttu, ellmlne, sortl !!!'
SinonSi C Alors
Lcrire "8ullotuge fuvoruble"
Sinon
Lcrire "8ullotuge defuvoruble"
IinSi
Iin

Lxercice q.)
L encore, on lllustre l'utlllte d'une bonne unulyse. 'e roose deux corrlges dlfferents.
Le remler sult l'enonce us us. C'est juste, muls c'est vrulment lourd. Lu deuxleme
verslon s'uule sur une vrule comrehenslon d'une sltuutlon us sl embroulllee
qu'elle n'en u l'ulr.
Luns les deux cus, un recours uux vurlubles booleennes uere serleusement l'ecrlture.
Lonc, remler corrlge, on sult le texte de l'enonce us us :
variables uge, erm, ucc, ussur en Numrique
variables C, Cz, C en 8oolen
variable sltu en Caractre
Dbut
Lcrire "Lntrez l'ge: "
Lire uge
Lcrire "Lntrez le nombre d'unnees de ermls: "
Lire erm
Lcrire "Lntrez le nombre d'uccldents: "
Lire ucc
Lcrire "Lntrez le nombre d'unnees d'ussurunce: "
Lire ussur
C uge >= z
Cz erm >= z
C ussur >
Si Non(C) et Non(Cz) Alors
Si ucc = c Alors
sltu "Rouge"
Sinon
sltu "Refuse"
IinSi
Sinonsi ((Non(C) et Cz) ou (C et Non(Cz)) Alors
Si ucc = c Alors
sltu "Crunge"
SinonSi ucc = Alors
sltu "Rouge"
Sinon
sltu "Refuse"

33
IinSi
Sinon
Si ucc = c Alors
sltu "vert"
SinonSi ucc = Alors
sltu "Crunge"
SinonSi ucc = z Alors
sltu "Rouge"
Sinon
sltu "Refuse"
IinSi
IinSi
Si C Alors
Si sltu = "Rouge" Alors
sltu "Crunge"
SinonSi sltu = "Crunge" Alors
sltu "Crunge"
SinonSi sltu = "vert" Alors
sltu "8leu"
IinSi
IinSi
Lcrire "votre sltuutlon : ", sltu
Iin
vous trouvez celu comllque ? Ch, certes oul, u l'est ! Lt d'uutunt lus qu'en llsunt entre les llgnes,
on ouvult s'uercevolr que ce gullmutlus de turlfs recouvre en fult une loglque tres slmle : un
systeme olnts. Lt ll sufflt de comtublllser les olnts our que tout s'eclulre... Rerenons juste
ures l'uffectutlon des trols vurlubles booleennes C, Cz, et C. Cn ecrlt :
P c
Si Non(C) Alors
P P
IinSi
Si Non(Cz) Alors
P P
IinSi
P P ucc
Si P < et C Alors
P P
IinSi
Si P = Alors
sltu "8leu"
SinonSi P = c Alors
sltu "vert"
SinonSi P = Alors
sltu "Crunge"
SinonSi P = z Alors
sltu "Rouge"
Sinon
sltu "Refuse"
IinSi

36
Lcrire "votre sltuutlon : ", sltu
Iin
Cool, non ?

Lxercice q.8
Ln ce qul concerne le debut de cet ulgorlthme, ll n'y u uucune dlfflculte. C'est de lu
sulsle bete et meme us mechunte:
variables ', M, A, 'Mux en Numrique
variables v', vM, 8 en 8ooleen
Dbut
Lcrire "Lntrez le numero du jour"
Lire '
Lcrire "Lntrez le numero du mols"
Lire M
Lcrire "Lntrez l'unnee"
Lire A
C'est evldemment ensulte que les ennuls commencent. Lu remlere munlere d'uborder lu chose
conslste se dlre que fondumentulement, lu structure loglque de ce robleme est tres slmle. Sl
nous creons deux vurlubles booleennes v' et vM, reresentunt resectlvement lu vulldlte du jour et
du mols entres, lu fln de l'ulgorlthme seru d'une slmllclte blbllque (l'unnee est vullde ur deflnltlon,
sl on evucue le debut byzuntln concernunt l'exlstence de l'unnee zero) :
Si v' et vM alors
Lcrire "Lu dute est vullde"
Sinon
Lcrire "Lu dute n'est us vullde"
IinSi
1oute lu dlfflculte conslste uffecter correctement les vurlubles v' et vM, selon les vuleurs des
vurlubles ', M et A. Luns l'ubsolu, v' et vM ourrulent etre les objets d'une uffectutlon monstrueuse,
uvec des condltlons utrocement comosees. Muls frunchement, ecrlre ces condltlons en une seule
fols est un truvull de benedlctln suns grund lnteret. Pour evlter d'en urrlver une telle extremlte, on
eut serler lu dlfflculte en creunt deux vurlubles sulementulres :

8 : vurluble booleenne qul lndlque s'll s'uglt d'une unnee blssextlle
1Max : vurluble numerlque qul lndlqueru le dernler jour vuluble our le mols entre.


Avec tout celu, on eut y uller et en ressortlr vlvunt. Cn commence ur lnltlullser nos vurlubles
booleennes, uls on trulte les unnees, uls les mols, uls les jours.Cn note "d" lu condltlon "dlvlslble
ur" :
8 A d cc ou (non(A d cc) et A d )
'mux c
vM M >= et M =< z
Si vM Alors
Si M = z et 8 Alors
'Mux z
SinonSi M = z Alors
'Mux z8
SinonSi M = ou M = 6 ou M = ou M = Alors
'Mux c
Sinon

37
'Mux
IinSi
v' ' >= et ' =< 'mux
IinSi
Cette solutlon u le merlte de ne us tro comllquer lu structure des tests, et notumment de ne us
reeter l'ecrlture flnule l'ecrun. Les vurlubles booleennes lntermedlulres nous eurgnent des
condltlons comosees tro lourdes, muls cellescl restent neunmolns serleuses.

Une uroche dlfferente conslsterult llmlter les condltlons comosees, qultte le uyer ur une
structure beuucou lus exlgeunte de tests lmbrlques. L encore, on evlte de jouer les extremlstes et
l'on s'uutorlse quelques condltlons comosees lorsque celu nous slmllfle l'exlstence. Cn ourrult
uussl dlre que lu solutlon recedente "urt de lu fln" du robleme (lu dute est elle vullde ou non ?),
ulors que celle qul sult "urt du debut" (quelles sont les donnees entrees uu cluvler ?) :
Si M < ou M > z Alors
Lcrire "Lute lnvullde"
SinonSi M = z Alors
Si A d cc Alors
Si ' < ou ' > z Alors
Lcrire "Lute lnvullde"
Sinon
Lcrire "Lute vullde"
IinSi
SinonSi A d cc Alors
Si ' < ou ' > z8 Alors
Lcrire "Lute lnvullde"
Sinon
Lcrire "Lute vullde"
IinSi
SinonSi A d Alors
Si ' < ou ' > z8 Alors
Lcrire "Lute lnvullde"
Sinon
Lcrire "Lute vullde"
IinSi
Sinon
Si ' < ou ' > z8 Alors
Lcrire "Lute lnvullde"
Sinon
Lcrire "Lute vullde"
IinSi
IinSi
SinonSi M = ou M = 6 ou M = ou M = Alors
Si ' < ou ' > c Alors
Lcrire "Lute lnvullde"
Sinon
Lcrire "Lute vullde"
IinSi
Sinon
Si ' < ou ' > Alors
Lcrire "Lute lnvullde"

38
Sinon
Lcrire "Lute vullde"
IinSi
IinSi
Cn volt que duns ce cus, l'ulternutlve flnule (Lute vullde ou lnvullde) se trouve reetee un grund
nombre de fols. Ce n'est en sol nl une bonne, nl une muuvulse chose. C'est slmlement une questlon
de cholx styllstlque.

Personnellement, j'uvoue referer ussez nettement lu remlere solutlon, qul fult ressortlr beuucou
lus clulrement lu structure loglque du robleme (ll n'y u qu'une seule ulternutlve, uutunt que cette
ulternutlve ne solt ecrlte qu'une seule fols).

ll convlent enfln de clter une solutlon tres slmle et elegunte, un eu lus dlfflclle eutetre
lmuglner du remler cou, muls qul uvec le recul uuruit comme tres lmmedlute. Sur le fond, celu
conslste dlre qu'll y u quutre cus our qu'une dute solt vullde : celul d'un jour comrls entre et
duns un mols jours, celul d'un jour comrls entre et c duns un mols c jours, celul d'un jour
comrls entre et z en fevrler d'une unnee blssextlle, et celul d'un jour de fevrler comrls entre et
z8. Alnsl :
8 (A d et Non(A d cc)) ou A d cc
l (m= ou m= ou m= ou m=, ou m=8 ou m=c ou m=z) et ('>= et '=<)
lz (m= ou m=6 ou m= ou m=) et ('>= et '=<c)
l m=z et 8 et '>= et '=<z
l m=z et '>= et '=<z8
Si l ou lz ou l ou l Alors
Lcrire "Lute vullde"
Sinon
Lcrire "Lute non vullde"
IinSi
Iin
1out est ulors regle uvec quelques vurlubles booleennes et quelques condltlons comosees, en un
mlnlmum de llgnes de code.

Lu morule de ce long exerclce et non molns long corrlge, c'est qu'un robleme de test un eu
comllque udmet une lelude de solutlons justes......Muls que certulnes sont lus ustucleuses que
d'uutres !









39













PARTE 5














40
LE8 BOUCLE8
Les remers po du code rennent les remers po du tems de develoement. Les o restants
rennent les autres po du tems de develoement 1om Curglll

Lt u y est, on y est, on est urrlves, lu voll, c'est 8roudwuy, lu quutrleme et dernlere structure : u
est les boucles. Sl vous voulez euter vos umls, vous ouvez egulement urler de structures
rptitives, volre currement de structures itratives. Cu culme, heln ? 8on, vous fultes ce que vous
voulez, lcl on est entre nous, on urleru de boucles.
Les boucles, c'est generulement le olnt douloureux de l'urentl rogrummeur. C'est l que u
colnce, cur uutunt ll est ussez fuclle de comrendre comment fonctlonnent les boucles, uutunt ll est
souvent long d'ucquerlr les reflexes qul ermettent de les eluborer judlcleusement our trulter un
robleme donne.
Cn eut dlre en fult que les boucles constltuent lu seule vrule structure loglque curucterlstlque de
lu rogrummutlon. Sl vous uvez utlllse un tubleur comme Lxcel, ur exemle, vous uvez suns doute
u munler des choses equlvulentes uux vurlubles (les cellules, les formules) et uux tests (lu fonctlon
Sl.). Muls les boucles, u, u n'u uucun equlvulent. Celu n'exlste que duns les lunguges de
rogrummutlon rorement dlts.
Le munlement des boucles, s'll ne dlfferencle certes us l'homme de lu bete (ll ne fuut tout de
meme us exugerer), est tout de meme ce qul seure en lnformutlque le rogrummeur de
l'utlllsuteur, meme uvertl.
Alors, vos futures - et lnevltubles dlfflcultes sur le sujet, ll y u trols remedes : de lu rlgueur, de lu
utlence, et encore de lu rlgueur !

1. A OUO CELA 8ERT-L DONC ?
Prenons le cus d'une sulsle uu cluvler (une lecture), ou ur exemle, le rogrumme ose une
questlon luquelle l'utlllsuteur dolt reondre ur C (Cul) ou N (Non). Muls tt ou turd, l'utlllsuteur,
fucetleux ou muludrolt, rlsque de tuer uutre chose que lu reonse uttendue. Les lors, le rogrumme
eut lunter solt ur une erreur d'executlon (urce que le tye de reonse ne corresond us uu
tye de lu vurluble uttendu) solt ur une erreur fonctlonnelle (ll se deroule normulement jusqu'uu
bout, muls en rodulsunt des resultuts funtulslstes).
Alors, duns tout rogrumme un tunt solt eu serleux, on met en luce ce qu'on uelle un
contrle de saisie, ufln de verlfler que les donnees entrees uu cluvler corresondent blen celles
uttendues ur l'ulgorlthme.
A vue de nez, on ourrult essuyer uvec un Sl. voyons volr ce que u donne :
variable Re en Caractre
Dbut
Lcrire "voulez vous un cufe ? (CjN)"
Lire Re
Si Re <> "C" et Re <> "N" Alors
Lcrire "Sulsle erronnee. Recommencez"
Lire Re
IinSi
Iin

41
C'est lmeccuble. Lu molns tunt que l'utlllsuteur u le bon got de ne se tromer qu'une seule fols,
et d'entrer une vuleur correcte lu deuxleme demunde. Sl l'on veut egulement betonner en cus de
deuxleme erreur, ll fuudrult rujouter un Sl. Lt ulnsl de sulte, on eut rujouter des centulnes de Sl, et
ecrlre un ulgorlthme uussl lourd qu'une blugue des Crosses 1etes, on n'en sortlru us, ll y uuru
toujours moyen qu'un uchurne flunque le rogrumme ur terre.
Lu solutlon conslstunt ullgner des Sl. en ugullle est donc une lmusse. Lu seule lssue est donc
de flunquer une structure de boucle, qul se resente ulnsl :
1antque booleen
.
lnstructlons
.
Iin1antque
Le rlncle est slmle : le rogrumme urrlve sur lu llgne du 1untQue. ll exumlne ulors lu vuleur du
booleen (qul, je le ruelle, eut etre une vurluble booleenne ou, lus frequemment, une condltlon).
Sl cette vuleur est vRAl, le rogrumme execute les lnstructlons qul sulvent, jusqu' ce qu'll rencontre
lu llgne lln1untQue. ll retourne ensulte sur lu llgne du 1untQue, rocede uu meme exumen, et ulnsl
de sulte. Le munege enchunte ne s'urrete que lorsque le booleen rend lu vuleur lAU.
lllustrutlon uvec notre robleme de contrle de sulsle. Une remlere uroxlmutlon de lu solutlon
conslste ecrlre :
variable Re en Caractre
Dbut
Lcrire "voulez vous un cufe ? (CjN)"
1antque Re <> "C" et Re <> "N"
Lire Re
Iin1antque
Iin
L, on u le squelette de l'ulgorlthme correct. Muls de meme qu'un squelette ne sufflt us our
uvolr un etre vlvunt vluble, ll vu nous fullolr ujouter quelques muscles et orgunes sur cet ulgorlthme
our qu'll fonctlonne correctement.
Son rlnclul defuut est de rovoquer une erreur chuque executlon. Ln effet, l'exresslon
booleenne qul flgure ures le 1untQue lnterroge lu vuleur de lu vurluble Re. Mulheureusement,
cette vurluble, sl elle u ete decluree, n'u us ete uffectee uvunt l'entree duns lu boucle. Cn teste donc
une vurluble qul n'u us de vuleur, ce qul rovoque une erreur et l'urret lmmedlut de l'executlon.
Pour evlter cecl, on n'u us le cholx : ll fuut que lu vurluble Re ult dej ete uffectee uvunt qu'on en
urrlve uu remler tour de boucle. Pour celu, on eut fulre une remlere lecture de Re uvunt lu
boucle. Luns ce cus, cellecl ne servlru qu'en cus de muuvulse sulsle lors de cette remlere lecture.
L'ulgorlthme devlent ulors :
variable Re en Caractre
Dbut
Lcrire "voulez vous un cufe ? (CjN)"
Lire Re
1antque Re <> "C" et Re <> "N"
Lire Re
Iin1antque
Iin

42
Une uutre osslblllte, frequemment emloyee, conslste ne us llre, muls uffecter
urbltrulrement lu vurluble uvunt lu boucle. Arbltrulrement ? Pus tout fult, ulsque cette uffectutlon
dolt uvolr our resultut de rovoquer l'entree obllgutolre duns lu boucle. L'uffectutlon dolt donc fulre
en sorte que le booleen solt mls vRAl our declencher le remler tour de lu boucle. Luns notre
exemle, on eut donc uffecter Re uvec n'lmorte quelle vuleur, hormls C et N : cur duns ce
cus, l'executlon suuterult lu boucle, et Re ne serult us du tout lue uu cluvler. Celu donneru ur
exemle :
variable Re en Caractre
Dbut
Re ""
Lcrire "voulez vous un cufe ? (CjN)"
1antque Re <> "C" et Re <> "N"
Lire Re
Iin1antque
Iin
Cette munlere de roceder est connuitre, cur elle est emloyee tres frequemment.
ll fuut remurquer que les deux solutlons (lecture lnltlule de Re en dehors de lu boucle ou
uffectutlon de Re) rendent toutes deux l'ulgorlthme sutlsfulsunt, muls resentent une dlfference
ussez lmortunte duns leur structure loglque.
Ln effet, sl l'on cholslt d'effectuer une lecture reuluble de Re, lu boucle ulterleure seru executee
unlquement duns l'hyothese d'une muuvulse sulsle lnltlule. Sl l'utlllsuteur sulslt une vuleur correcte
lu remlere demunde de Re, l'ulgorlthme usseru sur lu boucle suns entrer deduns.
Ln revunche, uvec lu deuxleme solutlon (celle d'une uffectutlon reuluble de Re), l'entree de lu
boucle est forcee, et l'executlon de cellecl, uu molns une fols, est rendue obllgutolre chuque
executlon du rogrumme. Lu olnt de vue de l'utlllsuteur, cette dlfference est tout fult mlneure , et
lu llmlte, ll ne lu remurqueru meme us. Muls du olnt de vue du rogrummeur, ll lmorte de blen
comrendre que les chemlnements des lnstructlons ne seront us les memes duns un cus et duns
l'uutre.
Pour termlner, remurquons que nous ourrlons euuflner nos solutlons en ujoutunt des ufflchuges
de llbelles qul font encore un eu defuut. Alnsl, sl l'on est un rogrummeur zele, lu remlere solutlon
(celle qul lnclut deux lectures de Re, une en dehors de lu boucle, l'uutre l'lnterleur) ourrult
devenlr :
variable Re en Caractre
Dbut
Lcrire "voulez vous un cufe ? (CjN)"
Lire Re
1antque Re <> "C" et Re <> "N"
Lcrire "vous devez reondre ur C ou N. Recommencez"
Lire Re
Iin1antque
Lcrire "Sulsle uccetee"
Iin





43
Quunt lu deuxleme solutlon, elle ourru devenlr :
variable Re en Caractre
Dbut
Re ""
Lcrire "voulez vous un cufe ? (CjN)"
1antque Re <> "C" et Re <> "N"
Lire Re
Si Re <> "C" et Re <> "N" Alors
Lcrire "Sulsle Lrronee, Recommencez"
IinSi
Iin1antque
Iin


Le Cag De La 1ourne C'est d'ecrlre une structure 1untQue duns luquelle le booleen n'est
jumuls vRAl. Le rogrumme ne rentre ulors jumuls duns lu suerbe boucle sur luquelle vous
uvez tunt sue ! Muls lu fuute symetrlque est uu molns uussl desollunte. Llle conslste ecrlre
une boucle duns luquelle le booleen ne devlent jumuls lAU. L'ordlnuteur tourne ulors duns lu
boucle comme un derute et n'en sort lus. Seule solutlon, qultter le rogrumme uvec un
demonteneu ou un bton de dynumlte. Lu boucle infinie est une des huntlses les lus
redoutees des rogrummeurs. C'est un eu comme le verre buveur, le oll grutter ou le bleu
de methylene : c'est ecule, muls u fult toujours rlre. Cette fuute de rogrummutlon grosslere
- muls frequente ne munqueru us d'eguyer l'umblunce collectlve de cette formutlon. et
uccessolrement d'etuncher lu solf roverblule de vos enselgnunts.
8on, eh blen vous ullez ouvolr fulre de chouettes ulgorlthmes, dej rlen qu'uvec u.

2. BOUCLER EN COMPTANT, OU COMPTER EN BOUCLANT
Luns le dernler exerclce, vous uvez remurque qu'une boucle ouvult etre utlllsee our uugmenter
lu vuleur d'une vurluble. Cette utlllsutlon des boucles est tres frequente, et duns ce cus, ll urrlve tres
souvent qu'on ult besoln d'effectuer un nombre dtermin de ussuges. Cr, u rlorl, notre structure
1untQue ne sult us l'uvunce comblen de tours de boucle elle vu effectuer (ulsque le nombre de
tours deend de lu vuleur d'un booleen).
C'est ourquol une uutre structure de boucle est notre dlsosltlon :
variable 1ruc en Lntier
Dbut
1ruc c
1antque 1ruc <
1ruc 1ruc
Lcrire "Pussuge numero : ", 1ruc
Iin1antque
Iin



44

Lqulvuut :
variable 1ruc en Lntier
Dbut
Pour 1ruc
Lcrire "Pussuge numero : ", 1ruc
1ruc Suivant
Iin
lnslstons : la structure Pour . Suivant n'est pas du tout indispensable , on ourrult fort blen
rogrummer toutes les sltuutlons de boucle unlquement uvec un 1unt Que . Le seul lnteret du
Pour est d'eurgner un eu de futlgue uu rogrummeur, en lul evltunt de gerer lulmeme lu
rogresslon de lu vurluble qul lul sert de comteur (on urle d'incrmentation, encore un mot qul
feru forte lmresslon sur votre entouruge).
Llt d'une uutre munlere, lu structure Pour . Sulvunt est un cus urtlculler de 1untQue : celul
ou le rogrummeur eut denombrer l'uvunce le nombre de tours de boucles necessulres.
ll fuut noter que duns une structure Pour . Sulvunt , lu rogresslon du comteur est lulssee
votre llbre dlsosltlon. Luns lu luurt des cus, on u besoln d'une vurluble qul uugmente de
chuque tour de boucle. Cn ne reclse ulors rlen l'lnstructlon Pour , cellecl, ur defuut,
comrend qu'll vu fullolr roceder cette lncrementutlon de chuque ussuge, en commenunt ur
lu remlere vuleur et en termlnunt ur lu deuxleme.
Muls sl vous souhultez une rogresslon lus seclule, de z en z, ou de en , ou en urrlere, de -
en -, ou de -c en -c, ce n'est us un robleme : ll sufflru de le reclser votre lnstructlon Pour
en lul rujoutunt le mot Pus et lu vuleur de ce us (Le us dont nous urlons, c'est le us du
murcheur, ste en ungluls).
Nuturellement, quund on stlule un us negutlf duns une boucle, lu vuleur lnltlule du comteur
dolt etre suprieure su vuleur flnule sl l'on veut que lu boucle tourne ! Luns le cus contrulre, on uuru
slmlement ecrlt une boucle duns luquelle le rogrumme ne rentreru jumuls.
Nous ouvons donc mulntenunt donner lu formulutlon generule d'une structure Pour . Su
syntuxe generule est :
Pour Comteur lnltlul llnul Pas vuleurLuPus
.
lnstructlons
.
Comteur suivant
Les structures 1antque sont emloyees duns les sltuutlons ou l'on dolt roceder un trultement
systemutlque sur les elements d'un ensemble dont on ne connuit us d'uvunce lu quuntlte, comme
ur exemle :
le contrle d'une sulsle
lu gestlon des tours d'un jeu (tunt que lu urtle n'est us flnle, on recommence)
lu lecture des enreglstrements d'un flchler de tullle lnconnue(cf. Purtle )
Les structures Pour sont emloyees duns les sltuutlons ou l'on dolt roceder un trultement
systemutlque sur les elements d'un ensemble dont le rogrummeur connuit d'uvunce lu quuntlte.
Nous verrons duns les chultres sulvunts des serles d'elements ueles tubleuux (urtles , et 8) et
chuines de curucteres (urtle ). Selon les cus, le buluyuge systemutlque des elements de ces serles
ourru etre effectue ur un Pour ou ur un 1untQue : tout deend sl lu quuntlte d'elements buluyer

43
(donc le nombre de tours de boucles necessulres) eut etre denombree l'uvunce ur le
rogrummeur ou non.

3. DE8 BOUCLE8 DAN8 DE8 BOUCLE8
( 1OU1 LS1 DANS 1OU1... L1 8LClP8OqULMLN1 )
Cn rlgole, on rlgole !
Le meme que les ouees russes contlennent d'uutres ouees russes, de meme qu'une
structure Sl . ALCRS eut contenlr d'uutres structures Sl . ALCRS, une boucle eut tout fult
contenlr d'uutres boucles. Y u us de rulson.
variables 1ruc, 1ruc en Lntier
Dbut
Pour 1ruc
Lcrire "ll est usse ur lcl"
Pour 1ruc 6
Lcrire "ll reusseru ur l"
1ruc Suivant
1ruc Suivant
Iin
Luns cet exemle, le rogrumme ecrlru une fols "ll est usse ur lcl" uls slx fols de sulte "ll
reusseru ur l", et cecl qulnze fols en tout. A lu fln, ll y uuru donc eu x 6 = c ussuges duns lu
deuxleme boucle (celle du mllleu), donc c ecrltures l'ecrun du messuge ll reusseru ur l .
Notez lu dlfference murquunte uvec cette structure :
variables 1ruc, 1ruc en Lntier
Dbut
Pour 1ruc
Lcrire "ll est usse ur lcl"
1ruc Suivant
Pour 1ruc 6
Lcrire "ll reusseru ur l"
1ruc Suivant
Iin
lcl, ll y uuru qulnze ecrltures consecutlves de "ll est usse ur lcl", uls slx ecrltures consecutlves
de "ll reusseru ur l", et ce seru tout.
Les boucles euvent donc etre imbriques (cus n) ou successives (cus nz). Ceendunt, elles ne
euvent jumuls, uu grund jumuls, etre crolsees. Celu n'uurult uucun sens loglque, et de lus, blen eu
de lunguges vous uutorlserulent ne serultce qu' ecrlre cette structure uberrunte.
variables 1ruc, 1ruc en Lntier
Pour 1ruc .
lnstructlons
Pour 1ruc .
lnstructlons
1ruc Suivant
lnstructlons
1ruc Suivant

46
Pourquol lmbrlquer des boucles ? Pour lu meme rulson qu'on lmbrlque des tests. Lu truductlon en
bon frunuls d'un test, c'est un cus . Lh blen un cus (ur exemle, estce un homme ou une
femme ? ) eut tres blen se subdlvlser en d'uutres cus ( utll lus ou molns de 8 uns ? ).
Le meme, une boucle, c'est un trultement systemutlque, un exumen d'une serle d'elements un
ur un (ur exemle, renons tous les emloyes de l'entrerlse un ur un ). Lh blen, on eut
lmuglner que our chuque element ulnsl consldere (our chuque emloye), on dolve roceder un
exumen systemutlque d'uutre chose ( renons chucune des commundes que cet emloye u
trultees ). voll un exemle tylque de boucles lmbrlquees : on devru rogrummer une boucle
rlnclule (celle qul rend les emloyes un ur un) et l'lnterleur, une boucle secondulre (celle qul
rend les commundes de cet emloye une ur une).
Luns lu rutlque de lu rogrummutlon, lu muitrlse des boucles lmbrlquees est necessulre, meme sl
elle n'est us sufflsunte. 1out le contrulre d'Aluln Lelon, en quelque sorte.

4. ET ENCORE UNE BET8E A NE PA8 FARE l
Lxumlnons l'ulgorlthme sulvunt :
variable 1ruc en Lntier
Dbut
Pour 1ruc
1ruc 1ruc * z
Lcrire "Pussuge numero : ", 1ruc
1ruc Suivant
Iin
vous remurquerez que nous fulsons lcl gerer en double lu vurluble 1ruc, ces deux gestlons
etunt contrudlctolres. L'une urt, lu llgne
Pour.
uugmente lu vuleur de 1ruc de chuque ussuge. L'uutre urt lu llgne
1ruc 1ruc * z
double lu vuleur de 1ruc chuque ussuge. ll vu suns dlre que de telles munlulutlons erturbent
comletement le deroulement normul de lu boucle, et sont cuuses, slnon de luntuges, tout uu
molns d'executlons errutlques.
Le Cag De La 1ourne : ll conslste donc munluler, uu seln d'une boucle Pour, lu
vurluble qul sert de comteur cette boucle. Cette technlque est roscrlre
ubsolument. suuf blen sr, sl vous cherchez un retexte our reguler tout le monde
uu blstrot. Muls duns ce cus, n'uyez uucune lnhlbltlon, roosezle dlrectement, us
besoln de retexte.


47
ENONCE DE8 EXERCCE8
Lxercice .
Lcrlre un ulgorlthme qul demunde l'utlllsuteur un nombre comrls entre et jusqu'
ce que lu reonse convlenne.

Lxercice .z
Lcrlre un ulgorlthme qul demunde un nombre comrls entre c et zc, jusqu' ce que lu
reonse convlenne. Ln cus de reonse suerleure zc, on feru uuruitre un messuge :
Plus etlt ! , et lnversement, Plus grund ! sl le nombre est lnferleur c.

Lxercice .
Lcrlre un ulgorlthme qul demunde un nombre de deurt, et qul ensulte ufflche les dlx
nombres sulvunts. Pur exemle, sl l'utlllsuteur entre le nombre ,, le rogrumme
ufflcheru les nombres de 8 z,.

Lxercice .q
Lcrlre un ulgorlthme qul demunde un nombre de deurt, et qul ensulte ecrlt lu tuble de
multlllcutlon de ce nombre, resentee comme sult (cus ou l'utlllsuteur entre le
nombre ,) :
1uble de , :
, x = ,
, x z =
, x = z
.
, x c = ,c

Lxercice .
Lcrlre un ulgorlthme qul demunde un nombre de deurt, et qul culcule lu somme des
entlers jusqu' ce nombre. Pur exemle, sl l'on entre , le rogrumme dolt culculer :
z =
N8 : on souhulte ufflcher unlquement le resultut, us lu decomosltlon du culcul.

Lxercice .6
Lcrlre un ulgorlthme qul demunde un nombre de deurt, et qul culcule su fuctorlelle.
N8 : lu fuctorlelle de 8, notee 8 !, vuut
x z x x x x 6 x , x 8





48
Lxercice .)
Lcrlre un ulgorlthme qul demunde successlvement zc nombres l'utlllsuteur, et qul lul
dlse ensulte quel etult le lus grund urml ces zc nombres :
Lntrez le nombre numero : z
Lntrez le nombre numero z :
etc.
Lntrez le nombre numero zc : 6
Le lus grund de ces nombres est :
Modlflez ensulte l'ulgorlthme our que le rogrumme ufflche de surcroit en quelle
osltlon uvult ete sulsle ce nombre :
C'etult le nombre numero z

Lxercice .8
Reecrlre l'ulgorlthme recedent, muls cette folscl on ne connuit us d'uvunce comblen
l'utlllsuteur souhulte sulslr de nombres. Lu sulsle des nombres s'urrete lorsque
l'utlllsuteur entre un zero.

Lxercice .
Llre lu sulte des rlx (en euros entlers et termlnee ur zero) des uchuts d'un cllent.
Culculer lu somme qu'll dolt, llre lu somme qu'll uye, et slmuler lu remlse de lu monnule
en ufflchunt les textes "c Luros", " Luros" et " Luro" uutunt de fols qu'll y u de
couures de chuque sorte rendre.

Lxercice .o
Lcrlre un ulgorlthme qul ermette de connuitre ses chunces de gugner uu tlerce,
quurte, qulnte et uutres lmts volontulres.
Cn demunde l'utlllsuteur le nombre de chevuux urtunts, et le nombre de chevuux
joues. Les deux messuges ufflches devront etre :
Luns l'ordre : une chunce sur de gugner
Luns le desordre : une chunce sur Y de gugner
et Y nous sont donnes ur lu formule sulvunte, sl n est le nombre de chevuux
urtunts et le nombre de chevuux joues (on ruelle que le slgne ! slgnlfle
"fuctorlelle", comme duns l'exerclce .6 cldessus) :
= n ! j (n ) !
Y = n ! j ( ! * (n - ) !)
N8 : cet ulgorlthme eut etre ecrlt d'une munlere slmle, muls relutlvement eu
erformunte. Ses erformunces euvent etre slngullerement uugmentees ur une
etlte ustuce. vous commencerez ur ecrlre lu munlere lu lus slmle, uls vous
ldentlflerez le robleme, et ecrlrez une deuxleme verslon ermettunt de le resoudre.





49
CORRGE8 DE8 EXERCCE8
Lxercice .
variable N en Lntier
Debut
N c
Lcrire "Lntrez un nombre entre et "
1antque N < ou N >
Lire N
Si N < ou N > Alors
Lcrire "Sulsle erronee. Recommencez'
IinSi
Iin1antque
Iin

Lxercice .z
variable N en Lntier
Debut
N c
Lcrire "Lntrez un nombre entre c et zc"
1antque N < c ou N > zc
Lire N
Si N < c Alors
Lcrire "Plus grund !"
SinonSi N > zc Alors
Lcrire "Plus etlt !"
IinSi
Iin1antque
Iin

Lxercice .
variables N, l en Lntier
Debut
Lcrire "Lntrez un nombre : "
Lire N
Lcrire "Les c nombres sulvunts sont : "
Pour l N N c
Lcrire l
l Suivant
Iin






30
Lxercice .q
variables N, l en Lntier
Debut
Lcrire "Lntrez un nombre : "
Lire N
Lcrire "Lu tuble de multlllcutlon de ce nombre est : "
Pour l c
Lcrire N, " x ", l, " = ", n*l
l Suivant
Iin

Lxercice .
variables N, l, Som en Lntier
Debut
Lcrire "Lntrez un nombre : "
Lire N
Som c
Pour l N
Som Som l
l Suivant
Lcrire "Lu somme est : ", Som
Iin

Lxercice .6
variables N, l, l en Lntier
Debut
Lcrire "Lntrez un nombre : "
Lire N
l
Pour l z N
l l * l
l Suivant
Lcrire "Lu fuctorlelle est : ", l
Iin

Lxercice .)
variables N, l, PC en Lntier
Debut
PC c
Pour l zc
Lcrire "Lntrez un nombre : "
Lire N
Si l = ou N > PC Alors
PC N
IinSi
l Suivant
Lcrire "Le nombre le lus grund etult : ", PC
Iin

31
Ln llgne , on eut mettre n'lmorte quol duns PC, ll sufflt que cette vurluble solt uffectee our que
le remler ussuge en llgne , ne rovoque us d'erreur.

Pour lu verslon umelloree, celu donne :
variables N, l, PC, lPC en Lntier
Debut
PC c
Pour l zc
Lcrire "Lntrez un nombre : "
Lire N
Si l = ou N > PC Alors
PC N
lPC l
IinSi
l Suivant
Lcrire "Le nombre le lus grund etult : ", PC
Lcrire "ll u ete sulsl en osltlon numero ", lPC
Iin

Lxercice .8
variables N, l, PC, lPC en Lntier
Debut
N
l c
PC c
1antque N <> c
Lcrire "Lntrez un nombre : "
Lire N
l l
Si l = ou N > PC Alors
PC N
lPC l
IinSi
Iin1antque
Lcrire "Le nombre le lus grund etult : ", PC
Lcrire "ll u ete sulsl en osltlon numero ", lPC
Iin

Lxercice .
variables ll, somdue, M, lPC, Reste, Nbcl, Nbl Ln Lntier
Debut
L
somdue c
1antque L <> c
Lcrire "Lntrez le montunt : "
Lire L
somdue somdue L
Iin1antque

32
Lcrire "vous devez :", L, " euros"
Lcrire "Montunt verse :"
Lire M
Reste M L
NbcL c
1antque Reste >= c
NbcL NbcL
Reste Reste - c
Iin1antque
NbL c
Si Reste >=
NbL
Reste Reste -
IinSi
Lcrire "Rendu de lu monnule :"
Lcrire "8lllets de c L : ", NbcL
Lcrire "8lllets de L : ", NbL
Lcrire "Pleces de L : ", reste
Iin

Lxercice .o
Sontunement, on est tente d'ecrlre l'ulgorlthme sulvunt :
vurlubles N, P, l, Nume, Leno, Lenoz en Lntler
Lebut Lcrire "Lntrez le nombre de chevuux urtunts : "
Lire N
Lcrire "Lntrez le nombre de chevuux joues : "
Lire P
Nume
Pour l z N
Nume Nume * l
l Suivant
Leno
Pour l z NP
Leno Leno * l
l Suivant
Lenoz
Pour l z P
Lenoz Lenoz * l
l Suivant
Lcrire "Luns l'ordre, une chunce sur ", Nume j Leno
Lcrire "Luns le desordre, une sur ", Nume j (Leno * Lenoz)
Iin
Cette verslon, formellement juste, comorte tout de meme deux fulblesses.
Lu remlere, et lu lus gruve, concerne lu munlere dont elle culcule le resultut flnul. Celulcl est le
quotlent d'un nombre ur un uutre , or, ces nombres uuront ruldement tendunce etre tres grunds.
Ln culculunt, comme on le fult lcl, d'ubord le numeruteur, uls ensulte le denomlnuteur, on rend le
rlsque de demunder lu muchlne de stocker des nombres tro grunds our qu'elle solt cuuble de
les coder (cf. le reumbule). C'est d'uutunt lus bete que rlen ne nous obllge roceder ulnsl : on
n'est us obllge de usser ur lu dlvlslon de deux tres grunds nombres our obtenlr le resultut voulu.

33

Lu deuxleme remurque est qu'on u rogrumme lcl trols boucles successlves. Cr, en y regurdunt blen,
on eut volr qu'ures slmllflcutlon de lu formule, ces trols boucles comortent le meme nombre de
tours ! (sl vous ne me croyez us, ecrlvez un exemle de culcul et blffez les nombres ldentlques uu
numeruteur et uu denomlnuteur). Ce trlle culcul (ces trols boucles) eut donc etre rumene(es)
un(e) seul(e). Lt voll le truvull, qul est non seulement blen lus court, muls uussl lus erformunt :
variables N, P, l, C, l en Lntier
Debut
Lcrire "Lntrez le nombre de chevuux urtunts : "
Lire N
Lcrire "Lntrez le nombre de chevuux joues : "
Lire P
A
8
Pour l P
A A * (l N P)
8 8 * l
l Suivant
Lcrire "Luns l'ordre, une chunce sur ", A
Lcrire "Luns le desordre, une chunce sur ", A j 8
Iin



34













PARTE 6















33
LE8 TABLEAUX
S on ment un comlateur, l rendra sa revancne. Eenry Sencer.
8onne nouvelle ! 'e vous uvuls unnonce qu'll y u uvult en tout et our tout quutre structures
loglques duns lu rogrummutlon. Lh blen, u y est, on les u toutes ussees en revue. Muuvulse
nouvelle, ll vous reste tout de meme quelques etltes choses urendre.

1. UTLTE DE8 TABLEAUX
lmuglnons que duns un rogrumme, nous uyons besoln slmultunement de z vuleurs (ur
exemle, des notes our culculer une moyenne). Lvldemment, lu seule solutlon dont nous dlsosons
l'heure uctuelle conslste declurer douze vurlubles, uelees ur exemle Noteu, Noteb, Notec,
etc. 8len sr, on eut oter our une notutlon un eu slmllflee, ur exemle N, Nz, N, etc. Muls
celu ne chunge us fondumentulement notre robleme, cur urrlve uu culcul, et ures une successlon
de douze lnstructlons Llre dlstlnctes, celu donneru obllgutolrement une utroclte du genre :
Moy (NNzNNNN6N,N8NNcNNz)jz
Cuf ! C'est tout de meme blgrement luborleux. Lt our un eu que nous soyons duns un
rogrumme de gestlon uvec quelques centulnes ou quelques mllllers de vuleurs trulter, ulors l c'est
le sulclde dlrect.
Cerlse sur le gteuu, sl en lus on est duns une sltuutlon on l'on ne eut us suvolr d'uvunce
comblen ll y uuru de vuleurs trulter, l on est currement cults.
C'est ourquol lu rogrummutlon nous ermet de rassembler toutes ces variables en une seule,
uu seln de luquelle chuque vuleur seru deslgnee ur un numero. Ln bon frunuls, celu donnerult donc
quelque chose du genre lu note numero , lu note numero z , lu note numero 8 . C'est
lurgement lus rutlque, vous vous en doutez.

Un ensemble de valeurs portant le mme nom de variable et repres par un
nombre, s'appelle un tableau, ou encore une variable indice. Le nombre qui, au sein
d'un tableau, sert reprer chaque valeur s'appelle ~ surprise ~ l'indice. Chaque
fois que l'on doit dsigner un lment du tableau, on fait figurer le nom du tableau,
suivi de l'indice de l'lment, entre parenthses.

2. NOTATON ET UTL8ATON ALGORTHMOUE
Luns notre exemle, nous creerons donc un tubleuu uele Note. Chuque note lndlvlduelle
(chuque element du tubleuu Note) seru donc deslgnee Note(c), Note(), etc. Lh oul, uttentlon, les
lndlces des tubleuux commencent generulement c, et non .
Un tubleuu dolt etre declure comme tel, en reclsunt le nombre et le tye de vuleurs qu'll
contlendru (lu declurutlon des tubleuux est suscetlble de vurler d'un lunguge l'uutre. Certulns
lunguges reclument le nombre d'elements, d'uutre le lus grund lndlce... C'est donc une uffulre de
conventlons).



36
Ln nous culquunt sur les cholx les lus frequents duns les lunguges de rogrummutlons, nous
declderons lcl urbltrulrement et une bonne fols our toutes que :
les "cuses" sont numerotees urtlr de zero, uutrement dlt que le lus etlt lndlce est zero.
lors de lu declurutlon d'un tubleuu, on reclse lu lus grunde vuleur de l'lndlce (dlfferente,
donc, du nombre de cuses du tubleuu, ulsque sl on veut z emlucements, le lus grund
lndlce seru ). Au debut, u deroute, muls vous verrez, uvec le tems, on se fult tout, meme
uu lre.
1ableau Note() en Lntier
Cn eut creer des tubleuux contenunt des vurlubles de tous tyes : tubleuux de numerlques, blen
sr, muls uussl tubleuux de curucteres, tubleuux de booleens, tubleuux de tout ce qul exlste duns un
lunguge donne comme tye de vurlubles. Pur contre, hormls duns quelques rures lunguges, on ne
eut us fulre un mlxuge de tyes dlfferents de vuleurs uu seln d'un meme tubleuu.
L'enorme uvuntuge des tubleuux, c'est qu'on vu ouvolr les trulter en fulsunt des boucles. Pur
exemle, our effectuer notre culcul de moyenne, celu donneru ur exemle :
1ableau Note() en Numrique
variables Moy, Som en Numrique
Dbut
Pour l c
Lcrire "Lntrez lu note n", l
Lire Note(l)
l Suivant
Som c
Pour l c
Som Som Note(l)
l Suivant
Moy Som j z
lln
N8 : Cn u fult deux boucles successlves our lus de llslblllte, muls on uurult tout uussl blen u
n'en ecrlre qu'une seule duns luquelle on uurult tout fult d'un seul cou.
Remarque gnrale : l'lndlce qul sert deslgner les elements d'un tubleuu eut etre exrlme
dlrectement comme un nombre en clulr, muls ll eut etre uussl une vurluble, ou une exresslon
culculee.
Luns un tubleuu, lu vuleur d'un lndlce dolt toujours :
tre gale au moins o (duns quelques rures lunguges, le remler element d'un tubleuu orte
l'lndlce ). Muls comme je l'ul dej ecrlt lus huut, nous uvons cholsl lcl de commencer lu
numerotutlon des lndlces zero, comme c'est le cus en lunguge C et en vlsuul 8uslc. Lonc
uttentlon, 1ruc(6) est le setleme element du tubleuu 1ruc !
tre un nombre entier Quel que solt le lunguge, l'element 1ruc(,6) n'exlste jumuls.
tre infrieure ou gale au nombre d'lments du tableau (molns , sl l'on commence lu
numerotutlon zero). Sl le tubleuu 8ldule u ete declure comme uyunt z elements, lu
resence duns une llgne, sous une forme ou sous une uutre, de 8ldule(z) declencheru
uutomutlquement une erreur.


37
'e le rerereete, sl l'on est duns un lunguge ou les lndlces commencent zero, ll fuut en tenlr
comte lu declurutlon :
1ableau Note() en Numrique
...creeru un tubleuu de elements, le lus etlt lndlce etunt c et le lus grund .
LL CAC DL LA 1OURNLL : ll conslste confondre, duns su tete et j ou duns un ulgorlthme, l'indice
d'un element d'un tubleuu uvec le contenu de cet element. Lu trolsleme mulson de lu rue n'u us
forcement trols hubltunts, et lu vlngtleme vlngt hubltunts. Ln notutlon ulgorlthmlque, ll n'y u uucun
ruort entre l et truc(l).

3. TABLEAUX DYNAMOUE8
ll urrlve frequemment que l'on ne connulsse us l'uvunce le nombre d'elements que devru
comorter un tubleuu. 8len sr, une solutlon conslsterult declurer un tubleuu glguntesque (c ccc
elements, ourquol us, uu dluble les vurlces) our etre sr que u rentre . Muls d'une urt, on
n'en seru jumuls urfultement sr, d'uutre urt, en rulson de l'lmmenslte de lu luce memolre
reservee - et lu luurt du tems non utlllsee, c'est un gchls rejudlcluble lu ruldlte, volre lu
vlublllte, de notre ulgorlthme.
Aussl, our urer ce genre de sltuutlon, uton lu osslblllte de declurer le tubleuu suns reclser
uu deurt son nombre d'elements. Ce n'est que duns un second tems, uu cours du rogrumme, que
l'on vu flxer ce nombre vlu une lnstructlon de redlmenslonnement : Redim.
Notez que tant qu'on n'a pas prcis le nombre d'lments d'un tableau, d'une manire ou d'une
autre, ce tableau est inutilisable.
Lxemle : on veut fulre sulslr des notes our un culcul de moyenne, muls on ne sult us comblen ll
y uuru de notes sulslr. Le debut de l'ulgorlthme seru quelque chose du genre :
1ableau Notes() en Numrique
variable nb en Numrique
Dbut
Lcrire "Comblen y utll de notes sulslr ?"
Lire nb
Redim Notes(nb)
.
Cette technlque n'u rlen de sorcler, muls elle fult urtle de l'ursenul de buse de lu rogrummutlon
en gestlon.




38
ENONCE DE8 EXERCCE8
Lxercice 6.
Lcrlre un ulgorlthme qul declure et remllsse un tubleuu de , vuleurs numerlques en les
mettunt toutes zero.

Lxercice 6.z
Lcrlre un ulgorlthme qul declure et remllsse un tubleuu contenunt les slx voyelles de
l'ulhubet lutln.

Lxercice 6.
Lcrlre un ulgorlthme qul declure un tubleuu de notes, dont on fult ensulte sulslr les
vuleurs ur l'utlllsuteur.

Lxercice 6.q
Que rodult l'ulgorlthme sulvunt ?
1ableau Nb() en Lntier
variable l en Lntier
Dbut
Pour l c
Nb(l) l * l
l suivant
Pour l c
Lcrire Nb(l)
l suivant
Iin
Peuton slmllfler cet ulgorlthme uvec le meme resultut ?

Lxercice 6.
Que rodult l'ulgorlthme sulvunt ?
1ableau N(6) en Lntier
variables l, k en Lntier
Dbut
N(c)
Pour k 6
N(k) N(k) z
k Suivant
Pour l c 6
Lcrire N(l)
l suivant
Iin
Peuton slmllfler cet ulgorlthme uvec le meme resultut ?


39
Lxercice 6.6
Que rodult l'ulgorlthme sulvunt ?
1ableau Sulte(,) en Lntier
variable l en Lntier
Dbut
Sulte(c)
Sulte()
Pour l z ,
Sulte(l) Sulte(l) Sulte(lz)
l suivant
Pour l c ,
Lcrire Sulte(l)
l suivant
Iin

Lxercice 6.)
Lcrlvez lu fln de l'ulgorlthme 6. ufln que le culcul de lu moyenne des notes solt
effectue et ufflche l'ecrun.

Lxercice 6.8
Lcrlvez un ulgorlthme ermettunt l'utlllsuteur de sulslr un nombre quelconque de
vuleurs, qul devront etre stockees duns un tubleuu. L'utlllsuteur dolt donc commencer
ur entrer le nombre de vuleurs qu'll comte sulslr. ll effectueru ensulte cette sulsle.
Lnfln, une fols lu sulsle termlnee, le rogrumme ufflcheru le nombre de vuleurs
negutlves et le nombre de vuleurs osltlves.

Lxercice 6.
Lcrlvez un ulgorlthme culculunt lu somme des vuleurs d'un tubleuu (on suose que le
tubleuu u ete reulublement sulsl).

Lxercice 6.o
Lcrlvez un ulgorlthme constltuunt un tubleuu, urtlr de deux tubleuux de meme
longueur reulublement sulsls. Le nouveuu tubleuu seru lu somme des elements des
deux tubleuux de deurt.
1ubleuu :
8 , 6

1ubleuu z :
, 6 z ,

1ubleuu constltuer :
z z 8 c


60

Lxercice 6.
1oujours urtlr de deux tubleuux recedemment sulsls, ecrlvez un ulgorlthme qul
culcule le schtroumf des deux tubleuux. Pour culculer le schtroumf, ll fuut multlller
chuque element du tubleuu ur chuque element du tubleuu z, et uddltlonner le tout.
Pur exemle sl l'on u :
1ubleuu :
8 , z

1ubleuu z :
6

Le Schtroumf seru :
* * 8 * , * z 6 * 6 * 8 6 * , 6 * z = z,

Lxercice 6.z
Lcrlvez un ulgorlthme qul ermette lu sulsle d'un nombre quelconque de vuleurs, sur le
rlncle de l'ex 6.8. 1outes les vuleurs dolvent etre ensulte uugmentees de , et le
nouveuu tubleuu seru ufflche l'ecrun.

Lxercice 6.
Lcrlvez un ulgorlthme ermettunt, toujours sur le meme rlncle, l'utlllsuteur de
sulslr un nombre determlne de vuleurs. Le rogrumme, une fols lu sulsle termlnee,
renvole lu lus grunde vuleur en reclsunt quelle osltlon elle occue duns le tubleuu.
Cn rendru soln d'effectuer lu sulsle duns un remler tems, et lu recherche de lu lus
grunde vuleur du tubleuu duns un second tems.

Lxercice 6.q
1oujours et encore sur le meme rlncle, ecrlvez un ulgorlthme ermettunt,
l'utlllsuteur de sulslr les notes d'une clusse. Le rogrumme, une fols lu sulsle termlnee,
renvole le nombre de ces notes suerleures lu moyenne de la classe.









61
CORRGE8 DE8 EXERCCE8
Lxercice 6.
1ableau 1ruc(6) en Numrique
variable l en Numrique
Debut
Pour l c 6
1ruc(l) c
l Suivant
Iin

Lxercice 6.z
1ableau 1ruc() en Caractre
Debut
1ruc(c) "u"
1ruc() "e"
1ruc(z) "l"
1ruc() "o"
1ruc() "u"
1ruc() "y"
Iin

Lxercice 6.
1ableau Notes(8) en Numrique
variable l en Numrique
Pour l c 8
Lcrire "Lntrez lu note numero ", l
Lire Notes(l)
l Suivant
Iin

Lxercice 6.q
Cet ulgorlthme remllt un tubleuu uvec slx vuleurs : c, , , , 6, z.
ll les ecrlt ensulte l'ecrun. Slmllflcutlon :
1ableau Nb() en Numrique
variable l en Numrique
Dbut
Pour l c
Nb(l) l * l
Lcrire Nb(l)
l Suivant
Iin




62
Lxercice 6.
Cet ulgorlthme remllt un tubleuu uvec les set vuleurs : , , , ,, , , .
ll les ecrlt ensulte l'ecrun. Slmllflcutlon :
1ableau N(6) en Numrique
variables l, k en Numrique
Dbut
N(c)
Lcrire N(c)
Pour k 6
N(k) N(k) z
Lcrire N(k)
k Suivant
Iin

Lxercice 6.6
Cet ulgorlthme remllt un tubleuu de 8 vuleurs : , , z, , , 8, , z

Lxercice 6.)
variable S en Numrique
1ableau Notes(8) en Numrique
Debut
s c
Pour l c 8
Lcrire "Lntrez lu note n ", l
Lire Notes(l)
s s Notes(l)
l Suivant
Lcrire "Moyenne :", sj
Iin

Lxercice 6.8
variables Nb, Nbos, Nbneg en Numrique
1ableau 1() en Numrique
Debut
Lcrire "Lntrez le nombre de vuleurs :"
Lire Nb
Redim 1(Nb)
Nbos c
Nbneg c
Pour l c Nb
Lcrire "Lntrez le nombre n ", l
Lire 1(l)
Si 1(l) > c alors
Nbos Nbos
Sinon
Nbneg Nbneg
Iinsi

63
l Suivant
Lcrire "Nombre de vuleurs osltlves : ", Nbos
Lcrire "Nombre de vuleurs negutlves : ", Nbneg
Iin

Lxercice 6.
variables l, Som, N en Numrique
1ableau 1() en Numrique
Debut
. (on ne rogrumme us lu sulsle du tubleuu, dont on suose qu'll comte N
elements)
Redim 1(N)
.
Som c
Pour l c N
Som Som 1(l)
l Suivant
Lcrire "Somme des elements du tubleuu : ", Som
Iin

Lxercice 6.o
variables l, N en Numrique
1ableaux 1(), 1z(), 1() en Numrique
Debut
. (on suose que 1 et 1z comtent N elements, et qu'lls sont dej sulsls)
Redim 1(N)
.
Pour l c N
1(l) 1(l) 1z(l)
l Suivant
Iin

Lxercice 6.
variables l, j, N, Nz, S en Numrique
1ableaux 1(), 1z() en Numrique
Debut
. Cn ne rogrumme us lu sulsle des tubleuux 1 et 1z.
Cn suose que 1 ossede N elements, et que 1z en ossede 1z)
.
S c
Pour l c N -
Pour j c Nz -
S S 1(l) * 1z(j)
j Suivant
l Suivant
Lcrire "Le schtroumf est : ", S
Iin

64

Lxercice 6.z
variables Nb, l en Numrique
1ableau 1() en Numrique
Debut
Lcrire "Lntrez le nombre de vuleurs : "
Lire Nb
Redim 1(Nb)
Pour l c Nb
Lcrire "Lntrez le nombre n ", l
Lire 1(l)
l Suivant
Lcrire "Nouveuu tubleuu : "
Pour l c Nb -
1(l) 1(l)
Lcrire 1(l)
l Suivant
Iin

Lxercice 6.
variables Nb, Posmuxl en Numrique
1ableau 1() en Numrique
Lcrire "Lntrez le nombre de vuleurs :"
Lire Nb
Redim 1(Nb)
Pour l c Nb
Lcrire "Lntrez le nombre n ", l
Lire 1(l)
l Suivant
Posmuxl c
Pour l c Nb
Si 1(l) > 1(Posmuxl) alors
Posmaxi l
Iinsi
l Suivant
Lcrire "Llement le lus grund : ", 1(Posmuxl)
Lcrire "Posltlon de cet element : ", Posmuxl
Iin

Lxercice 6.q
variables Nb, l, Som, Moy, Nbsu en Numrique
1ableau 1() en Numrique
Debut
Lcrire "Lntrez le nombre de notes sulslr : "
Lire Nb
Redim 1(Nb)
Pour l c Nb
Lcrire "Lntrez le nombre n ", l

63
Lire 1(l)
l Suivant
Som c
Pour l c Nb
Som Som 1(l)
l Suivant
Moy Som j Nb
NbSu c
Pour l c Nb
Si 1(l) > Moy Alors
NbSu NbSu
IinSi
l Suivant
Lcrire NbSu, " eleves deussent lu moyenne de lu clusse"
Iin



66













PARTE 7















67
TECHNOUE8 RU8EE8
lnjormatque : allance d'une scence nexacte et d'une actvte numane jallble Luc luyurd

Une fols n'est us coutume, ce chultre n'u us our but de resenter un nouveuu tye de
donnees, un nouveuu jeu d'lnstructlons, ou que sulsje encore.
Son roos est de detulller quelques technlques de rogrummutlon qul ossedent deux grunds
olnts communs :
leur connulssunce est urfultement lndlsensuble
elles sont un rlen flnuudes
Lt que vulent quelques kllos d'uslrlne, comures l'lneffuble bonheur rocure ur lu
comrehenslon sureme des urcunes de l'ulgorlthmlque ? Eeln ?

1. TR D'UN TABLEAU : LE TR PAR 8ELECTON
Premlere de ces ruses de sloux, et ur ullleurs turte lu creme ubsolue du rogrummeur, donc : le
trl de tubleuu.
Comblen de fols uu cours d'une currlere (brlllunte) de develoeur uton besoln de runger des
vuleurs duns un ordre donne ? C'est lnlmuglnuble. Aussl, lutt qu'uvolr relnventer chuque fols lu
roue, le fusll tlrer duns les colns, le fll couer le roquefort et lu oudre muqulller, vuutll mleux
uvolr usslmlle une ou deux technlques solldement erouvees, meme sl elles urulssent un eu urdues
uu deurt.
ll exlste lusleurs strutegles osslbles our trler les elements d'un tubleuu , nous en verrons deux :
le trl ur selectlon, et le trl bulles. Chumugne !
Commenons ur le trl ur selectlon.
Admettons que le but de lu munouvre solt de trler un tubleuu de z elements duns l'ordre
crolssunt. Lu technlque du trl ur selectlon est lu sulvunte : on met en bonne osltlon l'element
numero , c'estdlre le lus etlt. Puls en met en bonne osltlon l'element sulvunt. Lt ulnsl de sulte
jusqu'uu dernler. Pur exemle, sl l'on urt de :

zz z z ,8 6 8 z8 8 6

Cn commence ur rechercher, urml les z vuleurs, quel est le lus etlt element , et ou ll se
trouve. Cn l'ldentlfle en quutrleme osltlon (c'est le nombre ), et on l'echunge ulors uvec le remler
element (le nombre ). Le tubleuu devlent ulnsl :

zz z q z ,8 6 8 z8 8 6

Cn recommence chercher le lus etlt element, muls cette fols, seulement partir du deuxime
(ulsque le remler est mulntenunt correct, on n'y touche lus). Cn le trouve en trolsleme osltlon
(c'est le nombre z). Cn echunge donc le deuxleme uvec le trolsleme :

68


z zz z ,8 6 8 z8 8 6

Cn recommence chercher le lus etlt element urtlr du trolsleme (ulsque les deux remlers
sont mulntenunt blen luces), et on le luce correctement, en l'echungeunt, ce qul donneru ln flne :

z z zz ,8 6 8 z8 8 6

Lt ceteru, et ceteru, jusqu' l'uvunt dernler.
Ln bon frunuls, nous ourrlons decrlre le rocessus de lu munlere sulvunte :
8oucle rlnclule : renons comme olnt de deurt le remler element, uls le second,
etc, jusqu' l'uvunt dernler.
8oucle secondulre : urtlr de ce olnt de deurt mouvunt, recherchons jusqu' lu fln
du tubleuu quel et le lus etlt element. Une fols que nous l'uvons trouve, nous l'echungeons
uvec le olnt de deurt.
Celu s'ecrlt :
boucle rlnclule : le olnt de deurt se decule chuque tour
Pour l c c
on consldere rovlsolrement que t(l) est le lus etlt element
osmlnl l
on exumlne tous les elements sulvunts
Pour j l
Si t(j) < t(osmlnl) Alors
osmlnl j
Iinsi
j suivant
A cet endrolt, on sult mulntenunt ou est le lus etlt element. ll ne reste lus qu'
effectuer lu ermututlon.
tem t(osmlnl)
t(osmlnl) t(l)
t(l) tem
Cn u luce correctement l'element numero l, on usse resent uu sulvunt.
l suivant


2. UN EXEMPLE DE FLAG : LA RECHERCHE DAN8 UN TABLEAU
Nous ullons mulntenunt nous lnteresser uu munlement hublle d'une vurluble booleenne : lu
technlque dlte du flag .
Le flag, en anglais, est un petit drapeau, qui va rester baiss aussi longtemps que l'vnement
attendu ne se produit pas. Lt, uussltt que cet evenement u lleu, le etlt drueuu se leve (lu vurluble
booleenne chunge de vuleur). Alnsl, lu vuleur flnule de lu vurluble booleenne ermet uu rogrummeur
de suvolr sl l'evenement u eu lleu ou non.

69
1out cecl eut vous sembler un eu fumeux, muls celu devrult s'eclulrer l'ulde d'un exemle
extremement frequent : lu recherche de l'occurrence d'une vuleur duns un tubleuu. Cn en roflteru
uu ussuge our corrlger une erreur urtlcullerement frequente chez le rogrummeur debutunt.
Solt un tubleuu comortunt, dlsons, zc vuleurs. L'on dolt ecrlre un ulgorlthme sulslssunt un
nombre uu cluvler, et qul lnforme l'utlllsuteur de lu resence ou de l'ubsence de lu vuleur sulsle duns
le tubleuu.
Lu remlere etue, evldente, conslste ecrlre les lnstructlons de lecture j ecrlture, et lu boucle -
cur ll y en u munlfestement une - de urcours du tubleuu :
1ableau 1ub() en Numrique
variable N en Numrique
Dbut
Lcrire "Lntrez lu vuleur rechercher"
Lire N
Pour l c
???
l suivant
Iin
ll nous reste combler les olnts d'lnterrogutlon de lu boucle Pour. Lvldemment, ll vu fullolr
comurer N chuque element du tubleuu : sl les deux vuleurs sont egules, ulors blngo, N fult urtle
du tubleuu. Celu vu se trudulre, blen entendu, ur un Sl . Alors . Slnon. Lt voll le rogrummeur
rulsonnunt htlvement qul se vuutre en ecrlvunt :
1ableau 1ub() en Numrique
variable N en Numrique
Dbut
Lcrire "Lntrez lu vuleur rechercher"
Lire N
Pour l c
Si N = 1ub(l) Alors
Lcrire "N fult urtle du tubleuu"
Sinon
Lcrire "N ne fult us urtle du tubleuu"
IinSi
l suivant
Iin
Lt ututrus, cet ulgorlthme est une verltuble cutustrohe.
ll sufflt d'ullleurs de le fulre tourner mentulement our s'en rendre comte. Le deux choses l'une :
ou blen lu vuleur N flgure duns le tubleuu, ou blen elle n'y flgure us. Muls duns tous les cus,
l'algorithme ne doit produire qu'une seule rponse, quel que soit le nombre d'lments que
compte le tableau. Or, l'algorithme cidessus envoie l'cran autant de messages qu'il y a de
valeurs dans le tableau, en l'occurrence us molns de zc !
ll y u donc une erreur munlfeste de concetlon : l'ecrlture du messuge ne eut se trouver
l'lnterleur de lu boucle : elle dolt flgurer l'exterleur. Cn sult sl lu vuleur etult duns le tubleuu ou non
uniquement lorsque le balayage du tableau est entirement accompli.
Nous reecrlvons donc cet ulgorlthme en luunt le test ures lu boucle. luute de mleux, on se
contenteru de fulre deendre our le moment lu reonse d'une vurluble booleenne que nous
uellerons 1rouve.

70
1ableau 1ub() en Numrique
variable N en Numrique
Dbut
Lcrire "Lntrez lu vuleur rechercher"
Lire N
Pour l c
???
l suivant
Si 1rouve Alors
Lcrire "N fult urtle du tubleuu"
Sinon
Lcrire "N ne fult us urtle du tubleuu"
IinSi
Iin
ll ne nous reste lus qu' gerer lu vurluble 1rouve. Cecl se fult en deux etues.
un test flgurunt duns lu boucle, lndlquunt lorsque lu vurluble 1rouve dolt devenlr vrule
( suvolr, lorsque lu vuleur N est rencontree duns le tubleuu). Lt uttentlon : le test est
usymetrlque. ll ne comorte us de "slnon". Cn revlendru l dessus duns un lnstunt.
lust, but not leust, l'uffectutlon ur defuut de lu vurluble 1rouve, dont lu vuleur de
deurt dolt etre evldemment luux.
Au totul, l'ulgorlthme comlet - et juste ! - donne :
1ableau 1ub() en Numrique
variable N en Numrique
Dbut
Lcrire "Lntrez lu vuleur rechercher"
Lire N
1rouve luux
Pour l c
Si N = 1ub(l) Alors
1rouve vrul
IinSi
l suivant
Si 1rouve Alors
Lcrire "N fult urtle du tubleuu"
Sinon
Lcrire "N ne fult us urtle du tubleuu"
IinSi
Iin
Medltons un eu sur cette uffulre.
Lu dlfflculte est de comrendre que duns une recherche, le robleme ne se formule us de lu
meme munlere selon qu'on le rend ur un bout ou ur un uutre. Cn eut resumer l'uffulre ulnsl : il
suffit que N soit gal une seule valeur de 1ab pour qu'elle fasse partie du tableau. Ln revanche, il
faut qu'elle soit diffrente de toutes les valeurs de 1ab pour qu'elle n'en fasse pas partie.
voll lu rulson qul nous obllge usser ur une vurluble booleenne, un drapeau qui peut se
lever, mais [amais se rabaisser. Lt cette technlque de flug (que nous ourrlons elegumment

71
surnommer gestlon usymetrlque de vurluble booleenne ) dolt etre mlse en ouvre chuque fols que
l'on se trouve devunt urellle sltuutlon.
Autrement dlt, connuitre ce tye de rulsonnement est lndlsensuble, et suvolr le rerodulre bon
esclent ne l'est us molns.


3. TR DE TABLEAU + FLAG = TR A BULLE8
Lt mulntenunt, nous en urrlvons lu formule muglque : trl de tubleuu flug = trl bulles.
L'ldee de deurt du trl bulles conslste se dlre qu'un tubleuu trle en ordre crolssunt, c'est un
tubleuu duns lequel tout lment est plus petit que celui qui le suit. Cette constututlon ercutunte
semble dlgne de M. de Luullsse, un unclen volsln mol. Muls elle est lus rofonde - et lus utlle
qu'elle n'en u l'ulr.
Ln effet, renons chuque element d'un tubleuu, et comuronsle uvec l'element qul le sult. Sl
l'ordre n'est us bon, on ermute ces deux elements. Lt on recommence jusqu' ce que l'on n'ult
lus uucune ermututlon effectuer. Les elements les lus grunds remontent ulnsl eu eu vers
les dernleres luces, ce qul exllque lu churmunte denomlnutlon de trl bulle . Comme quol
l'ulgorlthmlque n'exclut us un mlnlmum syndlcul de sens oetlque.
Ln quol le trl bulles lmllquetll l'utlllsutlon d'un flug ? Lh blen, ur ce qu'on ne sult jumuls ur
uvunce comblen de remontees de bulles on dolt effectuer. Ln fult, tout ce qu'on eut dlre, c'est
qu'on devru effectuer le trl jusqu' ce qu'll n'y ult lus d'elements qul solent mul clusses. Cecl est
tylquement un cus de questlon usymetrlque : ll sufflt que deux elements solent mul clusses our
qu'un tubleuu ne solt us trle. Ln revunche, ll fuut que tous les elements solent blen runges our que
le tubleuu solt trle.
Nous butlserons le flug Yuermute, cur cette vurluble booleenne vu nous lndlquer sl nous venons
ou non de roceder une ermututlon uu cours du dernler buluyuge du tubleuu (duns le cus
contrulre, c'est slgne que le tubleuu est trle, et donc qu'on eut urreter lu muchlne bulles). Lu
boucle rlnclule seru ulors :
variable Yuermute en 8oolen
Dbut
.
1antque Yuermute
.
Iin1antque
Iin
Que vuton fulre l'lnterleur de lu boucle ? Prendre les elements du tubleuu, du remler jusqu'
l'uvuntdernler, et roceder un echunge sl necessulre. C'est urtl :
variable Yuermute en 8oolen
Dbut
.
1antque Yuermute
Pour l c c
Si t(l) > t(l) Alors
tem t(l)
t(l) t(l)
t(l) tem
Iinsi
l suivant
Iin

72
Muls ll ne fuut us oubller un detull cultul : lu gestlon de notre flug. L'ldee, c'est que cette vurluble
vu nous slgnuler le fult qu'll y u eu uu molns une ermututlon effectuee. ll fuut donc :
lul uttrlbuer lu vuleur vrul des qu'une seule ermututlon u ete fulte (ll sufflt qu'll y en ult
eu une seule our qu'on dolve tout recommencer encore une fols).
lu remettre luux chuque tour de lu boucle rlnclule (quund on recommence un
nouveuu tour generul de bulles, ll n'y u us encore eu d'elements echunges),
dernler olnt, ll ne fuut us oubller de luncer lu boucle rlnclule, et our celu de
donner lu vuleur vrul uu flug uu tout deurt de l'ulgorlthme.
Lu solutlon comlete donne donc :
variable Yuermute en 8oolen
Dbut
.
Yuermut vrul
1antque Yuermut
Yuermut luux
Pour l c c
Si t(l) > t(l) alors
tem t(l)
t(l) t(l)
t(l) tem
Yuermut vrul
Iinsi
l suivant
Iin1antque
Iin
Au rlsque de me reeter, lu comrehenslon et lu muitrlse du rlncle du flug font urtle de
l'ursenul du rogrummeur blen urme.


4. LA RECHERCHE DCHOTOMOUE
'e ne suls us sl on rogresse vrulment en ulgorlthmlque, muls en tout cus, qu'estce qu'on
urend comme vocubululre !
8lugue duns le coln, nous ullons termlner ce chultre mlgrulneux ur une technlque celebre de
recherche, qul revele toute son utlllte lorsque le nombre d'elements est tres eleve. Pur exemle,
lmuglnons que nous uyons un rogrumme qul dolve verlfler sl un mot exlste duns le dlctlonnulre.
Nous ouvons suoser que le dlctlonnulre u ete reulublement entre duns un tubleuu ( rulson d'un
mot ur emlucement). Cecl eut nous mener , dlsons lu louche, c ccc mots.
Une remlere munlere de verlfler sl un mot se trouve duns le dlctlonnulre conslste exumlner
successlvement tous les mots du dlctlonnulre, du remler uu dernler, et les comurer uvec le mot
verlfler. Cu murche, muls celu rlsque d'etre long : sl le mot ne se trouve us duns le dlctlonnulre, le
rogrumme ne le suuru qu'ures c ccc tours de boucle ! Lt meme sl le mot flgure duns le
dlctlonnulre, lu reonse exlgeru tout de meme en moyenne zc ccc tours de boucle. C'est beuucou,
meme our un ordlnuteur.
Cr, ll y u une uutre munlere de chercher, blen lus lntelllgente ourrulton dlre, et qul met roflt
le fult que duns un dlctlonnulre, les mots sont trles ur ordre ulhubetlque. L'ullleurs, un etre humuln
qul cherche un mot duns le dlctlonnulre ne llt jumuls tous les mots, du remler uu dernler : ll utlllse lul
uussl le fult que les mots sont trles.

73
Pour une muchlne, quelle est lu munlere lu lus rutlonnelle de chercher duns un dlctlonnulre ? C'est
de comurer le mot verlfler uvec le mot qul se trouve lle oll uu mllleu du dlctlonnulre. Sl le mot
verlfler est unterleur duns l'ordre ulhubetlque, on sult qu'on devru le chercher dorenuvunt duns le
remlere moltle du dlco. Slnon, on sult mulntenunt qu'on devru le chercher duns lu deuxleme moltle.
A urtlr de l, on rend lu moltle de dlctlonnulre qul nous reste, et on recommence : on comure le
mot chercher uvec celul qul se trouve uu mllleu du morceuu de dlctlonnulre restunt. Cn ecurte lu
muuvulse moltle, et on recommence, et ulnsl de sulte.
A force de couer notre dlctlonnulre en deux, uls encore en deux, etc. on vu flnlr ur se retrouver
uvec des morceuux qul ne contlennent lus qu'un seul mot. Lt sl on n'est us tombe sur le bon mot
un moment ou un uutre, c'est que le mot verlfler ne fult us urtle du dlctlonnulre.
Regurdons ce que celu donne en termes de nombre d'oerutlons effectuer, en cholslssunt le lre
cus : celul ou le mot est ubsent du dlctlonnulre.
Au deurt, on cherche le mot urml c ccc.
Ares le test n, on ne le cherche lus que urml zc ccc.
Ares le test nz, on ne le cherche lus que urml c ccc.
Ares le test n, on ne le cherche lus que urml ccc.
etc.
Ares le test n, on ne le cherche lus que urml z.
Ares le test n6, on ne le cherche lus que urml .
Lt l, on sult que le mot n'exlste us. Morullte : on u obtenu notre reonse en 6 oerutlons contre
c ccc recedemment ! ll n'y u us hoto sur l'ecurt de erformunces entre lu technlque burbure et
lu technlque futee. Attentlon, toutefols, meme sl c'est evldent, je le reete uvec force : lu recherche
dlchotomlque ne eut s'effectuer que sur des elements reulublement trles.
Lh blen mulntenunt que je vous ul exllque comment fulre, vous n'uvez lus qu' trudulre !
Au rlsque de me reeter, lu comrehenslon et lu muitrlse du rlncle du flug font urtle du buguge
du rogrummeur blen outllle.



74
ENONCE DE8 EXERCCE8
Lxercice ).
Lcrlvez un ulgorlthme qul ermette de sulslr un nombre quelconque de vuleurs, et qul
les runge uu fur et mesure duns un tubleuu. Le rogrumme, une fols lu sulsle
termlnee, dolt dlre sl les elements du tubleuu sont tous consecutlfs ou non.
Pur exemle, sl le tubleuu est :

z 6 , 8

ses elements sont tous consecutlfs. Ln revunche, sl le tubleuu est :

c 6 , 8

ses elements ne sont us tous consecutlfs.

Lxercice ).z
Lcrlvez un ulgorlthme qul trle un tubleuu duns l'ordre decrolssunt.
vous ecrlrez blen entendu deux verslons de cet ulgorlthme, l'une emloyunt le trl ur
lnsertlon, l'uutre le trl bulles.

Lxercice ).
Lcrlvez un ulgorlthme qul lnverse l'ordre des elements d'un tubleuu dont on suose
qu'll u ete reulublement sulsl ( les remlers seront les dernlers. )

Lxercice ).q
Lcrlvez un ulgorlthme qul ermette l'utlllsuteur de surlmer une vuleur d'un tubleuu
reulublement sulsl. L'utlllsuteur donneru l'lndlce de lu vuleur qu'll souhulte surlmer.
Attentlon, ll ne s'uglt us de remettre une vuleur zero, muls bel et blen de lu
surlmer du tubleuu lulmeme ! Sl le tubleuu de deurt etult :

z 8 6 z

Lt que l'utlllsuteur souhulte surlmer lu vuleur d'lndlce , le nouveuu tubleuu seru :

z 8 z


Lxercice ).
Lcrlvez l'ulgorlthme qul recherche un mot sulsl uu cluvler duns un dlctlonnulre. Le
dlctlonnulre est suose etre code duns un tubleuu reulublement remll et trle.

73
CORRGE8 DE8 EXERCCE8
Lxercice ).
variables Nb, l en Lntier
variable llug en 8ooleen
1ableau 1() en Lntier
Debut
Lcrire "Lntrez le nombre de vuleurs :"
Lire Nb
Redim 1(Nb)
Pour l c Nb
Lcrire "Lntrez le nombre n ", l
Lire 1(l)
l Suivant
llug vrul
Pour l Nb
Si 1(l) <> 1(l - ) Alors
llug luux
IinSi
l Suivant
Si llug Alors
Lcrire "Les nombres sont consecutlfs"
Sinon
Lcrire "Les nombres ne sont us consecutlfs"
IinSi
Iin
Cette rogrummutlon est suns doute lu lus sontunee, muls elle resente le defuut d'exumlner lu
totullte du tubleuu, meme lorsqu'on decouvre des le deurt deux elements non consecutlfs. Aussl,
duns le cus d'un grund tubleuu, estelle dlsendleuse en tems de trultement. Une uutre munlere de
roceder serult de sortlr de lu boucle des que deux elements non consecutlfs sont detectes. Lu
deuxleme urtle de l'ulgorlthme devlendrult donc :
l
1antque 1(l) = 1(l - ) et l < Nb
l l
Iin1antque
Si 1(l) = 1(l - ) Alors
Lcrire "Les nombres sont consecutlfs"
Sinon
Lcrire "Les nombres ne sont us consecutlfs"
IinSi

Lxercice ).z
Cn suose que N est le nombre d'elements du tubleuu. 1rl ur lnsertlon :
.
Pour l c N z
osmuxl = l
Pour j l N

76
Si t(j) > t(osmuxl) alors
osmuxl j
Iinsi
j suivant
tem t(osmuxl)
t(osmuxl) t(l)
t(l) tem
l suivant
Iin
1rl bulles :
.
Yuermut vrul
1antque Yuermut
Yuermut luux
Pour l c N z
Si t(l) < t(l ) Alors
tem t(l)
t(l) t(l )
t(l ) tem
Yuermut vrul
Iinsi
l suivant
Iin1antque
Iin

Lxercice ).
Cn suose que n est le nombre d'elements du tubleuu reulublement sulsl
.
Pour l c (N)jz
1em 1(l)
1(l) 1(Nl)
1(Nl) 1em
l suivant
Iin

Lxercice ).q
.
Lcrire "Rung de lu vuleur surlmer ?"
Lire S
Pour l S Nz
1(l) 1(l)
l suivant
Redim 1(N-)
Iin




77
Lxercice ).
N est le nombre d'elements du tubleuu Llco(), contenunt les mots du dlctlonnulre,
tubleuu reulublement remll.
variables Su, lnf, Com en Lntier
variables llnl en 8oolen
Dbut
Lcrire "Lntrez le mot verlfler"
Lire Mot
Cn deflnlt les bornes de lu urtle du tubleuu conslderer
Su N
lnf c
llnl luux
1antque Non llnl
Com deslgne l'lndlce de l'element comurer. Ln bonne rlgueur, ll fuudru velller ce que Com solt
blen un nombre entler, ce qul ourru s'effectuer de dlfferentes munleres selon les lunguges.
Com (Su lnf)jz
Sl le mot se sltue uvunt le olnt de comurulson, ulors lu borne suerleure chunge, lu
borne lnferleure ne bouge us.
Si Mot < Llco(Com) Alors
Su Com
Slnon, c'est l'lnverse
Sinon
lnf Com
IinSi
llnl Mot = Llco(Com) ou Su < lnf
Iin1antque
Si Mot = Llco(Com) Alors
Lcrire "le mot exlste"
Sinon
Lcrire "ll n'exlste us"
Iinsi
Iin



78














PARTE 8













79

TABLEAUX MULTDMEN8ONNEL8
Le vra robleme n'est as de savor s les macnnes ensent, mas de savor s les nommes ensent
8.l. Sklnner
La queston de savor s un ordnateur eut enser n'est as lus nteressante que celle de savor s un
sousmarn eut nager Ldgur v. Lljkstru
Cecl n'est us un dereglement de votre televlseur. Nous contrlons tout, nous suvons tout, et les
henomenes urunormuux que vous constutez sont dus uu fult que vous etes usses duns. lu
quutrleme dlmenslon (muslque ungolssunte : tlntlntln. ).
Cul, enfln bon, uvunt d'uttuquer lu quutrleme, on vu dej se coltlner lu deuxleme.

1. POUROUO PLU8EUR8 DMEN8ON8 ?
Une seule ne sufflsultelle us dej umlement notre bonheur, me demunderezvous ? Certes,
reondrulje, muls vous ullez volr qu'uvec deux (et duvuntuge encore) c'est currement le nlrvunu.
Prenons le cus de lu modellsutlon d'un jeu de dumes, et du delucement des lons sur le dumler.
'e ruelle qu'un lon qul est sur une cuse blunche eut se delucer (our slmllfler) sur les quutre
cuses blunches udjucentes.
Avec les outlls que nous uvons ubordes jusque l, le lus slmle serult evldemment de modellser le
dumler sous lu forme d'un tubleuu. Chuque cuse est un emlucement du tubleuu, qul contlent ur
exemle c sl elle est vlde, et s'll y u un lon. Cn uttrlbue comme lndlces uux cuses les numeros 8
our lu remlere llgne, 6 our lu deuxleme llgne, et ulnsl de sulte jusqu' 6.
Arrlves ce stude, les flnes mouches du genre de Cyrlen L. m'ecrlront our fulre remurquer qu'un
dumler, celu ossede cc cuses et non 6, et qu'entre les dumlers et les echlqulers, je me suls
joyeusement emmele les edules. A ces flnes mouches, je ferul une double reonse de rof :
. C'etult our volr sl vous sulvlez.
z. Sl le rof declde contre toute evldence que les dumlers font 6 cuses, c'est le rof qul u rulson
et l'evldence qul u tort. Romez.
Rerenons. Un lon luce duns lu cuse numero l, uutrement dlt lu vuleur de Cuses(l), eut bouger
vers les cuses contlgues en dlugonule. Celu vu nous obllger de etltes ucrobutles lntellectuelles : lu
cuse sltuee juste uudessus de lu cuse numero l uyunt comme lndlce l8, les cuses vulubles sont celles
d'lndlce l, et l. Le meme, lu cuse sltuee juste en dessous uyunt comme lndlce l8, les cuses vulubles
sont celles d'lndlce l, et l.
8len sr, on eut fubrlquer tout un rogrumme comme celu, muls le molns qu'on ulsse dlre est
que celu ne fuclllte us lu clurte de l'ulgorlthme.
ll serult evldemment lus slmle de modellser un dumler ur. un dumler !

2. TABLEAUX A DEUX DMEN8ON8
L'lnformutlque nous offre lu osslblllte de declurer des tubleuux duns lesquels les vuleurs ne sont
us reerees ur une seule, muls ur deux coordonnes.
Un tel tubleuu se declure ulnsl :
1ableau Cuses(,, ,) en Numrique

80
Celu veut dlre : reservemol un esuce de memolre our 8 x 8 entlers, et quund j'uurul besoln de
l'une de ces vuleurs, je les reererul ur deux lndlces (comme lu butullle nuvule, ou Lxcel, lu seule
dlfference etunt que our les coordonnees, on n'utlllse us de lettres, juste des chlffres).
Pour notre robleme de dumes, les choses vont serleusement s'eclulrclr. Lu cuse qul contlent le
lon est dorenuvunt Cuses(l, j). Lt les quutre cuses dlsonlbles sont Cuses(l, j), Cuses(l, j),
Cuses(l, j) et Cuses(l, j).
RLMARqUL LSSLN1ILLLL : Il n'y a aucune diffrence qualitative entre un tableau deux dimensions
( i, [ ) et un tableau une dimension ( i * [ ). De mme que le [eu de dames qu'on vient d'voquer,
tout problme qui peut tre modlis d'une manire peut aussi tre modlis de l'autre.
Simplement, l'une ou l'autre de ces techniques correspond plus spontanment tel ou tel
problme, et facilite donc (ou complique, si on a choisi la mauvaise option) l'criture et la lisibilit
de l'algorithme.
Une uutre remurque : une questlon clusslque roos des tubleuux deux dlmenslons est de
suvolr sl le remler lndlce reresente les llgnes ou le deuxleme les colonnes, ou l'lnverse. 'e ne
reondrul us cette questlon non urce que j'ul declde de bouder, muls parce qu'elle n'a aucun
sens. Llgnes et Colonnes sont des concets gruhlques, vlsuels, qul s'ullquent des objets
du monde reel , les lndlces des tubleuux ne sont que des coordonnees loglques, olntunt sur des
udresses de memolre vlve. Sl celu ne vous convulnc us, ensez un jeu de butullle nuvule clusslque :
les lettres dolventelles deslgner les llgnes et les chlffres les colonnes ? Aucune lmortunce ! Chuque
joueur eut meme cholslr une conventlon dlfferente, uucune lmortunce ! L'essentlel est qu'une fols
une conventlon cholsle, un joueur conserve lu meme tout uu long de lu urtle, blen entendu.



81
ENONCE DE8 EXERCCE8
Lxercice 8.
Lcrlvez un ulgorlthme remllssunt un tubleuu de 6 sur , uvec des zeros.

Lxercice 8.z
Quel resultut rodulru cet ulgorlthme ?
1ableau (, z) en Lntier
variables l, j, vul en Lntier
Dbut
vul
Pour l c
Pour j c z
(l, j) vul
vul vul
j Suivant
l Suivant
Pour l c
Pour j c z
Lcrire (l, j)
j Suivant
l Suivant
Iin

Lxercice 8.
Quel resultut rodulru cet ulgorlthme ?
1ableau (, z) en Lntier
variables l, j, vul en Lntier
Dbut
vul
Pour l c
Pour j c z
(l, j) vul
vul vul
j Suivant
l Suivant
Pour j c z
Pour l c
Lcrlre (l, j)
l Suivant
j Suivant
Iin




82
Lxercice 8.q
Quel resultut rodulru cet ulgorlthme ?
1ableau 1(, ) en Lntier
variables k, m, en Lntier
Dbut
Pour k c
Pour m c
1(k, m) k m
m Suivant
k Suivant
Pour k c
Pour m c
Lcrire 1(k, m)
m Suivant
k Suivant
Iin

Lxercice 8.
Memes questlons, en remluunt lu llgne :
1(k, m) k m
ur
1(k, m) z * k (m )
uls ur :
1(k, m) (k ) * m

Lxercice 8.6
Solt un tubleuu 1 deux dlmenslons (z, 8) reulublement remll de vuleurs
numerlques.
Lcrlre un ulgorlthme qul recherche lu lus grunde vuleur uu seln de ce tubleuu.

Lxercice 8.)
Lcrlre un ulgorlthme de jeu de dumes tres slmllfle.
L'ordlnuteur demunde l'utlllsuteur duns quelle cuse se trouve son lon (quelle llgne,
quelle colonne). Cn met en luce un contrle de sulsle ufln de verlfler lu vulldlte des
vuleurs entrees.
Lnsulte, on demunde l'utlllsuteur quel mouvement ll veut effectuer : c (en huut
guuche), (en huut drolte), z (en bus guuche), (en bus drolte).
Sl le mouvement est lmosslble (l.e. on sort du dumler ), on le slgnule l'utlllsuteur et
on s'urrete l . Slnon, on deluce le lon et on ufflche le dumler resultunt, en ufflchunt
un C our une cuse vlde et un our lu cuse ou se trouve le lon.





83
CORRGE8 DE8 EXERCCE8
Lxercice 8.
1ableau 1ruc(, z) en Lntier
Debut
Pour l c
Pour j c z
1ruc(l, j) c
j Suivant
l Suivant
Iin

Lxercice 8.z
Cet ulgorlthme remllt un tubleuu de lu munlere sulvunte:
(c, c) =
(c, ) = z
(c, z) =
(, c) =
(, ) =
(, z) = 6
ll ecrlt ensulte ces vuleurs l'ecrun, duns cet ordre.

Lxercice 8.
Cet ulgorlthme remllt un tubleuu de lu munlere sulvunte:
(c, c) =
(, c) =
(c, ) = z
(, ) =
(c, z) =
(, z) = 6
ll ecrlt ensulte ces vuleurs l'ecrun, duns cet ordre.

Lxercice 8.q
Cet ulgorlthme remllt un tubleuu de lu munlere sulvunte:
1(c, c) = c
1(c, ) =
1(, c) =
1(, ) = z
1(z, c) = z
1(z, ) =
1(, c) =
1(, ) =
ll ecrlt ensulte ces vuleurs l'ecrun, duns cet ordre.



84
Lxercice 8.
verslon u : cet ulgorlthme remllt un tubleuu de lu munlere sulvunte:
1(c, c) =
1(c, ) = z
1(, c) =
1(, ) =
1(z, c) =
1(z, ) = 6
1(, c) = ,
1(, ) = 8
ll ecrlt ensulte ces vuleurs l'ecrun, duns cet ordre.
verslon b : cet ulgorlthme remllt un tubleuu de lu munlere sulvunte:
1(c, c) =
1(c, ) =
1(, c) = z
1(, ) = 6
1(z, c) =
1(z, ) = ,
1(, c) =
1(, ) = 8
ll ecrlt ensulte ces vuleurs l'ecrun, duns cet ordre.

Lxercice 8.6
variables l, j, lMux, jMux en Numrique
1ableau 1(z, 8) en Numrique
Le rlncle de lu recherche duns un tubleuu deux dlmenslons est strlctement le
meme que duns un tubleuu une dlmenslon, ce qul ne dolt us nous etonner. Lu seule
chose qul chunge, c'est qu'lcl le buluyuge requlert deux boucles lmbrlquees, uu lleu
d'une seule.
Debut
...
lMux c
jMux c
Pour l c z
Pour j c 8
Si 1(l,j) > 1(lMux,jMux) Alors
lMux l
jMux j
IinSi
j Suivant
l Suivant
Lcrire "Le lus grund element est ", 1(lMux, jMux)
Lcrire "ll se trouve uux lndlces ", lMux, ", ", jMux
Iin




83
Lxercice 8.)
variables l, j , osl, osj, lz, jz en Lntier
variables Correct, MoveCl en 8oolen
1ableau Lumler(,, ,) en 8oolen
1ableau Mouv(, ) en Lntier
Le dumler contenunt un seul lon, on cholslt de le coder l'economle, en le reresentunt ur un
tubleuu de booleens deux dlmenslons. Luns chucun des emlucements de ce dumler, luux slgnlfle
l'ubsence du lon, vrul su resence.

Pur ullleurs, on emlole une mechunte ustuce, us obllgutolre, muls blen rutlque duns beuucou de
sltuutlons. L'ldee est de fulre corresondre les cholx osslbles de l'utlllsuteur uvec les mouvements
du lon. Cn entre donc duns un tubleuu Mouv deux dlmenslons, les delucements du lon selon les
quutre dlrectlons, en renunt soln que chuque llgne du tubleuu corresonde une sulsle de
l'utlllsuteur. Lu remlere vuleur etunt le delucement en l, lu seconde le delucement en j. Cecl nous
eurgneru ur lu sulte de fulre quutre fols les memes tests.
Debut
Cholx c : lon en huut drolte
Mouv(c, c)
Mouv(c, )
Cholx : lon en huut drolte
Mouv(, c)
Mouv(, )
Cholx z : lon en bus guuche
Mouv(z, c)
Mouv(z, )
Cholx : lon en bus drolte
Mouv(, c)
Mouv(, )
lnltlullsutlon du dumler, le lon n'est our le moment nulle urt
Pour l c ,
Pour j c ,
Lumler(l, j) luux
j suivant
l suivant
Sulsle de lu coordonnee en l ("osl") uvec contrle de sulsle
Correct luux
1antque Non Correct
Lcrire "Lntrez lu llgne de votre lon: "
Lire osl
Si osl >= c et osl <= , Alors
Correct vrul
Iinsi
Iintantque
Sulsle de lu coordonnee en j ("osj") uvec contrle de sulsle

86
Correct luux
1antque Non Correct
Lcrire "Lntrez lu colonne de votre lon: "
Lire osj
Si osj >= c et osj <= , Alors
Correct vrul
Iinsi
Iintantque
Posltlonnement du lon sur le dumler vlrtuel.
Lumler(osl, osj) vrul
Sulsle du delucement, uvec contrle
Lcrire "Quel delucement ?"
Lcrire " c: en huut guuche"
Lcrire " : en huut drolte"
Lcrire " z: en bus guuche"
Lcrire " : en bus drolte"
Correct luux
1antque Non Correct
Lire Le
Si Le >= c et Le <= Alors
Correct vrul
IinSi
Iin1antque
lz et jz sont les futures coordonnees du lon. Lu vurluble booleenne MoveCl verlfle lu
vulldlte de ce futur emlucement
lz osl Mouv(Le, c)
jz osj Mouv(Le, )
MoveCl lz >= c et lz <= , et jz >= c et jz <= ,
Cus ou le delucement est vullde
Si MoveCl Alors
Lumler(osl, osj) luux
Lumler(lz, jz) vrul
Afflchuge du nouveuu dumler
Pour l c ,
Pour j c ,
Si Lumler(l, j) Alors
Lcrire " C ",
Sinon
Lcrire " ",
IinSi
j suivant
Lcrire ""
l suivant
Sinon
Cus ou le delucement n'est us vullde

87
Lcrire "Mouvement lmosslble"
IinSi
Iin

3. TABLEAUX A N DMEN8ON8

Sl vous uvez comrls le rlncle des tubleuux deux dlmenslons, sur le fond, ll n'y u uucun
robleme usser uu munlement de tubleuux trols, quutre, ou ourquol us neuf dlmenslons. C'est
exuctement lu meme chose. Sl je declure un tubleuu 1ltl(z, , , ), ll s'uglt d'un esuce memolre
contenunt x x x = zc vuleurs. Chuque vuleur y est reeree ur quutre coordonnees.
Le rlnclul obstucle uu munlement systemutlque de ces tubleuux lus de trols dlmenslons est
que le rogrummeur, quund ll conolt son ulgorlthme, ulme blen fulre des etlts grlboulllls, des
desslns lmmondes, lmuglner les boucles duns su tete, etc. Cr, uutunt ll est fuclle d'lmuglner
concretement un tubleuu une dlmenslon, uutunt celu reste fulsuble our deux dlmenslons, uutunt
celu devlent l'uunuge d'une mlnorlte rlvlleglee our les tubleuux trols dlmenslons (je n'en fuls
mulheureusement us urtle) et hors de ortee de tout mortel uudel. C'est comme u, l'esrlt
humuln u du mul se reresenter les choses duns l'esuce, et crle grce des qu'll suute duns
l'hyeresuce (oul, c'est comme u que u s'uelle uu del de trols dlmenslons).
Lonc, our des rulsons unlquement rutlques, les tubleuux lus de trols dlmenslons sont
rurement utlllses ur des rogrummeurs non mutheux (cur les mutheux, de ur leur formutlon, ont
une fcheuse roenslon munler des esuces n dlmenslons comme qul rlgole, muls ce sont blen
les seuls, et lulssons les duns leur coln, c'est us des gens comme nous).



88














PARTE 9














89
LE8 FONCTON8 PREDEFNE8
ll y a deux metnodes our ecrre des rogrammes sans erreurs. Vas l n'y a que la troseme qu
marcne Anonyme
Certulns trultements ne euvent etre effectues ur un ulgorlthme, uussl suvunt soltll. L'uutres ne
euvent l'etre qu'uu rlx de souffrunces lndlclbles.
C'est ur exemle le cus du culcul du slnus d'un ungle : our en obtenlr une vuleur urochee, ll
fuudrult ullquer une formule d'une comlexlte vous glucer le sung. Aussl, que se ussetll sur les
etltes culculutrlces que vous connulssez tous ? Cn vous fournlt quelques touches seclules, dltes
touches de fonctions, qul vous ermettent ur exemle de connuitre lmmedlutement ce resultut. Sur
votre culculutrlce, sl vous voulez connuitre le slnus de , vous tuerez , uls lu touche SlN, et vous
uurez le resultut.
1out lunguge de rogrummutlon roose ulnsl un certuln nombre de fonctions , certulnes sont
lndlsensubles, cur elles ermettent d'effectuer des trultements qul serulent suns elles lmosslbles.
L'uutres servent souluger le rogrummeur, en lul eurgnunt de longs - et enlbles ulgorlthmes.

1. 8TRUCTURE GENERALE DE8 FONCTON8
Rerenons l'exemle du slnus. Les lunguges lnformutlques, qul se dolvent tout de meme de suvolr
fulre lu meme chose qu'une culculutrlce lc, roosent generulement une fonctlon SlN. Sl nous
voulons stocker le slnus de duns lu vurluble A, nous ecrlrons :
A Sln()
Une fonctlon est donc constltuee de trols urtles :
le nom rorement dlt de lu fonctlon. Ce nom ne s'lnvente us ! ll dolt lmerutlvement
corresondre une fonctlon roosee ur le lunguge. Luns notre exemle, ce nom est
SlN.
deux urentheses, une ouvrunte, une fermunte. Ces urentheses sont toujours
obligatoires, meme lorsqu'on n'ecrlt rlen l'lnterleur.
une llste de vuleurs, lndlsensubles lu bonne executlon de lu fonctlon. Ces vuleurs
s'uellent des arguments, ou des paramtres. Certulnes fonctlons exlgent un seul
urgument, d'uutres deux, etc. et d'uutres encore uucun. A noter que meme duns le cus de
ces fonctlons n'exlgeunt uucun urgument, les urentheses restent obllgutolres. Le nombre
d'urguments necessulre our une fonctlon donnee ne s'lnvente us : ll est flxe ur le
lunguge. Pur exemle, lu fonctlon slnus u besoln d'un urgument (ce n'est us surrenunt,
cet urgument est lu vuleur de l'ungle). Sl vous essuyez de l'executer en lul donnunt deux
urguments, ou uucun, celu declencheru une erreur l'executlon. Notez egulement que les
urguments dolvent etre d'un certuln type, et qu'll fuut resecter ces tyes.





90
Lt d'entree, nous trouvons :

LL CAC DL LA 1OURNLL : ll conslste uffecter une fonctlon, quelle qu'elle solt.
1oute ecrlture luunt une fonctlon guuche d'une lnstructlon d'uffectutlon est uberrunte, our
deux rulsons symetrlques.
d'une urt, urce que nous le suvons deuls le remler chultre de ce cours extruordlnulre, on
ne eut uffecter qu'une vurluble, l'excluslon de tout uutre chose.
ensulte, urce qu'une fonctlon u our rle de rodulre, de renvoyer, de vulolr (tout celu est
synonyme), un resultut. Pus d'en recevolr un, donc.

L'uffectutlon d'une fonctlon seru donc conslderee comme l'une des lres fuutes ulgorlthmlques,
et unle comme telle. 1uvernler...


2. LE8 FONCTON8 DE TEXTE
Une cutegorle rlvlleglee de fonctlons est celle qul nous ermet de munluler des chuines de
curucteres. Nous uvons dej vu qu'on ouvult fucllement coller deux chuines l'une l'uutre uvec
l'oeruteur de concutenutlon &. Muls ce que nous ne ouvlons us fulre, et qul vu etre mulntenunt
osslble, c'est rutlquer des extructlons de chuines (molns douloureuses, ll fuut le noter, que les
extructlons dentulres).
1ous les lunguges, je dls blen tous, roosent eu ou rou les fonctlons sulvuntes, meme sl le nom
et lu syntuxe euvent vurler d'un lunguge l'uutre :
Len(chane) : renvole le nombre de curucteres d'une chuine
Mid(chane,n,nz) : renvole un extrult de lu chuine, commenunt uu cuructere n et
fulsunt nz curucteres de long.
Ce sont les deux seules fonctlons de chuines reellement lndlsensubles. Ceendunt, our nous
eurgner des ulgorlthmes fustldleux, les lunguges roosent egulement :
Left(chane,n) : renvole les n curucteres les lus guuche duns chuine.
Right(chane,n) : renvole les n curucteres les lus drolte duns chuine
1rouve(chane,chanez) : renvole un nombre corresondunt lu osltlon de chuinez
duns chuine. Sl chuinez n'est us comrlse duns chuine, lu fonctlon renvole zero.
Lxemles :
Len("8on[our, a va ?") vaut 6
Len("") vaut o
Mid("2orro is back", q, )) vaut "ro is b"
Mid("2orro is back", z, ) vaut "c"
Left("Lt pourtant.", 8) vaut "Lt pourt"
Right("Lt pourtant.", q) vaut "t."
1rouve("Un pur bonheur", "pur") vaut q
1rouve("Un pur bonheur", "techno") vaut o



91
ll exlste uussl duns tous les lunguges une fonctlon qul renvole le cuructere corresondunt un
code Ascll donne (fonctlon Asc), et Lycee de versullles (fonctlon Chr) :
Asc("N") vuut ,8
Chr(6) vuut "?"
''lnslste , molns de rogrummer uvec un lunguge un eu urtlculler, comme le C, qul trulte en
reullte les chuines de curucteres comme des tubleuux, on ne ourrult us se usser des deux
fonctlons Len et Mld our trulter les chuines. Cr, sl les rogrummes lnformutlques ont frequemment
trulter des nombres, lls dolvent tout uussl frequemment gerer des serles de curucteres (des
chuines). 'e suls blen que celu devlent un refruln, muls connuitre les technlques de buse sur les
chuines est lus qu'utlle : c'est lndlsensuble.

3. TRO8 FONCTON8 NUMEROUE8 CLA88OUE8

PAR1IL LN1ILRL
Une fonction extrmement rpandue est celle qui permet de rcuprer la partie entire d'un
nombre :
Ares : A Lnt(,zz8) A vuut
Cette fonctlon est notumment lndlsensuble our effectuer le celebrlsslme test de urlte (volr
exerclce duns us longtems).

MODULO
Cette fonction permet de rcuprer le reste de la division d'un nombre par un deuxime
nombre. Pur exemle :
A Mod(c,) A vuut cur c = *
8 Mod(z,z) 8 vuut c cur z = 6*z
C Mod(,8) C vuut cur = *8
Cette fonctlon eut uruitre un eu blzurre, est reservee uux seuls mutheux. Muls vous uurez l
uussl l'occuslon de volr duns les exerclces venlr que ce n'est us le cus.

CLNLRA1ION DL NOM8RLS ALLA1OIRLS
Une uutre fonctlon clusslque, cur tres utlle, est celle qul genere un nombre cholsl uu husurd.
1ous les rogrummes de jeu, ou resque, ont besoln de ce tye d'outlls, qu'll s'uglsse de slmuler
un luncer de des ou le delucement chuotlque du vulsseuu sutlul de l'enfer de lu mort llote ur
l'lnfme 2orglub, qul veut fulre muln busse sur l'Unlvers (heureusement vous etes l our l'en
emecher, ouf).
Muls ll n'y u us que les jeux qul ont besoln de generer des nombres uleutolres. Lu modellsutlon
(hyslque, geogruhlque, economlque, etc.) u urfols recours des modeles dlts stochustlques
(chouette, encore un nouveuu mot suvunt !). Ce sont des modeles duns lesquels les vurlubles se
dedulsent les unes des uutres ur des relutlons determlnlstes (uutrement dlt des culculs), muls ou
l'on slmule lu urt d'lncertltude ur une fourchette de husurd.
Pur exemle, un modele demogruhlque suoseru qu'une femme u en moyenne x enfunts uu
cours de su vle, mettons ,. Muls ll suoseru uussl que sur une oulutlon donnee, ce chlffre eut
fluctuer entre , et ,6 (sl on lulsse une urt d'lncertltude de c). Chuque unnee, c'estdlre

92
chuque serle de culcul des vuleurs du modele, on uuru ulnsl besoln de fulre cholslr lu muchlne un
nombre uu husurd comrls entre , et ,6.
Luns tous les lunguges, cette fonctlon exlste et rodult le resultut sulvunt :
Ares : 1oto Aleu() Cn u : c =< 1oto <
Ln fult, on se rend comte uvec un tout etlt eu de rutlque que cette fonctlon Aleu eut nous
servlr our generer n'lmorte quel nombre comrls duns n'lmorte quelle fourchette. 'e suls blen
que mes lecteurs ne sont guere mutheux, muls l, on reste frunchement en de du nlveuu de feu le
8LPC :
sl Aleu genere un nombre comrls entre c et , Aleu multllle ur 2 rodult un
nombre entre c et 2. Lonc, ll fuut estlmer lu lurgeur de lu fourchette voulue et
multlller Aleu ur cette lurgeur deslree.
ensulte, sl lu fourchette ne commence us zero, ll vu sufflre d'ujouter ou de
retruncher quelque chose our culer lu fourchette uu bon endrolt.
Pur exemle, sl je veux generer un nombre entre , et ,6 , lu fourchette mesure c,c de
lurge. Lonc : c =< Aleu()*c,c < c,c
ll sufflt des lors d'ujouter , our obtenlr lu fourchette voulue. Sl j'ecrls que :
1oto Aleu()*c,c ,
1oto uuru blen une vuleur comrlse entre , et ,6. Lt le tour est joue !
8on, ll est grund tems que vous montrlez ce que vous uvez urls.



93
ENONCE DE8 EXERCCE8
Lxercice .
Purml ces uffectutlons (conslderees lndeendumment les unes des uutres), lesquelles
rovoqueront des erreurs, et ourquol ?
vurlubles A, 8, C en Numerlque
vurlubles L, L en Cuructere
A Sln(8)
A Sln(A 8 * C)
8 Sln(A) - Sln(L)
L Sln(A j 8)
C Cos(Sln(A)

Lxercice .z
Lcrlvez un ulgorlthme qul demunde un mot l'utlllsuteur et qul ufflche l'ecrun le
nombre de lettres de ce mot (c'est vrulment tout bete).

Lxercice .
Lcrlvez un ulgorlthme qul demunde une hruse l'utlllsuteur et qul ufflche l'ecrun le
nombre de mots de cette hruse. Cn suose que les mots ne sont seures que ur
des esuces (et c'est dej un etlt eu molns bete).

Lxercice .q
Lcrlvez un ulgorlthme qul demunde une hruse l'utlllsuteur et qul ufflche l'ecrun le
nombre de voyelles contenues duns cette hruse.
Cn ourru ecrlre deux solutlons. Lu remlere delole une condltlon comosee blen
fustldleuse. Lu deuxleme, en utlllsunt lu fonctlon 1rouve, ullege conslderublement
l'ulgorlthme.

Lxercice .
Lcrlvez un ulgorlthme qul demunde une hruse l'utlllsuteur. Celulcl entreru ensulte le
rung d'un cuructere surlmer, et lu nouvelle hruse dolt etre ufflchee (on dolt
reellement surlmer le cuructere duns lu vurluble qul stocke lu hruse, et us
unlquement l'ecrun).

Lxercice .6 Cryptographie
Un des lus unclens systemes de crytogruhle (ulsement dechlffruble) conslste
deculer les lettres d'un messuge our le rendre llllslble. Alnsl, les A devlennent des 8,
les 8 des C, etc. Lcrlvez un ulgorlthme qul demunde une hruse l'utlllsuteur et qul lu
code selon ce rlncle. Comme duns le cus recedent, le coduge dolt s'effectuer uu
nlveuu de lu vurluble stockunt lu hruse, et us seulement l'ecrun.



94
Lxercice .) Cryptographie z le chjjre de Csar
Une umellorutlon (relutlve) du rlncle recedent conslste oerer uvec un deculuge
non de , muls d'un nombre quelconque de lettres. Alnsl, ur exemle, sl l'on cholslt un
deculuge de z, les A devlennent des M, les 8 des N, etc.
Reullsez un ulgorlthme sur le meme rlncle que le recedent, muls qul demunde en
lus quel est le deculuge utlllser. votre sens roverblul de l'elegunce vous lnterdlru
blen sr une serle de vlngtslx "Sl...Alors"

Lxercice .8 Cryptographie
Une technlque ulterleure de crytogruhle conslstu oerer non uvec un deculuge
systemutlque, muls ur une substltutlon uleutolre. Pour celu, on utlllse un ulhubetcle,
duns lequel les lettres se succedent de munlere desordonnee, ur exemle :
EYLU'PvRLAl8NLClSQ2CvMCl1
C'est cette cle qul vu servlr ensulte coder le messuge. Selon notre exemle, les A
devlendront des E, les 8 des Y, les C des L, etc.
Lcrlre un ulgorlthme qul effectue ce crytuge (l'ulhubetcle seru sulsl ur l'utlllsuteur,
et on suose qu'll effectue une sulsle correcte).

Lxercice . Cryptographie q le chjjre de vgenre
Un systeme de crytogruhle beuucou lus dlfflclle brlser que les recedents fut
lnvente uu vle slecle ur le frunuls vlgenere. ll conslstult en une comblnulson de
dlfferents chlffres de Cesur.
Cn eut en effet ecrlre z ulhubets decules ur ruort l'ulhubet normul :
l'ulhubet qul commence ur 8 et flnlt ur .Y2A
l'ulhubet qul commence ur C et flnlt ur .2A8
etc.
Le coduge vu s'effectuer sur le rlncle du chlffre de Cesur : on remluce lu lettre
d'orlglne ur lu lettre occuunt lu meme luce duns l'ulhubet decule.
Muls lu dlfference du chlffre de Cesur, un meme messuge vu utlllser non un, muls
lusleurs ulhubets decules. Pour suvolr quels ulhubets dolvent etre utlllses, et duns
quel ordre, on utlllse une cle.
Sl cette cle est "vlCLNLRL" et le messuge "ll fuut coder cette hruse", on rocederu
comme sult :
Lu remlere lettre du messuge, l, est lu e lettre de l'ulhubet normul. Llle dolt etre
codee en utlllsunt l'ulhubet commenunt ur lu remlere lettre de lu cle, v. Luns cet
ulhubet, lu e lettre est le L. l devlent donc L.
Lu deuxleme lettre du messuge, L, est lu e lettre de l'ulhubet normul. Llle dolt etre
codee en utlllsunt l'ulhubet commenunt ur lu deuxleme lettre de lu cle, l. Luns cet
ulhubet, lu e lettre est le S. L devlent donc S, etc.
Quund on urrlve lu dernlere lettre de lu cle, on recommence lu remlere.
Lcrlre l'ulgorlthme qul effectue un crytuge de vlgenere, en demundunt blen sr uu
deurt lu cle l'utlllsuteur.


93
Lxercice .o
Lcrlvez un ulgorlthme qul demunde un nombre entler l'utlllsuteur. L'ordlnuteur
ufflche ensulte le messuge "Ce nombre est ulr" ou "Ce nombre est lmulr" selon le
cus.

Lxercice .
Lcrlvez les ulgorlthmes qul generent un nombre Clu uleutolre tel que .
c =< Clu < z
- =< Clu <
, =< Clu < ,6
Clu emule un de slx fuces
-c, =< Clu < 6,
Clu emule lu somme du jet slmultune de deux des slx fuces




96
CORRGE8 DE8 EXERCCE8
Lxercice .
A Sln(8) Aucun robleme
A Sln(A 8 * C) Aucun robleme
8 Sln(A) - Sln(L) Lrreur ! L est en cuructere
L Sln(A j 8) Aucun robleme. sl 8 est dlfferent de zero
C Cos(Sln(A) Lrreur ! ll munque une urenthese fermunte

Lxercice .z
vous etlez revenus, c'est bete comme chou ! ll sufflt de se servlr de lu fonctlon Len, et
c'est regle :
variable Mot en Caractre
variable Nb en Lntier
Debut
Lcrire "Lntrez un mot : "
Lire Mot
Nb Len(Mot)
Lcrire "Ce mot comte ", Nb, " lettres"
Iin

Lxercice .
L, on est obllge de comter ur une boucle le nombre d'esuces de lu hruse, et on
en dedult le nombre de mots. Lu boucle exumlne les curucteres de lu hruse un ur un,
du remler uu dernler, et les comure l'esuce.
variable 8lu en Caractre
variables Nb, l en Lntier
Debut
Lcrire "Lntrez une hruse : "
Lire 8lu
Nb c
Pour l Len(8lu)
Si Mld(8lu, l , ) = " " Alors
Nb Nb
IinSi
l suivant
Lcrire "Cette hruse comte ", Nb , " mots"
Iin







97
Lxercice .q
Solutlon : our chuque cuructere du mot, on ose une tres douloureuse condltlon
comosee. Le molns que l'on ulsse dlre, c'est que ce cholx ne se dlstlngue us ur son
elegunce. Celu dlt, ll murche, donc ures tout, ourquol us.
variable 8lu en Caractre
variables Nb, l, j en Lntier
Debut
Lcrire "Lntrez une hruse : "
Lire 8lu
Nb c
Pour l Len(8lu)
Si Mld(8lu, l, ) = "u" ou Mld(8lu, l, ) = "e" ou Mld(8lu, l, ) = "l" ou Mld(8lu, l, ) = "o"
ou Mld(8lu, l, ) = "u" ou Mld(8lu, l, ) = "y" Alors
Nb Nb
IinSi
l suivant
Lcrire "Cette hruse comte ", Nb, " voyelles"
Iin
Solutlon z : on stocke toutes les voyelles duns une chuine. Crce lu fonctlon 1rouve,
on detecte lmmedlutement sl le cuructere exumlne est une voyelle ou non. C'est
nettement lus symuthlque...
variables 8lu, voy en Caractre
variables Nb, l, j en Lntier
Debut
Lcrire "Lntrez une hruse : "
Lire 8lu
Nb c
voy "uelouy"
Pour l Len(8lu)
Si 1rouve(voy, Mld(8lu, l, )) <> c Alors
Nb Nb
IinSi
l suivant
Lcrire "Cette hruse comte ", Nb, " voyelles"
Iin











98
Lxercice .
ll n'exlste uucun moyen de surlmer dlrectement un cuructere d'une chuine.
uutrement qu'en rocedunt ur colluge. ll fuut donc concutener ce qul se trouve
guuche du cuructere surlmer, uvec ce qul se trouve su drolte. Attentlon uux
urumetres des fonctlons Mld, lls n'ont rlen d'evldent !
variable 8lu en Caractre
variables Nb, l, j en Lntier
Dbut
Lcrire "Lntrez une hruse : "
Lire 8lu
Lcrire "Lntrez le rung du cuructere surlmer : "
Lire Nb
L Len(8lu)
8lu Mld(8lu, , Nb - ) & Mld(8lu, Nb , L - Nb)
Lcrire "Lu nouvelle hruse est : ", 8lu
Iin

Lxercice .6
Sur l'ensemble des exerclces de crytogruhle, ll y u deux grundes strutegles osslbles
:

solt trunsformer les curucteres en leurs codes ASCll. L'ulgorlthme revlent donc
ensulte trulter des nombres. Une fols ces nombres trunsformes, ll fuut les reconvertlr
en curucteres.

solt en rester uu nlveuu des curucteres, et roceder dlrectement uux trunsformutlons
ce nlveuu. C'est cette dernlere otlon qul est cholsle lcl, et our tous les exerclces de
crytogruhle venlr.

Pour cet exerclce, ll y u une regle generule : our chuque lettre, on detecte su osltlon
duns l'ulhubet, et on lu remluce ur lu lettre occuunt lu osltlon sulvunte. Seul cus
urtlculler, lu vlngtslxleme lettre (le 2) dolt etre codee ur lu remlere (le A), et non
ur lu vlngtsetleme, qul n'exlste us !
variables 8lu, Cod, Alhu en Caractre
variables l, Pos en Lntier
Dbut
Lcrire "Lntrez lu hruse coder : "
Lire 8lu
Alhu "A8CLLlCEl'lLMNCPQRS1UvvY2"
Cod ""
Pour l Len(8lu)
Let Mld(8lu, l, )
Si Let <> "2" Alors
Pos 1rouve(Alhu, Let)
Cod Cod & Mld(Alhu, Pos , )
Sinon
Cod Cod & "A"
IinSi

99
l Suivant
8lu Cod
Lcrire "Lu hruse codee est : ", 8lu
Iin

Lxercice .)
Cet ulgorlthme est une generullsutlon du recedent. Muls l, comme on ne connuit us
d'uvunce le deculuge ullquer, on ne sult us u rlorl comblen de "cus urtlcullers",
suvolr de deussements uudel du 2, ll vu y uvolr.

ll fuut donc trouver un moyen slmle de dlre que sl on obtlent z,, ll fuut en reullte
rendre lu lettre numero de l'ulhubet, que sl on obtlent z8, ll fuut en reullte rendre
lu numero z, etc. Ce moyen slmle exlste : ll fuut conslderer le reste de lu dlvlslon ur
z6, uutrement dlt le modulo.

ll y u une etlte ruse sulementulre ullquer, ulsque z6 dolt rester z6 et ne us
devenlr c.
variable 8lu, Cod, Alhu en Caractre
variables l, Pos, Lecul en Lntier
Dbut
Lcrire "Lntrez le deculuge ullquer : "
Lire Lecul
Lcrire "Lntrez lu hruse coder : "
Lire 8lu
Alhu "A8CLLlCEl'lLMNCPQRS1UvvY2"
Cod ""
Pour l Len(8lu)
Let Mld(8lu, l, )
Pos 1rouve(Alhu, Let)
NouvPos Mod(Pos Lecul, z6)
Si NouvPos = c Alors
NouvPos z6
IinSi
Cod Cod & Mld(Alhu, NouvPos, )
l Suivant
8lu Cod
Lcrire "Lu hruse codee est : ", 8lu
Iin









100
Lxercice .8
L, c'est ussez dlrect.
variable 8lu, Cod, Alhu en Caractre
variables l, Pos, Lecul en Lntier
Dbut
Lcrire "Lntrez l'ulhubet cle : "
Lire Cle
Lcrire "Lntrez lu hruse coder : "
Lire 8lu
Alhu "A8CLLlCEl'lLMNCPQRS1UvvY2"
Cod ""
Pour l Len(8lu)
Let Mld(8lu, l, )
Pos 1rouve(Alhu, Let)
Cod Cod & Mld(Cle, Pos, )
l Suivant
8lu Cod
Lcrire "Lu hruse codee est : ", 8lu
Iin

Lxercice .
Le coduge de vlgenere n'est us seulement lus dlfflclle brlser, ll est egulement un
eu lus rulde rogrummer. Lu dlfflculte essentlelle est de comrendre qu'll fuut
deux boucles: l'une our urcourlr lu hruse coder, l'uutre our urcourlr lu cle. Muls
quund on y reflechlt blen, ces deux boucles ne dolvent surtout us etre lmbrlquees. Lt
en reullte, quelle que solt lu munlere dont on l'ecrlt, elle n'en forment qu'une seule.
variables Alhu, 8lu, Cod, Cle, Let en Caractre
variables l, Pos, PosCle, Lecul en Lntier
Dbut
Lcrire "Lntrez lu cle : "
Lire Cle
Lcrire "Lntrez lu hruse coder : "
Lire 8lu
Alhu "A8CLLlCEl'lLMNCPQRS1UvvY2"
Cod ""
PosCle c
Pour l Len(8lu)
Cn gere lu rogresslon duns lu cle. ''ul effectue celu " lu muln" ur une boucle, muls
un joll emlol de lu fonctlon Modulo uurult ermls une rogrummutlon en une seule
llgne!
Poscle Poscle
Si PosCle > Len(Cle) Alors
PosCle
IinSi
Cn determlne quelle est lu lettre cle et su osltlon duns l'ulhubet
LetCle Mld(Cle, PosCle, )
PosLetCle 1rouve(Alhu, LetCle)

101
Cn determlne lu osltlon de lu lettre coder et le deculuge ullquer. L encore, une
solutlon ulternutlve uurult ete d'emloyer Mod : celu nous uurult eurgne le Sl.
Let Mld(8lu, l, )
Pos 1rouve(Alhu, Let)
NouvPos Pos PosLetCle
Si NouvPos > z6 Alors
NouvPos NouvPos - z6
IinSi
Cod Cod & Mld(Alhu, NouvPos, )
l Suivant
8lu Cod
Lcrire "Lu hruse codee est : ", 8lu
Iin

Lxercice .o
Cn en revlent des choses lus slmles...
variable Nb en Lntier
Lcrire "Lntrez votre nombre : "
Lire Nb
Si Nbjz = Lnt(Nbjz) Alors
Lcrire "Ce nombre est ulr"
Sinon
Lcrire "Ce nombre est ulr"
IinSi
Iin

Lxercice .
u) Clu Aleu() * z
b) Clu Aleu() * z
c) Clu Aleu() * c,c ,
d) Clu Lnt(Aleu() * 6)
e) Clu Aleu() * , - c,
f) Clu Lnt(Aleu()*6) Lnt(Aleu()*6) z



4. LE8 FONCTON8 DE CONVER8ON
Lernlere grunde cutegorle de fonctlons, l uussl dlsonlbles duns tous les lunguges, cur leur rle
est urfols lncontournuble, les fonctlons dltes de converslon.
Ruelezvous ce que nous uvons vu duns les remleres uges de ce cours : ll exlste dlfferents
tyes de vurlubles, qul determlnent notumment le tye de coduge qul seru utlllse. Prenons le chlffre
. Sl je le stocke duns une vurluble de tye ulhunumerlque, ll seru code en tunt que cuructere, sur un
octet. Sl en revunche je le stocke duns une vurluble de tye entler, ll seru code sur deux octets. Lt lu
conflgurutlon des blts seru comletement dlfferente duns les deux cus.


102
Une concluslon evldente, et sur luquelle on u dej eu l'occuslon d'lnslster, c'est qu'on ne eut us
fulre n'lmorte quol uvec n'lmorte quol, et qu'on ne eut us ur exemle multlller "" et "", sl
et sont stockes duns des vurlubles de tye cuructere. 'usque l, us de scoo me dlrezvous, juste
tltre vous reondrulje, muls uttendez donc lu sulte.
Pourquol ne us en tlrer les consequences, et stocker convenublement les nombres duns des
vurlubles numerlques, les curucteres duns des vurlubles ulhunumerlques, comme nous l'uvons
toujours fult ?
Purce qu'll y u des sltuutlons ou on n'u us le cholx ! Nous ullons volr des le chultre sulvunt un
mode de stockuge (les flchlers textes) ou toutes les lnformutlons, quelles qu'elles solent, sont
obllgutolrement stockees sous forme de curucteres. Les lors, sl l'on veut ouvolr recuerer des
nombres et fulre des oerutlons dessus, ll vu blen fullolr etre cuuble de convertlr ces chuines en
numerlques.
Aussl, tous les lunguges roosentlls une ulette de fonctlons destlnees oerer de telles
converslons. Cn trouveru uu molns une fonctlon destlnee convertlr une chuine en numerlque
(uelonslu Cnum en seudocode), et une convertlssunt un nombre en cuructere (Ccur).



103















PARTE 10













104
LE8 FCHER8
Cn ne eut as davantage creer des jcners numerques non coables que creer de l'eau non numde
8ruce Schneler
'usqu' resent, les lnformutlons utlllsees duns nos rogrummes ne ouvulent rovenlr que de
deux sources : solt elles etulent lnclues duns l'ulgorlthme lulmeme, ur le rogrummeur, solt elles
etulent entrees en cours de route ur l'utlllsuteur. Muls evldemment, celu ne sufflt us combler les
besolns reels des lnformutlclens.
lmuglnons que l'on veullle ecrlre un rogrumme gerunt un curnet d'udresses. L'une executlon du
rogrumme l'uutre, l'utlllsuteur dolt ouvolr retrouver son curnet jour, uvec les modlflcutlons qu'll
y u uortees lu dernlere fols qu'll u execute le rogrumme. Les donnees du curnet d'udresse ne
euvent donc etre lnclues duns l'ulgorlthme, et encore molns etre entrees uu cluvler chuque
nouvelle executlon !
Les fichiers sont l our combler ce munque. Ils servent stocker des informations de manire
permanente, entre deux excutions d'un programme. Cur sl les vurlubles, qul sont je le ruelle des
udresses de memolre vlve, dlsurulssent chuque fln d'executlon, les flchlers, eux sont stockes sur
des erlherlques memolre de musse (dlsquette, dlsque dur, CL Rom.).

1. ORGAN8ATON DE8 FCHER8
vous connulssez tous le cou des uous : cnez les aous, l y a les aous aas et les aous
as aas. cnez les aous aas, l y a les aous aas oux et les aous aas as oux, etc.
Lh blen les flchlers, c'est un eu urell : ll y u des cutegorles, et duns les cutegorles, des sortes, et
duns les sortes des eseces. Lssuyons donc de debroussulller un eu tout celu...
Un remler grund crltere, qul dlfferencle les deux grundes cutegorles de flchlers, est le sulvunt : le
fichier estil ou non organis sous forme de lignes successives ? Sl oul, celu slgnlfle
vrulsemblublement que ce flchler contlent le meme genre d'lnformutlon chuque llgne. Ces llgnes
sont ulors uelees des enregistrements.
Afln d'lllumlner ces roos obscurs, renons le cus clusslque, celul d'un curnet d'udresses. Le
flchler est destlne memorlser les coordonnees (ce sont toujours les lus mul chuussees, blen sr)
d'un certuln nombre de ersonnes. Pour chucune, ll fuudru noter le nom, le renom, le numero de
telehone et l'emull. Luns ce cus, ll eut uruitre lus slmle de stocker une ersonne ur llgne du
flchler (ur enreglstrement). Llt uutrement, quund on rendru une llgne, on seru sr qu'elle contlent
les lnformutlons concernunt une ersonne, et unlquement celu. Un flchler ulnsl code sous forme
d'enreglstrements est uele un fichier texte.
Ln fult, entre chuque enreglstrement, sont stockes les octets corresondunts uux curucteres CR
(code Ascll ) et Ll (code Ascll c), slgnlflunt un retour uu debut de lu llgne sulvunte. Le lus
souvent, le lunguge de rogrummutlon, des lors qu'll s'uglt d'un flchler texte, gereru lulmeme lu
lecture et l'ecrlture de ces deux curucteres chuque fln de llgne : c'est uutunt de molns dont le
rogrummeur uuru s'occuer. Le rogrummeur, lul, n'uuru qu' dlre lu muchlne de llre une llgne,
ou d'en ecrlre une.
Ce tye de flchler est courumment utlllse des lors que l'on dolt stocker des lnformutlons ouvunt
etre usslmllees une buse de donnees.
Le second tye de flchler, vous l'uurez devlne, se deflnlt u contrurlo : ll russemble les flchlers qul ne
ossedent us de structure de llgnes (d'enreglstrement). Les octets, quels qu'll solent, sont ecrlts
lu queue leu leu. Ces flchlers sont ueles des flchlers binaires. Nuturellement, leur structure
dlfferente lmllque un trultement dlfferent ur le rogrummeur. 1ous les flchlers qul ne codent us

103
une buse de donnees sont obllgutolrement des flchlers blnulres : celu concerne ur exemle un
flchler son, une lmuge, un rogrumme executuble, etc. . 1outefols, on en dlru quelques mots un eu
lus loln, ll est toujours osslble d'oter our une structure blnulre meme duns le cus ou le flchler
reresente une buse de donnees.
Autre dlfference mujeure entre flchlers texte et flchlers blnulres : duns un flchler texte, toutes les
donnees sont ecrltes sous forme de... texte (etonnunt, non ?). Celu veut dlre que les nombres y sont
reresentes sous forme de sulte de chlffres (des chuines de curucteres). Ces nombres doivent donc
tre convertis en chanes lors de l'ecrlture duns le flchler. lnversement, lors de lu lecture du flchler,
on devru convertir ces chanes en nombre sl l'on veut ouvolr les utlllser duns des culculs. Ln
revunche, duns les flchlers blnulres, les donnees sont ecrltes l'lmuge exuct de leur coduge en
memolre vlve, ce qul eurgne toutes ces oerutlons de converslon.
Cecl u comme uutre lmllcutlon qu'un fichier texte est directement lisible, ulors qu'un fichier
binaire ne l'est pas(suuf blen sir en ecrlvunt solmeme un rogrumme urorle). Sl l'on ouvre un
flchler texte vlu un edlteur de textes, comme le blocnotes de vlndows, on y reconnuitru toutes les
lnformutlons (ce sont des curucteres, stockes comme tels). Lu meme chose uvec un flchler blnulre ne
nous rodult l'ecrun qu'un gullmutlus de scrlboulllls lncomrehenslbles.

2. 8TRUCTURE DE8 ENREG8TREMENT8
Suvolr que les flchlers euvent etre structures en enreglstrements, c'est blen. Muls suvolr
comment sont leur tour structures ces enreglstrements, c'est mleux. Cr, l uussl, ll y u deux
grundes osslbllltes. Ces deux grundes vurluntes our structurer les donnees uu seln d'un flchler
texte sont lu dlimitation et les champs de largeur fixe.
Rerenons le cus du curnet d'udresses, uvec deduns le nom, le renom, le telehone et l'emull. Les
donnees, sur le flchler texte, euvent etre orgunlsees ulnsl :
Structure n
"lonfec","Sohle",cz68,,"fonfecQyuhoo.fr"
"2etofruls","Melunle",c6z,,"zetofrulsQfree.fr"
"Eerblen","'eunPhllle",cz8,6,"vunturdQfree.fr"
"Eergebel","Cctuve",c8,z,"rgQuol.fr"
ou ulnsl :
Structure nz
lonfec Sohle cz68,fonfecQyuhoo.fr
2etofruls Melunle c6z,zetofrulsQfree.fr
Eerblen 'eunPhllle cz8,6vunturdQfree.fr
Eergebel Cctuve c8,zrgQuol.fr
Lu structure n est dlte dlimite , Llle utlllse un cuructere seclul, uele caractre de
dlimitation, qul ermet de reerer quund flnlt un chum et quund commence le sulvunt. ll vu de sol
que ce cuructere de dellmltutlon dolt etre strlctement lnterdlt l'lnterleur de chuque chum, fuute
de quol lu structure devlent rorement llllslble.
Lu structure nz, elle, est dlte champs de largeur fixe. ll n'y u us de cuructere de dellmltutlon,
muls on sult que les x remlers curucteres de chuque llgne stockent le nom, les y sulvunts le renom,
etc. Celu lmose blen entendu de ne us sulslr un renselgnement lus long que le chum revu our
l'uccuellllr.
L'uvuntuge de lu structure n est son faible encombrement en place mmoire , ll
n'y u uucun esuce erdu, et un flchler texte code de cette munlere occue le

106
mlnlmum de luce osslble. Muls elle ossede en revunche un lnconvenlent mujeur,
qul est lu lenteur de la lecture. Ln effet, chuque fols que l'on recuere une llgne
duns le flchler, ll fuut ulors urcourlr un ur un tous les curucteres our reerer
chuque occurrence du cuructere de seurutlon uvunt de ouvolr decouer cette
llgne en dlfferents chums.
Lu structure nz, l'lnverse, gaspille de la place mmoire, ulsque le flchler est un
vrul gruyere leln de trous. Muls d'un uutre cte, lu recuerutlon des dlfferents
chums est tres rapide. Lorsqu'on recuere une llgne, ll sufflt de lu decouer en
dlfferentes chuines de longueur redeflnle, et le tour est joue.
A l'eoque ou lu luce memolre cotult cher, lu structure dellmltee etult souvent rlvlleglee. Muls
deuls blen des unnees, lu quusltotullte des loglclels - et des rogrummeurs - otent our lu
structure en chums de lurgeur flxe. Aussl, suuf mentlon contrulre, nous ne truvulllerons qu'uvec des
flchlers btls sur cette structure.
Remurque lmortunte : lorsqu'on cholslt de coder une buse de donnees sous forme de chums de
lurgeur flxe, on eut ulors tres blen oter our un flchler blnulre. Les enreglstrements y seront certes
lu queue leu leu, suns que rlen ne nous slgnule lu jolnture entre chuque enreglstrement. Muls sl on
sult comblen d'octets mesure lnvurlublement chuque chum, on sult du cou comblen d'octets
mesure chuque enreglstrement. Lt on eut donc tres fucllement recuerer les lnformutlons : sl je suls
que duns mon curnet d'udresse, chuque lndlvldu occue mettons , octets, ulors duns mon flchler
blnulre, je deduls que l'lndlvldu n occue les octets ,, l'lndlvldu nz les octets ,6 c, l'lndlvldu
n les octets zz, etc.


3. TYPE8 D'ACCE8
Cn vlent de volr que l'orgunlsutlon des donnees uu seln des enreglstrements du flchler ouvult
s'effecteur selon deux grunds cholx struteglques. Muls ll exlste une uutre llgne de urtuge des
flchlers : le tye d'ucces, uutrement dlt lu munlere dont lu muchlne vu ouvolr uller rechercher les
lnformutlons contenues duns le flchler.
Cn dlstlngue :
L'accs squentiel : on ne eut ucceder qu' lu donnee sulvunt celle qu'on vlent de llre. Cn
ne eut donc ucceder une lnformutlon qu'en uyunt uu reuluble exumlne celle qul lu
recede. Luns le cus d'un flchler texte, celu slgnlfle qu'on llt le flchler llgne ur llgne
(enreglstrement ur enreglstrement).
L'accs direct (ou alatoire) : on eut ucceder dlrectement l'enreglstrement de son
cholx, en reclsunt le numero de cet enreglstrement. Muls celu veut souvent dlre une
gestlon fustldleuse des delucements duns le flchler.
L'accs index : our slmllfler, ll comblne lu ruldlte de l'ucces dlrect et lu slmllclte de
l'ucces sequentlel (en restunt toutefols lus comllque). ll est urtlcullerement udute uu
trultement des gros flchlers, comme les buses de donnees lmortuntes.
A lu dlfference de lu recedente, cette tyologle ne caractrise pas la structure ellememe du
flchler. Ln fult, tout flchler eut etre utlllse uvec l'un ou l'uutre des trols tyes d'ucces. Le cholx du
tye d'ucces n'est us un cholx qul concerne le flchler lulmeme, muls unlquement lu munlere dont ll
vu etre trulte ur lu muchlne. C'est donc dans le programme, et seulement dans le programme, que
l'on choisit le type d'accs souhait.



107
Pour conclure sur tout cela, voici un petit tableau rcapitulatif :


Iichiers 1exte Iichiers 8inaires
Cn les utlllse our stocker... des buses de donnees
tout, y comrls des buses de
donnees.
lls sont structures sous
forme de...
llgnes (enreglstrements)
lls n'ont us de structure uurente.
Ce sont des octets ecrlts lu sulte
les uns des uutres.
Les donnees y sont ecrltes...
excluslvement en tunt que
curucteres
comme en memolre vlve
Les enreglstrements sont
euxmemes structures...
uu cholx, uvec un seuruteur ou
en chums de lurgeur flxe
en chums de lurgeur flxe, s'll s'uglt
d'un flchler codunt des
enreglstrements
Llslblllte
Le flchler est llslble clulrement
uvec n'lmorte quel edlteur de
texte
Le flchler u l'uurence d'une sulte
d'octets llllslbles
Lecture du flchler
Cn ne eut llre le flchler que llgne
ur llgne
Cn eut llre les octets de son cholx
(y comrls lu totullte du flchler d'un
cou)

Luns le cudre de ce cours, on se llmlteru volontulrement uu tye de buse : le flchler texte en ucces
sequentlel. Pour des lnformutlons lus comletes sur lu gestlon des flchlers blnulres et des uutres
tyes d'ucces, ll vous fuudru... chercher ullleurs.

4. N8TRUCTON8 {FCHER8 TEXTE EN ACCE8 8EOUENTEL}
Sl l'on veut truvulller sur un flchler, lu remlere chose fulre est de l'ouvrir. Celu se fult en
uttrlbuunt uu flchler un numro de canal. Cn ne eut ouvrlr qu'un seul flchler ur cunul, muls quel
que solt le lunguge, on dlsose toujours de lusleurs cunuux, donc us de soucls.
L'lmortunt est que lorsqu'on ouvre un flchler, on stlule ce qu'on vu en fulre : lire, crire ou
a[outer.
Sl on ouvre un flchler pour lecture, on ourru unlquement recuerer les lnformutlons qu'll
contlent, suns les modlfler en uucune munlere.
Sl on ouvre un flchler pour criture, on ourru mettre deduns toutes les lnformutlons que l'on
veut. Muls les lnformutlons recedentes, sl elles exlstent, seront intgralement crases Lt
on ne ourru us ucceder uux lnformutlons qul exlstulent recedemment.
Sl on ouvre un flchler pour a[out, on ne eut nl llre, nl modlfler les lnformutlons exlstuntes.
Muls on ourru, comme vous commencez vous en douter, ujouter de nouvelles llgnes (je
ruelle qu'uu terme de llgnes, on refereru celul d'enregistrements.
Au remler ubord, ces llmltutlons euvent sembler lnfernules. Au deuxleme rubord, elles le sont
effectlvement. ll n'y u meme us d'lnstructlons qul ermettent de surlmer un enreglstrement d'un
flchler !
1outefols, uvec un eu d'hubltude, on se rend comte que mulgre tout, meme sl ce n'est us
toujours murrunt, on eut quund meme fulre tout ce qu'on veut uvec ces flchlers sequentlels.

108
Pour ouvrir un fichier texte, on crira par exemple :
Ouvrir "Lxemle.txt" sur en Lecture
lcl, "Lxemle.txt" est le nom du flchler sur le dlsque dur, est le numero de cunul, et ce flchler u
donc ete ouvert en lecture. vous l'uvlez suns doute ressentl. Allons lus loln :
variables 1ruc, Nom, Prenom, 1el, Mull en Caractres
Dbut
Ouvrir "Lxemle.txt" sur en Lecture
LireIichier , 1ruc
Nom Mld(1ruc, , zc)
Prenom Mld(1ruc, z, )
1el Mld(1ruc, 6, c)
Mull Mld(1ruc, 6, zc)
L'lnstructlon Llrellchler recuere donc duns lu vurluble seclflee l'enreglstrement sulvunt duns le
flchler... "sulvunt", oul, muls ur ruort quol ? Pur ruort uu dernler enreglstrement lu. C'est en
celu que le flchler est dlt sequentlel. Ln l'occurrence, on recuere donc lu remlere llgne, donc, le
remler enreglstrement du flchler, duns lu vurluble 1ruc. Lnsulte, le flchler etunt orgunlse sous forme
de chums de lurgeur flxe, ll sufflt de trononner cette vurluble 1ruc en uutunt de morceuux qu'll y u
de chums duns l'enreglstrement, et d'envoyer ces tronons duns dlfferentes vurlubles. Lt le tour est
joue.
Lu sulte du rulsonnement s'lmose uvec une loglque lmltoyuble : llre un flchler sequentlel de
bout en bout suose de rogrummer une boucle. Comme on sult rurement l'uvunce comblen
d'enreglstrements comorte le flchler, lu comblne conslste neuf fols sur dlx utlllser lu fonctlon LCl
(ucronyme our Lnd Cf llle). Cette fonctlon renvole lu vuleur vrul sl on u uttelnt lu fln du flchler
(uuquel cus une lecture sulementulre declencherult une erreur). L'ulgorlthme, ultru clusslque, en
urell cus est donc :
variable 1ruc en Caractre
Ouvrir "Lxemle.txt" sur en Lecture
Dbut
1antque Non LCl()
LireIichier , 1ruc
.
Iin1antque
Iermer
Iin
Lt neuf fols sur dlx egulement, sl l'on veut stocker uu fur et mesure en memolre vlve les
lnformutlons lues duns le flchler, on u recours un ou lusleurs tableaux. Lt comme on ne sult us
d'uvunce comblen ll y uurult d'enreglstrements duns le flchler, on ne sult us duvuntuge comblen ll
dolt y uvolr d'emlucements duns les tubleuux. Qu'lmorte, les rogrummeurs uvertls que vous etes
connulssent lu comblne des tubleuux dynumlques.





109
Ln russemblunt l'ensemble des connulssunces ucqulses, nous ouvons donc ecrlre le rototye du
code qul effectue lu lecture lntegrule d'un flchler sequentlel, tout en recolunt l'ensemble des
lnformutlons en memolre vlve :
1ableaux Nom(), Prenom(), 1el(), Mull() en Caractre
Dbut
Ouvrir "Lxemle.txt" sur en Lecture
l
1antque Non LCl()
LireIichier , 1ruc
l l
Redim Nom(l)
Redim Prenom(l)
Redim 1el(l)
Redim Mull(l)
Nom(l) Mld(1ruc, , zc)
Prenom(l) Mld(1ruc, z, )
1el(l) Mld(1ruc, 6, c)
Mull(l) Mld(1ruc, 6, zc)
Iin1antque
Iermer
Iin
lcl, on u fult le cholx de recoler le flchler duns quutre tubleuux dlstlncts. Cn uurult u egulement
tout recoler duns un seul tubleuu : chuque cuse du tubleuu uurult ulors ete occuee ur une llgne
comlete (un enreglstrement) du flchler. Cette solutlon nous uurult fult gugner du tems uu deurt,
muls elle ulourdlt ensulte le code, ulsque chuque fols que l'on u besoln d'une lnformutlon uu seln
d'une cuse du tubleuu, ll fuudru uller roceder une extructlon vlu lu fonctlon MlL. Ce qu'on gugne
ur un bout, on le erd donc ur l'uutre.
Muls surtout, comme on vu le volr blentt, ll y u uutre osslblllte, blen mellleure, qul cumule les
uvuntuges suns uvolr uucun des lnconvenlents.
Neunmolns, ne nous lmutlentons us, chuque chose en son tems, et revenons our le moment
lu solutlon que nous uvons emloyee cldessus.
Pour une oerutlon d'ecrlture, ou d'ujout, ll fuut d'ubord lmerutlvement, sous elne de semer lu
unlque duns lu structure du flchler, constltuer une chuine equlvulente lu nouvelle llgne du flchler.
Cette chuine dolt donc etre cullbree de lu bonne munlere, uvec les dlfferents chums qul
tombent uux emlucements corrects. Le moyen le lus slmle our s'eurgner de longs
trultements est de roceder uvec des chuines correctement dlmenslonnees des leur declurutlon (lu
luurt des lunguges offrent cette osslblllte) :
Ouvrir "Lxemle.txt" sur en A[out
variable 1ruc en Caractre
variables Nom*zc, Prenom*, 1el*c, Mull*zc en Caractre






110
Une telle declurutlon ussure que quel que solt le contenu de lu vurluble Nom, ur exemle, cellecl
comteru toujours zc curucteres. Sl son contenu est lus etlt, ulors un nombre correct d'esuces
seru uutomutlquement ujoute our combler. Sl on tente d'y entrer un contenu tro long, celulcl seru
uutomutlquement tronque. voyons lu sulte :
Nom "'okers"
Prenom "Mldnlght"
1el "c86z"
Mull "ullstursQrockundroll.com"
1ruc Nom & Prenom & 1el & Mull
LcrireIichier , 1ruc
Lt our flnlr, une fols qu'on en u termlne uvec un flchler, ll ne fuut us oubller de fermer ce flchler.
Cn llbere ulnsl le cunul qu'll occuult (et uccessolrement, on ourru utlllser ce cunul duns lu sulte du
rogrumme our un uutre flchler. ou our le meme).

5. 8TRATEGE8 DE TRATEMENT
ll exlste globulement deux munleres de trulter les flchlers textes :
l'une conslste s'en tenlr uu flchler rorement dlt, c'estdlre modlfler directement
(ou resque) les lnformutlons sur le dlsque dur. C'est urfols un eu ucrobutlque,
lorsqu'on veut surlmer un element d'un flchler : on rogrumme ulors une boucle
uvec un test, qul recole duns un deuxleme flchler tous les elements du remler flchler
suuf un , et ll fuut ensulte recoler lntegrulement le deuxleme flchler lu luce du
remler flchler. Cuf.
l'uutre strutegle conslste, comme on l'u vu, passer par un ou plusieurs tableaux. Ln
fult, le rlncle fondumentul de cette uroche est de commencer, uvunt toute uutre
chose, ur recopier l'intgralit du fichier de dpart en mmoire vive. Lnsulte, on ne
munlule que cette memolre vlve (concretement, un ou lusleurs tubleuux). Lt lorsque
le trultement est termlne, on recole nouveuu duns l'uutre sens, deuls lu memolre
vlve vers le flchler d'orlglne.
Les uvuntuges de lu seconde technlque sont nombreux, et fols sur cc, c'est ulnsl qu'll fuudru
roceder :
lu rapidit : les ucces en memolre vlve sont des mllllers de fols lus ruldes
(nunosecondes) que les ucces uux memolres de musse (mllllsecondes uu mleux our
un dlsque dur). Ln busculunt le flchler du deurt duns un tubleuu, on mlnlmlse le
nombre ulterleur d'ucces dlsque, tous les trultements etunt ensulte effectues en
memolre.
lu facilit de programmation : blen qu'll fullle ecrlre les lnstructlons de recole du
flchler duns le tubleuu, our eu qu'on dolve trloter les lnformutlons duns tous les
sens, c'est lurgement lus fuclle de fulre celu uvec un tubleuu qu'uvec des flchlers.
Pourquol, ulors, demunderezvous huletunts, ne fulton us celu tous les cous ? Y utll des cus
ou ll vuut mleux en rester uux flchlers et ne us usser ur des tubleuux ?
Lu recole d'un tres gros flchler en memolre vlve exlge des ressources qul euvent uttelndre des
dlmenslons conslderubles. Lonc, duns le cus d'lmmenses flchlers (tres rures, ceendunt), cette
recole en memolre eut s'uverer roblemutlque.

111
1outefols, lorsque le flchler contlent des donnees de tye non homogenes (chuines, numerlques,
etc.) celu rlsque d'etre coton our le stocker duns un tubleuu unlque : ll vu fullolr declurer lusleurs
tubleuux, dont le munlement uu flnul eut etre uussl lourd que celul des flchlers de deurt.
A molns... d'utlllser une ruse : creer des tyes de vurlubles ersonnullses, comoses d'un
colluge de lusleurs tyes exlstunts (c curucteres, uls un numerlque, uls curucteres, etc.). Ce
tye de vurluble s'uelle un tye structur. Cette technlque, blen qu'elle ne solt us vrulment
dlfflclle, exlge tout de meme une certulne ulsunce... voll ourquol on vu mulntenunt en dlre
quelques mots.

6. DONNEE8 8TRUCTUREE8

6.1 Donnes structures simples
Nostulglques du Lego, cette urtle vu vous lulre. Comment construlre des trucs us osslbles et
des muchlns us croyubles uvec juste quelques elements de buse ? vous n'ullez us turder le
suvolr...
'usqu' resent, voll comment se resentulent nos osslbllltes en mutlere de memolre vlve :
nous ouvlons reserver un emlucement our une lnformutlon d'un certuln tye. Un tel
emlucement s'uelle une vurluble (quund vous en uvez ussez de me volr rudoter, vous le dltes).
Nous ouvlons uussl reserver une serle d'emlucement numerotes our une serle d'lnformutlons de
mme type. Un tel emlucement s'uelle un tubleuu (meme remurque).
Lh blen toujours lus huut, toujours lus fort, volcl mulntenunt que nous ouvons reserver une
srie d'emplacements pour des donnes de type diffrents. Un tel emlucement s'uelle une
variable structure. Son utlllte, lorsqu'on trulte des flchlers texte (et meme, des flchlers en generul),
suute uux yeux : cur on vu ouvolr culquer chucune des llgnes du flchler en memolre vlve, et
conslderer que chuque enreglstrement seru recole duns une vurluble et une seule, qul lul seru
udutee. Alnsl, le robleme du "decouuge" de chuque enreglstrement en dlfferentes vurlubles (le
nom, le renom, le numero de telehone, etc.) seru resolu d'uvunce, ulsqu'on uuru une structure,
un guburlt, en quelque sorte, tout ret d'uvunce our uccuellllr et redecouer nos enreglstrements.
Attentlon toutefols , lorsque nous utlllslons des vurlubles de tye redeflnl, comme des entlers,
des booleens, etc. nous n'uvlons qu'une seule oerutlon effectuer : declurer lu vurluble en utlllsunt
un des tyes exlstunts. A resent que nous voulons creer un nouveuu tye de vurluble (ur
ussembluge de tyes exlstunts), ll vu fullolr fulre deux choses : d'ubord, creer le tye. Lnsulte
seulement, declurer lu (les) vurluble(s) d'ures ce tye.
Rerenons une fols de lus l'exemle du curnet d'udresses. 'e suls, c'est un eu comme mes
blugues, u lusse (l, our ceux qul s'endorment, je slgnule qu'll y u un jeu de mots), muls c'est encore
le mellleur moyen d'uvolr un olnt de comurulson.
Nous ullons donc, uvunt meme lu declurutlon des vurlubles, creer un tye, une structure, culquee
sur celle de nos enreglstrements, et donc rete les uccuellllr :
Structure 8ottln
Nom en Caractre * zc
Prenom en Caractre *
1el en Caractre * c
Mull en Caractre * zc
Iin Structure
lcl, 8ottln est le nom de mu structure. Ce mot joueru ur lu sulte duns mon rogrumme
exuctement le meme rle que les tyes redeflnls comme Numerlque, Cuructere ou 8ooleen.

112
Mulntenunt que lu structure est deflnle, je vuls ouvolr, duns lu sectlon du rogrumme ou
s'effectuent les declurutlons, creer une ou des vurlubles corresondunt cette structure :
variable lndlvldu en 8ottin
Lt sl celu me chuntult, je ourruls remllr les dlfferentes lnformutlons contenues uu seln de lu
vurluble lndlvldu de lu munlere sulvunte :
lndlvldu "'oker", "Mldnlght", "c86z", "ullstursQrock.com"
Cn eut uussl uvolr besoln d'ucceder un seul des chums de lu vurluble structuree. Luns ce cus,
on emlole le olnt :
lndlvldu.Nom "'oker"
lndlvldu.Prenom "Mldnlght"
lndlvldu.1el "c86z"
lndlvldu.Mull "ullstursQrockundroll.com"
Alnsl, ecrlre correctement une lnformutlon duns le flchler est un jeu d'enfunt, ulsqu'on dlsose
d'une vurluble lndlvldu uu bon guburlt. Une fols remlls les dlfferents chums de cette vurluble ce
qu'on vlent de fulre , ll n'y u lus qu' envoyer cellecl dlrectement duns le flchler. Lt zou !
LcrireIichier , lndlvldu
Le lu meme munlere, duns l'uutre sens, lorsque j'effectue une oerutlon de lecture duns le flchler
Adresses, mu vle en seru conslderublement slmllflee : lu structure etunt fulte our celu, je eux
dorenuvunt me contenter de recoler une llgne du flchler duns une vurluble de tye 8ottln, et le tour
seru joue. Pour churger l'lndlvldu sulvunt du flchler en memolre vlve, ll me sufflru donc d'ecrlre :
LireIichier , lndlvldu
Lt l, dlrect, j'ul blen mes quutre renselgnements uccesslbles duns les quutre chums de lu vurluble
lndlvldu. 1out celu, evldemment, urce que lu structure de mu vurluble lndlvldu corresond
urfultement lu structure des enreglstrements de mon flchler. Luns le cus contrulre, our
rerendre une exresslon connue, on ne decoueru us selon les olntllles, et ulors, je ense que
vous lmuglnez le curnuge...

6.2 Tableaux de donnes structures

Lt encore lus loln, encore lus vlte et encore lus fort. Sl urtlr des tyes slmles, on eut creer
des vurlubles et des tubleuux de vurlubles, vous me voyez venlr, urtlr des tyes structures, on eut
creer des vurlubles structurees... et des tableaux de variables structures.
L, blen que us sl dlfflclle que celu, u commence devenlr vrulment buleze. Purce que celu veut
dlre que nous dlsosons d'une munlere de gerer lu memolre vlve qul vu corresondre exuctement
lu structure d'un flchler texte (d'une buse de donnees). Comme les structures se corresondent
urfultement, le nombre de munlulutlons effectuer, uutrement dlt de llgnes de rogrumme
ecrlre, vu etre redult uu mlnlmum. Ln fult, duns notre tubleuu structure, les chums des
emlucements du tubleuu corresondront uux chums du flchler texte, et les lndlces des
emlucements du tubleuux corresondront uux dlfferentes llgnes du flchler.




113
volcl, tltre d'lllustrutlon, l'ulgorlthme comlet de lecture du flchler Adresses et de su recole
lntegrule en memolre vlve, en emloyunt un tubleuu structure.
Structure 8ottln
Nom en Caractre * zc
Prenom en Caractre *
1el en Caractre * c
Mull en Caractre * zc
Iin Structure
1ableau Mesotes() en 8ottin
Dbut
Ouvrir "Lxemle.txt" sur en Lecture
l
1antque Non LCl()
l l
Redim Mesotes(l)
LireIichier , Mesotes(l)
Iin1antque
Iermer
Iin
Une fols que cecl est regle, on u tout ce qu'll fuut ! Sl je voululs ecrlre, un moment, le mull de
l'lndlvldu n du flchler (donc le nz du tubleuu) l'ecrun, ll me sufflrult de usser l'ordre :
Lcrlre Mesotes(z).Mull
Lt voll le truvull. Slmllsslme, non ?
RLMARqUL IINALL SUR LLS DONNLLS S1RUC1URLLS Meme sl le domulne de redllectlon des
donnees structurees est lu gestlon de flchlers, on eut tout fult y uvolr recours duns d'uutres
contextes, et orgunlser lus systemutlquement les vurlubles d'un rogrumme sous lu forme de telles
structures.
Ln rogrummutlon dlte procdurale, celle que nous etudlons lcl, ce tye de strutegle reste
relutlvement rure. Muls rure ne veut us dlre lnterdlt, ou meme lnutlle.
Lt nous uurons l'occuslon de volr qu'en rogrummutlon ob[et, ce tye d'orgunlsutlon des donnees
devlent fondumentul. Muls cecl est un uutre cours...

7. RECAPTULATF GENERAL
Lorsqu'on est umene truvulller uvec des donnees sltuees duns un flchler, lusleurs cholx, en
urtle lndeendunts les uns des uutres, dolvent etre fults :
sur l'orgunlsutlon en enregistrements du flchler (cholx entre fichier texte ou fichier
binaire)
sur le mode d'accs uux enreglstrements du flchler (direct ou squentiel)
sur l'orgunlsutlon des champs uu seln des enreglstrements (resence de sparateurs ou
champs de largeur fixe)
sur lu mthode de traitement des lnformutlons (recole lntegrule reuluble du flchler en
memolre vlve ou non)
sur le type de variables utlllsees our cette recole en memolre vlve (lusleurs tubleuux
de tye simple, ou un seul tubleuu de tye structur).

114
Chucune de ces otlons resente uvuntuges et lnconvenlents, et ll est lmosslble de donner une
regle de condulte vuluble en toute clrconstunce. ll fuut connuitre ces technlques, et suvolr cholslr lu
bonne otlon selon le robleme trulter.
volcl une serle de (us toujours) etlts exerclces sur les flchlers texte, que l'on ourru trulter en
emloyunt les tyes structures (c'est en tout cus le cus duns les corrlges).

Lt en concluslon de lu concluslon, voll lusleurs remurques fondumentules :

RLMARqUL N : Lorsqu'on veut recuerer des donnees numerlques lnscrltes duns un
flchler texte, ll ne fuut surtout us oubller que ces donnees se resentent forcement
sous forme de curucteres. Lu recuerutlon ellememe trunsmettru donc
obllgutolrement des donnees de tye ulhunumerlque , our utlllser ces donnees des
flns ulterleures de culcul, ll seru donc necessulre d'emloyer une fonctlon de
converslon.
Cette remurque ne s'ullque evldemment us uux flchlers blnulres.
RLMARqUL Nbis : voll ourquol une structure s'ullquunt uux flchlers textes est
forcement comosee uniquement de types caractres. Une structure trultunt de
flchlers blnulres ourrult en revunche etre comosee de curucteres, de numerlques et
de booleens.
RLMARqUL Nz : Plusleurs lunguges lnterdlsent l'ecrlture d'une vurluble structuree
duns un flchler texte, ne l'uutorlsunt que our un flchler blnulre. Sl l'on se trouve duns
ce cus, celu slgnlfle qu'on eut certes utlllser une structure, ou un tubleuu de
structures, muls condltlon d'ecrlre sur le flchler chum ur chum, ce qul unnule une
urtle du beneflce de lu structure.
Nous uvons ostule lcl que cette lnterdlctlon n'exlstult us , en tenlr comte ne
chungerult us fondumentulement les ulgorlthmes, muls ulourdlrult un eu le code
our les llgnes trultunt de l'ecrlture duns les flchlers.



113
ENONCE DE8 EXERCCE8
Lxercice o.
Quel resultut cet ulgorlthme rodultll ?
variable 1ruc en Caractre
Dbut
Ouvrir "Lxemle.txt" sur en Lecture
1antque Non LCl()
LireIichier , 1ruc
Lcrire 1ruc
Iin1antque
Iermer
Iin

Lxercice o.z
Lcrlvez l'ulgorlthme qul rodult un resultut slmllulre uu recedent, muls le flchler texte
"Lxemle.txt" est cette fols de tye dellmlte (cuructere de dellmltutlon : j). Cn
rodulru l'ecrun un ufflchuge ou our des rulsons esthetlques, ce cuructere seru
remluce uvec des esuces.

Lxercice o.
Cn truvullle uvec le flchler du curnet d'udresses en chums de lurgeur flxe.
Lcrlvez un ulgorlthme qul ermet l'utlllsuteur de sulslr uu cluvler un nouvel lndlvldu
qul seru ujoute ce curnet d'udresses.


Lxercice o.q
Meme questlon, muls cette fols le curnet est suose etre trle ur ordre ulhubetlque.
L'lndlvldu dolt donc etre lnsere uu bon endrolt duns le flchler.

Lxercice o.
Lcrlvez un ulgorlthme qul ermette de modlfler un renselgnement (our slmllfler,
dlsons unlquement le nom de fumllle) d'un membre du curnet d'udresses. ll fuut donc
demunder l'utlllsuteur quel est le nom modlfler, uls quel est le nouveuu nom, et
mettre jour le flchler. Sl le nom recherche n'exlste us, le rogrumme devru le
slgnuler.

Lxercice o.6
Lcrlvez un ulgorlthme qul trle les lndlvldus du curnet d'udresses ur ordre
ulhubetlque.



116
Lxercice o.)
Solent 1oto.txt et 1utu.txt deux flchlers dont les enreglstrements ont lu meme
structure. Lcrlre un ulgorlthme qul recole tout le flchler 1oto duns le flchler 1utu, uls
su sulte, tout le flchler 1utu (concutenutlon de flchlers).

Lxercice o.8
Lcrlre un ulgorlthme qul surlme duns notre curnet d'udresses tous les lndlvldus dont
le mull est lnvullde (our emloyer un crltere slmle, on consldereru que sont lnvulldes
les mulls ne comortunt uucune urobuse, ou lus d'une urobuse).

Lxercice o.
Les enreglstrements d'un flchler contlennent les deux chums Nom (chuine de
curucteres) et Montunt (Lntler). Chuque enreglstrement corresond une vente
conclue ur un commerclul d'une soclete.
Cn veut memorlser duns un tubleuu, uls ufflcher l'ecrun, le totul de ventes ur
vendeur. Pour slmllfler, on suose que le flchler de deurt est dej trle
ulhubetlquement ur vendeur.



117
CORRGE8 DE8 EXERCCE8
Lxercice o.
Cet ulgorlthme ecrlt l'lntegrullte du flchler "Lxemle.txt" l'ecrun

Lxercice o.z
variable 1ruc en Caractre
variable l en Lntier
Debut
Ouvrir "Lxemle.txt" sur en Lecture
1antque Non LCl()
LireIichier , 1ruc
Pour l Len(1ruc)
Si Mld(1ruc, l, ) = "j" Alors
Lcrire " "
Sinon
Lcrire Mld(1ruc, l, )
IinSi
l Suivant
Iin1antque
Iermer

Lxercice o.
variables Nom * zc, Prenom * ,, 1el * c, Mull * zc, Llg en Caractre
Debut
Lcrire "Lntrez le nom : "
Lire Nom
Lcrire "Lntrez le renom : "
Lire Prenom
Lcrire "Lntrez le telehone : "
Lire 1el
Lcrire "Lntrez le nom : "
Lire Mull
Llg Nom & Prenom & 1el & Mull
Ouvrir "Adresse.txt" sur pour A[out
LcrireIichier , Llg
Iermer
Iin








118
Lxercice o.q
L, comme lndlque duns le cours, on usse ur un tubleuu de strutures en memolre
vlve, ce qul est lu technlque lu lus frequemment emloyee. Le trl qul est en fult un
slmle test seru effectue sur le remler chum (nom).
Structure 8ottln
Nom en Caractre * zc
Prenom en Caractre *
1el en Caractre * c
Mull en Caractre * zc
Iin Structure
1ableau Mesotes() en 8ottin
variables MonPote, Nouveuu en 8ottin
variables l, j en Numrique
Debut
Lcrire "Lntrez le nom : "
Lire Nouveuu.Nom
Lcrire "Lntrez le renom : "
Lire Nouveuu.Prenom
Lcrire "Lntrez le telehone : "
Lire Nouveuu.1el
Lcrire "Lntrez le mull : "
Llre Nouveuu.Mull
Cn recole l'lntegrullte de "Adresses" duns MesPotes(). Lt ures tout, c'est l'occuslon :
quund on tombe uu bon endrolt, on lnsere subretlcement notre nouveuu couln duns
le tubleuu.
Ouvrir "Adresse.txt" sur pour Lecture
l
lnsere luux
1antque Non LCl()
l l
Redim MesPotes(l)
LireIichier , MonPote
Si MonPote.Nom > Nouveuu.Nom et Non lnsere Alors
MesPotes(l) Nouveuu
lnsere vrul
l l
Redim MesPotes(l)
IinSi
MesPotes(l) MonPote
Iin1antque
Iermer
Lt le tour est quuslment joue. ll ne reste lus qu' rebuluncer tel quel l'lntegrullte du
tubleuu MesPotes duns le flchler, en ecrusunt l'unclenne verslon.
Ouvrir "Adresse.txt" sur pour Lcriture
Pour j c l
LcrireIichier , MesPotes(j)
j suivant
Iermer
Iin

119

Lxercice o.
C'est un eu du meme tonneuu que ce qu'on vlent de fulre, quelques vurluntes res.
ll y u essentlellement une etlte gestlon de flug our fulre bonne mesure.
Structure 8ottln
Nom en Caractre * zc
Prenom en Caractre *
1el en caractre * c
Mull en Caractre * zc
Iin Structure
1ableau Mesotes() en 8ottin
variables MonPote en 8ottin
variables Anclen, Nouveuu en Caractre*zc
variables l, j en Numrique
variable 1rouve en 8oolen
Debut
Lcrire "Lntrez le nom modlfler : "
Lire Anclen
Lcrire "Lntrez le nouveuu nom : "
Lire Nouveuu
Cn recole l'lntegrullte de "Adresses" duns llc, tout en recherchunt le clumln. Sl on le
trouve, on rocede lu modlflcutlon.
Ouvrir "Adresse.txt' sur pour Lecture
l
1rouve luux
1antque Non LCl()
l l
Redim MesPotes(l)
LireIichier , MonPote
Si MonPote.Nom = Anclen.Nom Alors
1rouve vrul
MonPote.Nom Nouveuu
IinSi
MesPotes(l) MonPote
Iin1antque
Iermer
Cn recole ensulte l'lntegrullte de llc duns "Adresse"
Ouvrir "Adresse.txt" sur pour Lcriture
Pour j c l
LcrireIichier , MesPotes(j)
j Suivant
Iermer
Lt un etlt messuge our flnlr !
Si 1rouve Alors
Lcrire "Modlflcutlon effectuee"
Sinon
Lcrire "Nom lnconnu. Aucune modlflcutlon effectuee"
IinSi
Iin




120
Lxercice o.6
L, c'est un trl sur un tubleuu de structures, rlen de lus fuclle. Lt on est blen content
de dlsoser des structures, uutrement dlt de ne se coltlner qu'un seul tubleuu...
Structure 8ottln Nom en Caractre * zc
Prenom en Caractre *
1el en caractre * c
Mull en Caractre * zc
Iin Structure
1ableau Mesotes() en 8ottin
variables Mlnl en 8ottin
variables l, j en Numrique
Debut
Cn recole l'lntegrullte de "Adresses" duns MesPotes...
Ouvrir "Adresse.txt" sur pour Lecture
l
1antque Non LCl()
l l
Redim MesPotes(l)
LireIichier , MesPotes(l)
Iin1antque
Iermer
Cn trle le tubleuu selon l'ulgorlthme de trl ur lnsertlon dej etudle, en utlllsunt le
chum Nom de lu structure :
Pour j c l
Mlnl MesPotes(j)
osmlnl j
Pour k j l
Si MesPotes(k).Nom < Mlnl.Nom Alors
mlnl MesPotes(k)
osmlnl k
Iinsi
k suivant
MesPotes(osmlnl) MesPotes(j)
MesPotes(j) Mlnl
j suivant
Cn recole ensulte l'lntegrullte du tubleuu duns "Adresse"
Ouvrir "Adresse.txt" sur pour Lcriture
Pour j c l
LcrireIichier , MesPotes(j)
j suivant
Iermer
Iin





121
Lxercice o.)
8on, celull est tellement ldlot qu'on n'u meme us besoln de usser ur des tubleuux
en memolre vlve.
variable Llg en Caractre
Dbut
Ouvrir "1utu.txt" sur pour A[out
Ouvrir "1oto.txt' sur z pour Lecture
1antque Non LCl(z)
LireIichier z, Llg
LcrireIichier , Llg
Iin1antque
Iermer z
Ouvrir "1utu.txt' sur pour Lecture
1antque Non LCl()
LireIichier z, Llg
LcrireIichier , Llg
Iin1antque
Iermer
Iermer
Iin

Lxercice o.8
Cn vu ellmlner les muuvulses entrees des lu recole : sl l'enreglstrement ne resente
us un mull vullde, on l'lgnore, slnon on le cole duns le tubleuu.
Structure 8ottln
Nom en Caractre * zc
Prenom en Caractre *
1el en caractre * c
Mull en Caractre * zc
Iin Structure
1ableau Mesotes() en 8ottin
variable MonPote en 8ottin
variables l, j en Numrique
Debut
Cn recole "Adresses" duns MesPotes en testunt le mull...
Ouvrir "Adresse.txt" sur pour Lecture
l
1antque Non LCl()
LireIichier , MonPote
nb c
Pour l Len(MonPote.Mull)
Si Mld(MonPote.Mull, l, ) = "Q" Alors
nb nb
IinSi
l suivant
Si nb = Alors
l l
Redim MesPotes(l)

122
MesPotes(l) MonPote
IinSi
Iin1antque
Iermer
Cn recole ensulte l'lntegrullte de llc duns "Adresse"
Ouvrir "Adresse.txt" sur pour Lcriture
Pour j c l
LcrireIichier , MesPotes(j)
j Suivant
Iermer
Iin

Lxercice o.
Une fols de lus, le ussuge ur un tubleuu de structures est une strutegle commode.
Attentlon toutefols, comme ll s'uglt d'un flchler texte, tout est stocke en cuructere. ll
fuudru donc convertlr en numerlque les curucteres reresentunt les ventes, our
ouvolr effectuer les culculs demundes. Pour le trultement, ll y u deux osslbllltes. Solt
on recole le flchler l'ldentlque duns un remler tubleuu, et on trulte ensulte ce
tubleuu our fulre lu somme ur vendeur. Solt on fult le trultement dlrectement, des lu
lecture du flchler. C'est cette otlon qul est cholsle duns ce corrlge.
Structure vendeur
Nom en Caractre * zc
Montunt en Numrique
Iin Structure
1ableau Mesvendeurs() en vendeur
variables NomPrec * zc, Llg, Nom en caractre
variables Somme, vente en Numrique
Cn buluye le flchler en fulsunt nos uddltlons.
Les que le nom u chunge (on est usse uu vendeur sulvunt), on runge le resultut et on
remet tout zero
Debut
Ouvrir "ventes.txt' sur pour Lecture
l
Somme c
NomPrec ""
1antque Non LCl()
LireIichier , Llg
Nom Mld(Llg, , zc)
vente CNum(Mld(Llg, z, c)
Si Nom = NomPrec Alors
Somme Somme vente
Sinon
l l
Redim Mesvendeurs(l)
Mesvendeurs(l).Nom NomPrec
Mesvendeurs(l).Montunt Somme
Somme c
NomPrec Nom

123
IinSi
Iin1antque
Lt n'oubllons us un etlt tour de lus our le dernler de ces messleurs.
l l
Redim Mesvendeurs(l)
Mesvendeurs(l).Nom NomPrec
Mesvendeurs(l).Montunt Somme
Iermer
Pour termlner, on ufflche le tubleuu l'ecrun
Pour j c l
Lcrire Mesvendeurs(j)
j suivant
Iin



124














PARTE 11















123
PROCEDURE8 ET FONCTON8
L'njormatque semble encore cnercner la recette mracle qu ermettra aux gens d'ecrre des
rogrammes corrects sans avor rejlecnr. Au leu de cela, nous devons arendre aux gens comment
rejlecnr Anonyme
1. FONCTON8 PER8ONNAL8EE8

1.1 De quoi s'agit-il ?
Une ullcutlon, surtout sl elle est longue, u toutes les chunces de devolr roceder uux memes
trultements, ou des trultements slmllulres, lusleurs endrolts de son deroulement. Pur exemle, lu
sulsle d'une reonse ur oul ou ur non (et le contrle qu'elle lmllque), euvent etre reetes dlx
fols des moments dlfferents de lu meme ullcutlon, our dlx questlons dlfferentes.
Lu munlere lu lus evldente, muls uussl lu molns hublle, de rogrummer ce genre de choses, c'est
blen entendu de reeter le code corresondunt uutunt de fols que necessulre. Auremment, on ne
se cusse us lu tete : quund ll fuut que lu muchlne lnterroge l'utlllsuteur, on recole les llgnes de
codes voulues en ne chungeunt que le necessulre, et roule Ruoul. Muls en rocedunt de cette
munlere, lu lre qul solt, on se reure des lendemulns qul dechuntent...
L'ubord, urce que sl lu structure d'un rogrumme ecrlt de cette munlere eut uruitre slmle,
elle est en reullte lnutllement lourdlngue. Llle contlent des reetltlons, et our eu que le
rogrumme solt joufflu, ll eut devenlr urfultement llllslble. Cr, le fult d'etre fucllement modlfluble
donc llslble, y comrls et surtout ur ceux qul ne l'ont us ecrlt est un crltere essentlel our un
rogrumme lnformutlque ! Les que l'on rogrumme non our solmeme, muls duns le cudre d'une
orgunlsutlon (entrerlse ou uutre), cette necesslte se fult sentlr de munlere ulgue. L'lgnorer, c'est
donc forcement gruve.
Ln lus, un uutre nlveuu, une telle structure ose des roblemes conslderubles de mulntenunce :
cur en cus de modlflcutlon du code, ll vu fullolr truquer toutes les uurltlons lus ou molns
ldentlques de ce code our fulre convenublement lu modlflcutlon ! Lt sl l'on en oublle une, ututrus,
on u lulsse un bug.
ll fuut donc oter our une uutre strutegle, qul conslste seurer ce trultement du cors du
rogrumme et regrouer les lnstructlons qul le comosent en un module seure. ll ne resteru ulors
lus qu' ueler ce groue d'lnstructlons (qul n'exlste donc desormuls qu'en un exemlulre unlque)
chuque fols qu'on en u besoln. Alnsl, lu llslblllte est ussuree , le rogrumme devlent modulaire, et ll
sufflt de fulre une seule modlflcutlon uu bon endrolt, our que cette modlflcutlon renne effet duns
lu totullte de l'ullcutlon.
Le cors du rogrumme s'uelle ulors lu procdure principale, et ces groues d'lnstructlons
uuxquels on u recours s'uellent des fonctions et des sousprocdures (nous verrons un eu lus
loln lu dlfference entre ces deux termes).









126
Rerenons un exemle de questlon luquelle l'utlllsuteur dolt reondre ur oul ou ur non.
Mauvaise Structure :

...
Lcrire "Ltesvous murle ?"
Re ""
1antque Re <> "Cul" et Re <> "Non"
Lcrire "1uez Cul ou Non"
Lire Re
Iin1antque
...
Lcrire "Avezvous des enfunts ?"
Rez ""
1antque Rez <> "Cul" et Rez <> "Non"
Lcrire "1uez Cul ou Non"
Lire Rez
Iin1antque
...
Cn le volt blen, ll y u l une reetltlon quusl ldentlque du trultement uccomllr. A chuque fols, on
demunde une reonse ur Cul ou Non, uvec contrle de sulsle. Lu seule chose qul chunge, c'est le
nom de lu vurluble duns luquelle on runge lu reonse. Alors, ll dolt blen y uvolr un truc.
Lu solutlon, on vlent de le volr, conslste isoler les instructions demundunt une reonse ur Cul
ou Non, et ueler ces lnstructlons chuque fols que necessulre. Alnsl, on evlte les reetltlons
lnutlles, et on u decoue notre robleme en etlts morceuux uutonomes.
Nous ullons donc creer une fonction dont le rle seru de renvoyer lu reonse (oul ou non) de
l'utlllsuteur. Ce mot de "fonctlon", en l'occurrence, ne dolt us nous surrendre : nous uvons etudle
recedemment des fonctlons fournles uvec le lunguge, et nous uvons vu que le but d'une fonctlon
etult de renvoyer une vuleur. Lh blen, c'est exuctement lu meme chose lcl, suuf que c'est nous qul
ullons creer notre rore fonctlon, que nous uellerons ReCulNon :

Ionction ReCulNon() en caractre
1ruc ""
1antque 1ruc <> "Cul" et 1ruc <> "Non"
Lcrire "1uez Cul ou Non"
Lire 1ruc
Iin1antque
Renvoyer 1ruc
Iin
Cn remurque uu ussuge l'uurltlon d'un nouveuu motcle : Renvoyer, qul lndlque quelle vuleur
dolt rendre lu fonctlon lorsqu'elle est utlllsee ur le rogrumme. Cette vuleur renvoyee ur lu
fonctlon (lcl, lu vuleur de lu vurluble 1ruc) est en quelque sorte contenue duns le nom de lu fonctlon
lulmeme, exuctement comme c'etult le cus duns les fonctlons redeflnles.
Une fonctlon s'ecrlt toujours endehors de la procdure principale. Selon les lunguges, celu eut
rendre dlfferentes formes. Muls ce qu'll fuut comrendre, c'est que ces quelques llgnes de codes
sont en quelque sorte des sutellltes, qul exlstent en dehors du trultement lulmeme. Slmlement,
elles sont su dlsosltlon, et ll ourru y fulre uel chuque fols que necessulre. Sl l'on rerend notre
exemle, une fols notre fonctlon ReCulNon ecrlte, le rogrumme rlnclul comrendru les llgnes :

127
8onne structure :

...
Lcrire "Ltesvous murle ?"
Re ReCulNon()
...
Lcrire "Avezvous des enfunts ?"
Rez ReCulNon()
...
Lt le tour est joue ! Cn u ulnsl evlte les reetltlons lnutlles, et sl d'uventure, ll y uvult un bug duns
notre contrle de sulsle, ll sufflrult de fulre une seule correctlon duns lu fonctlon ReCulNon our
que ce bug solt ellmlne de toute l'ullcutlon. Llle n'est us belle, lu vle ?
1outefols, les lus suguces d'entre vous uuront remurque, tunt duns le tltre de lu fonctlon que
duns chucun des uels, lu resence de parenthses. Cellescl, des qu'on declure ou qu'on uelle
une fonctlon, sont obllgutolres. Lt sl vous uvez blen comrls tout ce qul recede, vous devez uvolr
une etlte ldee de ce qu'on vu ouvolr mettre deduns...

1.2 Passage d'arguments
Rerenons l'exemle qul recede et unulysonsle. Cn ecrlt un messuge l'ecrun, uls on uelle lu
fonctlon ReCulNon our oser une questlon , uls, un eu lus loln, on ecrlt un uutre messuge
l'ecrun, et on uelle de nouveuu lu fonctlon our oser lu meme questlon, etc. C'est une demurche
uccetuble, muls qul eut encore etre umelloree : ulsque uvunt chuque questlon, on dolt ecrlre un
messuge, uutunt que cette ecrlture du messuge flgure dlrectement duns lu fonctlon uelee. Celu
lmllque deux choses :
lorsqu'on uelle lu fonctlon, on dolt lul reclser quel messuge elle dolt ufflcher uvunt de llre
lu reonse
lu fonctlon dolt etre revenue qu'elle recevru un messuge, et etre cuuble de le recuerer
our l'ufflcher.
Ln lunguge ulgorlthmlque, on dlru que le message devient un argument (ou un paramtre) de la
fonction. Celu n'est certes us une decouverte our vous : nous uvons longuement utlllse les
urguments roos des fonctlons redeflnles. Lh blen, qultte construlre nos rores fonctlons,
nous ouvons donc construlre nos rores urguments. voll comment l'uffulre se resente...
Lu fonctlon seru dorenuvunt decluree comme sult :
Ionction ReCulNon(Msg en Caractre) en Caractre
Lcrire Msg
1ruc ""
1antque 1ruc <> "Cul" et 1ruc <> "Non"
Lcrire "1uez Cul ou Non"
Lire 1ruc
Iin1antque
Renvoyer 1ruc
Iin Ionction


128
ll y u donc mulntenunt entre les urentheses une vurluble, Msg, dont on reclse le tye, et qul
slgnule lu fonctlon qu'un urgument dolt lul etre envoye chuque uel. Quunt ces uels,
justement, lls se slmllfleront encore duns lu rocedure rlnclule, our devenlr :
...
Re ReCulNon("Ltesvous murle ?")
...
Rez ReCulNon("Avezvous des enfunts ?")
...
Lt voll le truvull.
Une remurque lmortunte : l, on n'u usse qu'un seul urgument en entree. Muls blen entendu, on
eut en usser uutunt qu'on veut, et creer des fonctlons uvec deux, trols, quutre, etc. urguments ,
Slmlement, ll fuut evlter d'etre gourmunds, et ll sufflt de usser ce dont on en u besoln, nl lus, nl
molns !
Luns le cus que l'on vlent de volr, le ussuge d'un urgument lu fonctlon etult elegunt, muls us
lndlsensuble. Lu reuve, celu murchult dej tres blen uvec lu remlere verslon. Muls on eut
lmuglner des sltuutlons ou ll fuut ubsolument concevolr lu fonctlon de sorte qu'on dolve lul
trunsmettre un certuln nombre d'urguments sl l'on veut qu'elle ulsse remllr su tche. Prenons, ur
exemle, toutes les fonctlons qul vont effectuer des culculs. Que ceuxcl solent slmles ou
comllques, ll vu blen fullolr envoyer lu fonctlon les vuleurs grce uuxquelles elle seru cense
rodulre son resultut (ensez tout betement une fonctlon sur le modele d'Lxcel, telle que celle qul
dolt culculer une somme ou une moyenne). C'est egulement vrul des fonctlons qul trulteront des
chuines de curucteres. 8ref, duns des cus, lorsqu'on creeru une fonctlon, cellecl devru
comorter des urguments.

1.3 Deux mots sur l'analyse fonctionnelle
Comme souvent en ulgorlthmlque, sl l'on s'en tlent lu munlere dont murche l'outll, tout celu
n'est en reullte us tres comllque. Les fonctlons ersonnullsees se dedulsent tres loglquement de lu
munlere nous nous uvons dej exerlmente les fonctlons redeflnles.
Le lus dlfflclle, muls uussl le lus lmortunt, c'est d'ucquerlr le reflexe de constituer
systmatiquement les fonctions adquates quand on doit traiter un problme donn, et de flulrer lu
bonne munlere de decouer son ulgorlthme en dlfferentes fonctlons our le rendre leger, llslble et
erformunt.
Cette urtle de lu reflexlon s'uelle d'ullleurs l'analyse fonctionnelle d'un robleme, et c'est
toujours ur elle qu'll fuut commencer : en gros, duns un remler tems, on decoue le trultement en
modules (ulgorlthmlque fonctlonnelle), et duns un deuxleme tems, on ecrlt chuque module
(ulgorlthmlque clusslque). Ceendunt, uvunt d'en venlr l, ll nous fuut decouvrlr deux uutres outlls,
qul rennent le reluls l ou les fonctlons devlennent lncuubles de nous ulder.

2. 8OU8-PROCEDURE8

2.1 Gnralits
Les fonctlons, c'est blen, muls duns certulns cus, u ne nous rend guere servlce.
ll eut en effet urrlver que duns un rogrumme, on ult reullser des tches reetltlves, muls que
ces tches n'ulent us our rle de generer une vuleur urtlcullere, ou qu'elles ulent our rle d'en
generer lus d'une lu fols. vous ne voyez us de quol je veux urler ? Prenons deux exemles.

129
Premler exemle. lmuglnons qu'uu cours de mon ullcutlon, j'ule lusleurs fols besoln d'effucer
l'ecrun et de reufflcher un bldule comme un etlt logo en huut guuche. Cn ourrult se dlre qu'll fuut
creer une fonctlon our fulre celu. Muls quelle serult lu vuleur renvoyee ur lu fonctlon ? Aucune !
Lffucer l'ecrun, ce n'est us rodulre un resultut stockuble duns une vurluble, et ufflcher un logo non
lus. voll donc une sltuutlon ou j'ul besoln de reeter du code, muls ou ce code n'u us comme rle
de rodulre une vuleur.
Leuxleme exemle. Au cours de mon ullcutlon, je dols lusleurs fols fulre sulslr un tubleuu
d'entlers (muls chuque fols, un tubleuu dlfferent). L encore, on serult tente d'effectuer toutes ces
sulsles de tubleuux duns une seule fonctlon. Muls robleme, une fonctlon ne eut renvoyer qu'une
seule vuleur lu fols. Llle ne eut donc renvoyer un tubleuu, qul est une serle de vuleurs dlstlnctes.
Alors, duns ces deux cus, fuute de ouvolr trulter l'uffulre ur une fonctlon, devruton en rester uu
code reetltlf dont nous venons de denoncer sl vlgoureusement les fulblesses ? Mmmmmh ? vous
vous doutez blen que non. Eeureusement, tout est revu, ll y u une solutlon. Lt cellecl conslste
utlllser des sousprocdures.
Ln fult, les fonctions que nous uvons vues ne sont finalement qu'un cas particulier des sous
procdures que nous ullons volr : celui o doit tre renvoy vers la procdure appelante une valeur
et une seule. Luns tous les uutres cus (celul ou on ne renvole uucune vuleur, comme celul ou en en
renvole lusleurs), ll fuut donc uvolr recours non lu forme urtlcullere et slmllflee (lu fonctlon),
muls lu forme generule (lu sousrocedure).
Purlons donc de ce qul est commun uux sousrocedures et uux fonctlons, muls uussl de ce qul les
dlfferencle. volcl comment se resente une sousrocedure :
Procdure 8ldule( ... )
...
Iin Procdure
Luns lu rocedure rlnclule, l'uel lu sousrocedure 8ldule devlent quunt lul :
Appeler 8ldule(...)
Ltubllssons un remler etut des lleux.
Alors qu'une fonctlon se curucterlsult ur les motscles Ionction ... Iin Ionction, une sous
rocedure est ldentlflee ur les motscles Procdure ... Iin Procdure. Cul, je suls, c'est un
eu trlvlul comme remurque, muls, bon, on ne sult jumuls.
Lorsqu'une fonctlon etult uelee, su vuleur (retournee) etult toujours uffectee une vurluble
(ou lntegree duns le culcul d'une exresslon). L'uel une rocedure, lul, est uu contrulre
toujours une instruction autonome. "Lxecute lu rocedure 8ldule" est un ordre qul se sufflt
lulmeme.
1oute fonctlon devult, our cette rulson, comorter l'lnstructlon "Renvoyer". Pour lu meme
rulson, l'instruction "Renvoyer" n'est [amais utilise dans une sousprocdure. Lu fonctlon
est une vuleur culculee, qul renvole son resultut vers lu rocedure rlnclule. Lu sous
rocedure, elle, est un trultement , elle ne "vuut" rlen.
Meme une fols qu'on u blen comrls les trols remlers olnts, on n'est us comletement uu
bout de nos elnes.

2.2 Le problme des arguments
Ln effet, ll nous reste exumlner ce qul eut blen se trouver duns les urentheses, lu luce des
olnts de susenslon, uussl blen duns lu declurutlon de lu sousrocedure que duns l'uel. vous vous
en doutez blen : c'est l que vont se trouver les outlls qul vont ermettre l'echunge d'lnformutlons
entre lu rocedure rlnclule et lu sousrocedure (en fult, cette dernlere hruse est tro restrlctlve :

130
mleux vuudrult dlre : entre lu rocedure uelunte et lu rocedure uelee. Cur une sousrocedure
eut tres blen en ueler ellememe une uutre ufln de ouvolr uccomllr su tche)
Le meme qu'uvec les fonctlons, les vuleurs qul clrculent deuls lu rocedure (ou lu fonctlon)
uelunte vers lu sousrocedure uelee se nomment des arguments, ou des paramtres en entre
de lu sousrocedure. Comme on le volt, qu'll s'uglsse des sousrocedure ou des fonctlons, ces
choses jouunt exuctement le meme rle (trunsmettre une lnformutlon deuls le code donneur
d'ordres jusqu'uu code soustrultunt), elle ortent egulement le meme nom. Unlque etlte
dlfference, on u reclse cette fols qu'll s'uglssult d'urguments, ou de urumetres, en entre. Pourquol
donc ?
1out slmlement urce que que duns une sousrocedure, on eut etre umene voulolr renvoyer
des resultuts vers le rogrumme rlnclul , or, l, lu dlfference des fonctlons, rlen n'est revu : lu
sousrocedure, en tunt que telle, ne "renvole" rlen du tout (comme on vlent de le volr, elle est
d'ullleurs deourvue de l'lnstructlon "renvoyer"). Ces resultuts que lu sousrocedure dolt
trunsmettre lu rocedure uelunte devront donc eux uussl etre vehlcules ur des urumetres.
Muls cette fols, ll s'uglru de urumetres fonctlonnunt duns l'uutre sens (du soustrultunt vers le
donneur d'ordres) : on les uelleru donc des paramtres en sortie.
Cecl nous ermet de reformuler en d'uutres termes lu verlte fondumentule urlse un eu lus
huut : toute sousprocdure possdant un et un seul paramtre en sortie peut galement tre crite
sous forme d'une fonction (et entre nous, c'est une formulutlon referuble cur un eu lus fuclle
comrendre et donc retenlr).
'usque l, u vu ? Sl oul, renez un cuchet d'uslrlne et oursulvez lu lecture. Sl non, renez un
cuchet d'uslrlne et recommencez deuls le debut. Lt duns les deux cus, n'oubllez us le grund verre
d'euu our fulre usser l'uslrlne.
ll nous reste un detull exumlner, detull qul comme vous vous en doutez blen, u une certulne
lmortunce : comment fulton our fulre comrendre un lunguge quels sont les urumetres qul
dolvent fonctlonner en entree et quels sont ceux qul dolvent fonctlonner en sortle...

2.3 Comment a marche tout a ?
Ln fult, sl je dls qu'un urumetre est "en entree" ou "en sortle", j'enonce quelque chose roos
de son rle duns le rogrumme. 'e dls ce que je souhulte qu'll fusse, lu munlere dont je veux qu'll se
comorte. Muls les rogrummes euxmemes n'ont cure de mes deslrs, et ce n'est us cette
clusslflcutlon qu'lls udotent. C'est toute lu dlfference entre dlre qu'une rlse electrlque sert
bruncher un rusolr ou une cufetlere (ce qul curucterlse son rle), et dlre qu'elle est en zzc v ou en c
v (ce qul curucterlse son tye technlque, et qul est l'lnformutlon qul lnteresse l'electrlclen). A l'lmuge
des electrlclens, les lunguges se contreflchent de suvolr quel seru le rle (entree ou sortle) d'un
urumetre. Ce qu'lls exlgent, c'est de connuitre leur voltuge... urdon, le mode de passage de ces
urumetres. ll n'en exlste que deux :
le ussuge par valeur
le ussuge par rfrence
...voyons de lus res de quol ll s'uglt.
Rerenons l'exemle que nous uvons dej utlllse lus huut, celul de notre fonctlon ReCulNon.
Comme nous l'uvons vu, rlen ne nous emeche de reecrlre cette fonctlon sous lu forme d'une
rocedure (ulsqu'une fonctlon n'est qu'un cus urtlculler de sousrocedure). Nous lulsserons our
l"lnstunt de cte lu questlon de suvolr comment renvoyer lu reonse (contenue duns lu vurluble 1ruc)
vers le rogrumme rlnclul.

131
Ln revunche, nous ullons declurer que Msg est un urumetre dont lu trunsmlsslon dolt se fulre ur
vuleur. Celu donneru lu chose sulvunte :
Procdure ReCulNon(Msg en Caractre par valeur)
Lcrire Msg
1ruc ""
1antque 1ruc <> "Cul" et 1ruc <> "Non"
Lcrire "1uez Cul ou Non"
Lire 1ruc
Iin1antque
??? comment transmettre 1ruc la rocedure aelante ???
Iin Procdure
Quunt l'uel cette sousrocedure, ll ourru rendre ur exemle cette forme :
M "Ltesvous murle ?"
Aeler ReCulNon(M)
Que vutll se usser ?
Lorsque le rogrumme rlnclul urrlve sur lu remlere llgne, ll uffecte lu vurluble M uvec le llbelle
"Ltesvous murle". Lu llgne sulvunte declenche l'executlon de lu sousrocedure. Cellecl cree
uussltt une vurluble Msg. Cellecl uyunt ete decluree comme un urumetre usse par valeur, Msg vu
etre uffecte uvec le meme contenu que M. Celu slgnlfle que Msg est dornavant une copie de M. Les
lnformutlons qul etulent contenues duns M ont ete lntegrulement recolees (en double) duns Msg.
Cette cole subslsteru tout uu long de l'executlon de lu sousrocedure ReCulNon et seru detrulte
lu fln de cellecl.
Une consequence essentlelle de tout celu est que sl d'uventure lu sousrocedure ReCulNon
contenult une lnstructlon qul modlflult le contenu de lu vurluble Msg, celu n'uurult uucune esece de
reercusslon sur lu rocedure rlnclule en generul, et sur lu vurluble M en urtlculler. La sous
procdure ne travaillant que sur une copie de la variable qui a t fournie par le programme
principal, elle est incapable, mme si on le souhaitait, de modifier la valeur de celleci. Llt d'une
uutre munlere, duns une rocedure, un paramtre pass par valeur ne peut tre qu'un paramtre en
entre.
C'est en meme tems une llmlte (uggruvee ur le fult que les lnformutlons ulnsl recolees
occuent dorenuvunt deux fols lus de luce en memolre) et une securlte : quund on trunsmet un
urumetre ur vuleur, on est sr et certuln que meme en cus de bug duns lu sousrocedure, lu vuleur
de lu vurluble trunsmlse ne seru jumuls modlflee ur erreur (c'estdlre ecrusee) duns le rogrumme
rlnclul.
Admettons resent que nous declurlons un second urumetre, 1ruc, en reclsunt cette fols qu'll
seru trunsmls par rfrence. Lt udotons our lu rocedure l'ecrlture sulvunte :
Procdure ReCulNon(Msg en Caractre par valeur, 1ruc en Caractre par rfrence)
Lcrire Msg
1ruc ""
1antque 1ruc <> "Cul" et 1ruc <> "Non"
Lcrire "1uez Cul ou Non"
Lire 1ruc
Iin1antque
Iin Ionction



132
L'uel lu sousrocedure devlendrult ur exemle :
M "Ltesvous murle ?"
Aeler ReCulNon(M, 1)
Lcrlre "votre reonse est ", 1
Leluutons le mecunlsme de cette nouvelle ecrlture. Ln ce qul concerne lu remlere llgne, celle
qul uffecte lu vurluble M, rlen de nouveuu sous le solell. 1outefols, l'uel lu sousrocedure
rovoque deux effets tres dlfferents. Comme on l'u dej dlt, lu vurluble Msg est creee et
lmmedlutement uffectee uvec une cole du contenu de M, ulsqu'on u exlge un ussuge ur vuleur.
Muls en ce qul concerne 1ruc, ll en vu tout uutrement. Le fult qu'll s'uglsse cette fols d'un ussuge ur
reference fult que la variable 1ruc ne contiendra pas la valeur de 1, mais son adresse, c'estdire sa
rfrence.
Les lors, toute modification de 1ruc sera immdiatement redirige, par ricochet en quelque
sorte, sur 1. 1ruc n'est us une vurluble ordlnulre : elle ne contlent us de vuleur, muls seulement lu
reference une vuleur, qul elle, se trouve ullleurs (duns lu vurluble 1). ll s'uglt donc d'un genre de
vurluble comletement nouveuu, et dlfferent de ce que nous uvons vu jusque l. Ce tye de vurluble
orte un nom : on l'uelle un pointeur. 1ous les urumetres usses ur reference sont des
olnteurs, muls les olnteurs ne se llmltent us uux urumetres usses ur reference (meme sl ce
sont les seuls que nous verrons duns le cudre de ce cours). ll fuut blen comrendre que ce tye de
vurluble etrunge est gere dlrectement ur les lunguges : partir du moment o une variable est
considre comme un pointeur, toute affectation de cette variable se traduit automatiquement par
la modification de la variable sur laquelle elle pointe.
Pusser un urumetre ur reference, celu resente donc deux uvuntuges. Lt d'une, on gugne en
occuutlon de luce memolre, ulsque le urumetre en questlon ne recole us les lnformutlons
envoyees ur lu rocedure uelunte, muls qu'll se contente d'en noter l'udresse. Lt de deux, cela
permet d'utiliser ce paramtre tant en lecture (en entre) qu'en criture (en sortie), ulsque toute
modlflcutlon de lu vuleur du urumetre uuru our effet de modlfler lu vurluble corresondunte duns
lu rocedure uelunte.
Nous ouvons resumer tout celu ur un etlt tubleuu :

passage par valeur passage par rfrence
utilisation en entre oul oul
utilisation en sortie non oul

Muls ulors, demunderezvous duns un elun de touchunte nuivete, sl le ussuge ur reference
resente les deux uvuntuges resentes ll y u un lnstunt, ourquol ne us s'en servlr
systemutlquement ? Pourquol s'embeter uvec les ussuges ur vuleur, qul non seulement utlllsent de
lu luce en memolre, muls qul de surcroit nous lnterdlsent d'utlllser lu vurluble comme un urumetre
en sortle ?
Lh blen, justement, urce qu'on ne ourru us utlllser comme urumetre en sortle, et que cet
lnconvenlent se revele etre uussl, eventuellement, un uvuntuge. Llsons lu chose uutrement : c'est
une scurit. C'est lu guruntle que quel que solt le bug qul ourru uffecter lu sousrocedure, ce bug
ne vlendru jumuls mettre le foutolr duns les vurlubles du rogrumme rlnclul qu'elle ne dolt us
toucher. voll ourquol, lorsqu'on souhulte deflnlr un urumetre dont on sult qu'll fonctlonneru
excluslvement en entree, ll est suge de le verroulller, en quelque sorte, en le deflnlssunt comme
usse ur vuleur. Lt Lycee de versullles, ne seront deflnls comme usses ur reference que les
urumetres dont on u ubsolument besoln qu'lls solent utlllses en sortle.

133
3. VARABLE8 PUBLOUE8 ET PRVEE8
Resumons lu sltuutlon. Nous venons de volr que nous ouvlons decouer un long trultement
comortunt eventuellement des redondunces (notre ullcutlon) en dlfferents modules. Lt nous
uvons vu que les lnformutlons ouvulent etre trunsmlses entre ces modules selon deux modes :
sl le module uele est une fonctlon, ur le retour du rsultat
duns tous les cus, ur lu transmission de paramtres (que ces urumetres solent usses ur
vuleur ou ur reference)
Ln fult, ll exlste un trolsleme et dernler moyen d'echunger des lnformutlons entre dlfferentes
rocedures et fonctlons : c'est de ne us uvolr besoln de les echunger, en fulsunt en sorte que ces
rocedures et fonctlons urtugent lltterulement les memes vurlubles. Celu suose d'uvolr recours
des vurlubles urtlculleres, llslbles et utlllsubles ur n'lmorte quelle rocedure ou fonctlon de
l'ullcutlon.
Pur defuut, une vurluble est decluree uu seln d'une rocedure ou d'une fonctlon. Llle est donc
creee uvec cette rocedure, et dlsuruit uvec elle. Lurunt tout le tems de son exlstence, une telle
vurluble n'est vlslble que ur lu rocedure qul l'u vu nuitre. Sl je cree une vurluble 1oto duns une
rocedure 8ldule, et qu'en cours de route, mu rocedure 8ldule uelle une sousrocedure Muchln,
ll est hors de questlon que Muchln ulsse ucceder 1oto, ne serultce que our connuitre su vuleur
(et ne urlons us de lu modlfler). voll ourquol ces vurlubles ur defuut sont dltes prives, ou
locales.
Muls cte de celu, ll est osslble de creer des vurlubles qul certes, seront declurees duns une
rocedure, muls qul du moment ou elles exlsteront, seront des vurlubles communes toutes les
rocedures et fonctlons de l'ullcutlon. Avec de telles vurlubles, le robleme de lu trunsmlsslon des
vuleurs d'une rocedure (ou d'une fonctlon) l'uutre ne se ose meme lus : lu vurluble 1ruc,
exlstunt our toute l'ullcutlon, est uccesslble et modlfluble deuls n'lmorte quelle llgne de code
de cette ullcutlon. Plus besoln donc de lu trunsmettre ou de lu renvoyer. Une telle vurluble est
ulors dlte publique, ou globale.
Lu munlere dont lu declurutlon d'une vurluble ubllque dolt etre fultes est evldemment fonctlon
de chuque lunguge de rogrummutlon. Ln seudocode ulgorlthmlque, on ourru utlllser le motcle
Publique :
variable Publique 1oto en Numrique
Alors, ourquol ne us rendre toutes les vurlubles ubllques, et s'eurgner ulnsl de fustldleux
efforts our usser des urumetres ? C'est tres slmle, et c'est toujours lu meme chose : les variables
globales consomment normment de ressources en mmoire. Ln consequence, le rlncle qul dolt
reslder uu cholx entre vurlubles ubllques et rlvees dolt etre celul de l'conomie de moyens : on
ne declure comme ubllques que les vurlubles qul dolvent ubsolument l'etre. Lt chuque fols que
osslble, lorsqu'on cree une sousrocedure, on utlllse le ussuge de urumetres lutt que des
vurlubles ubllques.


4. PEUT-ON TOUT FARE ?
A cette questlon, lu reonse est blen evldemment : oul, on eut tout fulre. Muls c'est reclsement
lu rulson our luquelle on eut vlte en urrlver fulre uussl ubsolument n'lmorte quol.
N'lmorte quol, c'est quol ? C'est ur exemle, comme on vlent de le volr, mettre des vurlubles
globules urtout, sous retexte que c'est uutunt de urumetres qu'on n'uuru us usser.
Muls on eut lmuglner d'uutres utrocltes.

134
Pur exemle, une fonctlon, dont un des urumetres d'entree serult usse ur reference, et
modlfle ur lu fonctlon. Ce qul slgnlflerult que cette fonctlon rodulrult non us un, muls deux
resultuts. Autrement dlt, que sous des dehors de fonctlons, elle se comorterult en reullte comme
une sousrocedure.
Cu lnversement, on eut concevolr une rocedure qul modlflerult lu vuleur d'un urumetre (et
d'un seul) usse ur reference. ll s'uglrult l d'une rocedure qul en reullte, serult une fonctlon.
Quolque ce dernler exemle ne solt us d'une gruvlte drumutlque, ll urtlcle de lu meme loglque
conslstunt embroulller le code en fulsunt usser un outll our un uutre, uu lleu d'udoter lu
structure lu lus clulre et lu lus llslble osslble.
Lnfln, ll ne fuut us ecurter lu osslblllte de rogrummeurs urtlcullerement vlcleux, qul ur un
suvunt melunge de urumetres usses ur reference, de vurlubles globules, de rocedures et de
fonctlons mul cholsles, flnlrulent ur uccoucher d'un code ubsolument llloglque, llllslble, et duns
lequel lu chusse l'erreur releverult de l'exlolt.
1refle de lulsunterles : le rlncle qul dolt gulder tout rogrummeur est celul de lu solldlte et de lu
clurte du code. Une application bien programme est une application l'architecture claire, dont
les diffrents modules font ce qu'ils disent, disent ce qu'il font, et peuvent tre tests (ou modifis)
un par un sans perturber le reste de la construction. ll convlent donc :
. de limiter au minimum l'utilisation des variables globales. Cellescl dolvent etre
emloyees uvec nos celebres umls ltulourmenlens, c'estdlre uvec urclmonle et bon
esclent.
z. de regrouper sous forme de modules distincts tous les morceuux de code qul ossedent
une certulne unlte fonctlonnelle (rogrummutlon ur "blocs"). C'estdlre de fulre lu
chusse uux llgnes de codes redonduntes, ou quuslredonduntes.
. de fulre de ces modules des fonctions lorsqu'ils renvoient un rsultat unique, et des sous
procdures dans tous les autres cas (ce qul lmllque de ne [amais usser un urumetre
ur reference une fonctlon : solt on n'en u us besoln, solt on en u besoln, et ce n'est
ulors lus une fonctlon).
Resecter ces regles d'hyglene est lndlsensuble sl l'on veut qu'une ullcutlon ressemble uutre
chose qu'uu ululs du fucteur Chevul. Cur une urchltecture luquelle on ne comrend rlen, c'est suns
doute tres oetlque, muls ll y u des clrconstunces ou l'efflcuclte est referuble lu oesle. Lt, our
ceux qul en douterulent encore, lu rogrummutlon lnformutlque fult (helus ?) urtle de ces
clrconstunces.
5. ALGORTHME8 FONCTONNEL8
Pour clore ce chultre, volcl quelques mots sulementulres roos de lu structure generule
d'une ullcutlon. Comme on l'u dlt lusleurs rerlses, cellecl vu courumment etre formee d'une
rocedure rlnclule, et de fonctlons et de sousrocedures (qul vont uu besoln ellesmemes en
ueler d'uutres, etc.). L'exemle tylque est celul d'un menu, ou d'un sommulre, qul brunche sur
dlfferents trultements, donc dlfferentes sousrocedures.
L'algorithme fonctionnel de l'ullcutlon est le dcoupage etjou lu reprsentation graphique de
cette structure generule, uyunt comme objectlf de fulre comrendre d'un seul cou d'oll quelle
rocedure fult quol, et quelle rocedure uelle quelle uutre. L'ulgorlthme fonctlonnel est donc en
quelque sorte lu constructlon du squelette de l'ullcutlon. ll se sltue un nlveuu lus generul, lus
ubstrult, que l'ulgorlthme normul, qul lul, detullle us us les trultements effectues uu seln de
chuque rocedure.
Luns lu constructlon - et lu comrehenslon - d'une ullcutlon, les deux documents sont
lndlsensubles, et constltuent deux etues successlves de l'eluborutlon d'un rojet. Lu trolsleme - et
dernlere - etue, conslste ecrlre, our chuque rocedure et fonctlon, l'ulgorlthme detullle.

133

Exemple de ralisation d'un algorithme fonctionnel : Le Jeu du Pendu
vous connulssez tous ce jeu : l'utlllsuteur dolt devlner un mot cholsl uu husurd ur l'ordlnuteur, en
un mlnlmum d'essuls. Pour celu, ll roose des lettres de l'ulhubet. Sl lu lettre flgure duns le mot
trouver, elle s'ufflche. Sl elle n'y flgure us, le nombre des muuvulses reonses uugmente de . Au
bout de dlx muuvulses reonses, lu urtle est erdue.
Ce etlt jeu vu nous ermettre de mettre en rellef les trols etues de lu reullsutlon d'un
ulgorlthme un eu comlexe , blen entendu, on ourrult toujours lgnorer ces trols etues, et se
luncer comme un derute dlrectement duns lu gueule du lou, suvolr l'ecrlture de l'ulgorlthme
deflnltlf. Muls, suuf etre urtlcullerement doue, mleux vuut resecter le cunevus qul sult, cur les
dlfflcultes se resolvent mleux quund on les suuclssonne.

Etape 1 : le dictionnaire des donnes
Le but de cette etue est d'ldentlfler les lnformutlons qul seront necessulres uu trultement du
robleme, et de cholslr le tye de coduge qul seru le lus sutlsfulsunt our trulter ces lnformutlons.
C'est un moment essentlel de lu reflexlon, qu'll ne fuut surtout us rendre lu legere. Cr, neuf
rogrummeurs debutunts sur dlx bclent cette reflexlon, quund lls ne lu zuent us urement et
slmlement. Lu unltlon ne se fult generulement us uttendre longtems , l'ulgorlthme etunt btl sur
de muuvulses fondutlons, le rogrummeur se rend comte tout en l'ecrlvunt que le cholx de coduge
des lnformutlons, ur exemle, mene des lmusses. Lu reclltutlon est donc unle ur le fult qu'on
est obllge de tout rerendre deuls le debut, et qu'on u uu totul erdu blen duvuntuge de tems
qu'on en u cru en gugner.
Lonc, uvunt meme d'ecrlre quol que ce solt, les questlons qu'll fuut se oser sont les sulvuntes :
de quelles lnformutlons le rogrumme vutll uvolr besoln our venlr bout de su tche ?
our chucune de ces lnformutlons, quel est le mellleur coduge ? Autrement dlt, celul qul
suns guslller de lu luce memolre, ermettru d'ecrlre l'ulgorlthme le lus slmle ?
Lncore une fols, ll ne fuut us heslter usser du tems sur ces questlons, cur certulnes erreurs,
ou certulns oublls, se uyent cher ur lu sulte. Lt lnversement, le tems lnvestl ce nlveuu est
lurgement ruttrue uu moment du develoement rorement dlt.
Pour le jeu du endu, volcl lu llste des lnformutlons dont on vu uvolr besoln :
une llste de mots (sl l'on veut evlter que le rogrumme ne roose toujours le meme mot
trouver, ce qul rlsquerult de devenlr ussez ruldement lussunt.)
le mot devlner
lu lettre roosee ur le joueur chuque tour
le nombre uctuel de muuvulses reonses
et enfln, lust but not leust, l'ensemble des lettres dej trouvees ur le joueur. Cette
lnformutlon est cultule , le rogrumme en uuru besoln uu molns our deux choses : d'une
urt, our suvolr sl le mot entler u ete trouve. L'uutre urt, our ufflcher chuque tour
l'etut uctuel du mot (je ruelle qu' chuque tour, les lettres trouvees sont ufflchees en
clulr ur lu muchlne, les lettres restunt devlner etunt remlucees ur des tlrets).
celu, on ourrult ujouter une llste comrenunt l'ensemble des lettres dej roosees ur
le joueur, qu'elles solent correctes ou non , cecl ermettru d'lnterdlre uu joueur de
rooser nouveuu une lettre recedemment jouee.
Cette llste d'lnformutlons n'est eutetre us exhuustlve , nous uurons vrulsemblublement besoln
uu cours de l'ulgorlthme de quelques vurlubles sulementulres (des comteurs de boucles, des

136
vurlubles temorulres, etc.). Muls les lnformutlons essentlelles sont bel et blen l. Se ose
mulntenunt le robleme de cholslr le mode de coduge le lus fute. Sl, our certulnes lnformutlons, lu
questlon vu etre vlte reglee, our d'uutres, ll vu fullolr fulre des cholx (et sl osslble, des cholx
lntelllgents !). C'est urtl, mon klkl :
Pour lu llste des mots trouver, ll s'uglt d'un ensemble d'lnformutlons de tye
ulhunumerlque. Ces lnformutlons ourrulent fulre urtle du cors de lu rocedure
rlnclule, et etre ulnsl stockees en memolre vlve, sous lu forme d'un tubleuu de chuines.
Muls ce n'est certulnement us le lus judlcleux. 1oute cette luce occuee rlsque de
eser lourd lnutllement, cur ll n'y u uucun lnteret stocker l'ensemble des mots en
memolre vlve. Lt sl l'on souhulte enrlchlr lu llste des mots trouver, on seru obllge de
reecrlre des llgnes de rogrumme. Concluslon, lu llste des mots seru blen lus su luce
duns un flchler texte, duns lequel le rogrumme lru locher un seul mot, celul qu'll fuudru
trouver. Nous constltuerons donc un flchler texte, uele dlco.txt, duns lequel flgureru un
mot ur llgne (ur enreglstrement).
Le mot trouver, lul, ne ose uucun robleme : ll s'uglt d'une lnformutlon slmle de tye
chuine, qul ourru etre stocke duns une vurluble uelee mot, de tye cuructere.
Le meme, lu lettre roosee ur le joueur est une lnformutlon slmle de tye chuine, qul
seru stockee duns une vurluble uelee lettre, de tye cuructere.
Le nombre uctuel de muuvulses reonses est une lnformutlon qul ourru etre stockee
duns une vurluble numerlque de tye entler slmle uelee MovRe.
L'ensemble des lettres trouvees ur le joueur est tylquement une lnformutlon qul eut
fulre l'objet de lusleurs cholx de coduge , ruelons qu'uu moment de l'ufflchuge, nous
uurons besoln de suvolr our chuque lettre du mot devlner sl elle u ete trouvee ou non.
Une remlere osslblllte, lmmedlute, serult de dlsoser d'une chuine de curucteres
comrenunt l'ensemble des lettres recedemment trouvees. Cette solutlon est loln d'etre
muuvulse, et on ourrult tout fult l'udoter. Muls lcl, on feru une uutre cholx, ne serultce
que our vurler les lulslrs : on vu se doter d'un tubleuu de booleens, comtunt uutunt
d'emlucements qu'll y u de lettres duns le mot devlner. Chuque emlucement du
tubleuu corresondru une lettre du mot trouver, et lndlqueru ur su vuleur sl lu lettre u
ete decouverte ou non (fuux, lu lettre n'u us ete devlnee, vrul, elle l'u ete). Lu
corresondunce entre les elements du tubleuu et le mot devlner etunt lmmedlute, lu
rogrummutlon de nos boucles en seru fucllltee. Nous butlserons notre tubleuu de
booleens du joll nom de verlf .
Lnfln, l'ensemble des lettres roosees seru stockee suns soucls duns une chuine de
curucteres nommee Proos.
Nous uvons mulntenunt sufflsumment gumberge our dresser le tubleuu flnul de cette etue,
suvolr le dlctlonnulre des donnees rorement dlt :

Nom Type Description
Llco.txt llchler texte Llste des mots devlner
Mot Cuructere Mot devlner
Lettre Cuructere Lettre roosee
MovRe Lntler Nombre de muuvulses reonses
verlf() 1ubleuu de 8ooleens
Lettres recedemment devlnees, en
corresondunce uvec Mot
Proos Cuructere Llste des lettres roosees

137
Etape 2 : l'algorithme fonctionnel
Cn eut resent usser lu reullsutlon de l'ulgorlthme fonctlonnel, c'estdlre uu decouuge de
notre robleme en blocs loglques. Le but de lu munouvre est multlle :
fuclllter lu reullsutlon de l'ulgorlthme deflnltlf en le trononnunt en lus etlts morceuux.
Cugner du tems et de lu legerete en lsolunt uu mleux les sousrocedures et fonctlons qul
merltent de l'etre. Lvlter ulnsl eventuellement des reetltlons multlles de code uu cours
du rogrumme, reetltlons qul ne dlfferent les unes des uutres qu' quelques vurluntes
res.
Permettre une dlvlslon du truvull entre rogrummeurs, chucun se voyunt usslgner lu
rogrummutlon de sousrocedures ou de fonctlons seclflques (cet usect est essentlel
des qu'on qultte le brlcoluge ersonnel our entrer duns le monde de lu rogrummutlon
rofesslonnelle, donc collectlve).
Luns notre cus recls, un remler bloc se detuche : ll s'uglt de ce qu'on ourrult ueler les
reurutlfs du jeu (cholx du mot devlner). Pulsque le but est de renvoyer une vuleur et une seule (le
mot cholsl ur lu muchlne), nous ouvons confler cette tche une fonctlon seclullsee CholxLuMot
( noter que ce decouuge est un cholx de llslblllte, et us une necesslte ubsolue , on ourrult tout
uussl blen fulre celu duns lu rocedure rlnclule).
Cette rocedure rlnclule, justement, vu ensulte uvolr necessulrement lu forme d'une boucle
1untque : en effet , tunt que lu urtle n'est us flnle, on recommence lu serle des trultements qul
reresentent un tour de jeu. Muls comment, justement, suvolr sl lu urtle est flnle ? Llle eut se
termlner solt urce que le nombre de muuvulses reonses u uttelnt c, solt urce que toutes les
lettres du mot ont ete trouvees. Le mleux seru donc de confler l'exumen de tout celu une fonctlon
seclullsee, Purtlellnle, qul renverru une vuleur numerlque (o pour signifier que la partie est en
cours, en cas de victoire, z en cas de dfaite).
Passons maintenant au tour de [eu.
Lu remlere chose fulre, c'est d'ufflcher l'ecrun l'etut uctuel du mot devlner : un melunge de
lettres en clulr (celles qul ont ete trouvees) et de tlrets (corresondunt uux lettres non encore
trouvees). 1out cecl ourru etre rls en churge ur une sousrocedure seclullsee, uelee
AfflchugeMot. Quunt l'lnltlullsutlon des dlfferentes vurlubles, elle ourru etre lucee, de munlere
clusslque, duns lu rocedure rlnclule ellememe.
Lnsulte, on dolt roceder lu sulsle de lu lettre roosee, en velllunt effectuer les contrles de
sulsle udequuts. L encore, une fonctlon seclullsee, SulsleLettre, seru toute lndlquee.
Une fols lu roosltlon fulte, ll convlent de verlfler sl elle corresond ou non une lettre devlner,
et en tlrer les consequences. Cecl seru fult ur une sousrocedure uelee verlfLettre.
Lnfln, une fols lu urtle termlnee, on dolt ufflcher les concluslons l'ecrun , on declure cet effet
une dernlere rocedure, llnLePurtle.
Nous ouvons, duns un ulgorlthme fonctlonnel comlet, dresser un tubleuu des dlfferentes
rocedures et fonctlons, exuctement comme nous l'uvons fult juste uvunt our les donnees (on
s'eurgneru cette elne duns le cus resent, ce que nous uvons ecrlt cldessus sufflsunt umlement.
Muls duns le cus d'une grosse ullcutlon, un tel truvull serult necessulre et nous eurgnerult blen des
soucls).
Cn eut uussl schemutlser le fonctlonnement de notre ullcutlon sous forme de blocs, chucun
des blocs reresentunt une fonctlon ou une sousrocedure :
A ce stude, l'unulyse dlte fonctlonnelle est termlnee. Les fondutlons (solldes, eseronsle) sont
osees our flnullser l'ullcutlon.


138
Etape 3 : Algorithmes dtaills
Normulement, ll ne nous reste lus qu' trulter chuque rocedure lsolement. Cn commenceru ur
les sousrocedures et fonctlons, our termlner ur lu reductlon de lu rocedure rlnclule.
A11LN1ION ! les llens cldessous menent dlrectement uux corrlges !
lonctlon CholxLuMot
lonctlon Purtlellnle
Procedure AfflchugeMot
Procedure SulsleLettre
Procedure verlfLettre
Procedure Lllogue
Procedure Prlnclule



139
C CC CORRGE8 DE8 ORRGE8 DE8 ORRGE8 DE8 ORRGE8 DE8 E EE EXERCCE8 XERCCE8 XERCCE8 XERCCE8
Lxercice .
voll un debut en douceur...
Ionction Sum(u, b, c, d, e)
Renvoyer u b c d e
IinIonction

Lxercice .z
Ionction Nbvoyelles(Mot en Cuructere)
variables l, nb en Numrique
Pour l Len(Mot)
Si 1rouve("uelouy", Mld(Mot, l, )) <> c Alors
nb nb
IinSi
l suivant
Renvoyer nb
IinIonction

Lxercice .
Ionction 1rouve(u, b)
variable l en Numrique
Dbut
l
1antque l < Len(u) Len(b) et b <> Mld(u, l, Len(b))
l l
Iin1antque
Si b <> Mld(u, l, Len(b)) Alors
Renvoyer c
Sinon
Renvoyer l
IinIonction

Ionction ChoixDuMot
Quelques exllcutlons : on llt lntegrulement le flchler contenunt lu llste des mots. Au
fur et mesure, on runge ces mots duns le tubleuu Llste, qul est redlmenslonne
chuque tour de boucle. Un tlruge uleutolre lntervlent ulors, qul ermet de renvoyer un
des mots uu husurd.
Ionction CholxLuMot()
1ableau Llste() en Caractre
variables Nbmots, Cholsl en Numrique
Ouvrir "Llco.txt" sur en Lecture
Nbmots
1antque Non LCl()
Nbmots Nbmots
Redim Llste(Nbmots)

140
LireIichier , Llste(Nbmots)
Iin1antque
Iermer
Cholsl Lnt(Aleu() * Nbmots)
Renvoyer Llste(Cholsl)
IinIonction

Ionction PartieIinie
Cn commence ur verlfler le nombre de muuvulses reonses, motlf de defulte. Lnsulte,
on regurde sl lu urtle est gugnee, trultement qul s'uurente une gestlon de llug : ll
sufflt que l'une des lettres du mot devlner n'ult us ete trouvee our que lu urtle ne
solt us gugnee. Lu fonctlon uuru besoln, comme urguments, du tubleuu verlf, de son
nombre d'elements et du nombre uctuel de muuvulses reonses.
Ionction Purtlellnle(t() en 8ooleen, n, x en Numrique)
variables l, lssue en Numerique
Si x = c Alors
Renvoyer z
Sinon
lssue
Pour l c n
Si Non t(l) Alors
lssue c
IinSi
l suivant
Renvoyer lssue
IinSi
IinIonction

Procdure AffichageMot
Une meme boucle nous ermet de conslderer une ur une les lettres du mot trouver
(vurluble m), et de suvolr sl ces lettres ont ete ldentlflees ou non.
Procdure AfflchugeMot(m en Caractre par valeur, t() en 8oolen par valeur)
variable Aff en Caractere
variable l en Numerique
Aff ""
Pour l c len(m)
Si Non t(l) Alors
Aff Aff & ""
Sinon
Aff Aff & Mld(mot, l , )
IinSi
l suivant
Lcrire Aff
IinProcdure
Remarque : cette rocedure uurult egulement u etre ecrlte sous lu forme d'une
fonctlon, qul uurult renvoye vers lu rocedure rlnclule lu chuine de curucteres Aff.
L'ecrlture l'ecrun de cette chuine Aff uurult ulors ete fulte ur lu rocedure rlnclule.
voll donc une sltuutlon ou on eut ussez lndlfferemment oter our une sous
rocedure ou our une fonctlon.


141
Procdure SaisieLettre
Cn verlfle que le slgne entre (urumetre b) est blen une seule lettre, qul ne flgure us
duns les roosltlons recedemment effectuees (urumetre u)
Procdure SulsleLettre(u, b en Caractre par Rfrence)
variable Correct en 8ooleen
variable Alhu en Caractere
Dbut
Correct luux
Alhu "A8CLLlCEl'lLMNCPQRS1UvvY2"
1antque Non Correct
Lcrire "Lntrez lu lettre roosee : "
Lire b
Si 1rouve(ulhu, b) = c Cu len(b) <> Alors
Lcrire "Ce n'est us une lettre !"
SinonSi 1rouve(u, b) <> c Alors
Lcrire "Lettre dej roosee !"
Sinon
Correct vrul
u u & b
IinSi
Iin1antque
Iin Procdure

Procdure verifLettre
Les urumetres se multlllent. L est lu lettre roosee, t() le tubleuu de booleens, M
le mot trouver et N le nombre de muuvulses roosltlons. ll n'y u us de dlfflculte
mujeure duns cette rocedure : on exumlne les lettres de M une une, et on en tlre les
consequences. Le flug sert suvolr sl lu lettre roosee fulsult ou non urtle du mot
devlner.
Procdure verlfLettre(L, M en Caractre par valeur, t() en 8oolen par Rfrence, N
en Numrique par Rfrence)
variable Correct en 8ooleen
Dbut
Correct luux
Pour l Len(M)
Si Mld(M, l, ) = L Alors
Correct vrul
1(l ) vrul
IinSi
Iin1antque
Si Non Correct Alors
N N
IinSi
Iin Procdure




142
Procdure Lpilogue
Procdure Lllogue(M en Caractre par valeur, N en Numrique par valeur)
Dbut
Si N = z Alors
Lcrire "Une muuvulse roosltlon de tro. Purtle termlnee !"
Lcrire "Le mot devlner etult : ", M
Sinon
Lcrire "8ruvo ! vous uvez trouve !"
IinSi
Iin Procdure

Procdure Principale
Procdure Prlnclule
variables Lettre, Mot, Proos en Caractere
variables g l, MovRe en Numrique
1ableau verlf() en 8ooleen
Dbut
Mot CholxLuMot()
Proos ""
Lettre ""
Redim verlf(Len(Mot))
Pour l c Len(Mot)
verlf(l) luux
l suivant
k c
1antque k = c
AfflchugeMot(Mot, verlf())
SulsleLettre(Proos, Lettre)
verlfLettre(Lettre, Mot, verlf(), MovRe)
k Purtlellnle(verlf(), len(mot), MovRe)
Iin1antque
Lllogue(Mot, k)
Iin



143














PARTE 12


144
NOTON8 COMPLEMENTARE8
Le danger, avec les ordnateurs, ce n'est as tellement qu'ls devennent auss ntellgents que les
nommes, mas c'est que nous tombons d'accord avec eux our les rencontrer mcnemn 8ernurd
Avlshul

Une fols n'est us coutume, ce chultre ne seru l'objet d'uucun exerclce. Celu ne veut us dlre our
uutunt que ce qul s'y trouve n'est us lnteressunt.
Non muls des fols.

1. PROGRAMMATON 8TRUCTUREE
Petlt retour sur une notlon tres ruldement survolee lus huut : celle de rogrummutlon
structuree . Ln fult, nous uvons jusqu' resent, tels Monsleur 'ourduln, fult de lu rogrummutlon
structuree suns le suvolr. Aussl, lutt qu'exllquer longuement en quol celu conslste, je refere
rendre le robleme ur l'uutre bout : en quol celu ne conslste us.
Luns certulns lunguges (hlstorlquement, ce sont souvent des lunguges unclens), les llgnes de
rogrummutlon ortent des numeros. Lt les llgnes sont executees ur lu muchlne duns l'ordre de ces
numeros. 'usqu'lcl, en sol, us de robleme. Muls l'ustuce est que tous ces lunguges, ll exlste une
lnstructlon de brunchement, notee aller en seudocode, lnstructlon qul envole dlrectement le
rogrumme lu llgne seclflee. lnversement, ce tye de lunguge ne comorte us d'lnstructlons
comme lln1untQue, ou llnSl, qul ferment un bloc.
Prenons l'exemle d'une structure Sl . Alors . Slnon
Programmation Structure
Si condltlon Alors
lnstructlons
Sinon
lnstructlons z
IinSi



Programmation non structure
ccc Si condltlon Alors Aller Ln zcc
cc lnstructlon
c etc.
zc etc.
c Aller en cc
zcc lnstructlon z
zc etc.
zzc etc.
cc sulte de l'ulgorlthme
vous voyez le too : un rogrumme ecrlt duns ce tye de lunguges se resente comme une suite
de branchements emmls les uns dans les autres. L'une urt, on ne eut us dlre que celu fuvorlse
lu llslblllte du rogrumme. L'uutre urt, c'est une source lmortunte d'erreurs, cur tt ou turd on
oublle un uller , ou on un met un de tro, etc. A fortlorl lorsqu'on comllque un ulgorlthme
exlstunt, celu eut devenlr un jungle lnextrlcuble.

143
A l'lnverse, lu rogrummutlon structuree, surtout sl l'on rend soln de rutlonullser lu resentutlon
en mettunt des llgnes de commentulres et en rutlquunt l'lndentutlon, evlte des erreurs, et revele su
structure loglque de munlere tres clulre.
Le dunger est que sl lu luurt des lunguges de rogrummutlon utlllses sont structures, lls offrent
tout de meme lu luurt du tems lu osslblllte de rutlquer lu rogrummutlon non structuree. Luns
ce cus, les llgnes ne sont us deslgnees ur des numeros, muls certulnes euvent etre reerees ur
des noms (dlts etlquettes ) et on dlsose d'une lnstructlon de brunchement.
Une rgle d'hygine absolue est de programmer systmatiquement de
manire structure, sauf impratif contraire fix par le langage {ce qui est
au]ourd'hui de plus en plus rare}.
Autrement dlt, meme quund un lunguge vous offre une osslblllte de fulre des entorses lu
rogrummutlon structuree, ll ne fuut s'en sulslr sous uucun retexte.

2. NTERPRETATON ET COMPLATON
Avec ce urugruhe, on sort un eu de l'ulgorlthmlque rorement dlte our entrer duns le
domulne lus technlque de lu reullsutlon rutlque. Cu, sl l'on refere, ces dernleres llgnes sont
l'uotheose, le bouquet flnul, l'extuse ultlme, lu consecrutlon grundlose, de ce cours.
Ln toute modestle, blen sr.
'usqu'lcl, nous uvons truvullle sur lu remlere etue de lu reullsutlon d'un rogrumme : lu
reductlon de l'ulgorlthme.

Ln fult, sl l'ulgorlthme est blen ecrlt, suns fuute loglque, l'etue sulvunte ne dolt normulement
oser uucun robleme concetuel. ll n'y u lus qu' effectuer une slmle truductlon.

A urtlr de l, le truvull du rogrummeur est vlrtuellement termlne (en reullte, ll reste tout de
meme une lnevltuble huse de tests, de correctlons, etc., qul s'uvere souvent tres longue). Muls en
tout cus, our l'ordlnuteur, c'est l que les ennuls commencent. Ln effet, uucun ordlnuteur n'est en
sol ute executer les lnstructlons telles qu'elles sont redlgees duns tel ou tel lunguge , l'ordlnuteur,
lul, ne comrend qu'un seul lunguge, qul est un lunguge code en blnulre ( lu rlgueur en hexudeclmul)
et qul s'uelle le lunguge muchlne (ou ussembleur).


146
C'est celu que sert un lunguge : vous eurgner lu rogrummutlon en blnulre (une ure horreur,
vous vous en doutez) et vous ermettre de vous fulre comrendre de l'ordlnuteur d'une munlere
(relutlvement) llslble.
C'est ourquol tout lunguge, urtlr d'un rogrumme ecrlt, dolt obllgutolrement roceder une
traduction en lunguge muchlne our que ce rogrumme solt executuble.
ll exlste deux strutegles de truductlon, ces deux strutegles etunt urfols dlsonlbles uu seln du
meme lunguge.
le lunguge trudult les lnstructlons uu fur et mesure qu'elles se resentent. Celu s'uelle
lu compilation la vole, ou l'interprtation.
le lunguge commence ur trudulre l'ensemble du rogrumme en lunguge muchlne,
constltuunt ulnsl un deuxleme rogrumme (un deuxleme flchler) dlstlnct hyslquement et
loglquement du remler. Lnsulte, et ensulte seulement, ll execute ce second rogrumme.
Celu s'uelle lu compilation
ll vu de sol qu'un lunguge lnterrete est lus munluble : on eut executer dlrectement son code
et donc le tester uu fur et mesure qu'on le tue, suns usser chuque fols ur l'etue
sulementulre de lu comllutlon. Muls ll vu uussl de sol qu'un rogrumme comlle s'execute
beuucou lus ruldement qu'un rogrumme lnterrete : le guln est courumment d'un fucteur c,
volre zc ou lus.
1oute ullcutlon destlnee un usuge rofesslonnel (ou meme, tout slmlement serleux) est
forcement une ullcutlon comllee.

3. UNE LOGOUE VCELARDE : LA PROGRAMMATON RECUR8VE
vous suvez comment sont les lnformutlclens : on ne eut us leur donner quol que ce solt suns
qu'lls essuyent de jouer uvec, et le lre, c'est qu'lls y reusslssent.
Lu rogrummutlon des fonctlons ersonnullsees u donne lleu l'essor d'une loglque un eu
urtlcullere, udutee en urtlculler uu trultement de certulns roblemes muthemutlques (ou de
jeux) : lu rogrummutlon recurslve. Pour vous exllquer de quol ll retourne, nous ullons rerendre un
exemle cher vos cours : le culcul d'une fuctorlelle (l, je sentuls que j'ulluls encore me fulre des
coulns).
Ruelezvous : lu formule de culcul de lu fuctorlelle d'un nombre n s'ecrlt :
N ! = x z x x . x n
Nous uvlons rogrumme celu uussl sec uvec une boucle Pour, et roule Ruoul. Muls une uutre
munlere de volr les choses, nl lus juste, nl molns juste, serult de dlre que quel que solt le nombre n :
n ! = n x (n) !
Ln bon frunuls : lu fuctorlelle d'un nombre, c'est ce nombre multllle ur lu fuctorlelle du nombre
recedent. Lncore une fols, c'est une munlere nl lus juste nl molns juste de resenter les choses ,
c'est slmlement une munlere dlfferente.
Sl l'on dolt rogrummer celu, on eut ulors lmuglner une fonctlon luct, churgee de culculer lu
fuctorlelle. Cette fonctlon effectue lu multlllcutlon du nombre usse en urgument ur lu fuctorlelle
du nombre recedent. Lt cette fuctorlelle du nombre recedent vu blen entendu etre ellememe
culculee ur lu fonctlon luct.
Autrement dlt, on vu creer une fonctlon qul our fournlr son resultut, va s'appeler ellemme un
certain nombre de fois. C'est celu, lu recurslvlte.
1outefols, ll nous munque une chose our flnlr : quund ces uutouels de lu fonctlon luct vontlls
s'urreter ? Celu n'uurutll donc jumuls de fln ? Sl, blen sr, russuretol, ubllc, lu recurslvlte, ce n'est

147
us Les leux de L'Amour. Cn s'urrete quund on urrlve uu nombre , our lequel lu fuctorlelle est ur
deflnltlon .
Celu rodult l'ecrlture sulvunte, un eu deconcertunte certes, muls urfols tres rutlque :
Ionction luct (N en Numrique)
Si N = c alors
Renvoyer
Sinon
Renvoyer luct(N) * N
Iinsi
Iin Ionction
vous remurquerez que le rocessus recurslf remluce en quelque sorte lu boucle, c'estdlre un
rocessus lterutlf. Lt en lus, uvec tous ces nouveuux mots qul rlment, vous ullez ouvolr ecrlre de
tres chouettes oemes. vous remurquerez uussl qu'on trulte le robleme l'envers : on urt du
nombre, et on remonte rebours jusqu' our ouvolr culculer lu fuctorlelle. Cet effet de rebours
est curucterlstlque de lu rogrummutlon recurslve.
Pour conclure sur la rcursivit, trois remarques fondamentales.
la programmation rcursive, our trulter certulns roblemes, est trs conomique pour le
programmeur , elle ermet de fulre les choses correctement, en tres eu d'lnstructlons.
en revunche, elle est trs dispendieuse de ressources machine. Cur l'executlon, lu
muchlne vu etre obllgee de creer uutunt de vurlubles temorulres que de tours de
fonctlon en uttente.
Lust but not leust, et c'est le gug flnul, tout problme formul en termes rcursifs peut
galement tre formul en termes itratifs ! Lonc, sl lu rogrummutlon recurslve eut
fuclllter lu vle du rogrummeur, elle n'est jumuls lndlsensuble. Muls u me fulsult tunt
lulslr de vous en urler que je n'ul us u reslster. Lt uls, uccessolrement, meme sl on
ne s'en sert us, en tunt qu'lnformutlclen, ll fuut connuitre cette technlque sur luquelle on
eut toujours tomber un jour ou l'uutre.

Vous aimerez peut-être aussi