Cours-Algo2 Ahmed Nacer
Cours-Algo2 Ahmed Nacer
Cours-Algo2 Ahmed Nacer
Introduction lalgorithmique
Fonctions et procdures
Dcembre 2015
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.
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 .
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 .
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 .
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
Lexemple suivant montre comment utiliser des paramtres avec la fonction qui calcule le
carr dun nombre quelconque.
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 ;
Une fonction est manipule comme une variable simple. Cet algorithme fait appel la
fonction fcarre deux reprises :
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 :
de lecture ( lire ),
daffectation .. (partie variable, gauche du signe daffectation).
Lexemple suivant montre comment faire appel une fonction qui renvoie la valeur absolue
dun rel.
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 ;
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 ;
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 .
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
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 ;
Algorithme pavecp
var
i : entier ;
procedure souligne( ) ;
dbut
pour i 1 20 faire
debut
ecrire ( Le programme a rencontr une erreur : ) ;
crire ( " --- " ) ;
fin ;
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.
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.
Algorithme vecteur ;
Var
a , b : entier ;
Si z >= 0 alors
debut
x z+y;
y z*z;
fin
Sinon
debut
y zx;
x y*y;
fin ;
Calcul ( a , b ) ;
Si on veut qu'un sous-programme modifie les paramtres effectifs, il faut utiliser le passage
par adresse .
Algorithme vecteur ;
Var
a , b : entier ;
Si z >= 0 alors
debut
x z+y;
y z*z;
fin
Sinon
debut
y zx;
x y*y;
fin ;
Calcul ( a , b ) ;
20 y 25 y
Note :
Les tableaux, les fichiers et les listes (voir plus loin dans ce cours) sont toujours passs par
adresse (par dfaut).
Introduction lalgorithmique
Les enregistrements
Dcembre 2015
Algorithme test ;
type
etudiant = enregistrement
matricule : chane ;
nom : chane ;
prenom : chane ;
groupe : entier ;
note : Rel ;
Fin ;
Var
e : etudiant ;
Debut
..
Fin.
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 :
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 ) ;
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 ;
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
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
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 :
Champs
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
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.
Introduction lalgorithmique
Les fichiers
Dcembre 2015
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.
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
EOF
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 .
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.
EOL
Je suis au dbut du fichier
Nous sommes 5 EOL
EOF
Le pointeur
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 .
Le pointeur
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
- 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.
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.
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 :
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.
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.
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.
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.
Dbut
Oui
EOF (F1) ?
Non
Lire une donne X du fichier F1
Oui
Stocker la donne D dans F2
Fermer F1 et F2
F1 F2
Supprimer F2
Fin
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 ) ;
type
type_f : fichier de entier ;
var
f : type_f ;
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.
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.
Introduction lalgorithmique
Les pointeurs
Dcembre 2015
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
P Mmoire
0012 0000
0011
x
8 0012
0013
Avant affectation
Case
mmoire
p
102
p 102 ;
Aprs affectation
Case
p mmoire
102 102
Avant affectation
p x
102
p @x ;
Aprs affectation
p x
102 102
Avant affectation
p x
102 102
Q p;
Aprs affectation
p x
102 102
Q
102
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
Q p;
p x
102 52 102
Q y
102 64 068
p^ Q^ + y ;
Aprs calcul
p x
102 52 102
Q y
102 64 068
Avant initialisation
P x
102 102
y
068
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
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 .
Un pointeur est une variable qui peut pointer sur diffrentes adresses.
Introduction lalgorithmique
Dcembre 2015
p
V
072
0 Adrs. : 072
1 Adrs : 073
2 Adrs : 074
8 Adrs : 080
9 Adrs : 081
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.
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.
2me partie
re
1 partie (INFO) : (SUIVANT) :
Donne ou information Adresse de du
compose de 3 champs maillon suivant
- 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.
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.
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
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.
Pour i = 1
Cette instruction permet de construire, dans la
mmoire, un nouveau maillon qui sera,
automatiquement, point par le pointeur p .
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.
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.
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.
L 31 176 10
p 72
L 31 176 10
p 72
L 71 31 176 10
L 71 31 176 10
r
p
L 71 31 176 10
r
p
L 71 31 176 10
r
p 176
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
L 71 31 176 10
r
p 205
L 71 31 176 205 10
r
p
L 71 31 176 205 10
r
p
L 71 31 176 205 10
r
p -8
L 71 31 176 205 10 -3
r
p
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.
p 71 31 176 205 10
L
L 31 176 205 10
p
L 71 31 176 205 10 -3
r
p
L 71 31 176 205 10 -3
r
p
L 71 31 176 205 -3
r
p