You are on page 1of 70

Initiation lalgorithmique

Universit MHamed Bougara Boumerds (UMBB)

Facult des sciences - Dpartement informatique

Introduction lalgorithmique

Les principes de lAlgorithmique et de


la Programmation

Fonctions et procdures

Dcembre 2015

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 1


Initiation lalgorithmique

Table des matires

1. Fonctions et procdures. ...................................................................................................................3


2. Les sous-programmes .......................................................................................................................3
2.1. Les fonctions...................................................................................................................................4
2.1.1. Structure dune fonction .............................................................................................................4
2.1.2. Utilisation des fonctions .............................................................................................................5
2.1.2.1. Fonctions SANS paramtres .....................................................................................................5
2.1.2.2. Fonctions AVEC paramtres .....................................................................................................8
2.1.2.3. Fonctions imbriques ...............................................................................................................11
2.2. Les procdures .............................................................................................................................11
2.2.1. Structure dune procdure .......................................................................................................12
2.2.2. Utilisation des procdures........................................................................................................12
2.2.2.1. Procdures SANS paramtres.................................................................................................12
2.2.2.2. Procdures AVEC paramtres.................................................................................................13
2.3. Porte des variables .....................................................................................................................14
2.3.1. Variables globales ...................................................................................................................14
2.3.2. Variables locales......................................................................................................................15
2.4. Mode de passage des paramtres ...............................................................................................16
2.4.1. Passage par valeur ..................................................................................................................16
2.4.2. Passage par adresse ...............................................................................................................17

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 2


Initiation lalgorithmique
1. Fonctions et procdures.
Tous les algorithmes que nous avons tudis jusqu prsent taient constitus dun seul
bloc de traitement.
Au fur et mesure que les exigences, dun problme, progressent, la taille de lalgorithme
augmente en consquence. Ce qui augmente aussi la complexit de sa gestion et de sa
comprhension.
Face un algorithme complexe, le programmeur dcompose le problme en mini-blocs
ayant chacun un rle bien prcis. Ces mini-blocs sont des sous-programmes (sous
algorithmes) appels Fonction ou procdure.
Par exemple, le programme, de la gestion de la scolarit, est divis en plusieurs sous-
programmes de gestions.

2. Les sous-programmes
Un programme relativement long doit tre dcoup en plusieurs petits programmes, appels
sous-programmes . Lutilisation de ces derniers, permet de faciliter lcriture du
programme et de comprendre son fonctionnement. De plus, ces sous-programmes
permettent dviter de rpter lcriture dun mme traitement dans plusieurs endroits du
programme.
Les sous-programmes sont identifis en dcomposant un problme en plusieurs sous-
problmes. La solution un sous problme donne lieu un sous programme.
En rsum, lutilisation des sous-programmes permet de :
1. damliorer la clart des programmes
2. doptimiser le nombre dinstructions
3. de faciliter la mise jour et la correction des erreurs.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 3


Initiation lalgorithmique

1. Les sous-programmes ne font pas partie du corps de lalgorithme principal.


2. A lappel du sous-programme, lalgorithme se branche la premire instruction de
celui-ci puis commence par lexcuter.
3. A la fin de lexcution du sous-programme, lalgorithme revient linstruction qui vient
tout de suite aprs le point dappel.

On distingue deux types de sous-programmes :


1. Les fonctions
2. Les procdures

2.1. Les fonctions


Une fonction est un algorithme, crit en dehors du corps de lalgorithme principal do, le
nom de sous-algorithme (sous-programme). Elle possde :
1. Un en-tte, pour prciser le nom de la fonction ;
2. Une zone de dclaration des variables, propres la fonction (partie dclaration) ;
3. Une zone dexcution des instructions (partie traitement).

A linstar de toutes les fonctions mathmatiques, en algorithmique, le rle de la fonction est


deffectuer un traitement spcifique pour renvoyer un rsultat.

2.1.1. Structure dune fonction


Le rle de la fonction est deffectuer un calcul et de renvoyer un et seulement un rsultat.
La structure dune fonction diffre lgrement de celle du programme principal.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 4


Initiation lalgorithmique

Fonction nomf (<paramtres>): type


Var
Listes de variables
Dbut
instructions
nomf expression ou bien retourne ( expression )
Fin ;

Cest un sous-programme qui :


a un nom : nomf
peut avoir des paramtres : paramtres
retourne une valeur dun certain type : type . Comme une fonction ne retourne
quune seule valeur, il est obligatoire dindiquer le type de la valeur retourne.
peut avoir besoin de variables propres la procdure
possde la partie traitement.
renvoie un rsultat : nomf expression ou bien retourne ( expression )

2.1.2. Utilisation des fonctions


Les fonctions sont utilises lorsque lon a besoin dcrire un sous-programme qui renvoi un
seul rsultat. Donc, une fonction a pour but principal deffectuer un calcul puis de renvoyer
un rsultat.
Suivant la nature du problme, lutilisation de la fonction peut se faire avec ou sans
paramtres.

2.1.2.1. Fonctions SANS paramtres


Les paramtres (que nous expliquerons leurs utilisations, plus loin dans ce chapitre)
permettent, la fonction, de recevoir des lments de calcul partir du point dappel de la
fonction.
Les paramtres sont facultatifs. La fonction suivante permet de dfinir la variable pi () .
Cette fonction ne possde pas de paramtres. Sil n'y a pas de paramtre, les parenthses
doivent rester prsentes et vides.
fonction pi(): rel ; fonction pi(): rel ;
dbut dbut
pi 3.1415926535897931 ; retourner (3.1415926535897931) ;
fin ; fin ;

1. pi : indique le nom de la fonction


2. rel : indique le type du rsultat que doit retourner la fonction
3. pi 3.1415926535897931: indique le rsultat qui est retourn au programme
principal

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 5


Initiation lalgorithmique

Cest deux fonctions donnent le mme rsultat quoiquelles diffrent dans la manire de
retourner le rsultat.
Le rsultat, de la fonction de gauche, est retourn dans la variable-fonction
pi , dont le nom doit tre le mme que celui de la fonction pi .
Le rsultat, de la deuxime fonction, est retourn sans passer par la variable-
fonction pi .

Dans le corps de lalgorithme principal, lappel la fonction peut apparatre :


dans une expression : circonfrence 2 * pi * r
dans une comparaison : Si x > pi alors
la droite d'une affectation : N pi
etc.

Lexemple suivant montre de quelle manire on fait appel une fonction, partir du corps
dun algorithme. Ce dernier permet de calculer la surface et la circonfrence dun cercle.

Algorithme UtiliserUneFonction ;
Var
r , circonf , surface : rel ;

// Dclaration de la fonction pi
fonction pi(): rel ; 1
dbut
pi 3.1415926535897931 ;
fin ;

debut
ecrire ( Donnez la valeur du rayon ) ; 2
lire ( r ) ;
surface pi * r * r ; 3
circonf 2 * pi * r ;
ecrire ( la surface = , surface) ;
ecrire ( la circonfrence = , cirdonf ) ;
fin .

Voyons maintenant son excution, ligne par ligne :


1. La fonction pi se trouve dans la partie des dclarations. A ce moment, elle nest
pas excutable.
2. Aprs la partie des dclarations, lalgorithme commence lexcution
3. Le calcul, de la surface et de la circonfrence, fait appel la fonction pi. C'est--dire
que pi sera remplac par la valeur 3.1415926535897931 dans les deux
expressions.

La fonction suivante permet de calculer la somme des N premiers entiers naturels et de


retourner le rsultat, sans recevoir des paramtres.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 6


Initiation lalgorithmique

fonction Somme( ) : entier ; 1-2


var
s , n , i : entier ;
debut
Ecrire ( Donner la valeur de N ) ;
Lire ( N ) ;
s 0;
pour i 1 n faire
s s+I;
Somme s; 3
fin ;

1. Somme ( ) : indique le nom de la fonction


2. entier : indique le type du rsultat que doit retourner la fonction
3. Somme s: indique le rsultat qui est retourn au programme principal

En algorithmique, les fonctions et les procdures apparaissent dans la partie des


dclarations, du programme principal

Algorithme UtiliserUneFonction ;
fonction Somme ( ) : entier ; 1-3
var
s , n , i : entier ; 4
debut
Ecrire ( Donner la valeur de n ) ; 5
Lire ( n ) ;
s 0;
pour i 1 n faire 6
s s+i;
Somme s; 7
fin ;
debut
ecrire(la somme = , somme) ; 2-8
fin .

Voyons maintenant son excution, ligne par ligne :


1. La fonction se trouve dans la partie des dclarations. A ce moment elle nest pas
excutable, puisquelle se trouve dans la partie des dclarations.
2. Aprs la partie des dclarations, lalgorithme commence lexcution linstruction
suivante :
crire(la somme = , somme) ;

Cest la seule instruction de lalgorithme. Cette instruction contient laffichage dun


commentaire la somme = suivie du nom de la fonction somme . Donc, elle fait
appel la fonction somme ( ) .
3. La fonction somme ( ) na pas de paramtre et elle est de type entier .
4. Les variables, n, s et i , sont dclares dans la fonction. Ce sont des variables
locales appartenant la fonction (nous allons expliquer plus loin ce quest une
variable locale)
5. La fonction nous demande de lui donner la valeur n , concerne par la somme
6. La boucle i excute le calcul de la somme s s + i des N premiers entiers
naturels

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 7


Initiation lalgorithmique

7. Ce point est trs important et il faut bien le comprendre. Dans ce cas, le rsultat, de
la fonction, est retourn dans une variable, dont le nom est obligatoirement le mme
que celui de la fonction.
Somme s;

8. Laffectation du rsultat dans la variable qui porte le mme nom que la fonction,
termine, automatiquement, lexcution de cette dernire et retourne au point dappel.
C'est--dire linstruction crire(la somme = , somme) ; pour afficher le rsultat
final

2.1.2.2. Fonctions AVEC paramtres


Les paramtres permettent au programme principal denvoyer, la fonction, des donnes et
des informations. Ces paramtres sont ncessaires la fonction pour quelle effectue un
calcul et renvoie un rsultat.
On distingue deux types de paramtres :
Les paramtres formels : Ce sont les variables dclares pendant la dclaration
du sous-programme.
Les paramtres effectifs : Ce sont les valeurs des variables envoyes au sous-
programme durant lappel de celui-ci.

Lexemple suivant montre comment utiliser des paramtres avec la fonction qui calcule le
carr dun nombre quelconque.

Fonction carre(n : entier): entier ;


Dbut
Carre n*n
fin ;

La fonction carre reoit une valeur dans le paramtre formel n de type entier .
Bien sr, la valeur retourne par la fonction carr est aussi de type entier .
La valeur reue, par le paramtre formel n , est envoye, partir du programme principal,
lors de lappel de la fonction.

Algorithme param ;
Var
x, y : entier ;

Fonction fcarre(n : entier): entier ;


Dbut
fcarre n*n;
fin ;
Dbut
Ecrire ( Donnez une valeur ) ;
Lire (x)
Ecrire( le carr de , x , = , fcarre ( x ) ) ; 1
y fcarre ( x ) 2
Ecrire( le carr de , x , = , y ) ;
Fin

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 8


Initiation lalgorithmique

Une fonction est manipule comme une variable simple. Cet algorithme fait appel la
fonction fcarre deux reprises :

1. Linstruction daffichage fait appel la fonction fcarre en lui envoyant la valeur


du paramtre effectif x . La fonction :

reoit la valeur de x dans son paramtre formel n ,


calcule le carr de n
renvoie le rsultat linstruction daffichage du programme principal pour
lafficher. Le rsultat est renvoy dans le nom de la fonction
fcarre n*n;

2. Le nom de la fonction apparat, toujours et une seule fois, dans la fonction pour
recevoir le rsultat final.
3. Linstruction daffectation fait appel la fonction fcarre en lui envoyant la valeur
du paramtre effectif x . La fonction :

