Vous êtes sur la page 1sur 5

Licence ST

Plan de la sance

Universit Claude Bernard Lyon I




LIF1 : Algorithmique et
Programmation C

Comprendre lutilit des tableaux


Apprendre manipuler des tableaux
1 dimension
2 dimensions
Multi-dimensions





Utilit des tableaux : exemple




Calcul dune moyenne de n notes

Solution sans tableau

Application au cas particulier des ensembles




Les tableaux

Tableau : dfinition

affichage du contenu du tableau


initialisation du tableau

Ide : rassembler toutes cas variables dans une


structure de donne particulire : le tableau !!!
3




Indice < nombre dlments du tableau !!!


chaque entre (lment) du tableau sera
dsigne par son indice


T[i-1] dsignera la ime case du tableau


6

Initialisation dun tableau

tampon T[i]
T[i] T[j]
T[j] tampon




fin
7

T : tableau [ 10 ] de entier
T dsignera un tableau contenant 10 valeurs de type
entier
Attention : les indices valides seront compris entre 0
et 9 inclus

procdure permutation ( T : tableau[10] de entier,i : entier, j : entier )


prconditions : 0 i 9, 0 j 9
donnes : i, j
donne/rsultat : T
Description : effectue la permutation de deux lments dans un
tableau
variable locale : tampon : entier
Dbut

On connat les deux indices des cases


permuter notes i et j
On passe par lintermdiaire dune variable
tampon de mme type que le contenu du
tableau
On effectue la permutation
Tableau donn et modifi  donne et
rsultat

T : tableau [ nbcases ] de type




Exemple : pour permuter 2


lments d'un tableau

Exemple : pour permuter 2


lments d'un tableau

