You are on page 1of 70

ALGCkI1nMIUL

Mourad CPA88l
SM3
AuLomne 2012
|an du cours
Introducnon : |e codage
L'a|gor|thm|que
! I. Introducnon |'a|gor|thm|que
! II. Les var|ab|es
! III. Lecture et cr|ture
! IV. Les tests
! V. Un peu p|us de |og|que
! VI. Les bouc|es
! VII. Les tab|eaux
! VIII. 1echn|ques avances
! Ik. 1ab|eaux mu|nd|mens|onne|s
! k. Ioncnons prdhn|es
! kI. I|ch|ers
! kII. rocdures et foncnons
! kIII. Nonons comp|menta|res
Sources documenta|res
cbtlstopbe uotmooqeot .
! hup://www.plse.lnfo/algo/codage.hLm
Ieoo-Mlcbel lty
! AlgorlLhmlque en C
Alqotltbmlpoe & ptoqtommouoo eo looqoqe c
! hup://henrl.garreLa.perso.lumlny.unlvmed.fr/generlque/
kobett 5eJqewlck
! AlgorlLhmes en langage C
Attbot cbotqotooJ
! Lcrlre du pseudo-code
Les bouc|es
les ptemlets 90X Jo coJe pteooeot les ptemlets
90X Jo temps Je Jveloppemeot. les 10X
testoots pteooeot les oottes 90X Jo temps Je
Jveloppemeot.
ssoyez Je comptet plos vlte pooo otJlooteot!
5l voos y ottlvez cest poe voos ovez tossl ooe
boocle potfolte.