reoit la valeur de x dans son paramtre formel n ,


calcule le carr de n
renvoie le rsultat linstruction daffectation du programme principal pour
laffecter la variable y . Le rsultat est renvoy dans le nom de la fonction
fcarre n * n ; .

La fonction est utilise comme une variable par les instructions :

daffectation . (partie expression, droite du signe daffectation),


daffichage ( crire ),
de test ( si, tant que, rpter ).

La fonction ne peut pas tre utilise par les instructions :

de lecture ( lire ),
daffectation .. (partie variable, gauche du signe daffectation).

Une fonction est un sous-programme qui retourne toujours un


et seulement un seul rsultat.

Lexemple suivant montre comment faire appel une fonction qui renvoie la valeur absolue
dun rel.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 9


Initiation lalgorithmique
Algorithme absolue ;
Var
x, y : rel ;
Fonction fabs( a : rel ) : rel ;
z : rel ;
Dbut
si z >= 0 alors
z a
sinon
z -a;
fabs z;
fin ;
Dbut
Ecrire ( Donnez une valeur ) ;
Lire (x)
y fabs ( x )
Ecrire( la valeur absolue de , x , = , y ) ;
Fin

Lexemple suivant montre une fonction qui reoit, comme paramtre, un vecteur et le vrifie
sil est tri par ordre croissant.
Pour faire, la fonction va comparer chaque lment du vecteur qui devrait tre infrieur
llment suivant.

Algorithme vecteur ;
Var
V : tableau [ 1 .. 50 ] de entier ;
i , n : entier ;

Fonction fvectri ( T: Tableau [ 1 .. 50 ] de entier): Boolen


Var
rep : boolen
Dbut
rep Vrai
pour i 1 n faire
Si T[ i ] > T[ i + 1 ] alors
dbut
rep Faux
i n /* Pour sortir de la boucle. i = n ensuite il deviendra i = n + 1 */
fin ;
fvectri rep ;
Fin ;

Dbut

Ecrire ( Donnez la taille du vecteur ) ;
Lire ( n ) ;
Pour i 1 n faire
Debut
Ecrire ( donnez le , i , me lment du vecteur ) ;
Lire( V [ i ] ) ;
Fin ;

Si fvectri ( V ) = Vrai Alors


Ecrire( Le vecteur V est tri )
Sinon
Ecrire( Le vecteur V est non-tri ) ;
Fin ;
Fin.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 10


Initiation lalgorithmique

Ce que lon remarque dans cet algorithme :


Lappel de la fonction se fait dans une action de test.
Le type du paramtre formel T: Tableau [ 1 .. 50 ] est entier , alors que
celui de la fonction est boolen .

2.1.2.3. Fonctions imbriques


En algorithmique, il est possible quune fonction fasse appel une fonction. On parle alors
de fonctions imbriques.
Lexemple suivant montre comment une fonction fait appel une autre fonction pour lui
demander de faire un calcul et de lui retourner un rsultat pour quelle fasse, elle aussi, un
autre calcul et retourner un autre rsultat.
Soit la fonction qui dtermine le maximum entre deux valeurs :

fonction maxi_2 (x , y : rel) : rel ;


var
max : rel ;
dbut
si x >= y alors
max x
sinon
max y;
maxi_2 max ;
fin ;

Pour trouver le maximum entre trois variables, il nest pas ncessaire dcrire une autre
fonction maxi_3 qui ressemble la fonction maxi_2 en utilisant trois valeurs.
Pour faire, la fonction maxi_3 fera appel, deux reprises, la fonction maxi_2 .

fonction maxi_3 (x , y, z : rel) : rel ;


dbut
max_3 max_2 ( x , max_2 ( y , z ) ) ;
fin ;

De quelle manire le maximum, entre trois valeurs, sera calcul ?


La premire fonction qui sera excute est celle qui se trouve dans la parenthse
max_2(y , z) . Elle renvoie le maximum max entre les deux variables y et
z .
Ensuite, la deuxime fonction max_2(x , max_2(y , z)) sera transforme en la
fonction max_2 ( x , max ) pour renvoyer le maximum final.

2.2. Les procdures

Une procdure est aussi un sous-programme, au mme titre que la fonction. La diffrence
est quune procdure peut retourner plusieurs rsultats comme elle peut ne pas retourner un
rsultat.
Une procdure peut retourner un rsultat. Dans ce cas, on peut la transformer en une
fonction.
La dclaration et le corps de la procdure sont identiques celle de la fonction. Elle
possde :
AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 11
Initiation lalgorithmique

1. Un en-tte, pour prciser le nom de la procdure ;


2. Une zone de dclaration des variables, propres la procdure (partie dclaration) ;
3. Une zone dexcution des instructions (partie traitement).

2.2.1. Structure dune procdure


Le rle de la procdure est deffectuer un traitement spcifique et, peut-tre, de retourner
plusieurs rsultats.
La structure dune procdure diffre lgrement de celle dune fonction.

Procdure nomp (<paramtres>) ;


Var
Listes de variables ;
Dbut
Instructions ;
Fin ;

Cest un sous-programme qui :


1. a un nom : nomp
2. peut avoir des paramtres : paramtres
3. peut ne pas retourner une valeur comme elle peut retourner plusieurs rsultats de
types diffrents. il nest donc pas ncessaire dindiquer le type des rsultats
retourns.
4. peut avoir besoin de variables propres la procdure
5. possde la partie traitement.

2.2.2. Utilisation des procdures


Les procdures sont utilises lorsque lon a besoin dcrire un sous-programme qui ne
retourne aucun rsultat ou bien qui retourne plusieurs rsultats.
Suivant la nature du problme, lutilisation de la procdure peut se faire avec ou sans
paramtres.

2.2.2.1. Procdures SANS paramtres


Les paramtres sont facultatifs. Sil n'y a pas de paramtre, les parenthses doivent rester
prsentes et vides.
Lexemple suivant montre comment la fonction, vue en section 2.1.2.1, peut-tre crite sous
forme dune procdure. Cette procdure ne possde pas de paramtres.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 12


Initiation lalgorithmique

Algorithme UtiliserUneprocdure ;
var
s , n , i : entier ;

procedure Somme ( ) ;
debut
Ecrire ( Donner la valeur de n ) ;
Lire ( n ) ;
s 0;
pour i 1 n faire
s s+i;
ecrire(la somme = , somme) ;
fin ;
debut
somme ( ) ;
fin .

Lappel de la procdure est diffrent de celui de la fonction. La procdure ne peut pas tre
utilise comme une variable. Pour cela, lappel la procdure se fait directement, par son
nom somme ( ) .
Une procdure ne retourne pas de valeur dans le nom de la procdure, comme
le fait la fonction
Il est donc faux de la considrer comme une variable. Il est faux dcrire, par
exemple, j somme ( ).
elle ne peut pas tre utilise dans les instructions :
- De lecture
- Dcriture
- De test
- Daffectation

Lalgorithme suivant fait appel une procdure qui souligne un titre, donn par lutilisateur.
Cette procdure ne possde pas de paramtres.

Algorithme psansp
var
titre : chaine ;
i : entier ;

procedure souligne( ) ;
dbut
pour i 1 20 faire
crire ( " --- " ) ;
fin ;

dbut
ecrire ( Donnez le titre : ) ;
lire (titre) ;
souligne( ) ; 1
fin ;

2.2.2.2. Procdures AVEC paramtres


Les paramtres peuvent tre utiliss avec des paramtres (effectifs et formels).
Lexemple suivant montre une procdure qui utilise un paramtre de type chane pour
afficher des messages derreurs.
AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 13
Initiation lalgorithmique

Algorithme pavecp
var
i : entier ;

procedure souligne( ) ;
dbut
pour i 1 20 faire
debut
ecrire ( Le programme a rencontr une erreur : ) ;
crire ( " --- " ) ;
fin ;
fin ;

procedure aff_err ( messg: chaine)


debut
souligne ( ) ;
ecrire ( messg ) ;
fin ;

debut
... ;
aff_err ( Entier trop grand ) ;
... ;
aff_err ( Mmoire insuffisante ) ;
... ;
aff_err ( Fin de fichier rencontr ) ;
... ;
Fin.

Cet algorithme fait appel la procdure aff_err qui reoit comme paramtre, une chaine
de caractre pour lafficher. la procdure aff_err fait appel, aussi, une autre procdure
souligne pour afficher le titre du message et le souligne en mme temps.

2.3. Porte des variables


Lchange dinformations entre le programme principal et les sous-programmes peut se faire
sans avoir utiliser des paramtres. Il sagit de dclarer des variables pour quelles soient
utilises directement dans un sous-programme sans avoir besoin de les transmettre sous
forme de paramtres.
La porte d'une variable montre jusquo cette variable est connue par les sous-
programmes. C'est--dire, quelles sont les sous-programmes qui peuvent lutiliser sans
quelle soit transmise sous forme de paramtre.
Il existe deux types de portes des variables :
1. variables globales
2. variables locales

2.3.1. Variables globales


Toute variable dclare dans le programme principal est dite globale et elle est lisible et
utilisable par tous les sous-programmes. Toute variable globale peut tre utilise par un
sous-programme sans quelle soit dclare dans celui-ci.
Lexemple suivant, qui vrifie si un tableau est tri (section 2.1.2.2.), montre comment la
procdure fvectri utilise les deux variables globales i et n dans la boucle pour
sans les envoyer dans les paramtres dappel :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 14


Initiation lalgorithmique
Algorithme vecteur ;
Var
V : tableau [ 1 .. 50 ] de entier ;
i , n : entier ;
Fonction fvectri ( T: Tableau [ 1 .. 50 ] de entier): Boolen
Var
rep : boolen
Dbut
rep Vrai
pour i 1 n faire
Si T[ i ] > T[ i + 1 ] alors
dbut
rep Faux
i n /* Pour sortir de la boucle. i = n ensuite il deviendra i = n + 1 */
fin ;
fvectri rep ;
Fin ;
Dbut

Ecrire ( Donnez la taille du vecteur ) ;
Lire ( n ) ;
Pour i 1 n faire
Debut
Ecrire ( donnez le , i , me lment du vecteur ) ;
Lire( V [ i ] ) ;
Fin ;

Si fvectri ( V ) = Vrai Alors


Ecrire( Le vecteur V est tri )
Sinon
Ecrire( Le vecteur V est non-tri ) ;
Fin ;
Fin.

Puisque les variables i et n sont globales, il nest pas ncessaire de les transmettre sous
forme de paramtres effectifs la procdure ou de les dclarer dans celle-ci.
On peut se poser la question suivante : pourquoi ne pas dclarer toutes les variables
globales et dun coup on na pas besoin dutiliser les paramtres ?,
Les variables globales sont gourmandes en ressources mmoire. Elles restent prsentes
dans la mmoire centrale jusqu la fin de lexcution de tout le programme.
Pour conomiser de la ressource mmoire, il faut dclarer le minimum possible de variables
globales. Pour les variables utilisables que dans des sous-programmes, on fait appel des
variables locales.

2.3.2. Variables locales


Toute variable dclare dans un sous-programme est dite locale celui-ci. Elle nest lisible
et utilisable que dans le bloc (sous-programme) o elle est dclare.
Par contre, la variable locale devient globale pour les sous-programmes appels par le sous-
programme o elle est dclare.
Elle reste prsente dans la mmoire centrale jusqu la fin de lexcution du sous-
programme o elle est dclare.
Remarque : Si on dclare, dans un sous-programme, une variable locale (par exemple :
x ) dont le nom est identique une variable globale (par exemple : x ), cette dernire
devient invisible dans le sous-programme. Cest la variable locale qui devient lisible et
utilisable dans le sous-programme o elle est dclare.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 15