Notation trs lourde (surtout si beaucoup de notes


grer

Tableau une dimension :


dclaration

Un tableau est de taille fixe, dfinie lors de


sa dclaration
 Chaque lment est manipul
individuellement
 Pas d'opration de manipulation globale de
tableau


crire la somme de ces n variables

Implique de connatre au dpart le nombre de notes


(pour dclarer le bon nombre de variables

Tableau : dfinition

Structure de donnes qui contient une


collection d'lments de mme type (ex :
tableau dentiers, de rels, de structures)
Chaque lment a une position dfinie dans
le tableau : dsigne par un indice
Lindice dun tableau est ncessairement de
type entier

Dclarer autant de variables que de notes

Par dfaut les tableaux sont vides : pas


initialiss
Cest incorrect daccder une case qui ne
contient rien ou nimporte quoi !!!, mais
lordinateur ne vous le dira pas.
Initialisation : donner chacune des cases
du tableau une valeur
En gnral on met des 0 partout
Certains langages acceptent les initialisations
des tableaux en bloc


Cas du C par exemple : int T[10]={0};

Initialisation dun tableau

Initialisation dun tableau

procdure initialisation ( T : tableau[10] de entier )


prconditions : aucune
donne/rsultat : T
description : met des 0 dans toutes les cases du tableau
variable locale : indice : entier
dbut

tableau : structure de stockage

procdure initialisation ( T : tableau[10] de entier )


prconditions : aucune
donne/rsultat : T
description : met des 0 dans toutes les cases du tableau
variable locale : indice : entier
dbut

indice 0
TantQue indice < 10 Faire




Pour indice allant de 0 9 par pas de 1 faire


T[indice] 0
Finpour

T[indice] 0
indice indice + 1

fin

FinTantQue
fin


10

11

tableau : remplissage


Partiel : certaines cases sont vides





0

Cases entre deux indices i et j donns remplies

Recherche du plus petit lment sur


une partie du tableau (indices)

De nombreux algorithmes ncessitent de


travailler sur une partie de tableau
identifie par :


Premires cases seulement sont utilises

12

Tableau rempli partiellement

Complet (toutes les cases contiennent une


valeur) 3 6 8 2 9 0 4
0

Un tableau permet de stocker diffrentes


informations ayant le mme type
Chaque lment est identifi par sa position
nombre d'entre maximal : fix par la dclaration
= taille du tableau
nombre d'entre utilises : mmoriser dans une
ou plusieurs variables grer
On peut dclarer un tableau de 10 cases et nen
utiliser que 5  surdimensionnement
Attention la rciproque nest pas vraie !! Si on
dclare 5 cases on ne peut pas accder la 7me

indice de dbut (not p dans la suite)


indice de fin (not q)

Il faut tout moment tre capable de


savoir en quels indices le tableau est
rempli

8 2
0

13

15

Tableau 2 dimensions


Dclaration :

T : tableau [10] [5] dentiers




T sera un tableau de
10 lignes et 5
colonnes
Accs :


16

initialisation : hypothse que le premier


lment (correspondant l'indice p) est le
plus petit du tableau
balayage des lments de lments dindices
p+1 q pour chercher ventuellement un
lment plus petit qui deviendra le minimum
courant
en fin de balayage, le plus petit lment est
trouv

14

Recherche du minimum dun


tableau : algorithme
fonction minimum( T : tableau[100] de entier, p : entier, q : entier) : entier
Donnes : T, p, q
Prconditions :100>q>=p >= 0
Description : retourne le minimum dun tableau
Variable locale : i : entier,m : entier
Dbut
m T[p]
ip+1
TantQue i <= q Faire
Si T [i] < m Alors
m T[i]
FinSi
ii+1
FinTantQue
Retourner m
Fin

Pour rechercher le minimum :

T[i+1][j+1]

Tableau 2 dimensions : utilit

T[0][0] T[0][1]
T[1][0]


T[2][1]

Modlisation de la notion mathmatique


de matrice
Modlisation dune grille :



T[6][3]

dsigne la case la
ime ligne et jme
colonne

17

bataille navale
Tetris

Modliser une surface ou un plan

18

Initialisation : avec des Tant que


procdure initialisationA0 ( T : tableau[10][10] de entier )
donne/rsultat : T
prconditions : aucune
description : met des 0 dans toutes les cases du tableau 2D
variable locale : i : entier, j : entier

Initialisation : avec des Pour

La matrice identit

procdure initialisationA0 ( T : tableau[10][10] de entier )


donne/rsultat : T
prconditions : aucune
description : met des 0 dans toutes les cases du tableau 2D
variable locale : i : entier, j : entier




dbut
i0
TantQue i < 10 Faire
j0
TantQue j < 10 Faire
T[i][j] 0
jj+1
FinTantQue
ii+1
FinTantQue

dbut
Pour i allant de 0 9 par pas de 1 faire
Pour j allant de 0 9 pas de 1 faire
T[i][j] 0
FinPour
FinPour
fin

Matrice carre : tableau de taille n*n


Des 0 partout sauf sur la diagonale :
si i=j alors on met un 1
Algorithme de remplissage


On initialise dans un premier temps avec


que des 0 (initialisationA0)
On met les 1 sur la diagonale T[i][i]=1

fin
19

La matrice identit : Tant Que


procdure identit ( T : tableau[10][10] de entier )
donne/rsultat : T
prconditions : aucune
description : met des 1 sur la diagonale du tableau
variable locale : i : entier
dbut
initialisationA0(T)
i0
TantQue i < 10 Faire
T[i][i] 1
ii+1
FinTantQue
Fin

20

21

Remarques, extension nD

La matrice identit : Pour


procdure identit ( T : tableau[10][10] de entier )
donne/rsultat : T
prconditions : aucune
description : met des 1 sur la diagonale du tableau
variable locale : i : entier
dbut
initialisationA0(T)
Pour i allant de 0 9 par pas de 1 faire
T[i][i] 1
FinPour
Fin

Comme pour les tableaux 1 dimension, les nombres


de lignes et de colonnes effectivement utilises
peuvent etre passs en paramtres :




taille dans chaque dimension


indices dbut et fin dans chaque dimension (bloc)
Utilisation partielle de la matrice

Nombre de dimensions aussi grand que on veut :




T3 : tableau [N][M][O] de truc

Limitation des :




22

Produit matrice - vecteur :


dfinition


25

Reprsentation graphique et visuelle difficile pour programmeur


Manipulation des indices

23

fonction matriceVecteur (M : tableau[10][10] de rel,V : tableau[10] de rel ) :


tableau[10] de rel
donnes : T, V
prconditions : aucune
description : effectue le produit dune matrice par un vecteur
variable locale : i, j : entier, MV : tableau[10] de rel
dbut
i0
TantQue i < 10 Faire
MV[i] 0
j0
TantQue j < 10 Faire
MV[i] MV[i]+M[i][j] * V[j]
jj+1
FinTantQue
ii+1
FinTantQue
Retourner MV
fin

24

Structure abstraite : l'ensemble

Produit matrice - vecteur :


algorithme

produit scalaire de chaque ligne de la matrice


par le vecteur
les rsultats constituent le vecteur rsultat

3 dimensions







Application directe des tableaux


Objet mathmatique
restriction un ensemble fini
chaque lment est unique
une valeur appartient ou n'appartient pas
un ensemble
oprations sur les ensembles :




26

union
intersection
diffrence

ordre partiel : relation d'inclusion

27

Utilisation d'un tableau




Tableau des 10 premires


valeurs de la factorielle

Dclaration du tableau : dimension =


cardinalit maximale de l'ensemble
Si toutes les positions du tableau ne sont
pas significatives, il faut mmoriser celles
qui contiennent des donnes valides :



Conditions densemble vrifies ??




gnralement places en dbut de tableau


une variable indique le nombre de positions
valides partir du premier indice (n lments
occuppent les indices compris entre 0 et n-1)

Tableau des 10 premires


valeurs de la factorielle

Ensemble fini : 10 valeurs uniquement


Valeurs uniques : les valeurs de la factorielles
pour n de 1 10 sont bien toutes diffrentes

Dclaration :


On peut utiliser ce concept mathmatique


pour formaliser le problme
Dfinition dun tableau contenant ces valeur

Les valeurs contenues dans le tableau sont


indtermines
procdure d'initialisation

Attention : par dfinition, les tableaux seront


passs en Donnes/Rsultats


28

procdure InitialisationFact10 (Fact10 : tableau [ 10 ] de entier)


Donnes/Rsultats : Fact10
prconditions : aucune
description : remplit le tableau avec les 10 premires valeurs
des factorielles
Variable locale : i : entier
dbut
i0
TantQue i < 10 Faire
Fact10[i] factorielle (i)

30

relation d'appartenance


procdure InitialisationFact10 (Fact10 : tableau [ 10 ] de entier)


Donnes/Rsultats : Fact10
prconditions : aucune
Variable locale : i : entier
dbut
Pour i allant de 0 9 par pas de 1 faire
Fact10[i] factorielle (i)
FinPour
fin

Test boolen : renvoie vrai ou faux


Rpond la question : la valeur x
appartient-elle Fact10 ?
Pour rpondre cette question, la valeur x
sera compare aux lments contenus dans
le tableau Fact10 jusqu' :


ii+1
FinTantQue
fin

31

relation d'appartenance


33

la relation d'appartenance :
algorithme

fonction appartientAFact10( Fact10 : tableau[10] de entier, x : entier) : boolen


Donnes : x, Fact10
Prconditions : aucune
description : teste si lentier x appartient au tableau
Variable locale : i : entier
dbut
i0
TantQue i < 10 Faire
Si Fact10[i] = x Alors
Retourner Vrai
FinSi
ii+1
FinTantQue
Retourner Faux
Fin

Car les valeurs de la factorielles sont ranges


dans lordre croissant dans le tableau :
factorielle(n)<factorielle(n+1) pour tout n
Le tableau est donc tri

Dfinir la relation dappartenance revient


donc chercher llment dans le tableau
34

soit trouver un lment dont la valeur est gale


x, la valeur x appartient Fact10
soit tous les lments ont t compars x et
aucun n'est gale, la valeur x n'appartient pas
Fact10

32

la relation d'appartenance :
algorithme

Amlioration : on sarrte ds quon trouve


une valeur suprieure celle recherche

c'est dire que les modifications des entres du tableaux seront


conserves aprs l'excution de la fonction ou de la procdure

29

Initialisation : avec un Pour

Initialisation : avec un TantQue

Fact10 : tableau [ 10 ] de entier

Ici, on ne rcrit pas lalgorithme avec une boucle


pour la place du tant que :



Variante : on sort de la boucle ds quon dpasse la


valeur recherche


35

Le nombre maximum ditrations est connu (10)


Mais il est possible de sortir avant la fin si on trouve
llment

Condition supplmentaire dans le "tant que"

36

fonction appartientAFact10( Fact10 : tableau[10] de entier, x : entier) : boolen


Donnes : x, Fact10
Prconditions : aucune
Description : teste si lentier x appartient au tableau
Variable locale : i : entier
dbut
i0
TantQue (i < 10) et (Fact10[i]<x) Faire
Si Fact10[i] = x Alors
Retourner Vrai
FinSi
ii+1
FinTantQue
Retourner Faux
Fin

Si on voulait maintenant les 15 premires


valeurs de la factorielle
Faut-il rcrire la fonction d'appartenance ?





dans la dclaration
dans le test d'arret de la boucle

Paramtrer !



la taille du tableau si balayage complet


indices de dbut et de fin, pour travailler sur
une partie du tableau
38

appartenance paramtre


Dclaration :

int main(void)
{
int tableau[10];
int i;
/* remplir le tableau */
i= 0;
while(i < 10)
{
tableau[i]= i;
i= i+1;
}
return 0;
}

Oprations sur le tableau :




Aucune (limitation du C/C++)

Oprations sur un lment :




Un lment T[i] est une variable, les mmes


oprations sont disponibles.

Utilisation comme paramtre :




Identique la dclaration

Limitations du C/C++

Exemple : affichage dun tableau

int main(void)
{
int tableau[10];
...
// remplir le tableau

Exemple dutilisation des


tableaux en C : remplissage

type T[dimension]; //tableau 1 dimension


type T[ligne][colonne]; //tableau 2
dimensions

40

39

Cas des tableaux

fonction appartientA ( T : tableau[100] de entier, n : entier, x : entier) : boolen


Donnes : x, T, n (n: nombre de cases occupes dans le tableau)
Prconditions : 100 > n > 0
Description : teste si lentier x appartient au tableau
Variable locale : i : entier
dbut
i0
TantQue (i < n) et (T[i]<x) Faire
Si T [i] = x Alors
Retourner Vrai
FinSi
ii+1
FinTantQue
Retourner Faux
Fin

i= 0;
while(i < 10)
{
cout << T[i];
i= i+1;
}

fonction appartientA ( T : tableau[100] de entier, n : entier, x : entier) : boolen


Donnes : x, T, n n: nombre de cases occupes dans le tableau
Prconditions : 100 >= n > 0
description : teste si lentier x appartient au tableau
Variable locale : i : entier
dbut
i0
TantQue i < n Faire
Si T [i] = x Alors
Retourner Vrai
FinSi
ii+1
FinTantQue
Retourner Faux
Fin

seule la taille du tableau change,

37

void affiche(int T[10])


{
int i;

appartenance paramtre

Extension du problme

la relation d'appartenance :
algorithme

C/C++ ne permet ni de renvoyer plusieurs


valeurs, ni de renvoyer un tableau 
uniquement des types de retour simples
(entier, rel, boolen)
Transformer les fonctions concernes
(plusieurs rsultats ou tableau) en
procdures et utiliser des paramtres
rsultats supplmentaires. (cf CM4)

Dclaration du
tableau de 10 entiers

Remplissage de la
case i avec comme
valeur celle de son
indice

Conclusion


Structure de donnes tableau






1 dimension
N dimensions
De nimporte quoi

Notion densemble mathmatique modlis


dans un tableau
Algorithmes de bases

affiche(tableau);
return 0;
}
45

Vous aimerez peut-être aussi