Les bouc|es
C'esL la quaLrleme eL dernlere sLrucLure : les bouc|es. Cn parle
egalemenL de structures rpnnves, ou de structures
|tranves.
Les boucles, c'esL generalemenL le polnL douloureux du
debuLanL programmeur. C'esL la que a colnce, car auLanL ll esL
assez faclle de comprendre le foncuonnemenL des boucles,
auLanL ll esL souvenL long de les malLrlser.
Cn peuL dlre en falL que les boucles consuLuenL la seule vrale
sLrucLure loglque caracLerlsuque de la programmauon. Sl vous
avez uullse un Lableur comme Lxcel, par exemple, vous avez
sans douLe pu manler des choses equlvalenLes aux varlables
(les cellules, les formules) eL aux LesLs (la foncuon Sl.). Mals
les boucles, a, a n'a aucun equlvalenL. Cela n'exlsLe que dans
les langages de programmauon propremenL dlLs.
Les bouc|es -1-
1. A UCI A SLk1 ?
renons le cas d'une salsle au clavler, ou par
exemple, l'uullsaLeur dolL salslr C (Cul) ou n (non).
Mals LL ou Lard, l'uullsaLeur rlsque de salslr auLre
chose que la reponse auendue. ues lors, le
programme peuL planLer solL par une erreur
d'execuuon (parce que le Lype de reponse ne
correspond pas au Lype de la varlable auendu) solL
par une erreur foncuonnelle (ll se deroule
normalemenL [usqu'au bouL, mals en produlsanL des
resulLaLs fanLalslsLes).
Cn meL alors en place ce qu'on appelle un contr|e
de sa|s|e, an de verler que les donnees enLrees au
clavler correspondenL blen a celles auendues par
l'algorlLhme.
Cn pourralL essayer avec un Sl :
Les bouc|es -2-
1. A UCI A SLk1 ?
Les bouc|es -3-
rogramme A1
Var|ab|e 8ep en Caractre
Dbut
Lcr|re Avez vous nl ? (C/n)"
L|re 8ep
S| 8ep <> "C" eL 8ep <> "n" A|ors
Lcr|re "Salsle erronee. 8ecommencez"
L|re 8ep
I|nS|
I|n
1. A UCI A SLk1 ?
Sl l'uullsaLeur a la genullesse de ne se Lromper
qu'une seule fols, eL d'enLrer une valeur correcLe a
la deuxleme demande. Sl l'on veuL egalemenL
beLonner en cas de deuxleme erreur, ll faudralL
ra[ouLer un Sl. LL alnsl de sulLe, . on peuL alors
ra[ouLer des cenLalnes de Sl eL ecrlre un algorlLhme
aussl long qu'un annualre Lelephonlque, eL ll y aura
Lou[ours quelqu'un qul planLera le programme.
La soluuon conslsLanL a allgner des Sl. par
cenLalne esL donc une lmpasse. La seule lssue esL
donc d'uullser une structure de bouc|e, qul se
presenLe alnsl :
Les bouc|es -4-
1. A UCI A SLk1 ?
Le prlnclpe esL slmple : le programme arrlve sur la
llgne du 1anLCue. ll examlne alors la valeur du
booleen. Sl ceue valeur esL v8Al, le programme
execuLe les lnsLrucuons qul sulvenL, [usqu'a ce qu'll
renconLre la llgne lln1anLCue. ll reLourne ensulLe sur
la llgne du 1anLCue, procede au mme examen, eL
alnsl de sulLe. Ce manege ne s'arrLe que lorsque le
booleen prend la valeur lAux.
1antue booleen
.
lnsLrucuons
.
I|n1antue
Les bouc|es -S-
1. A UCI A SLk1 ?
our noLre probleme de conLrle de salsle. une premlere
approxlmauon de la soluuon conslsLe a ecrlre :


Son prlnclpal defauL esL de provoquer une erreur a chaque
execuuon. Ln eeL, l'expresslon booleenne qul gure apres le
1anLCue lnLerroge la valeur de la varlable 8ep. MalheureusemenL,
ceue varlable, sl elle a eLe declaree, n'a pas eLe aecLee avanL
l'enLree dans la boucle. Cn LesLe donc une varlable qul n'a pas de
valeur, ce qul provoque une erreur eL l'arrL lmmedlaL de l'execuuon.
Var|ab|e 8ep en Caractre
Dbut
Lcr|re "Avez vous nl ? (C/n)"
1antue 8ep <> "C" eL 8ep <> "n"
L|re 8ep
I|n1antue
I|n
Les bouc|es -6-
1. A UCI A SLk1 ?
our evlLer cecl, on n'a pas le cholx : ll fauL que la varlable
8ep alL de[a eLe aecLee avanL qu'on en arrlve au premler
passage de boucle. our cela, on peuL falre une premlere
lecLure de 8ep avanL la boucle. uans ce cas, celle-cl ne
servlra qu'en cas de mauvalse salsle lors de ceue
premlere lecLure. L'algorlLhme devlenL alors :


Var|ab|e 8ep en Caractre
Dbut
Lcr|re "Avez vous nl ? (C/n)"
L|re 8ep
1antue 8ep <> "C" eL 8ep <> "n"
L|re 8ep
I|n1antue
I|n
Les bouc|es -7-
1. A UCI A SLk1 ?
une auLre posslblllLe, frequemmenL employee, conslsLe a
ne pas llre, mals a aecLer la varlable avanL la boucle.
CeneralemenL ceue aecLauon prend l'enLree obllgaLolre
dans la boucle. L'aecLauon dolL donc falre en sorLe que
le booleen solL mls a v8Al pour declencher le premler
passage de la boucle. Cela donnera par exemple :


Var|ab|e 8ep en Caractre
Dbut
8ep "x"
Lcr|re "Avez vous nl ? (C/n)"
1antue 8ep <> "C" eL 8ep <> "n"
L|re 8ep
I|n1antue
I|n
Les bouc|es -8-
2. 8CUCLLk LN CCM1AN1, CU CCM1Lk LN 8CUCLAN1
ll arrlve Lres souvenL qu'on alL besoln d'eecLuer un
nombre dterm|n de passages. Cr, a prlorl, noLre
sLrucLure 1anLCue ne salL pas a l'avance comblen de
passages de boucle elle va eecLuer (pulsque le nombre
de passages depend de la valeur d'un booleen).
C'esL pourquol une auLre sLrucLure de boucle esL a noLre
dlsposluon :


Les bouc|es -9-
Var|ab|e CounL en Lnner
Dbut
CounL 0
1antue CounL < 13
CounL CounL + 1
Lcr|re "assage numero : ", CounL
I|n1antue
I|n
2. 8CUCLLk LN CCM1AN1, CU CCM1Lk LN 8CUCLAN1
Cul devlenL :
La structure our . I|nour n'est pas du tout
|nd|spensab|e , on pourralL forL blen programmer LouLes
les slLuauons de boucle unlquemenL avec un 1anL
Cue . Le seul lnLerL du our esL d'epargner un peu
de faugue au programmeur, en lul evlLanL de gerer lul-
mme la progresslon de la varlable qul lul serL de
compLeur : on parle d'|ncrmentanon.

Les bouc|es -10-
Var|ab|e CounL en Lnner
Dbut
our CounL 1 a 13
Lcr|re "assage numero : ", CounL
I|nour
I|n
2. 8CUCLLk LN CCM1AN1, CU CCM1Lk LN 8CUCLAN1
AuLremenL dlL, la sLrucLure our . llnour esL un cas paruculler
de 1anLCue : celul ou le programmeur peuL denombrer a l'avance le
nombre de passages de boucles necessalres.
ll fauL noLer que dans une sLrucLure our . llnour , la
progresslon du compLeur esL lalssee a voLre llbre dlsposluon. uans la
pluparL des cas, on a besoln d'une varlable qul augmenLe de 1 a
chaque Lour de boucle. Cn ne preclse alors rlen a l'lnsLrucuon
our , celle-cl, par defauL, comprend qu'll va fallolr proceder a
ceue lncremenLauon de 1 a chaque passage, en commenanL par la
premlere valeur eL en LermlnanL par la deuxleme.
Mals sl vous souhalLez une progresslon plus speclale, de 2 en 2, ou en
arrlere, de -1 en -1, ce n'esL pas un probleme : ll sumra de le
preclser a voLre lnsLrucuon our en lul ra[ouLanL le moL as eL
la valeur de ce pas ( sLep en anglals).
naLurellemenL, quand on supule un pas negauf dans une boucle, la
valeur lnluale du compLeur dolL Lre supr|eure a sa valeur nale sl
l'on veuL que la boucle Lourne ! uans le cas conLralre, on aura
slmplemenL ecrlL une boucle dans laquelle le programme ne renLrera
[amals.
Les bouc|es -11-
2. 8CUCLLk LN CCM1AN1, CU CCM1Lk LN 8CUCLAN1
nous pouvons donc malnLenanL donner la formulauon
generale d'une sLrucLure our . Sa synLaxe generale esL :
Les sLrucLures 1antue sonL employees dans les slLuauons ou
l'on dolL proceder a un LralLemenL sysLemauque sur les
elemenLs d'un ensemble donL on ne connaiL pas d'avance la
quanuLe, comme par exemple :
! le conLrle d'une salsle
! la gesuon des Lours d'un [eu (LanL que la parue n'esL pas nle, on
recommence)
! la lecLure des enreglsLremenLs d'un chler de Lallle lnconnue

Les bouc|es -12-
our CompLeur lnlual a llnal aras valeuruuas
.
lnsLrucuons
.
I|nour
2. 8CUCLLk LN CCM1AN1, CU CCM1Lk LN 8CUCLAN1
Les sLrucLures our sonL employees dans les
slLuauons ou l'on dolL proceder a un LralLemenL
sysLemauque sur les elemenLs d'un ensemble donL
le programmeur connaiL d'avance la quanuLe.
nous verrons plus Lard des serles d'elemenLs
appeles Lableaux eL chaines de caracLeres. Selon
les cas, le balayage sysLemauque des elemenLs de
ces serles pourra Lre eecLue par un our ou par
un 1anLCue : LouL depend sl la quanuLe d'elemenLs
a balayer (donc le nombre de Lours de boucles
necessalres) peuL Lre denombree a l'avance par le
programmeur ou non.
Les bouc|es -13-
3. DLS 8CUCLLS DANS DLS 8CUCLLS
ue mme qu'une sLrucLure Sl . ALC8S peuL
conLenlr d'auLres sLrucLures Sl . ALC8S, une
boucle peuL LouL a falL conLenlr d'auLres boucles.
Les bouc|es -14-
Var|ab|es C1, C2 en Lnner
Dbut
our C1 1 a 13
Lcr|re "ll esL passe par C1"
our C2 1 a 6
Lcr|re "ll esL passe par C2"
llnour (C2)
llnour (C1)
I|n
3. DLS 8CUCLLS DANS DLS 8CUCLLS
ourquol lmbrlquer des boucles ? our la mme ralson
qu'on lmbrlque des LesLs. La Lraducuon d'un LesL, c'esL un
cas . Lh blen un cas (par exemple, esL-ce un
homme ou une femme ? ) peuL Lres blen se subdlvlser en
d'auLres cas ( a-L-ll plus ou molns de 18 ans ? ).
ue mme, une boucle, c'esL un LralLemenL sysLemauque,
un examen d'une serle d'elemenLs un par un (par exemple,
prenons Lous les employes de l'enLreprlse un par un ).
Lh blen, on peuL lmaglner que pour chaque elemenL alnsl
consldere (pour chaque employe), on dolve proceder a un
examen sysLemauque d'auLre chose ( prenons chacune
des commandes que ceL employe a LralLees ).
Les bouc|es -1S-
3. DLS 8CUCLLS DANS DLS 8CUCLLS
volla un exemple Lyplque de boucles lmbrlquees : on devra
programmer une boucle prlnclpale (celle qul prend les
employes un par un) eL a l'lnLerleur, une boucle secondalre
(celle qul prend les commandes de ceL employe une par
une).
uans la prauque de la programmauon, la maiLrlse des
boucles lmbrlquees esL necessalre, mme sl elle n'esL pas
sumsanLe.
Auennon tout de mme b|en |mbr|quer |es bouc|es et
de b|en ve|||er aux |nterd|ts !
Les bouc|es -16-
3. DLS 8CUCLLS DANS DLS 8CUCLLS
volla un exemple Lyplque de boucles lmbrlquees : on devra
programmer une boucle prlnclpale (celle qul prend les
employes un par un) eL a l'lnLerleur, une boucle secondalre
(celle qul prend les commandes de ceL employe une par
une).
uans la prauque de la programmauon, la maiLrlse des
boucles lmbrlquees esL necessalre, mme sl elle n'esL pas
sumsanLe.
Auennon tout de mme b|en |mbr|quer |es bouc|es et
de b|en ve|||er aux |nterd|ts : surtout ne pas |ncrmenter
|e compteur par exemp|e. I| est |nterd|t de fa|re une
aectanon du compteur |'|ntr|eur de |a bouc|e !
Les bouc|es -17-
Lxerc|ces
Lxerc|ces
1. un compLeur slmple
2. un compLeur palr ou lmpalr
3. un compLeur qul amche les nombres dlvlslbles
par 7.
4. 8echerche des dlvlseurs d'un nombre
3. 8echerche des nombres premlers
6. 8echerche des nombres maglques
Lxerc|ces
1. Converslon lahrenhelL - Cenugrade (*) : Lcrlvez
l'algorlLhme qul converuL les degres lahrenhelL
en degres cenugrades 0
C
= 3 (0
l
32)
2. volume d'une sphere : Lcrlvez l'algorlLhme qul
calcule le volume d'une sphere eLanL donne son
rayon v = 48
3

3. Converslon llomeLres - mlles : Lcrlvez
l'algorlLhme qul converuL les llomeLres en
mlles (1 mlle = 1,60 m)
Lxerc|ces
4. SolL f la foncuon qul a un enuer naLurel o assocle
l'enuer f(o) denl de la faon sulvanLe:
- Sl o esL un enuer palr, alors f(o) = o / 2
- Sl o esL un enuer lmpalr, alors f(o) = Jo-1
1) Calculer l'lmage par la foncuon f de chacun des
enuers 0 , 1 , 2 , 3 , 4 , 30 , 31
2-a) 8eallser une feullle de calcul qul permeL de
salslr n eL d'eecLuer le calcul de f(o)
2-b) verler les resulLaLs de la quesuon 1)
LLS 1A8LLAUk
5l oo meot oo complloteot, ll pteoJto so tevoocbe.
- Penry Spencer.
1. U1ILI1L DLS 1A8LLAUk
Les tab|eaux -1-
lmaglnez que dans un programme, vous ayez
besoln slmulLanemenL de 12 valeurs (par
exemple, des noLes pour calculer une moyenne).
LvldemmenL, la seule soluuon donL vous dlsposez
a l'heure acLuelle conslsLe a declarer douze
varlables, appelees par exemple noLe1, noLe2,
noLe3, eLc. 8len sr, on peuL opLer pour une
noLauon un peu slmpllee, par exemple n1, n2,
n3, eLc. Mals cela ne change pas noLre probleme,
car arrlve au calcul, eL apres une successlon de
douze lnsLrucuons Llre dlsuncLes, cela
donnera obllgaLolremenL une ecrlLure du genre :
1. U1ILI1L DLS 1A8LLAUk
Les tab|eaux -2-
Moy (n1+n2+n3+n4+n3+n6+n7+n8+n+n10+n11+n12)/12
C'esL LouL de mme laborleux. lmaglnez cecl dans un
programme de gesuon avec quelques cenLalnes ou
quelques mllllers de valeurs a LralLer: a releve du
sulclde.
Sl de plus on esL dans une slLuauon on l'on ne peuL pas
savolr d'avance comblen ll y aura de valeurs a LralLer,
la on esL carremenL dans l'embarra.
C'esL pourquol la programmauon nous permeL de
rassemb|er toutes ces var|ab|es en une seu|e, au seln
de laquelle chaque valeur sera deslgnee par un
numero. Ln clalr, cela donneralL donc quelque chose
du genre la noLe numero 1 , la noLe numero 2 ,
la noLe numero 8 . C'esL largemenL plus prauque,
vous vous en douLez.
1. U1ILI1L DLS 1A8LLAUk
Les tab|eaux -3-
Un ensemb|e de va|eurs portant |e mme
nom de var|ab|e et repres par un
nombre, s'appe||e un tab|eau, ou encore
une var|ab|e |nd|ce.
Le nombre qu|, au se|n d'un tab|eau, sert
reprer chaque va|eur s'appe||e |'|nd|ce.
Chaque fo|s que |'on do|t ds|gner un
|ment du tab|eau, on fa|t hgurer |e nom
du tab|eau, su|v| de |'|nd|ce de |'|ment,
entre parenthses.
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -4-
our noLre exemple, nous creerons donc un
Lableau appele noLe. Chaque noLe lndlvlduelle
(chaque elemenL du Lableau noLe) sera donc
deslgnee noLe(0), noLe(1), eLc. Auenuon, les
lndlces des Lableaux commencenL generalemenL a
0, eL non a 1.
un Lableau dolL Lre declare comme Lel, en
preclsanL le nombre eL le Lype de valeurs qu'll
conuendra (la declarauon des Lableaux esL
suscepuble de varler d'un langage a l'auLre.
CerLalns langages reclamenL le nombre
d'elemenLs, d'auLre le plus grand lndlce... C'esL
donc une aalre de convenuons).
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -S-
Ln nous calquanL sur les cholx les plus frequenLs
dans les langages de programmauons, nous
declderons lcl que :
! La numeroLauon commencera a parur de zero,
auLremenL dlL le plus peuL lndlce esL zero.
! lors de la declarauon d'un Lableau, on preclse le
nombre d'elemenLs du Lableau (dlerenLe,
donc, de la plus grande valeur de l'lndlce,
pulsque sl on veuL 12 emplacemenLs, le plus
grand lndlce sera 11).
1ab|eau noLe(12) en Lnner
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -6-
Cn peuL creer des Lableaux conLenanL des
varlables de Lous Lypes : Lableaux de numerlques,
blen sr, mals aussl Lableaux de caracLeres,
Lableaux de booleens, Lableaux de LouL ce qul
exlsLe dans un langage donne comme Lype de
varlables. ar conLre, hormls dans quelques rares
langages, on ne peuL pas falre un mlxage de Lypes
dlerenLs de valeurs au seln d'un mme Lableau.
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -7-
L'enorme avanLage des Lableaux, c'esL qu'on va
pouvolr les LralLer en falsanL des boucles. ar
exemple, pour eecLuer noLre calcul de moyenne,
cela donnera par exemple :
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -8-
rogramme moy_1
1ab|eau noLe(12) en Numr|que
Var|ab|es Moy, Som en Numr|que
Dbut
our l 0 a 11
Lcrlre "LnLrez la noLe n", l
Llre noLe(l)
lln our
Som 0
our l 0 a 11
Som Som + noLe(l)
lln our
Moy Som / 12
I|n
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -9-
kemarque gnra|e : l'lndlce qul serL a deslgner les
elemenLs d'un Lableau peuL Lre exprlme dlrecLemenL
comme un nombre en clalr, mals ll peuL Lre aussl une
varlable, ou une expresslon calculee.
uans un Lableau, la valeur d'un lndlce dolL Lou[ours :
! tre ga|e au mo|ns 0 (dans quelques rares langages, le premler
elemenL d'un Lableau porLe l'lndlce 1). uonc auenuon, 1ab(6) esL le
sepueme elemenL du Lableau 1ab !
! tre un nombre enner Cuel que solL le langage, l'elemenL
1ab(3,1416) n'exlsLe [amals.
! tre |nfr|eure ou ga|e au nombre d'|ments du tab|eau (molns
1, sl l'on commence la numeroLauon a zero). Sl le Lableau 1ab a eLe
declare comme ayanL 12 elemenLs, la presence dans une llgne, sous
une forme ou sous une auLre, de 1ab(32) declenchera
auLomauquemenL une erreur.
2. NC1A1ICN L1 U1ILISA1ICN
Les tab|eaux -10-
A11Ln1lCn : a ne pas confondre, dans sa
LLe eL / ou dans un algorlLhme, l'|nd|ce
d'un elemenL d'un Lableau avec le contenu
de ceL elemenL. La Lrolsleme malson de la
rue n'a pas forcemenL Lrols hablLanLs, eL la
vlngueme vlngL hablLanLs. Ln noLauon
algorlLhmlque, ll n'y a aucun rapporL enLre l
eL 1ab(l).
Lxerc|ces
LLS 1kIS
5l oo meot oo complloteot, ll pteoJto so tevoocbe.
- Penry Spencer.
LLS 1kIS
Les tr|s -1-
Comblen de fols au cours d'une carrlere un
developpeur a-L-ll besoln de ranger des
valeurs dans un ordre donne ? C'esL
lnlmaglnable. Aussl, pluLL que de
relnvenLer a chaque fols la roue, ll vauL
mleux avolr asslmlle une ou deux Lechnlques
solldemenL eprouvees, mme sl elles
paralssenL un peu ardues au deparL.
ll exlsLe plusleurs sLraLegles posslbles pour
Lrler les elemenLs d'un Lableau , nous en
verrons deux : le Lrl a bulles, eL le Lrl par
selecuon.
1. LL 1kI 8ULLLS
Les tr|s -2-
Commenons par le Lrl a bulles : L'ldee de
deparL du Lrl a bulles conslsLe a se dlre
qu'un Lableau Lrle en ordre crolssanL, c'esL
un Lableau dans lequel tout |ment est
p|us pent que ce|u| qu| |e su|t.
1. LL 1kI 8ULLL
Les tr|s - 3-
L'ldee de deparL du Lrl a bulles conslsLe a se dlre
qu'un Lableau Lrle en ordre crolssanL, c'esL un
Lableau dans lequel tout |ment est p|us pent
que ce|u| qu| |e su|t.
Ln eeL, prenons chaque elemenL d'un Lableau, eL
comparons-le avec l'elemenL qul le sulL. Sl l'ordre
n'esL pas bon, on permuLe ces deux elemenLs. LL
on recommence [usqu'a ce que l'on n'alL plus
aucune permuLauon a eecLuer. Les elemenLs les
plus grands remonLenL alnsl peu a peu vers les
dernleres places, ce qul expllque denomlnauon de
Lrl a bulle .
1. LL 1kI 8ULLL
Les tr|s - 4-
Cn ne salL [amals par avance comblen de
remonLees de bulles on dolL eecLuer. Ln falL, LouL
ce qu'on peuL dlre, c'esL qu'on devra eecLuer le
Lrl [usqu'a ce qu'll n'y alL plus d'elemenLs qul
solenL mal classes. Cecl esL LyplquemenL un cas de
quesuon asymeLrlque : ll sumL que deux
elemenLs solenL mal classes pour qu'un Lableau ne
solL pas Lrle. Ln revanche, ll fauL que Lous les
elemenLs solenL blen ranges pour que le Lableau
solL Lrle. SolL le Lableau sulvanL :
43 122 12 3 21 78 64 33 8 28 84 46
1. LL 1kI 8ULLL
Les tr|s - S-
Cue va-L-on falre a l'lnLerleur de la boucle ? rendre les
elemenLs du Lableau, du premler [usqu'a l'avanL-dernler, eL
proceder a un echange sl necessalre.
43 122 12 3 21 78 64 33 8 28 84 46
43 12 3 21 78 64 33 8 28 84 46 122
12 3 21 43 64 33 78 28 84 46 8 122
3 12 21 43 33 64 28 78 46 84 8 122
3 12 21 43 33 28 64 46 78 84 8 122
1. LL 1kI 8ULLL
Les tr|s - 6-
rogramme 1r|_bu|
1ab|eau t(20) en Lnner
Var|ab|e temp en Lnner
Dbut
our k ! 0 19
our l 0 a 1--1
S| L(l) > L(l+1) a|ors
Lemp L(l)
L(l) L(l+1)
L(l+1) Lemp
I|ns|
lln our (l)
lln our ()
I|n
2. LL 1kI Ak SLLLC1ICN
Les tr|s - 7-
Admeuons que le buL de la manuvre solL
de Lrler un Lableau de 12 elemenLs dans
l'ordre crolssanL. La Lechnlque du Lrl par
selecuon esL la sulvanLe : on meL en bonne
posluon l'elemenL numero 1, c'esL-a-dlre le
plus peuL. uls en meL en bonne posluon
l'elemenL sulvanL. LL alnsl de sulLe [usqu'au
dernler. ar exemple, sl l'on parL de :
2. LL 1kI Ak SLLLC1ICN
Les tr|s - 8-
Cn commence par rechercher, parml les 12
valeurs, quel esL le plus peuL elemenL, eL ou
ll se Lrouve. Cn l'ldenue en quaLrleme
posluon (c'esL le nombre 3), eL on l'echange
alors avec le premler elemenL (le nombre
43). Le Lableau devlenL alnsl :
43 122 12 3 21 78 64 33 8 28 84 46
3 122 12 43 21 78 64 33 8 28 84 46
2. LL 1kI Ak SLLLC1ICN
Les tr|s - 9-
Cn recommence a chercher le plus peuL elemenL, mals
ceue fols, seu|ement parnr du deux|me (pulsque le
premler esL malnLenanL correcL, on n'y Louche plus). Cn le
Lrouve en Lrolsleme posluon (c'esL le nombre 12). Cn
echange donc le deuxleme avec le Lrolsleme :
3 12 122 43 21 78 64 33 8 28 84 46
Cn recommence a chercher le plus peuL elemenL a parur
du Lrolsleme (pulsque les deux premlers sonL malnLenanL
blen places), eL on le place correcLemenL, en l'echangeanL,
ce qul donnera en nal :
3 12 21 43 122 78 64 33 8 28 84 46
2. LL 1kI Ak SLLLC1ICN
Les tr|s -10-
LL alnsl de sulLe [usqu'a l'avanL dernler. nous
pourrlons donc decrlre le processus de la manlere
sulvanLe :
8oucle prlnclpale : prenons comme polnL de
deparL le premler elemenL, puls le second, eLc,
[usqu'a l'avanL dernler.
8oucle secondalre : a parur de ce polnL de deparL
mouvanL, recherchons [usqu'a la n du Lableau
quel eL le plus peuL elemenL. une fols que nous
l'avons Lrouve, nous l'echangeons avec le polnL de
deparL.
2. LL 1kI Ak SLLLC1ICN
Les tab|eaux -11-
rogramme 1r|_se|
boucle prlnclpale : le polnL de deparL se decale a chaque Lour
our l 0 a 10
on consldere provlsolremenL que L(l) esL le plus peuL elemenL
posmlnl l
on examlne Lous les elemenLs sulvanLs
our [ l + 1 a 11
S| L([) < L(posmlnl) A|ors
posmlnl [
I|ns|
lln our ([)
A ceL endrolL, on salL malnLenanL ou esL le plus peuL elemenL. ll ne
resLe plus qu'a eecLuer la permuLauon.
Lemp L(posmlnl)
L(posmlnl) L(l)
L(l) Lemp
Cn a place correcLemenL l'elemenL numero l, on passe a presenL au
sulvanL.
lln our (l)
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -12-
nous allons malnLenanL nous lnLeresser au manlemenL d'une
varlable booleenne : la Lechnlque dlLe du ag .
Le ag, en anglals, esL un peuL drapeau, qul va resLer balsse aussl
longLemps que l'evenemenL auendu ne se produlL pas. AusslLL
que ceL evenemenL a lleu, le peuL drapeau se leve (la varlable
booleenne change de valeur). Alnsl, la valeur nale de la varlable
booleenne permeL au programmeur de savolr sl l'evenemenL a
eu lleu ou non.
Cela devralL s'eclalrer a l'alde d'un exemple exLrmemenL
frequenL : la recherche de l'occurrence d'une valeur dans un
Lableau. Cn en proLera au passage pour corrlger une erreur
paruculleremenL frequenLe chez le programmeur debuLanL.
SolL un Lableau comporLanL, dlsons, 20 valeurs. Cn dolL ecrlre un
algorlLhme salslssanL un nombre au clavler, eL qul lnforme
l'uullsaLeur de la presence ou de l'absence de la valeur salsle
dans le Lableau.
La premlere eLape, evldenLe, conslsLe a ecrlre les lnsLrucuons de
lecLure / ecrlLure, eL la boucle de parcours du Lableau :
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -13-
rogramme 1
1ab|eau 1ab(20) en Numr|que
Var|ab|e n en Numr|que
Dbut
Lcr|re "LnLrez la valeur a rechercher"
L|re n
our l 0 a 1
???
lln our
I|n
ll nous resLe a combler les polnLs d'lnLerrogauon de la boucle
our. LvldemmenL, ll va fallolr comparer n a chaque elemenL du
Lableau : sl les deux valeurs sonL egales, alors blngo, n falL parue
du Lableau. Cela va se Lradulre, blen enLendu, par un Sl . Alors .
Slnon. LL volla le programmeur ralsonnanL huvemenL qul se
fellclLe en ecrlvanL :
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s-14-
rogramme 1
1ab|eau 1ab(20) en Numr|que
Var|ab|e n en Numr|que
Dbut
Lcr|re "LnLrez la valeur a rechercher"
L|re n
our l 0 a 1
S| n = 1ab(l) A|ors
Lcr|re n "falL parue du Lableau"
S|non
Lcr|re n "ne falL pas parue du Lableau"
I|nS|
lln our
I|n

CeL algorlLhme esL une verlLable caLasLrophe.
ll sumL d'allleurs de le falre Lourner menLalemenL pour s'en
rendre compLe.
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -1S-
ue deux choses l'une : ou blen la valeur n gure dans le
Lableau, ou blen elle n'y gure pas. Mals dans Lous les cas,
|'a|gor|thme ne do|t produ|re qu'une seu|e rponse, que|
que so|t |e nombre d'|ments que compte |e tab|eau. Cr,
|'a|gor|thme c|-dessus envo|e |'cran autant de messages
qu'|| y a de va|eurs dans |e tab|eau, dans noLre cas 20
messages !
ll y a donc une erreur manlfesLe de concepuon : l'ecrlLure
du message ne peuL se Lrouver a l'lnLerleur de la boucle ,
elle dolL gurer a l'exLerleur. Cn ne peuL savolr sl la valeur
esL dans le Lableau ou non, un|quement |orsque |e
ba|ayage du tab|eau est ennrement accomp||.
nous reecrlvons donc ceL algorlLhme en plaanL le LesL
apres la boucle. lauLe de mleux, on se conLenLera de falre
dependre pour le momenL la reponse d'une varlable
booleenne que nous appellerons 1rouve.
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tab|eaux -16-
rogramme 1
1ab|eau 1ab(20) en Numr|que
Var|ab|e n en Numr|que
Dbut
Lcr|re "LnLrez la valeur a rechercher"
L|re n
our l 0 a 1
???
lln our
S| 1rouve A|ors
Lcr|re "n falL parue du Lableau"
S|non
Lcr|re "n ne falL pas parue du Lableau"
I|nS|
I|n

3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -17-
ll ne nous resLe plus qu'a gerer la varlable 1rouve.
Cecl se falL en deux eLapes.
un LesL guranL dans la boucle, lndlque lorsque la
varlable 1rouve dolL devenlr vrale (a savolr,
lorsque la valeur n esL renconLree dans le Lableau).
Auenuon : le LesL esL asymeLrlque. ll ne comporLe
pas de "slnon , l'aecLauon par defauL de la
varlable 1rouve, donL la valeur de deparL dolL Lre
evldemmenL laux.
Au LoLal, l'algorlLhme compleL donne :
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -18-
rogramme 1
1ab|eau 1ab(20) en Numr|que
Var|ab|e n en Numr|que
Dbut
Lcr|re "LnLrez la valeur a rechercher"
L|re n
1rouve laux
our l 0 a 1
S| n = 1ab(l) A|ors
1rouve vral
I|nS|
lln our
S| 1rouve A|ors
Lcr|re "n falL parue du Lableau"
S|non
Lcr|re "n ne falL pas parue du Lableau"
I|nS|
I|n
3. U1ILISA1ICN DU ILAG: kLCnLkCnL DANS UN 1A8LLAU
Les tr|s -19-
La dlmculLe esL de comprendre que dans une
recherche, le probleme ne se formule pas de la mme
manlere selon qu'on le prend par un bouL ou par un
auLre. Cn peuL resumer alnsl : || sumt que N so|t ga|
une seu|e va|eur de 1ab pour qu'e||e fasse parne du
tab|eau. Ln revanche, || faut qu'e||e so|t d|rente de
toutes |es va|eurs de 1ab pour qu'e||e n'en fasse pas
parne.
volla la ralson qul nous obllge a passer par une
varlable booleenne , un drapeau qu| peut se |ever,
ma|s [ama|s se raba|sser. LL ceue Lechnlque de ag
dolL Lre mlse en uvre chaque fols que l'on se Lrouve
devanL parellle slLuauon.
AuLremenL dlL, connaiLre ce Lype de ralsonnemenL esL
lndlspensable.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -20-
nous allons Lermlner ce chaplLre par une
Lechnlque celebre de recherche, qul revele LouLe
son uullLe lorsque le nombre d'elemenLs esL Lres
eleve. ar exemple, lmaglnons que nous ayons un
programme qul dolve verler sl un moL exlsLe dans
le dlcuonnalre. nous pouvons supposer que le
dlcuonnalre a eLe prealablemenL enLre dans un
Lableau (a ralson d'un moL par emplacemenL). Cecl
peuL nous mener a, dlsons, 40 000 moLs.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -21-
une premlere manlere de verler sl un moL se
Lrouve dans le dlcuonnalre conslsLe a examlner
successlvemenL Lous les moLs du dlcuonnalre, du
premler au dernler, eL a les comparer avec le moL
a verler. Ca marche, mals cela rlsque d'Lre long :
sl le moL ne se Lrouve pas dans le dlcuonnalre, le
programme ne le saura qu'apres 40 000 Lours de
boucle ! LL mme sl le moL gure dans le
dlcuonnalre, la reponse exlgera LouL de mme en
moyenne 20 000 Lours de boucle. C'esL beaucoup,
mme pour un ordlnaLeur.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -22-
Cr, ll y a une auLre manlere de chercher, blen plus
lnLelllgenLe pourralL-on dlre, eL qul meL a proL le falL
que dans un dlcuonnalre, les moLs sonL Lrles par ordre
alphabeuque. u'allleurs, un Lre humaln qul cherche
un moL dans le dlcuonnalre ne llL [amals Lous les moLs,
du premler au dernler : ll uullse lul aussl le falL que les
moLs sonL Lrles.
our une machlne, quelle esL la manlere la plus
rauonnelle de chercher dans un dlcuonnalre ? C'esL de
comparer le moL a verler avec le moL qul se Lrouve au
mllleu du dlcuonnalre. Sl le moL a verler esL anLerleur
dans l'ordre alphabeuque, on salL qu'on devra le
chercher dorenavanL dans le premlere molue du dlco.
Slnon, on salL malnLenanL qu'on devra le chercher
dans la deuxleme molue.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -23-
A parur de la, on prend la molue de dlcuonnalre qul
nous resLe, eL on recommence : on compare le moL a
chercher avec celul qul se Lrouve au mllleu du morceau
de dlcuonnalre resLanL. Cn ecarLe la mauvalse molue,
eL on recommence, eL alnsl de sulLe.
A force de couper noLre dlcuonnalre en deux, puls
encore en deux, eLc. on va nlr par se reLrouver avec
des morceaux qul ne conuennenL plus qu'un seul moL.
LL sl on n'esL pas Lombe sur le bon moL a un momenL
ou a un auLre, c'esL que le moL a verler ne falL pas
parue du dlcuonnalre.
8egardons ce que cela donne en Lerme de nombre
d'operauons a eecLuer, en cholslssanL le plre cas :
celul ou le moL esL absenL du dlcuonnalre.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -24-
Au deparL, on cherche le moL parml 40 000.
Apres le LesL n1, on ne le cherche plus que parml 20 000.
Apres le LesL n2, on ne le cherche plus que parml 10 000.
Apres le LesL n3, on ne le cherche plus que parml 3 000.
eLc.
Apres le LesL n13, on ne le cherche plus que parml 2.
Apres le LesL n16, on ne le cherche plus que parml 1.
4. LA kLCnLkCnL DICnC1CMIUL
Les tr|s -2S-
LL la, on salL que le moL n'exlsLe pas. MorallLe : on
a obLenu noLre reponse en 16 operauons conLre
40 000 precedemmenL ! L'ecarL de performances
enLre la Lechnlque bruLale eL la Lechnlque
dlchoLomlque n'esL pas a demonLrer. Auenuon,
LouLefols, mme sl c'esL evldenL dans ce cas la : la
recherche dlchoLomlque ne peuL s'eecLuer que
sur des elemenLs prealablemenL Lrles.
Lh blen malnLenanL que [e vous al expllque
commenL falre, vous n'avez plus qu'a Lradulre !
AuLre appllcauon la recherche du zero d'une
foncuon.
LLS 1A8LLAUk MUL1IDIMLNSICNNLLS
lo poesuoo Je sovolt sl oo otJlooteot peot peoset
o'est pos plos lottessoote poe celle Je sovolt sl oo
soos-motlo peot ooqet - Ldgar . ul[sLra
1. CUkUCI LUSILUkS DIMLNSICNS ?
Les tab|eaux mu|nd|mens|onne|s -1-
renons le cas de la modellsauon d'un [eu de
dames, eL du deplacemenL des plons sur le
damler. un plon qul esL sur une case blanche
peuL se deplacer que sur les quaLre cases
blanches ad[acenLes.
Avec les ouuls que nous avons abordes [usque la,
le plus slmple seralL evldemmenL de modellser le
damler sous la forme d'un Lableau. Chaque case
esL un emplacemenL du Lableau, qul conuenL par
exemple 0 sl elle esL vlde, eL 1 s'll y a un plon. Cn
aurlbue comme lndlces aux cases les numeros 1
a 8 pour la premlere llgne, a 16 pour la
deuxleme llgne, eL alnsl de sulLe [usqu'a 64.
1. CUkUCI LUSILUkS DIMLNSICNS ?
Les tab|eaux mu|nd|mens|onne|s -2-
un plon place dans la case numero l, auLremenL dlL la
valeur 1 de Cases(l), peuL bouger vers les cases
conugus en dlagonale. Cela va nous obllger a de
peuLes acrobaues lnLellecLuelles : la case slLuee [usLe
au-dessus de la case numero l ayanL comme lndlce
l-8, les cases valables sonL celles d'lndlce l-7 eL l-. ue
mme, la case slLuee [usLe en dessous ayanL comme
lndlce l+8, les cases valables sonL celles d'lndlce l+7
eL l+.
8len sr, on peuL fabrlquer LouL un programme
comme cela, mals le molns qu'on pulsse dlre esL que
cela ne faclllLe pas la clarLe de l'algorlLhme.
ll seralL evldemmenL plus slmple de modellser un
damler par. un damler !
2. 1A8LLAUk DLUk DIMLNSICNS
Les tab|eaux mu|nd|mens|onne|s -3-
L'lnformauque nous ore la posslblllLe de declarer
des Lableaux dans lesquels les valeurs ne sonL pas
reperees par une seule, mals par deux coordonnes.
un Lel Lableau se declare alnsl :
1ab|eau Cases(8, 8) en Lnners
Cela veuL dlre : reserve mol un espace de memolre
pour 8 x 8 enuers, eL quand ['aural besoln de l'une de
ces valeurs, [e les repereral par deux lndlces.
our noLre probleme de dames, les choses vonL
serleusemenL s'eclalrclr. La case qul conuenL le plon
esL dorenavanL Cases(l, [). LL les quaLre cases
dlsponlbles sonL Cases(l-1, [-1), Cases(l-1, [+1), Cases(l
+1, [-1) eL Cases(l+1, [+1).
2. 1A8LLAUk DLUk DIMLNSICNS
Les tab|eaux mu|nd|mens|onne|s -4-
kLMAkUL LSSLN1ILLLL :
I| n'y a aucune d|rence qua||tanve entre un
tab|eau deux d|mens|ons ( |, [ ) et un tab|eau
une d|mens|on ( | * [ ). De mme que |e [eu de
dames qu'on v|ent d'voquer, tout prob|me
qu| peut tre mod||s d'une man|re peut auss|
tre mod||s de |'autre. S|mp|ement, |'une ou
|'autre de ces techn|ques correspond p|us
spontanment te| ou te| prob|me, et fac|||te
donc (ou comp||que, s| on a cho|s| |a mauva|se
opnon) |'cr|ture et |a ||s|b|||t de |'a|gor|thme.
3. 1A8LLAUk N DIMLNSICNS
Les tab|eaux mu|nd|mens|onne|s -S-
Sl vous avez comprls le prlnclpe des Lableaux a deux
dlmenslons, ll n'y a aucun probleme a passer au
manlemenL de Lableaux a Lrols, quaLre, ou pourquol pas
neuf dlmenslons. C'esL exacLemenL la mme chose. Sl [e
declare un Lableau 1lu(2, 4, 3, 3), ll s'aglL d'un espace
memolre conLenanL 3 x 3 x 4 x 4 = 240 valeurs. Chaque
valeur y esL reperee par quaLre coordonnees.
Le prlnclpal obsLacle au manlemenL sysLemauque de ces
Lableaux a plus de Lrols dlmenslons esL que le
programmeur, quand ll conolL son algorlLhme, alme blen
falre des peuLs grlboulllls, lmaglner les boucles dans sa
LLe, eLc. Cr, auLanL ll esL faclle d'lmaglner concreLemenL
un Lableau a une dlmenslon, auLanL cela resLe falsable
pour deux dlmenslons, auLanL cela devlenL plus
compllque pour les Lableaux a Lrols dlmenslons eL hors de
porLee de LouL morLel au-dela.
Lxerc|ces

You might also like