Initiation lalgorithmique
2.4. Mode de passage des paramtres
Il existe deux modes de passage des paramtres aux sous-programmes :
1. Passage par valeur
2. Passage par rfrence

2.4.1. Passage par valeur


Le passage par valeur est le passage par dfaut. Lorsquon fait appel une procdure avec
des paramtres effectifs, la procdure appele reoit une copie des valeurs et les affecte aux
paramtres formels. Ces derniers nutiliseront, dans le sous-programme, que la valeur de la
variable correspondante.
Si, dans le sous-programme, on modifie la valeur du paramtre formel, la valeur du
paramtre effectif correspondant reste inchange. la fin de lexcution du sous-
programme, la variable conservera sa valeur initiale.
Lexemple suivant illustre le passage par valeur :

Algorithme vecteur ;
Var
a , b : entier ;

procdure calcul ( x , y : entier )


Var
z : entier ;
Dbut
Ecrire ( Donnez la valeur de z ) ;
Lire ( z ) ;

Si z >= 0 alors
debut
x z+y;
y z*z;
fin
Sinon
debut
y zx;
x y*y;
fin ;

Ecrire ( Dans le sous-programme calcul ) ;


Ecrire ( x = , x , et y = , y ) ;
fin ;
Dbut
Ecrire ( Donnez la valeur de a ) ;
Lire ( a ) ;
Ecrire ( Donnez la valeur de b ) ;
Lire ( b ) ;

Ecrire ( Avant de faire appel au sous-programme calcul ) ;


Ecrie ( a = , a , et b = , b ) ;

Calcul ( a , b ) ;

Ecrire ( Au retour du sous-programme calcul ) ;


Ecrie ( a = , a , et b = , b ) ;
Fin.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 16


Initiation lalgorithmique

Si on excute le programme avec les valeurs suivantes:


a = 10
b = 20
z=5

Les variables se comporteront, dans la mmoire centrale, comme suit :

Avant lappel du A lappel du A lexcution du Au retour du


Sous-programme Sous-programme Sous-programme Sous-programme
calcul calcul calcul calcul
10 a 10 a 10 a 10 a
20 b 20 b 20 b 20 b
5 z
10 x 25 x
20 y 25 y

Le programme affichera sur lcran

- La modification de la valeur des Donnez la valeur de a


paramtres formels x et y 10
naffecte pas la valeur des Donnez la valeur de b
paramtres effectifs a et b . 20
Avant de faire appel au sous-programme calcul
- A la fin (au retour) du sous- a = 10 et b = 20
Donnez la valeur de z
programme calcul , les 5
variables locales, x, y et z , Dans le sous-programme calcul
sont supprimes de la mmoire x = 25 et y = 25
centrale. Au retour du sous-programme calcul
a = 10 et b = 20

Si on veut qu'un sous-programme modifie les paramtres effectifs, il faut utiliser le passage
par adresse .

2.4.2. Passage par adresse


Le passage par adresse consiste envoyer aux sous-programmes ladresse (lemplacement
dans la mmoire centrale) du paramtre effectif, o, le paramtre formel, peut manipuler
directement sa valeur.
Si, dans le sous-programme, on modifie la valeur du paramtre formel, la valeur du
paramtre effectif changera aussi. Cest--dire que le paramtre formel du sous-programme
accde directement ladresse du paramtre effectif.
Pour prciser quun paramtre est envoy par adresse, on place, avant le nom du paramtre
formel, le mot-cl var .
Soit lexemple prcdent o le passage se fait par adresse pour la variable a :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 17


Initiation lalgorithmique

Algorithme vecteur ;
Var
a , b : entier ;

procdure calcul ( var x : entier , y : entier )


Var
z : entier ;
Dbut
Ecrire ( Donnez la valeur de z ) ;
Lire ( z ) ;

Si z >= 0 alors
debut
x z+y;
y z*z;
fin
Sinon
debut
y zx;
x y*y;
fin ;

Ecrire ( Dans le sous-programme calcul ) ;


Ecrire ( x = , x , et y = , y ) ;
fin ;
Dbut
Ecrire ( Donnez la valeur de a ) ;
Lire ( a ) ;
Ecrire ( Donnez la valeur de b ) ;
Lire ( b ) ;

Ecrire ( Avant de faire appel au sous-programme calcul ) ;


Ecrie ( a = , a , et b = , b ) ;

Calcul ( a , b ) ;

Ecrire ( Au retour du sous-programme calcul ) ;


Ecrie ( a = , a , et b = , b ) ;
Fin.

Si on excute le programme avec les valeurs suivantes:


a = 10
b = 20
z=5

Les variables se comporteront, dans la mmoire centrale, comme suit :

Avant lappel du A lappel du A lexcution du Au retour du


Sous-programme Sous-programme Sous-programme Sous-programme
calcul calcul calcul calcul
x x
10 a 10 a 25 a 25 a
20 b 20 b 20 b 20 b
5 z

20 y 25 y

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 18


Initiation lalgorithmique

Le schma ci-dessus montre que le paramtre formel x sest substitu au paramtre


effectif a durant lexcution du sous-programme.

Le programme affichera sur lcran


- La modification de la valeur du
paramtre formel y naffecte pas Donnez la valeur de a
la valeur du paramtre effectif b . 10
- Comme le passage paramtre Donnez la valeur de b
effectif x sest fait par adresse, 20
la modification de la valeur du Avant de faire appel au sous-programme calcul
a = 10 et b = 20
paramtre formel correspondant x
Donnez la valeur de z
affecte directement la valeur de 5
a . Dans le sous-programme calcul
- A la fin (au retour) du sous- x = 25 et y = 25
programme calcul , les variables Au retour du sous-programme calcul
locales, x, y et z , sont a = 25 et b = 20
supprimes de la mmoire centrale.

Note :
Les tableaux, les fichiers et les listes (voir plus loin dans ce cours) sont toujours passs par
adresse (par dfaut).

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 19


Initiation lalgorithmique

Universit MHamed Bougara Boumerds (UMBB)

Facult des sciences - Dpartement informatique

Introduction lalgorithmique

Les principes de lAlgorithmique et de


la Programmation

Les enregistrements

Dcembre 2015

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 1


Initiation lalgorithmique

Table des matires

1. Les enregistrements : ......................................................................................................................... 3


2. Utilisation d'un enregistrement ........................................................................................................... 3
3. L'imbrication d'enregistrements .......................................................................................................... 5
4. Les tableaux denregistrement ........................................................................................................... 7

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 2


Initiation lalgorithmique
1. Les enregistrements :
Comme les tableaux, un enregistrement est dfini comme une structure de donnes
permettant de faciliter la manipulation des donnes. Les lments dun enregistrement,
peuvent tre de type diffrent, contrairement ceux dun tableau, qui doivent tre de mme
type.
Un enregistrement est un type-utilisateur . C'est lutilisateur qui le dfinit avec le mot
type . Pour utiliser cet enregistrement, les variables de type enregistrement sont
dclares de la mme manire que les variables de type prdfinis (entier, reel, chaine,).

2. Utilisation d'un enregistrement


Un enregistrement est subdivis en plusieurs champs. Il est exploit travers la variable de
type enregistrement et ses champs. Le rle dun champ est de vhiculer une partie de
linformation contenue dans un enregistrement. Il est dfini par un nom et son type .
Lexemple suivant montre la dclaration dun type enregistrement dont le nom est
etudiant et dune variable e de type enregistrement

Algorithme test ;
type
etudiant = enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
groupe : entier ;
note : Rel ;
Fin ;

Var
e : etudiant ;
Debut
..
Fin.

La figure ci-dessous illustre lenregistrement etudiant .

Matricule Nom Prenom Groupe Note


Etudiant

- Lenregistrement etudiant est compos de cinq champs, de diffrents types.


- La variable e est de type etudiant .

Donc, lordinateur va dclarer cinq (5) variables. Il va rserver, dans la RAM, cinq (5) cases
mmoires pour la variable e .
Si laccs un lment dun tableau se fait travers son indice ( V [ 2 ] ), laccs un
lment dun enregistrement se fait travers le nom du champ. Le nom dune variable sera
compos du nom de la variable e et dun champ de lenregistrement etudiant ,
spars par un point.
La variable e de type enregistrement etudiant se prsentera dans la RAM comme
suit :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 3


Initiation lalgorithmique

RAM
e.matricule
e.nom
Les 5 cases mmoires de la variable e
e.prenom de type etudiant
e.groupe
e.note

Exemple :
- e1.matricule = Z102312
- e1.nom = BENKACI
- e1.prenom = Kaci
- e1.groupe = 5
- e1.note = 12.50

Le type enregistrement doit tre dclar avant la dclaration des variables. Dans la partie
dclaration , un algorithme doit suivre la structure suivante.

Algorithme nom ;
constantes
types
variables
procdures et fonctions
dbut
traitements ;
fin.

Lalgorithme suivant permet de saisir les informations de deux tudiants puis, dafficher celui
qui possde la meilleure note.

Algorithme MeilleureNote ;
Type
etudiant : enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
groupe : entier ;
note : rel ;
Fin ;

Var
e1, e2 : etudiant
Dbut
Ecrire ( Donner les informations du 1er tudiant ) ;
Lire ( e1.matricule, e1.nom, e1.prenom, e1.groupe, e1.note ) ;

Ecrire ( Donner les informations du 2me tudiant ) ;


Lire ( e2.matricule e2.nom, e2.prenom, e2.groupe, e2.note ) ;

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 4


Initiation lalgorithmique
Si ( e1.note > e2.note ) alors
Ecrire ( La plus grande note est celle de ltudiant : ) ;
Ecrire (e1.matricule, e1.nom , e1.prenom, e1.groupe )
Sinon
Si ( e1.note < e2.note ) alors
Ecrire ( La plus grande note est celle de ltudiant : ) ;
Ecrire (e2.matricule, e2.nom , e2.prenom, e2.groupe )
Sinon
Ecrire ( Les deux notes sont gales ) ;
Fin.

Les champs sont manipuls de la mme manire que les variables ou les lments dun
tableau.

3. L'imbrication d'enregistrements
Il est possible dajouter un autre champ dans lenregistrement etudiant pour indiquer la
date de naissance de ltudiant. Ce dernier champ peut tre lui-mme de type dun autre
enregistrement.
La date de naissance est compose de trois informations :
- Le jour
- Le mois
- Lanne

Donc, il va falloir dfinir un autre enregistrement date compos des trois champs :

Type
Date = enregistrement
jour : entier ;
mois : entier ;
annee : entier ;
fin ;

etudiant : enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
d_n : date ;
groupe : entier ;
note : rel ;
Fin ;

Var
e : etudiant ;

Dans ce cas, lenregistrement etudiant aura la configuration suivante :

Jour Mois Annee


Date

Matricule Nom Prenom Groupe Note


Etudiant d_n

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 5


Initiation lalgorithmique
Le nom dune variable, de la date de naissance, sera compos du nom de la variable e ,
du champ d_n de lenregistrement etudiant et dun champ de lenregistrement
date , spars par des points.
Autrement dit, pour accder un champ de la date de naissance d_n dun tudiant, on
doit faire appel, deux fois, loprateur . . Le premier . lie la variable e1 avec le
champ d_n de la structure etudiant et le deuxime point . lie le tous avec le
champ de la structure date .
- e . d_n . jour
- e . d_n . mois
- e . d_n . annee

La variable e de type enregistrement etudiant se prsentera dans la RAM comme


suit :

RAM
e . matricule
e . nom
e . prenom
Les 8 cases mmoires
e . groupe
de la variable e de
e . note type etudiant
e . d_n . jour Les 3 cases mmoires
e . d_n . mois du champ d_n de
e . d_n . annee type date

Pour accder un champ de la date de naissance d_n dun tudiant, on doit faire appel,
deux fois, loprateur . . Le premier point unit la variable e avec le champ d_n de
la structure etudiant et le deuxime point unit, son tour, avec le champ de la structure
date .

