Title: Les tableaux - 1
1LES TABLEAUX
2Les tableaux Introduction
Voici un petit exercice Écrivez un programme
qui permet de saisir tous les jours de lannée la
température et qui affiche à la fin de lannée la
température minimale, la température maximale, la
température moyenne, et la température médiane
sur lannée. Les premiers calculs (minima, maxima
et moyenne) de ce programme ne pose pas de
problème majeur en effet la même variable peut
servir pour la saisie de toutes les températures,
il suffit simplement de mettre à jour au fur et à
mesure le minima, le maxima et la somme des
températures puis dafficher les résultats. Ce
qui donne le programme
3 program afficher_min_max_moyenne
var j,t, min, max, somme INTEGER
begin max Low(INTEGER) min
High(INTEGER) somme 0 j 1
// premier janvier while jlt366 do begin
traiter_temps(t,min,max,somme) j
j1 end (while)
writeln('minima ',min) writeln('maxima
',max) writeln('moyenne ',somme/365)
end.
4- Par contre la partie médiane pose un sérieux
problème en effet on ne peut pas calculer à la
volée la médiane sans mémoriser tous les
nombres. - On pourrait bien sûr déclarer 365 variables t1,
t2, , t365 - Mais comment alors faire une boucle pour saisir
ces 365 variables distinctes et sans rapport
(hormis leur nom) et ensuite les traiter. - Les tableaux vont permettre de regrouper ces
différentes variables en une seule et ensuite de
pouvoir faire des traitements un peu comme le
permet la notation indicielle en mathématiques -
i365 -
Sti -
i1
5LES TABLEAUX DÉFINITION
Les tableaux permettent de regrouper des valeurs
de même type, chaque élément étant repéré par un
indice (sa place) dans cet assemblage. On peut
définir des types tableau ou même des variables
tableau sans que le type soit défini. Exemples
type T_TAB_BOOL array3..7 of BOOLEAN
var tab_bool array'a'.. 'z' of BOOLEAN
Dans le premier si on veut une variable de ce
type il faudra la déclarer t T_TAB_BOOL .
Dans le second cas le type de tab_bool est
anonyme et aucun autre objet na le même type.
6Pour définir un type ou une variable tableau on
doit donc préciser le type des éléments (BOOLEAN
dans nos exemples) ainsi que lintervalle des
indices (3..7 dans le premier cas et 'a'.. 'z'
dans le second). Comme on peut le voir, cet
intervalle nest pas obligatoirement un
intervalle dentiers, ce peut être un intervalle
de tout type discret (prédéfini ou non).
Quelques exemples type T_JOUR
(LUN,MAR,MER,JEU,VEN,SAM,DIM) type T_COULEUR
(BLEU,JAUNE,ROUGE) type T_TAB
arrayT_JOUR of FLOAT var tab
arrayT_COULEUR of T_JOUR
7LES TABLEAUX UTILISATION
Que peut-on faire avec
des tableaux ? Comme pour les record , dans
certains langages, certaines opérations comme le
test dégalité (pas en Pascal) ou laf-fectation
sont définies sur des objets de même type
tableau, donc si on a type T_TAB ... var
t1, t2 T_TAB On peut écrire dans un
programme des choses du genre if t1 t2
then ... REFUSÉ en Pascal t1 t2 Sinon il
faut bien sûr avoir accès à chaque élément (on
parle de case) du tableau et ceci se fait en
écrivant le nom du tableau suivi de lindice
entre crochets (exemple t1LUN).
8Un exemple program afficher_produit_scalaire
const DIM 5 type T_VECTEUR
array1..DIM of REAL function
prod_scal(u,vT_VECTEUR)REAL var resultat
REAL begin resultat 0 for i 1
to DIM do begin resultat resultat
uivi end (for) prod_scal
resultat end (prod_scal)
9 procedure saisir(out u ...) begin
... end (saisir) procedure
afficher(const u ...) begin ... end
(afficher) var u,v T_VECTEUR begin
saisir(u) saisir(v) afficher(u)
write('.') afficher(v) write('
',prod_scal(u,v)) end.
10TABLEAUX À PLUSIEURS DIMENSIONS
On a besoin parfois dutiliser des tableaux à
plusieurs dimensions (par exemple pour les
matrices en algèbre linéaire). Cest bien sûr
parfaitement faisable mais en réalité on ne
manipule que très rarement des tableaux à plus de
deux dimensions. Il faut alors signaler pour
chaque dimension les indices type T_TAB
arrayT_IND1,T_IND2,,T_INDn of T_ELEMENT
équivalent à type T_TAB arrayT_IND1 of
arrayT_IND2 of
of arrayT_INDn of T_ELEMENT Exemple
Const NB_LIG 5 NB_COL 7 type T_MAT
array1..NB_LIG,1..NB_COL of REAL (ou type
T_MAT array1..NB_LIG of 1..NB_COL of REAL
) Si m T_MAT on peut écrire m2,4 ou
m24
11LES TABLEAUX FONCTIONS
Comme pour les types énumérés il existe des
fonctions bien utiles pour les tableaux. Low
variable ou type ? le plus petit indice High
variable ou type ? le plus grand indice Length
variable ? le nombre
déléments Exemples type T_TAB1 is
array('A'.. 'D')of INTEGER var t1 T_TAB1
type T_TAB2 is array('A'.. 'D',1..3)of INTEGER
var t2 T_TAB2 on a alors Low(T_TAB1)
Low(t1) 'A' , High(t2'A') 3 et
Length(t1) 4 et Length(t2'A') 3