Types de données indexés
Liene 2 MASSsemestre 2,2007/08
Exerie 1 : Veteurs
a- Un veteur est une suite nie de nombresréels. De plus,les veteurstoussontde dimension
n
déterminé. Lastruture de donnéetableau de talle
n
est donbien adaptéeàla représentation desveteurs.Lepremierindexd'un tableauétant
0
,laoordonnéei eme duveteurseral'indexi − 1
.
b- Algorithme somme(u,v: tableauderéel,n: entier): tableauderéel
début
variable i: entier
variable w: tableauderéel
pouride 0à
n − 1
fairew[i] ← u[i] + v[i]
npour
retourner
w
n
- Algorithme distane(u,v: tableauderéel,n : entier): réel
début
variable i: entier
variable d: réel
d ← 0
pouride 0à
n − 1
faired ← d + (u[i] − v[i]) 2
npour
retourner
d
n
d- Algorithme produitSalaire(u,v: tableauderéel,n : entier): réel
début
variable i: entier
variable p: réel
p ← 0
pouride 0à
n − 1
fairep ← p + u[i] × v[i]
npour
retourner
p
Ilestpossiblededélarerlavariablesuivante:
Variable M : tableau de tableaux de réels
Questions :
a- Ensuivantlogiqueoùhaqueasedutableauontientequiestmarquéaprèsle"de",onpourrait
penser représenteruntableau detableaux paruntableaudontlesasesontiennentuntableau.
Maise n'estpasfaileàreprésenter(trop large)et pasfailedeparourirvisuellement. Ilvaut
mieux représenter un tableau de tableaux par un retangle où haque ligne un tableau. Par
exemple,si
M
est untableaux detaille4
ontiennantdestableauxdetaille7
,nousreprésentonsM
par:b- Algorithme somme(M:tableau detableauderéel,n: entier): réel
début
variable i,j: entier
variable s: réel
s ←
0pouride 0à
n − 1
fairepourjde 0à
n − 1
faires ← s + M [i][j]
npour
npour
retourner
s
n
- Algorithme somme(M:tableau detableauderéel,n: entier): réel
début
variable i: entier
variable s: réel
s ←
0pouride 0à
n − 1
faires ← s + M [i][i]
npour
retourner
s
d- Algorithme somme(M:tableau detableauderéel,n: entier): réel
début
variable i,j: entier
variable s: réel
s ←
0pouride 0à
n − 1
fairepourjde 0à
i − 1
faires ← s + M [i][j]
npour
npour
retourner
s
n
Exerie 3 : Attente de bus
a- Il fautune struture apable de ontenirtous lesretards. Chaque retard peutêtre indexépar un
numérodejoursdel'année2007. Untableaupeutêtreutiliserpouresalgorithmes. Maintenantquelle
taille hoisir ? Si onhoisit dene pasavoirde asepour lesjoursnon-ouvrables,on pourra parourir
touteslesasesdutableau,maisilfaudrafaireattentiondanslealuldujourdelasemaine. Ilfaudra
aussialulerorretementlesindiesdesasesorrespondaumoisdejuin. Al'opposé,sionhoisitde
taille 365,il faudrafaireattentionauparoursdesasesmaislesjoursdanslasemaineserontfailesà
aluler.
Dans la suite, nous allonshoisir une taille de
n = 365
. Les lundis seront aux indiesi
tels quei modulo 7 = 0
,lesmardistelsquei modulo 7 = 1
,et. Noussuposeronsqueleretarddui emejoursde
l'annéeest ontenudans laase d'indie
i − 1
,et quelesasesorrespondantauxsamediet dimanhe ainsiquelesjoursfériésontiennentzéro. IlyaJ =
joursdeserviesdansl'année.b -
Algorithme max(R:tableauderéel,n: entier) : réel
début
variable i: entier
variable max: réel
max ←
0pouride 0à
n − 1
fairesi
max < R[i]
alorsmax ← R[i]
nsi
npour
retourner
max
n
-
Algorithme stats(R:tableauderéel,n: entier,m,s: réel): rien
début
variable i: entier
variable m,s: réel
m ←
0s ←
0n − 1
m ← m + R[i]
s ← s + R[i] × R[i]
npour
m ← m/J
s ← s/J − m × m
n
d -
Mois ind. début ind. n
janvier 0 30
février 31 58
mars 59 89
avril 90 119
mai 120 150
juin 151 180
Ilyavait
22
joursdeservieenjuin2007.Algorithme moyenneJuin(R:tableauderéel,n: entier): réel
début
variable i: entier
variable m : réel
m ←
0pouride
151
à180
fairem ← m + R[i]
npour
m ← m/22
retourner
m
n
e-Ilyavait
53
lundien2007.Algorithme moyenneLundi(R:tableauderéel,n: entier): réel
début
variable i: entier
variable m : réel
m ←
0i ←
0tant que
i < 365
fairem ← m + R[i]
i ← i + 7
ntant que
m ← m/53
retourner
m
n
Algorithme moyenneJour(R: tableauderéel,n: entier): tableauderéel
début
variable i: entier
variable retardMoy: tableaude7réel
pouride
0
à6
faireretardM oy[i] ← 0
npour
pouride
0
àn − 1
faireretardM oy[i modulo 7] ← retardM oy[i modulo 7] + R[i]
npour
retardM oy[0] ← retardM oy[0]/53
pouride
1
à6
faireretardM oy[i] ← retardM oy[i]/52
npour
retourner
retardM oy
n
f-
Algorithme pourentageSup10(R:tableauderéel,n: entier): réel
début
variable i: entier
variable nb: réel
nb ←
0pouride 0à
n − 1
fairesi
R[i] > 10
alorsnb ← nb + 1
nsi
npour
retourner
nb/J
n
g-
Algorithme pourentageSupMoyenne(R:tableauderéel,n: entier) : réel
début
variable i: entier
variable m,s,nb: réel
stats(R,n,m,s)
nb ←
0pouride 0à
n − 1
fairesi
R[i] > m
alorsnb ← nb + 1
nsi
npour
retourner
nb/J
n
h -
Pour haune des 52 semaines de l'année, on indique dans un tableau résultats le numéro de la
semaineoùleretardaétéleplusgrand. Lenombre
− 1
indiquequ'ilyapasderetarddanslasemaine.Algorithme plusGrandRetard(R:tableauderéel,n : entier,numSemaine: entier) : entier
début
variable i: entier
variable max,jour: réel
max ←
0jour ← − 1
pouride
numSemaine × 7
ànumSemaine × 7 + 6
fairesi
R[i] > 0
etmax < R[i]
alorsmax ← R[i]
npour
retourner
jour
n
Algorithme jourDuPlusGrandRetard(R: tableauderéel,n: entier): tableaud'entier
début
variable i: entier
variable Jretard: tableau de52entier
pouride 0à
51
faireJretard[i] ←
plusGrandRetard(R, n,i) npourvariable max: réel
variable jour: réel
retourner
Jretard
n
i -
Algorithme frequeneJour(R:tableauderéel,n: entier) : tableaud'entier
début
variable i: entier
variable nbRetard: tableaude7entier
variable max,jour: réel
pouride
0
à6
fairenbRetard[i] ← 0
npour
pouride 0à
n − 1
fairesi
R[i] > 0
alorsnbRetard[i modulo 7] ← nbRetard[i modulo 7] + 1
nsi
npour
max ←
0jour ← 0
pouride
0
à6
fairesi
max < nbRetard[i]
alorsmax ← nbRetard[i]
jour ← i
nsi
npour
retourner
jour
n
Exerie 4 : Milliard de seondes
Nepasoublierlesannéesbissextiles...