Astuce :
Pour sassurer que lcriture, du nom de la variable, est correcte, lisez-le de droite gauche :
- e . d_n . jour : le jour de la date de naissance de ltudiant e
- e . d_n . mois : le mois de la date de naissance de ltudiant e
- e . d_n . annee : lanne de la date de naissance de ltudiant e

Les enregistrements peuvent tre imbriqus sans limites. On peut, par exemple, ajouter :
- Un autre champ dans lenregistrement etudiant pour indiquer ladresse de
ltudiant.
- Un autre champ dans lenregistrement date pour indiquer le lieu de naissance

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 6


Initiation lalgorithmique
Ladresse et le lieu de naissance sont, tous les deux, composs des mmes champs
suivants :
- le numro
- la rue
- le code postal
- la ville
- le numro de la wilaya

Donc, il va falloir dfinir un autre enregistrement adresse compos des cinq champs :

Type
Adresse = enregistrement
numero : entier ;
rue : chane ;
code_post : chane ;
ville : chane ;
wilaya : entier ;
fin ;

Date = enregistrement
jour : entier ;
mois : entier ;
annee : entier ;
lieu_n : chane ;
fin ;

etudiant : enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
d_n : date ;
adrs : chane ;
groupe : entier ;
note : rel ;
Fin ;

Var
e : etudiant ;

Pour utiliser la variable qui indique la ville du lieu de naissance de ltudiant e , on utilise
trois points . , tout en paraphrasant comme suit:
La ville ville du lieu lieu_n de naissance d_n de ltudiant e
- E . d_n . lieu_n . ville

4. Les tableaux denregistrement


La manipulation de plusieurs variables, de type enregistrement, devient pnible lorsquil
sagit de traiter plusieurs tudiants la fois. Lutilisation des tableaux rendra plus facile cette
manipulation.
Comme les lments, dun tableau, doivent tre tous de mme type, ils seront dclars,
dans ce cas, comme type enregistrement . Les lments, du tableau, auront tous, le
mme type etudiant o, les champs peuvent tre de types diffrents.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 7


Initiation lalgorithmique
Exemple :

Type
etudiant : enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
groupe : entier ;
note : rel ;
Fin ;

Var
e : tableau [ 1 .. 50 ] de etudiant

Ceci donnera un tableau o les lignes reprsentent les enregistrements et les colonnes
reprsentent les champs, comme le montre la figure suivante :

Matricule Nom Prenom Groupe Note


1
2
3 Enregistrements
4
5
6
7
8

Champs

ATTENTION : ne pas confondre avec une matrice.

- Le tableau est un vecteur compos de 50 lments


- Lenregistrement etudiant est compos de 5 champs.

La dclaration de la variable e va donc, crer, dans la RAM, 50 x 5 cases de mmoires.


Soit 250 cases mmoires.
La variable e de type enregistrement etudiant se prsentera dans la RAM comme
suit :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 8


Initiation lalgorithmique

RAM
e [ 0 ] . matricule
e [ 0 ] . nom
e [ 0 ] . prenom
e [ 0 ] . groupe
e [ 0 ] . note Les 250 cases
e [ 1 ] . matricule mmoires de la
e [ 1 ] . nom variable e de type
e [ 1 ] . prenom etudiant
..
..
e [ 49 ] . groupe
e [ 49 ] . note

De la mme manire que la variable simple, pour accder un champ du tableau, on utilise
un point entre le nom de llment du tableau et le nom du champ concern.
Exemple : Remplir un tableau avec les renseignements et la note des tudiants :

Algorithme note ;
Type
etudiant : enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
groupe : entier ;
note : rel ;
Fin ;

Var
e : tableau [ 1 .. 50 ] de etudiant
Dbut

Ecrire ( Donner le nombre des tudiants ) ;


Lire ( N ) ;

Pour i 1 N faire
Dbut
Ecrire ( Donner les informations du , i , tudiant ) ;
Lire ( T[ i ].matricule, T[ i ].nom, T[ i ].prenom, T[ i ].groupe, T[ i ].note ) ;
Fin ;
Fin.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 9


Initiation lalgorithmique

Universit MHamed Bougara Boumerds (UMBB)

Facult des sciences - Dpartement informatique

Introduction lalgorithmique

Les principes de lAlgorithmique et de


la Programmation

Les fichiers

Dcembre 2015

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 1


Initiation lalgorithmique

Table des matires

1. Les fichiers. ........................................................................................................................................ 3


1.1. Dfinition dun fichier ....................................................................................................................... 3
1.2. Structuration dun fichier .................................................................................................................. 3
1.2.1. Fichier de donnes ..................................................................................................................... 3
1.2.2. Fichier texte ................................................................................................................................ 3
1.2.3. Fichier binaire ............................................................................................................................. 4
1.3. Organisation et accs ...................................................................................................................... 4
1.3.1. Accs squentiel ......................................................................................................................... 4
1.3.1.1. Mode criture ........................................................................................................................ 5
1.3.1.2. Mode lecture ......................................................................................................................... 6
1.3.1.3. Mode ajout ............................................................................................................................ 7
1.4. Utilisation des fichiers ...................................................................................................................... 9
1.4.1. Fichier texte ................................................................................................................................ 9
1.4.1.1. Mode ECRITURE : saisie dune donne simple. ................................................................ 10
1.4.1.2. Mode LECTURE : lecture et affichage dune donne simple. ............................................ 11
1.4.1.3. Mode AJOUT : ajout dune donne simple. ........................................................................ 11
1.4.1.4. Modification dune donne ........................................................................................................ 12
1.4.2. Fichier structur ........................................................................................................................ 14
1.4.2.1. Saisie dans un fichier structur ................................................................................................ 14
1.4.2.2. Saisie de plusieurs variables-chaines ...................................................................................... 15
1.4.2.3. Saisie dune donne de type enregistrement ..................................................................... 16

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 2


Initiation lalgorithmique
1. Les fichiers.
Jusqu prsent nous navons utilis que des variables et des tableaux pour manipuler les
donnes. Comme ils sont crs au niveau de la mmoire vive (RAM : mmoire de travail), ils
sont volatils. Donc, les donnes et les informations, quils contiennent, disparaissent la fin
de lexcution du programme. De plus, la RAM sefface totalement aprs avoir teint
lordinateur.
Des fois, dans certaines applications, on a besoin de conserver des informations, dune
manire prenne, aprs lexcution du programme. Par exemple sur des supports externes,
tel que le disque dur, le CD-Rom et autres.
Supposons que lon veuille enregistrer les notes des tudiants, ainsi que leur nom, prnom,
date de naissance, etc. dans des tableaux. Allons-nous saisir au clavier ces donnes
chaque excution du programme ? Bien sr que non. De plus, avec ce type de stockage, il
est impossible de procder des consultations puisque les donnes seront supprimes de la
mmoire la fin de lexcution du programme.
Le fichier est la structure de donnes, qui permet denregistrer les donnes, dune manire
permanente, afin de permettre une rutilisation ultrieure des informations quil contient.

1.1. Dfinition dun fichier


Un fichier est une entit, constitue dun ensemble dinformations stockes sous forme
denregistrements de mme type. Il permet de rsoudre le problme de sauvegarde des
donnes, dune faon permanente, mme aprs lexcution du programme.
Les donnes, enregistres dans un fichier, sont stockes sur des mmoires externes la
mmoire centrale (RAM), tel que le disque dur, la bande magntique, le CD-ROM etc. Ces
donnes sont persistantes, car elles ne seffacent pas aprs excution du programme ou
aprs avoir teint lordinateur. Elles peuvent tre rutilises tout moment par les
programmes informatiques (ajout, modification, suppression, consultation).
Etant sauvegard sur des supports externes, la capacit de stockage du fichier est
beaucoup plus importante que celle des structures de donnes qui sont cres dans la
mmoire de travail ; la RAM.

1.2. Structuration dun fichier


En gnral, on distingue trois types de rangement des donnes dans un fichier :
Les fichiers de donnes
Les fichiers textes
Les fichiers binaires

1.2.1. Fichier de donnes


Ce sont des fichiers binaires typs, qui sont bass sur des structures de donnes (voir base
de donnes).

1.2.2. Fichier texte


Ce type de fichier, dit structur, contient des informations structures sous forme
denregistrements, o il ne peut contenir que des donnes de type texte .
Les donnes sont enregistres, ligne par ligne, sous forme dune suite de caractres
reprsents par leur code ASCII. Chaque ligne se termine par le caractre fin de ligne .
Chaque octet reprsente un caractre. Mme les chiffres numriques sont reprsents par
le code ASCII.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 3


Initiation lalgorithmique

Par exemple, le mot Ecrire sera enregistr dans un fichier texte comme suit :

Texte : E c r i r e
Donnes enregistres : 069 099 114 105 114 101

Ce type de fichier est dit lisible car vous pouvez crire et lire un fichier texte avec nimporte
quel diteur de texte, ce qui nest pas possible avec les fichiers binaires.

1.2.3. Fichier binaire


Ce type de fichier contient des donnes, non textuelles, sous forme dune suite doctets non
structurs. C'est--dire, quil nest pas organis sous forme denregistrement. Il ne possde
aucune donne lmentaire.
Exemple de fichier : son (.mp3), image (.jpg), excutable (.exe),.
Ces fichiers ne peuvent tre lus quavec laide dune application spcifique :
Lecteur mp3 pour les fichiers son
Le MS-Paint pour ouvrir les images
Le MS-Wword pour les fichiers .doc

1.3. Organisation et accs


Le seul inconvnient avec les fichiers, les donnes sont enregistres sur des supports
externes la mmoire centrale. On ne peut accder aux donnes directement comme on le
fait avec les variables et les tableaux.
Laccs aux donnes, stockes dans un fichier, est dtermin suivant la manire dont sont
organises ces donnes dans le fichier. On distingue trois types daccs aux donnes qui
permettent de lire les donnes stockes dans les fichiers.
Accs squentiel
Accs direct
Accs squentiel index

1.3.1. Accs squentiel


Dans un ordinateur, les entres/sorties entre la mmoire centrale et les diffrents
priphriques se font en utilisant les fichiers de type squentiel. Ces fichiers renferment des
donnes de type identique.
Laccs squentiel, comme son nom lindique, permet de traiter les donnes
squentiellement, dans lordre de leur stockage dans le fichier. Cest--dire que :
- Les donnes sont enregistres, conscutivement, dans lordre de leur stockage
- Pour lire une information, il faut dabord avoir lu toutes les informations qui la
prcdent. Pour lire lenregistrement N il faut dabord lire les N-1
enregistrements qui le prcdent.
Par exemple, tous les fichiers enregistrs sur des bandes magntiques ou, anciennement,
les cassettes sont des fichiers de type squentiel.
Pour travailler avec un fichier, il faut dabord louvrir. Louverture dun fichier veut dire charger
le fichier physique, enregistr sur un support auxiliaire, dans la mmoire centrale pour
lutiliser.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 4


Initiation lalgorithmique

Un fichier squentiel ne peut pas tre ouvert en lecture et en criture en mme temps. Il ne
peut tre ouvert que dans lun de ces trois modes:
Mode criture
Mode lecture
Mode ajout

1.3.1.1. Mode criture


Le mode criture permet de stocker des donnes et des informations dans un fichier.
Louverture dun fichier squentiel en mode criture sapparente la cration dun
fichier :
Si le fichier nexiste pas, il sera automatiquement cr.
Si le fichier existe, il sera vid de son contenu et deviendra un nouveau fichier.
Tout fichier se termine par un octet qui reprsente la marque de fin de fichier (End
Of File EOF) . Ce caractre est transparent pour le programmeur.
A louverture du fichier :
- Le fichier sera charg dans la mmoire centrale et lordinateur lui attribuera un
pointeur qui se positionne automatiquement au dbut (fichier vide). Le rle du
pointeur est dindiquer la position de la prochaine criture (stockage) dans le fichier. Il
reprsente la tte dcriture.
- En mode criture le pointeur se positionne toujours sur la marque de fin du
fichier .
- Chaque ligne enregistre dans le fichier se termine par un octet qui reprsente la
marque de fin de ligne (End Of Line EOL)
- On ne peut qucrire dans un fichier ouvert en mode criture .

Schmatisons maintenant comment se comporte le fichier ouvert en mode criture


1. Ouvrir le fichier en mode criture donnera la configuration suivante :

EOF

Dbut du fichier reprsent par la marque de fin de fichier


Le pointeur

2. Ecrire la phrase Je suis au dbut du fichier dans le fichier fera avancer la marque
de fin de fichier vers le bas :

EOL
Je suis au dbut du fichier
EOF
La marque de fin de ligne
Une information

Lorsque lordinateur crit une donne dans le fichier, il ajoute, la fin de la donne, la
marque de fin de ligne .

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 5


Initiation lalgorithmique

Ensuite, la marque de fin de fichier se dplace vers le bas en entrainant avec elle
le pointeur. Cest--dire, ds que la donne est enregistre, le pointeur se dplace,
automatiquement, vers le bas.

3. Ecrire la phrase Nous sommes 5 dans le fichier donnera le fichier suivant :

EOL
Je suis au dbut du fichier
Nous sommes 5 EOL
EOF

Une deuxime information

4. Ecrire la lettre le nom, prnom, et la date de naissance dans le fichier donnera le


fichier suivant :

Je suis au dbut du fichier EOL


Nous sommes 5 EOL
EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF
Une troisime information

A la fermeture du fichier, on aura le fichier suivant :

Je suis au dbut du fichier


Nous sommes 5
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF

Ce quon doit retenir du mode criture :


- Ouvrir un fichier en mode criture permet de crer un nouveau fichier. Si le fichier
existe dj, il devient vide, donc nouveau.
- Un pointeur est, automatiquement, allou au fichier et qui pointe au dbut du fichier,
sur la marque de fin de fichier . Le pointeur indique la position (la ligne) o sera
enregistre la prochaine information.
- A chaque criture dune information, cette dernire est enregistre sur une ligne qui
sera termine par la marque de fin de ligne . Ensuite, la marque de fin de
fichier se dplace vers le bas en entranant avec elle le pointeur.
- Il est impossible au pointeur de revenir en arrire une ancienne position.
- Impossible de lire les donnes contenues dans le fichier ouvert en mode criture .
On ne peut qucrire dans ce fichier.

1.3.1.2. Mode lecture


Le mode lecture permet de lire les donnes et les informations, pralablement, stockes
dans un fichier.
A louverture du fichier en mode lecture :
- Si le fichier nexiste pas, un message derreur sera affich
- Le fichier sera charg dans la mmoire centrale et lordinateur lui attribuera un
pointeur qui se positionne automatiquement au dbut. Le rle du pointeur est
dindiquer la position de la prochaine lecture dans le fichier. Il reprsente la tte de
lecture.
AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 6
Initiation lalgorithmique

- En mode lecture le pointeur se positionne toujours au dbut du fichier et non pas


sur la fin du fichier comme dans le mode criture .
- On ne peut que lire dans un fichier ouvert en mode lecture .

Schmatisons maintenant comment se comporte le fichier ouvert en mode lecture


1. Ouvrir le fichier en mode lecture donnera la configuration suivante :

Je suis au dbut du fichier EOL


Nous sommes 5 EOL
EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF

Le pointeur

2. La lecture de la premire ligne du fichier fera avancer automatiquement le pointeur


sur la deuxime ligne :

Je suis au dbut du fichier EOL


Nous sommes 5 EOL
EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF

3. A chaque lecture dune donne du fichier, lordinateur dplace automatiquement le


pointeur sur la position de la prochaine donne lire et ce jusqu la fin du fichier .

Je suis au dbut du fichier EOL


Nous sommes 5 EOL
EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF

Ce quon doit retenir du mode lecture :


- A louverture dun fichier en mode lecture , le pointeur se positionnera,
automatiquement, au dbut du fichier. Le pointeur indique la position (la ligne) o se
trouve la donne ou linformation lire.
- A chaque lecture dune information, le pointeur se dplace vers le bas
- Il est impossible au pointeur de revenir en arrire une ancienne position.
- Impossible dcrire des donnes dans un fichier ouvert en mode lecture . On ne
peut que lire le contenu du fichier.
- La lecture se termine lorsque le pointeur se trouve sur la marque de fin de fichier -
EOF .

1.3.1.3. Mode ajout


Le mode ajout permet de stocker ou dajouter des donnes et des informations la fin
dun fichier. Le traitement dun fichier ouvert en mode ajout est identique celui ouvert
en mode criture , avec quelques diffrences importantes.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 7


Initiation lalgorithmique

A louverture du fichier :
- Si le fichier nexiste pas, un message derreur saffiche
- Si le fichier existe, il ne sera pas vid de son contenu
- Le fichier est charg dans la mmoire centrale et lordinateur lui attribue un pointeur
qui se positionne automatiquement la fin du fichier . Le rle du pointeur est
dindiquer la position de la prochaine criture (stockage) dans le fichier. Il reprsente
la tte dcriture.
- En mode ajout le pointeur se positionne toujours, la fin, sur la marque de fin
du fichier .
- On ne peut qucrire dans un fichier ouvert en mode ajout .

Schmatisons maintenant comment se comporte le fichier ouvert en mode ajout


1. Ouvrir le fichier en mode ajout donnera la configuration suivante :

Je suis au dbut du fichier EOL


Nous sommes 5 EOL
EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau
EOF

Le pointeur

2. Lajout dune information fera avancer, automatiquement, la marque de fin de


fichier et le pointeur vers le bas (voir mode criture ) :

1er ajout
Je suis au dbut du fichier EOL
Nous sommes 5 EOL
BENHALIMA Halima 01/14/1989 Boumerds Chef de bureau EOL
EOL
BENKACI Kaci 01/14/1989 Corso Tecnicien suprieur en informatique
EOF

2me ajout
Je suis au dbut du fichier EOL
Nous sommes 5 EOL
BENHALIMA Halima 01/12/1989 Boumerds Chef de bureau EOL
EOL
BENKACI Kaci 07/05/1991 Corso Tecnicien suprieur en informatique
BENOMAR Omar 13/03/1986 Thnia Gardien EOL
EOF

Ce quon doit retenir du mode ajout :


- Ouvrir un fichier en mode ajout permet dajouter des donnes dans un fichier
existant.
- Les donnes sont ajoutes la fin du fichier.
- Un pointeur est, automatiquement, allou au fichier et qui pointe vers la fin, sur la
marque de fin de fichier . Le pointeur indique la position (la ligne) o sera
enregistre la prochaine information.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 8


Initiation lalgorithmique

- A chaque ajout dune information, cette dernire est enregistre sur une ligne qui
sera termine par la marque de fin de ligne . Ensuite, la marque de fin de
fichier se dplace vers le bas en entranant avec elle le pointeur.
- Il est impossible au pointeur de revenir en arrire une ancienne position.
- Impossible de lire les donnes contenues dans le fichier ouvert en mode ajout .
On ne peut qucrire dans ce fichier.

1.4. Utilisation des fichiers


Dans un algorithme, le fichier est identifi par une variable. La variable est dclare suivant
trois types dutilisation des fichiers :
Fichier texte
Fichier Structur
Fichier simple

1.4.1. Fichier texte


En algorithmique, un fichier texte est dclar comme tant une variable de type texte.

Var
f : Texte ;

f est la variable de travail qui sera associ un fichier physique. Elle reprsente le canal
par lequel vont transiter les donnes partir ou vers le fichier.
Pour simplifier la comprhension, on apparente f au pointeur associ au fichier.
Toutes les donnes crites dans un fichier texte doivent tre de type chane . Toutes les
variables dont le type est diffrent du type chane doivent tre converties en type
chane avant dtre enregistres dans le fichier texte.

Avant douvrir un fichier, il faut lassocier la variable de travail :

Var
f : Texte ;
nomf : chaine ;
Dbut
Ecrire ( Donnez le nom de votre fichier ) ;
Lire ( nomf ) ;
Associer (f, nomf);

Tout fichier a un nom physique (nomf) qui lidentifie de faon unique. Pour
reconnatre le type du fichier, on lui ajoute, la fin du nom, une extension prcde dun
point (.txt : pour le fichier texte, .exe : pour un fichier excutable, .doc pour un fichier Word
etc..)
Pour utiliser un fichier, aprs lui avoir associ la variable de travail, il faut louvrir en indiquant
le mode douverture :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 9


Initiation lalgorithmique

Var
f : Texte ;
nomf : chaine ;
Dbut
Ecrire ( Donnez le nom de votre fichier ) ;
Lire ( nomf ) ;
Associer (f, nomf);
Ouvrir ( f , criture ) ;

Lcriture des donnes dans un fichier se fait au moyen de linstruction write, o on doit
prciser la variable-fichier et la donne crire :

Var
f : Texte ;
nomf : chaine ;
x : chaine ;
Dbut
Ecrire ( Donnez le nom de votre fichier ) ;
Lire ( nomf ) ;
Associer (f, nomf);
Ouvrir ( f , criture ) ;
Ecrire ( Donnez une information ) ;
Lire ( x ) ;
Write ( f , x ) ;

La valeur de la variable x sera crite dans le fichier nomf en transitant par le canal
f .
Il est toujours recommand de fermer un fichier si on a termin de travailler avec :

Var
f : Texte ;
nomf : chaine ;
x : chaine ;
Dbut
Ecrire ( Donnez le nom de votre fichier ) ;
Lire ( nomf ) ;
Associer (f, nomf);
Ouvrir ( f , criture ) ;
Ecrire ( Donnez votre information ) ;
Lire ( x ) ;
Write ( f , x ) ;
Fermer ( f ) ;
Fin.

1.4.1.1. Mode ECRITURE : saisie dune donne simple.


Ecrire un algorithme qui permet denregistrer dans un fichier le nom des dara de la wilaya de
boumerdes :
Pour faire, on utilisera une boucle tant que jusqu ce que le nom de la dara soit
Alger .

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 10


Initiation lalgorithmique

algorithme daira ;
var
daira : Texte ;
f_txt : chaine ;
nom : chaine ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( f_txt ) ;
associer (daira, f_txt);
ouvrir ( daira , ecriture ) ;
ecrire ( donnez les noms de daira ) ;
lire ( nom ) ;
tant que nom <> Alger faire
debut
write ( daira , nom ) ;
lire ( nom ) ;
fin ;
fermer ( daira ) ;
fin.

1.4.1.2. Mode LECTURE : lecture et affichage dune donne simple.


Ecrire un algorithme qui permet de lire et dafficher les noms des dara de la wilaya de
Boumerds :
Pour faire, on utilisera une boucle tant que qui va nous permettre de lire du dbut du
fichier jusqu la rencontre de la fin du fichier.

algorithme daira ;
var
daira : texte ;
f_txt : chaine ;
nom : chaine ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( f_txt ) ;
associer (daira, f_txt);
ouvrir ( daira , lecture ) ;
i 0;
tant que (non fdf) faire
debut
read ( daira , nom ) ;
i i+1;
write ( Daira , i , : , nom ) ;
fin ;
fermer ( daira ) ;
fin.

1.4.1.3. Mode AJOUT : ajout dune donne simple.


Ecrire un algorithme qui permet dajouter le nom des dara de la wilaya dAlger :
Pour faire, on utilisera une boucle tant que jusqu ce que le nom de la dara soit
Boumerds .

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 11


Initiation lalgorithmique

algorithme daira ;
var
daira : Texte ;
f_txt : chaine ;
nom : chaine ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( f_txt ) ;
associer (daira, f_txt);
ouvrir ( daira , ajout ) ;
ecrire ( donnez les noms de daira ) ;
lire ( nom ) ;
tant que nom <> Boumerds faire
debut
write ( daira , nom ) ;
lire ( nom ) ;
fin ;
fermer ( daira ) ;
fin.

1.4.1.4. Modification dune donne


Comment modifier une donne dun fichier squentiel ? La mthode consiste faire appel
un deuxime fichier f2.

1. Ouvrir f1 en mode lecture .


2. Ouvrir f2 en mode criture .
3. On donne linformation modifier et linformation de remplacement.
4. A chaque lecture de f1, on vrifie si la donne est gale celle quon veut
modifier.
5. Si cest non, on stocke dans f2, la donne lue de f1.
6. Si cest oui, on stocke la donne de remplacement dans le fichier f2.
7. Ainsi de suite jusqu la fin du fichier f1.
8. A la fin, on ferme les deux fichiers, puis en crase le fichier f1 avec le fichier f2
(copier f2 dans f1), puis on supprime du disque le fichier f2.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 12


Initiation lalgorithmique

Dbut

Ouvrir F1 en mode LECTURE

Ouvrir F2 en mode ECRITURE

Saisir la donne D modifier

Oui
EOF (F1) ?

Non
Lire une donne X du fichier F1

Non Stocker la donne X dans F2


D=X?

Oui
Stocker la donne D dans F2

Fermer F1 et F2

F1 F2

Supprimer F2

Fin

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 13


Initiation lalgorithmique

algorithme modif ;
var
f1 , f2 : Texte ;
k1 , k2 : chaine ;
x , y , z : chaine ;
debut
ecrire ( donnez le nom du fichier modifier ) ;
lire ( k1 ) ;
associer (f1 , k1);
ouvrir ( f1 , lecture ) ;

ecrire ( donnez le nom du fichier tampon ) ;


lire ( k2 ) ;
associer (f2 , k2);
ouvrir ( f2 , ecriture ) ;

ecrire ( Introduire la donne remplacer ) ;


lire ( x ) ;

ecrire ( Introduire la donne de modification ) ;


lire ( y ) ;

tant que non-FDF(f1) faire


debut
lire ( f1 , z ) ;
si x <> z alors
write ( f2 , z )
sinon
write ( f2 , y ) ;
fin ;
fermer ( f1 ) ;
fermer ( f2 ) ;
f1 f2 ;
fin.

1.4.2. Fichier structur


Ce sont des fichiers qui renferment des donnes de mme type (entier, rel, chane, etc.),
comme elles se prsentent en mmoire. Les fichiers structurs ne peuvent pas tre dits
par un diteur de texte.
Pour saisir dans un fichier structur, il faut dabords dclar le type de ce fichier :

type
type_f : fichier de entier ;
var
f : type_f ;

1.4.2.1. Saisie dans un fichier structur


Ecrire un algorithme qui enregistre dans un fichier N valeurs, tel que le dernier est gal
zro, puis calcule le nombre et la somme de ces valeurs :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 14


Initiation lalgorithmique

algorithme somme ;
type
t_fiche : fichier de rel ;
var
f : t_fiche ;
fiche : chaine ;
s , x : rel ;
n : entier ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( fiche ) ;
associer (f, fiche);
ouvrir ( f , ecriture ) ;
ecrire ( donnez les valeurs ) ;
lire ( x ) ;
s 0;
n 0;
tant que n <> 0 faire
debut
write ( f , x ) ;
n n+1;
s s+x;
lire ( x ) ;
fin ;
ecrire ( Nombre de valeurs = , n ) ;
ecrire ( Somme des valeur = , s ) ;
fermer ( f ) ;
fin.

1.4.2.2. Saisie de plusieurs variables-chaines


Ecrire un algorithme qui enregistre, dans un fichier squentiel, le nom, le prnom et ladresse
de N employs :
algorithme somme ;
type
c_fiche : fichier de chaine ;
var
f : c_fiche ;
fiche : chaine ;
nom , prenom , adresse , ligne : chaine
n , i : entier ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( fiche ) ;
associer (f, fiche);
ouvrir ( f , ecriture ) ;
ecrire ( donnez le nombre des employs ) ;
lire ( n ) ;
pour i 1 n faire
dbut
ecrire ( donnez les renseignements du , i , employ ) ;
lire ( nom , prenom , adresse ) ;
ligne nom + prenom + adresse ;
write ( f , ligne ) ;
fin ;
fermer ( f ) ;
fin.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 15


Initiation lalgorithmique
Dans cet algorithme on peut faire lconomie de la variable ligne en remplaant la 5me
et la 4me avant-dernire ligne par la ligne suivante :
write ( f , nom , prenom , adresse) ;

1.4.2.3. Saisie dune donne de type enregistrement


Ecrire un algorithme qui remplit un fichier squentiel avec des enregistrements contenant le
nom, le prnom, le groupe, les trois notes et la moyenne calcule des tudiants.

algorithme somme ;
type
etudiant = enregistrement
nom , prenom : chaine ;
groupe : entier ;
note1 , note2 , note3 , moyenne : rel ;
fin ;
var
f : fichier ;
fiche : chaine ;
ligne : etudiant
n , i : entier ;
debut
ecrire ( donnez le nom de votre fichier ) ;
lire ( fiche ) ;
associer (f, fiche);
ouvrir ( f , ecriture ) ;
ecrire ( donnez le nombre des tudiants ) ;
lire ( n ) ;
pour i 1 n faire
dbut
ecrire ( donnez le nom, le prnom et le groupe du , i , tudiant ) ;
lire ( ligne.nom , ligne.prenom , ligne.groupe ) ;
ecrire ( donnez les trois notes du , i , tudiant ) ;
lire ( ligne.note1 , ligne.note2 , ligne.note3 ) ;
ligne.moyenne ( ligne.note1 + ligne.note2 + ligne.note3 ) / 3 ;
write ( f , ligne ) ;
fin ;
fermer ( f ) ;
fin.

Dans cet algorithme, on dclare une variable ligne de type enregistrement etudiant
pour contenir toutes les donnes saisies. Cette variable est utilise pour enregistrer tous les
champs de lenregistrement sans avoir les nommer.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 16


Initiation lalgorithmique

Universit MHamed Bougara Boumerds (UMBB)

Facult des sciences - Dpartement informatique

Introduction lalgorithmique

Les principes de lAlgorithmique et de


la Programmation

Les pointeurs

Dcembre 2015

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 1


Initiation lalgorithmique

Table des matires

1. Dfinition dun pointeur .......................................................................................................................3


2. Manipulation des pointeurs ................................................................................................................3
2.1. Affectation dune adresse ................................................................................................................4
2.1.1. Affectation directe dune adresse ...............................................................................................4
2.1.2. Affectation de ladresse dune variable .......................................................................................4
2.1.3. Affectation de ladresse dun pointeur.........................................................................................5
2.2. Accs une valeur par un pointeur .................................................................................................6
2.3. Initialisation dun pointeur ................................................................................................................9

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 2


Initiation lalgorithmique
1. Dfinition dun pointeur
Toute variable utilise est enregistre dans la mmoire. Pour accder la valeur contenue
dans une variable, on utilise tout simplement son nom. La variable est rfrence dans la
mmoire par une adresse, qui indique lemplacement o se trouve linformation contenue
dans cette variable.
Dans certains cas, on a besoin daccder l'adresse d'une variable. Pour manipuler
ladresse dune variable, on utilise des pointeurs.
Un pointeur est une variable qui permet denregistrer ladresse mmoire dune variable
simple (variable mmoire). Cest cette dernire qui contient une valeur.

Un pointeur est une variable qui contient ladresse dune autre variable qui
contient une valeur.

Pointeur Mmoire
Adresse n Adresse 0

Adresse 1


Variable Adresse n
Donne
Adresse n+1

Par exemple, si la variable x = 8 se trouve ladresse 0012 , on aura :

P Mmoire
0012 0000

0011
x
8 0012

0013

La variable x contient linformation (la valeur) 8 .


La variable p est un pointeur qui contient ladresse 0012 de la variable
x .
Le pointeur p pointe sur ladresse 0012 de la variable x .

2. Manipulation des pointeurs


Un pointeur est une variable qui contient, toujours, une adresse. On peut lui appliquer les
mmes oprations que pour une variable simple. Pour manipuler un pointeur on a besoin de
certains oprateurs de bases.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 3


Initiation lalgorithmique

2.1. Affectation dune adresse


On peut affecter une adresse, un pointeur, suivant trois mthodes :
Affectation directe dune adresse
Affectation de ladresse dune variable
Affectation de ladresse dun pointeur

2.1.1. Affectation directe dune adresse


Si on connat ladresse dune case mmoire et quon veuille pointer sur cette adresse, on
laffecte directement un pointeur.
Lexemple suivant affecte directement ladresse 102 au pointeur p

Avant affectation

Case
mmoire
p
102

p 102 ;

Aprs affectation

Case
p mmoire
102 102

A laffectation, le pointeur reoit la valeur_adresse 102 et pointe automatiquement la


case mmoire de ladresse 102 .

2.1.2. Affectation de ladresse dune variable


On peut affecter un pointeur ladresse dune variable. Pour faire, on utilise loprateur
dextraction arobase @ ou bien la perlute & .
Lexemple suivant montre comment utiliser cet oprateur pour extraire ladresse de la
variable x :

Avant affectation

p x
102

p @x ;

Aprs affectation

p x
102 102

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 4


Initiation lalgorithmique

Aprs extraction, le pointeur pointe automatiquement la case mmoire de la variable x


qui se trouve ladresse 102

2.1.3. Affectation de ladresse dun pointeur


On peut affecter un pointeur ladresse contenue dans un autre pointeur. Pour faire il suffit
daffecter le deuxime pointeur au premier pointeur.
Lexemple suivant montre comment affecter, comme adresse, le contenue dun pointeur
p un autre pointeur Q :

Avant affectation

p x
102 102

Q p;

Aprs affectation

p x
102 102

Q
102

Un autre exemple daffectation dune adresse dun autre pointeur :

Avant affectation

p x
102

Q y
068

x 52
y 64
p @x ;
Q @y ;

Aprs affectation

p x
102 52 102

Q y
068 64 068

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 5


Initiation lalgorithmique

Q p;

Aprs changement dadresse

p x
102 52 102

Q y
102 64 068

Dans ce cas, on remarque que


- La variable y nest plus pointe par un pointeur
- La variable x est pointe par deux pointeurs p et Q . C'est--dire quon peut
atteindre la valeur de x avec les deux pointeurs.

p^ Q^ + y ;
Aprs calcul

p x
102 52 102

Q y
102 64 068

Nous avons donc :


- Q^ = x = 52
- Donc, p^ = x + y = 52 + 64 = 116
- Et finalement p^ = x = 116

2.2. Accs une valeur par un pointeur


On peut accder la valeur qui se trouve ladresse pointe par un pointeur. Pour faire, on
utilise loprateur de rfrence chapeau ^ ou bien ltoile * .
Pour extraire la valeur de la case mmoire pointe, on utilise loprateur ^ aprs le nom
du pointeur p^ et quon appelle, oprateur de drfrencement .

Avant initialisation

P x
102 102

y
068

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 6


Initiation lalgorithmique

x 10
y 12.5
p @x

Aprs initialisation

P x
102 10 102

y
73.9 068

y p^

Loprateur de drfrencement
p^ permet au pointeur p de se
substituer la variable pointe x

P x
102 10 102

y
10 068

p^ 3*y

Loprateur de drfrencement
p^ permet au pointeur p de se
substituer la variable pointe x

P x
102 30 102

y
10 068

p @y

Le pointeur p pointera
maintenant la variable y

P x
068 30 102

y
30 068

p^ 3*y

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 7


Initiation lalgorithmique

Lexemple suivant rsume comment manipuler les pointeurs par algorithme :


Algorithme unpointeur ;
var p : ^entier 1
x
P
x : entier 78
78 10
debut
x 10 ;
ecrire ( x = , x ) ; 2 Ecran
p @x ; 3
x = 10
ecrire ( p = , p ) ; p = 78
p^ 20 ; 4 p^ = 20
ecrire ( p^ = , p^ ) ; x = 20
ecrire ( x = , x ) ; P^ = 25
p^ x+5; x = 25
ecrire ( p^ = , p^ ) ;
ecrire ( x = , x ) ;
fin.

La manipulation des pointeurs exige une grande attention sur lutilisation des oprateurs ^
et @ . Nous rsumerons leur utilisation comme suit :
1. Le symbole ^ , plac avant, permet de dclarer le pointeur p au niveau des
dclarations. Ce symbole est toujours plac avant le type p : ^entier .
Le type entier du pointeur indique le type de la variable qui sera rfrence par le
pointeur. Un pointeur est associ un type de variable sur lequel il peut pointer.
Si la variable est de type chane , le pointeur sera dclar de type p : ^chane .
Il se peut que dans certains algorithmes vous rencontriez le symbole chapeau ^
remplac par le symbole toile * ( ^entier ou bien *entier )
2. La variable x contient la valeur 10.
3. Le pointeur est, toujours, utilis pour mmoriser une adresse (un emplacement) d'une
case mmoire ou dune variable. Pour localiser lemplacement, dans la mmoire, il
faut connatre son adresse.
Le symbole arobase @ permet denregistrer ladresse de la variable x dans le
pointeur p .
Ds que lon enregistre ladresse, de la variable x , dans le pointeur, celui-ci
pointera ladresse de la case mmoire de x (voir figure ci-dessus).
Un pointeur permet, grce ladresse quil contient, de pointer la position dune case
mmoire ou dune variable, dans la mmoire.
Il se peut que dans certains algorithmes vous rencontriez le symbole arobase @
remplac par le symbole perlute & ( @p ou bien &p )
4. Drfrencer un pointeur veut dire atteindre la valeur de la variable pointe par ce
pointeur.
Le symbole ^ , plac aprs le pointeur (p^), sappelle oprateur de
drfrencement. Comme le p contient ladresse mmoire de x , p^ donne
le contenu de la case mmoire situe ladresse p, cest--dire la variable x .
Donc, la valeur 20 sera enregistre dans la variable qui est pointe par le
pointeur p , c'est--dire dans la variable x .

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 8


Initiation lalgorithmique
Laccs la valeur de la variable ne se fait pas directement, travers le nom de la
variable elle-mme, mais plutt indirectement, travers le pointeur. Cette action
sappelle indirection .

2.3. Initialisation dun pointeur


Un pointeur non initialis sappelle un pointeur pendant . Il contient une adresse
inconnue. Cest--dire que le pointeur peut faire rfrence nimporte quel emplacement de
la mmoire.
Pour remdier ce problme, il faut, toujours, initialiser le pointeur la valeur Nil (Null).
Cette dernire, indique au pointeur de ne pointer nulle part. Cest--dire quil ne doit pas faire
rfrence une adresse de la mmoire.
La reprsentation graphique de la valeur null est donne par la figure suivante :

Une variable simple ne fait rfrence qu une seule adresse mmoire

Un pointeur est une variable qui peut pointer sur diffrentes adresses.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 9


Initiation lalgorithmique

Universit MHamed Bougara Boumerds (UMBB)

Facult des sciences - Dpartement informatique

Introduction lalgorithmique

Les principes de lAlgorithmique et de


la Programmation

Les listes chaines

Dcembre 2015

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 1


Initiation lalgorithmique

Table des matires

1. Dfinition dune liste ........................................................................................................................... 3


2. Structure dune liste ............................................................................................................................ 4
2.1. Construction dun maillon ................................................................................................................ 5
2.2. Manipulation des listes chaine simple. .......................................................................................... 6
2.2.1. Construction dune liste .............................................................................................................. 6
2.2.1.1. Insertion en Tte de liste ...................................................................................................... 6
2.2.1.2. Insertion en Queue de liste ................................................................................................... 9
2.2.2. Ajout dlments une liste ...................................................................................................... 12
2.2.2.1. Ajouter au dbut de la liste (Tte) ............................................................................................ 12
2.2.2.2. Ajouter au milieu de la liste ....................................................................................................... 13
2.2.2.3. Ajouter la fin de la liste (Queue) ............................................................................................ 15
2.2.3. Suppression dlments dune liste .......................................................................................... 16
2.2.3.1. Supprimer le premier lment (Tte)........................................................................................ 16
2.2.3.2. Supprimer un lment au milieu de la liste............................................................................... 17
2.2.3.3. Supprimer le dernier lment (Queue) ..................................................................................... 17

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 2


Initiation lalgorithmique
1. Dfinition dune liste
Les lments, dun tableau, sont enregistrs dans la mmoire, lun ct de lautre
(contigu). Laccs un lment du tableau V [ i ] se fait directement travers sa position
i .

p
V
072
0 Adrs. : 072

1 Adrs : 073

2 Adrs : 074



8 Adrs : 080

9 Adrs : 081

A la dclaration du tableau, ladresse du 1er lment 072 est enregistre dans un


pointeur p .
Si lon veut faire rfrence un autre lment du tableau, par exemple T [ 8 ] ,
lordinateur ajoutera la valeur 8 au pointeur pour quil pointe ladresse de cet lment.
Cest--dire ladresse 072 + 8 = 080 .

p
V
080
0 Adrs. : 072

1 Adrs : 073

2 Adrs : 074



8 Adrs : 080

9 Adrs : 081

Les lments, dune liste, sont parpills dans la mmoire. Ils ne sont pas enregistrs lun
ct de lautre. Les lments dune liste ne sont pas contigus, comme dans un tableau.
Donc, au contraire des tableaux, on ne peut pas utiliser un indice pour accder directement
un lment dune liste chane.
Laccs aux lments, dune liste chane, est possible grce aux pointeurs. La figure
suivante montre un exemple dune liste chane.

H 098 A 014 M 133 I 035 D 815 A

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 3


Initiation lalgorithmique


M 133 014

D 815 035


A 014 098

I 035 133

H 098


A 815

La figure ci-dessus montre une reprsentation de la liste chane dans la mmoire centrale.
On remarque que chaque lment de la chane possde, droite, un pointeur qui fait
rfrence au prochain lment.

2. Structure dune liste


Avec les listes chaines lallocation de lespace mmoire est dynamique. Pour faire, on
utilise des variables dynamiques (maillon).
Une liste chane est une structure de donnes, compose dlments, appels maillon .
Chaque maillon est compos de trois parties, o chaque partie a son importance :

2me partie
re
1 partie (INFO) : (SUIVANT) :
Donne ou information Adresse de du
compose de 3 champs maillon suivant

Matricule Nom Prnom Suivant


K12030 BENKA Kaci @....
004
3me partie (ADRESSE) :
Adresse de ce maillon

- 1re partie (INFO) : Cest la partie utile qui constitue linformation du maillon
matricule, nom et prnom . Elle est compose dun ou plusieurs champs
contenant les informations ncessaires lapplication. Linformation peut tre
structure ou simple
- 2me partie (SUIVANT): Cest cette partie qui permet de raliser les liens entre les
maillons. Cest un pointeur qui contient ladresse du maillon suivant (sil existe) dans
la liste.
- 3me parties (ADRESSE) : Cette partie reprsente ladresse (004) du maillon lui-
mme.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 4


Initiation lalgorithmique

2.1. Construction dun maillon


La construction dun maillon ncessite la dclaration dun type enregistrement compos de :
- Un ou plusieurs champs dinformation.
- Une variable suivant de type pointeur. Cest cette variable qui contiendra
ladresse du prochain (suivant) lment de la liste.
Lexemple suivant montre comment construire un maillon qui va contenir le Hello !

Algorithme Nouv_Maillon ;
type
Liste = ^Maillon;
Maillon = enregistrement
x : chaine;
suivant: Liste;
end;
var
L: Liste;
Dbut
Nouveau(L);
L^.x Hello ! ;
L^.suivant Nil ;
Fin.

Liste est un type pointeur qui pointe sur un


Liste = ^Maillon; lment dont la structure est donne par
lenregistrement Maillon
Maillon est un type enregistrement assez
spcial. Il dcrit la structure des lments ou
Maillon = enregistrement des maillons de la liste :
x : chaine; - x est la partie INFO qui est de
suivant: Liste; type chane.
end; - suivant est la partie pointeur qui
va contenir ladresse de llment
suivant.
L est la variable dynamique de travail
L: Liste; (pointeur) de type liste . Cest le pointeur de
tte de la liste

Cette instruction permet de construire, dans la


Nouveau(L); mmoire, un nouveau maillon qui sera,
automatiquement, point par le pointeur L .

L^.x fait rfrence au champ x point


par le pointeur L .
Cette instruction affectera la valeur Hello !
la variable x du maillon point par L .

Comme il ny a pas de maillon suivant, le


pointeur suivant ne doit pointer nulle part.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 5


Initiation lalgorithmique

2.2. Manipulation des listes chaine simple.


Nous avons dans la section prcdente quune liste chaine peut tre compose :
- dun ou plusieurs maillons relis entre eux par des pointeurs suivant .
- dune variable de type pointeur, appel tte et qui renferme ladresse du premier
lment de la chaine.
Le schma suivant montre une reprsentation dune liste chaine simple compose de 4
maillons :

Partie pointeur suivant


des maillons

Adresse du 1er
maillon Ce pointeur suivant ne
pointe nulle part. Sa valeur
est Nil .

L
024 024
Nil

Pointeur
Tte de liste
Partie Information des
maillons

La chaine de liste L est compose des lments suivants :


- Un pointeur L appel tte de liste. Il pointe, toujours, sur le premier lment de la
liste.
- Le pointeur suivant de chaque lment contient ladresse de llment suivant
- Le pointeur suivant du dernier lment de la liste contient la valeur Nil . Cette
dernire ne pointe nul part. Elle permet de dterminer la fin dune liste.
- Une liste est dite vide si le L est nil ( L = nil ). C'est--dire la tte ne pointe
nulle part.

2.2.1. Construction dune liste


Une liste peut tre construite suivant deux mthodes. Par insertion des maillons en :
- tte de liste
- fin de liste

2.2.1.1. Insertion en Tte de liste


Cette mthode insre les maillons en dcalant ceux existants vers la droite. Pour faire, on a
besoin, au dpart, de deux pointeurs :
- Le premier pointeur pour pointe la tte de liste
- Le deuxime pointeur pour dplace le premier pointeur sur le nouveau maillon

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 6


Initiation lalgorithmique

Lalgorithme suivant montre comment manipuler ces deux pointeurs :

Algorithme Liste1 ;
type
Liste = ^Maillon;
Maillon = enregistrement
a : entier ;
suivant: Liste;
end;
var
L , p : Liste;
Dbut
Ecrire ( donnez le nombre de maillons de la nouvelle liste ) ;
Lire ( N ) ;
L Nil ;
Pour i 1 N faire
Dbut
Ecrire ( Donnez une valeur ) ;
Lire ( x ) ;
Nouveau ( p ) ;
p^.a x;
p^.suivant L;
L p;
Fin ;
Fin.

Le tableau de la page suivante illustre lexcution de cet algorithme.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 7


Initiation lalgorithmique

Liste est un type pointeur qui pointe sur un


Liste = ^Maillon; lment dont la structure est donne par
lenregistrement Maillon
Maillon est un type enregistrement assez
spcial. Il dcrit la structure des lments ou
Maillon = enregistrement des maillons de la liste :
a : chaine; - a est la partie INFO qui est de
suivant: Liste; type entier.
end; - suivant est la partie pointeur qui
va contenir ladresse de llment
suivant.

L et p sont les variables dynamiques de


travail (pointeurs) de type liste .
L , p : Liste; - L est le pointeur de tte de la liste
- p est le pointeur de mmorisation
des adresses

Cette instruction permet dinitialiser le pointeur


de tte Nil pour quil ne pointe nulle part.

Pour i = 1
Cette instruction permet de construire, dans la
mmoire, un nouveau maillon qui sera,
automatiquement, point par le pointeur p .

La valeur de x , par exemple 31 , sera


enregistre dans le champ a du nouveau
maillon.

Le pointeur suivant du nouveau maillon


reoit la valeur du pointeur L . Cest--dire
Nil .

Le pointeur L reoit la valeur du pointeur


p .
La valeur de p est ladresse du nouveau
maillon.
Donc, la valeur de L deviendra celle de
ladresse du nouveau maillon.
Donc L va pointer sur le nouveau maillon

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 8


Initiation lalgorithmique

Aprs insertion du 1er maillon dans la liste, la boucle i rpte lexcution pour ajouter un
2me maillon et linsrer au dbut de la liste.

Pour i = 2 Cette instruction permet de construire, dans


la mmoire, un 2me maillon qui sera,
automatiquement, point par le pointeur
p .

La valeur de x , par exemple 176 ,


sera enregistre dans le champ a du
nouveau maillon.

Le pointeur suivant du nouveau maillon


reoit la valeur du pointeur L . Cest--
dire ladresse pointe par L .
Donc, le pointeur suivant du 2me maillon
va pointer sur le 1er maillon de L .

Le pointeur L reoit la valeur du pointeur


p .
La valeur de p est ladresse du nouveau
maillon.
Donc, la valeur de L deviendra celle de
ladresse du nouveau maillon.
Donc L va pointer sur le nouveau maillon

Et ainsi de suite jusquau maillon N .

2.2.1.2. Insertion en Queue de liste


Cette mthode insre les maillons en fin de liste. Pour faire, on a besoin, au dpart, de trois
pointeurs :
- Le premier pointeur pour pointe la tte de liste
- Le deuxime pointeur pour dplace le premier pointeur sur le nouveau maillon
- Le troisime pointeur pour enregistrer ladresse du maillon prcdent

Lalgorithme suivant montre comment manipuler ces trois pointeurs :

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 9


Initiation lalgorithmique

Algorithme Liste2 ;
type
Liste = ^Maillon;
Maillon = enregistrement
a : entier ;
suivant: Liste;
end;
var
L , p , r : Liste;
Dbut
Ecrire ( donnez le nombre de maillons de la nouvelle liste ) ;
Lire ( N ) ;
Ecrire ( Donnez une valeur ) ;
Lire ( x ) ;
Nouveau (L) ;
L^.a x;
L^.suivant Nil ;
p L;
Pour i 1 N - 1 faire
Dbut
Ecrire ( Donnez une valeur ) ;
Lire ( x ) ;
r p;
Nouveau ( p ) ;
p^.a x;
p Nil ;
r^.suivant p;
Fin ;
Fin.

Le tableau de la page suivante illustre lexcution de cet algorithme.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 10


Initiation lalgorithmique

L, p et r sont les variables dynamiques de


travail (pointeurs) de type liste .
L , p , r : Liste; - L est le pointeur de tte de la liste
- p et r sont les pointeurs de
mmorisation des adresses.

On commence par construire le premier


maillon :
- La 1re instruction permet de construire,
dans la mmoire, un nouveau maillon qui
sera, automatiquement, point par le
pointeur L .
- La 2me instruction enregistre la valeur de
x , par exemple 31 , dans le champ
a du nouveau maillon.
- La 3me instruction permet dinitialiser le
pointeur suivant du nouveau maillon
Nil pour quil ne pointe nulle part.
Le pointeur p reoit la valeur du pointeur
L .
La valeur de L est ladresse du nouveau
maillon.
Donc, la valeur de p deviendra celle de
ladresse du nouveau maillon.
Donc p va pointer sur le nouveau maillon

Pour i = 1 Le pointeur r reoit la valeur du pointeur


p .
La valeur de p est ladresse du nouveau
maillon.
Donc, la valeur de r deviendra celle de
ladresse du nouveau maillon.
Donc r va mmoriser cette adresse et
pointer sur le nouveau maillon
- La 1re instruction permet de construire,
dans la mmoire, un nouveau maillon qui
sera, automatiquement, point par le
pointeur p .
- La 2me instruction enregistre la valeur de
x , par exemple 176 , dans le champ
a du nouveau maillon.
- La 3me instruction permet dinitialiser le
pointeur suivant du nouveau maillon
Nil pour quil ne pointe nulle part.

Le pointeur suivant du maillon r reoit la


valeur du pointeur p . Cest--dire ladresse
du nouveau maillon, pour linsrer la fin de la
liste L .

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 11


Initiation lalgorithmique

Aprs insertion du 2me maillon dans la liste, la boucle i rpte lexcution pour ajouter un
3me maillon et linsrer la fin de la liste. Voir le tableau de la page suivante.

Pour i = 2 Le pointeur r reoit la valeur du pointeur


p .
La valeur de p est ladresse du nouveau
maillon.
Donc, la valeur de r deviendra celle de
ladresse du nouveau maillon.
Donc r va mmoriser cette adresse et
pointer sur le nouveau maillon
- La 1re instruction permet de construire,
dans la mmoire, un nouveau maillon qui
sera, automatiquement, point par le
pointeur p .
- La 2me instruction enregistre la valeur de
x , par exemple 10 , dans le champ
a du nouveau maillon.
- La 3me instruction permet dinitialiser le
pointeur suivant du nouveau maillon
Nil pour quil ne pointe nulle part.

Le pointeur suivant du maillon r reoit la


valeur du pointeur p . Cest--dire ladresse
du nouveau maillon, pour linsrer la fin de la
liste L .

Et ainsi de suite jusquau maillon N .


Maintenant quon sait ce que cest quune liste et comment manipuler les pointeurs avec les
listes, nous allons vous montrer, sommairement, dans ce qui suit, dautres techniques de
manipulation des listes chaines.

2.2.2. Ajout dlments une liste


Lajout dlments une liste se fait suivant trois mthodes :
- Ajouter au dbut de la liste (Tte)
- Ajouter au milieu de la liste
- Ajouter la fin de la liste (Queue)

2.2.2.1. Ajouter au dbut de la liste (Tte)


Avant de procder lajout dun lment dans une liste, il faut dabord vrifier si la liste nest
pas vide. Si elle est vide, lajout sapparente la construction de la liste. Dans le cas
contraire, lajout en Tte de liste sexcute comme suit :
- Ajouter un nouveau maillon

L 31 176 10

p 72

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 12


Initiation lalgorithmique

- Pointer le nouveau maillon sur le 1er lment de la liste

L 31 176 10

p 72

- Pointer le pointeur de la Tte de liste sur le nouveau maillon

L 71 31 176 10

2.2.2.2. Ajouter au milieu de la liste


Avant de procder lajout dun lment dans une liste, il faut dabord vrifier si la liste nest
pas vide. Si elle est vide, lajout sapparente la construction de la liste. Dans le cas
contraire, lajout dun lment au milieu dune liste ncessite lutilisation de deux pointeurs :
- Un pointeur p pour pointer la position o lon veut insrer le nouvel lment
- Un pointeur r pour mmoriser ladresse du maillon prcdent.
Supposons que lon veuille ajouter un lment entre le 3me 176 et le 4me 10 maillon.
Pour faire il va falloir parcourir la liste de gauche droite en dplaant les pointeurs p et r
vers la position dajout.
- On commence par positionner les deux pointeurs vers le dbut de la liste

L 71 31 176 10

r
p

- On fait avancer les deux pointeurs p et r vers la position suivante

L 71 31 176 10
r
p

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 13


Initiation lalgorithmique

L 71 31 176 10

r
p 176

- On fait avancer les deux pointeurs p et r vers la position suivante.

L 71 31 176 10

r
p

L 71 31 176 10

r
p

- Une fois la position voulue est atteinte, on peut commencer par insrer un nouveau
maillon.

L 71 31 176 10

r
p 205

- On fait pointer le nouveau maillon sur le 4me lment.

L 71 31 176 10

r
p 205

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 14


Initiation lalgorithmique

- On fait pointer le 3me lment sur le nouveau maillon.

L 71 31 176 205 10

r
p

- Et la fin, on libre les deux pointeurs p et r .

L 71 31 176 205 10

r
p

2.2.2.3. Ajouter la fin de la liste (Queue)


Avant de procder lajout dun lment la fin dune liste, il faut dabord vrifier si la liste
nest pas vide. Si elle est vide, lajout sapparente la construction de la liste. Dans le cas
contraire, lajout dun lment la fin dune liste ncessite lutilisation de deux pointeurs :
- Un pointeur p pour crer un nouvel lment.
- Un pointeur r pour chercher le dernier lment.
Pour faire il va falloir :
- Dplacer dabord le pointeur r vers la fin de la liste, puis ajouter un nouveau
maillon.

L 71 31 176 205 10

r
p -8

- Pour terminer lajout, on pointe le dernier lment sur le nouveau maillon.

L 71 31 176 205 10 -3

r
p

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 15


Initiation lalgorithmique

2.2.3. Suppression dlments dune liste


La suppression dlments dune liste se fait suivant trois mthodes :
- Supprimer le premier lment (Tte)
- Supprimer un lment au milieu de la liste
- Supprimer le dernier lment (Queue)

2.2.3.1. Supprimer le premier lment (Tte)


Avant de procder la suppression dun lment, il faut dabord vrifier si la liste nest pas
vide. Si elle est vide, il ny a rien supprimer. Dans le cas contraire, la suppression sexcute
comme suit :
- On dplace la tte de liste sur le deuxime lment

L 71 31 176 205 10

Cette mthode est viter parce que, le premier lment 71 nappartient plus
la liste. On a perdu son adresse. Le problme est que cet lment existe toujours
dans la mmoire et donc il va occuper un espace mmoire inutilement.

- La bonne mthode cest dutiliser un pointeur pour mmoriser ladresse du premier


lment afin, de le supprimer

p 71 31 176 205 10
L

- Grce la mmorisation de ladresse dans le pointeur p , on peut le supprimer de


la mmoire pour rcuprer lespace quil occupe.

L 31 176 205 10
p

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 16


Initiation lalgorithmique

2.2.3.2. Supprimer un lment au milieu de la liste


Avant de procder la suppression dun lment, il faut dabord vrifier si la liste nest pas
vide. Si elle est vide, il ny a rien supprimer. Dans le cas contraire, il faut procder la
suppression de llment, sil existe bien sr. Pour faire, il faut utiliser deux pointeurs :
- Le premier pointeur pour pointer llment supprimer
- Le deuxime pointeur pour mmoriser ladresse de llment qui prcde celui quon
va supprimer.
Par exemple, on veut supprimer lavant-dernier lment dune liste.
- On place les deux pointeurs ; le premier (p) sur llment supprimer et le deuxime
(r) sur llment prcdent

L 71 31 176 205 10 -3

r
p

- On dplace le suivant du pointeur r sur llment qui suit immdiatement celui


quon doit supprimer.

L 71 31 176 205 10 -3

r
p

- Pour terminer, on supprime dfinitivement le maillon 10

L 71 31 176 205 -3
r
p

2.2.3.3. Supprimer le dernier lment (Queue)


Si vous avez bien assimil les diffrentes mthodes de manipulation dune liste, vous tes
alors, capable de savoir comment supprimer le dernier lment. Donc, on vous laisse le soin
de le trouver vous-mme.

AHMED-NACER Messaoud Enseignant luniversit de Boumerds 2016 17

You might also like