SlideShare une entreprise Scribd logo
1  sur  20
1
Algorithmique et programmation II
Année Universitaire 2018/2019
Niveau : Tronc Commun
Semestre2
Sana REFAI
sana.refai@gmail.com
1
Plan du cours
2
Chapitre 1: Pointeurs et allocation
dynamique
Chapitre 2: Les listes chaînées
Chapitre 3: Les piles
Chapitre 4: Les files
Chapitre 5: Les arbres
2
Chapitre 1: Les pointeurs
3
Introduction(1/2)
Inconvénients des variables statiques
Les variables « classiques », déclarées avant l'exécution d'un
programme sont des variables statiques, c'est à dire que la place
qui leur est réservée en mémoire est figée durant toute l'exécution
du programme.
Ceci a deux conséquences :
• Risque de manquer de place si la place réservée (par exemple le
nombre d'éléments d'un tableau) est trop petite. Il faut alors que le
programme prenne en charge le contrôle du débordement.
• Risque de risque de gaspiller de la place si la place réservée est
beaucoup plus grande que celle qui est effectivement utilisée par
le programme.
Un cahier, dont le nombre de pages est fixé a priori, fournit une
bonne image d'une variable statique.
4
Introduction(2/2)
Introduction des variables dynamiques
Les variables dynamiques vont permettre :
• de prendre la place en mémoire au fur et à
mesure des besoins, celle-ci étant bien sûr limitée
par la taille de la mémoire,
• de libérer de la place lorsqu'on n'en a plus
besoin.
Un classeur dans lequel on peut ajouter ou
retirer des pages est une bonne image d'une
variable dynamique.
5
Le pointeur
 Un pointeur est une variable dont le contenu est une
adresse mémoire, elle sert à pointer sur une zone
mémoire donnée contenant une variable d’un type bien
précis sans tenir compte de sa valeur.
 Exemple:
P P^
@100C
« Kélibia"
 P pointe sur une chaine de caractère, le contenu de la
case mémoire pointée par P est P^ sa valeur est
« Kélibia »
6
Notation et déclaration
P : ^ entier : Définit un pointeur sur un entier.
Q : ^ Objet : Définit un pointeur sur une
structure.
P^, T^ : Définit le contenu de P et le contenu
de T.( autre présentation *P et *T)
En algorithmique En C
Syntaxe Variables:
Nom_var: ^nom_type
nom_type *Nom_var;
Exemple Variables:
Ptr1,Ptr2: ^entier
Ptr3:^reel
Int *Ptr1,*Ptr2;
Float * Ptr3;
7
Allocation / désallocation (1/4)
5
 On définit un type t.
 On déclare : ptr : pointeur_sur_t ou ^t.
Création d'une variable dynamique de type t :
allouer(ptr)
 réserve un emplacement mémoire de la
taille correspondant au type t,
 met dans la variable ptr l'adresse de la zone
mémoire qui a été réservée. L'emplacement
pointé par ptr sera accessible par ptr^.
8
Allocation / désallocation (2/4)
6
Exemple:
ptr : ^t
allouer(ptr)
ptr
ptr ptr^:t
9
Allocation / désallocation (3/4)
7
Libération de la place occupée par une
variable dynamique
desallouer(ptr)
 libère la place de la zone mémoire dont
l'adresse est dans ptr (et la rend disponible
pour l'allocation d'autres variables)
 laisse la valeur du pointeur en l'état
(n'efface pas l'adresse qui est dans la
variable pointeur).
10
Allocation / désallocation (4/4)
Exemple:
desallouer(ptr)
ptr
ptr ptr^:t
En algorithmique En C
Syntaxe allouer(ptr) ptr=(type*)malloc(sizeof(type));
Exemple desallouer(ptr) free(ptr);
Remarque : si on fait appel au pointeur
désalloué, il renvoie une information qui n'a
aucun sens.
11
Affectation entre pointeurs (1/2)
7
 Les pointeurs peuvent être impliqués dans des
affectations au cours desquelles des adresses
sont assignées aux pointeurs.
 Pour « vider » un pointeur, c'est à dire annuler
l'adresse qu'il contient, on lui affecte une valeur
prédéfinie nommée Nil (ou Null).
 Attention :le fait de mettre Nil dans un pointeur
ne libère pas l'emplacement sur lequel il
pointait. L'emplacement devient irrécupérable
car le lien vers cet emplacement a été coupé
par la valeur Nil. Il faut désallouer avant
d'affecter le pointeur avec Nil. ptr ← Nil
Règle de bonne programmation : dès
qu'on a désalloué un pointeur, il faut lui
affecter la valeur Nil, pour qu'il ne
conserve pas une adresse mémoire qui
n'a plus d'existence physique.
12
Affectation entre pointeurs (2/2)
7
 On peut affecter un pointeur avec tout autre
pointeur de même type.
 Après cette affectation, deux pointeurs
désignent la même zone de mémoire.
Exemple
ptr1, ptr2 : pointeur sur t
allouer(ptr1)
ptr2 ← ptr1
Pour libérer la zone mémoire on désalloue ptr1 ou
(exclusif) ptr2, puis on met la valeur Nil dans ptr1
et dans ptr2.
ptr2
ptr1
13
Accès à la variable pointée
7
 Une fois la variable ptr déclarée et allouée,
l'accès en écriture ou lecture à la variable
pointée par ptr se fait avec l'identificateur ptr^.
On peut appliquer à ptr^ les mêmes
instructions qu'à une variable simple. ptr1, ptr2
: pointeur sur t.
ptr^ ← <expression de type t>
lire(ptr^)
écrire(ptr^)
14
Exercice(1/2)
7
1-Dérouler l’algorithme suivant
en montrant l'état de la mémoire
en plus de ce qui s'affiche à l'écran.
2- Où est l'erreur dans cet
algorithme?
Variables
ptc : pointeur sur chaîne de caractères
ptx1, ptx2 : pointeur sur entier
Début
allouer(ptc)
ptc^ <- ‘ISET’
écrire(ptc^)
allouer(ptx1)
lire(ptx1^)
ptx2<- ptx1
écrire(ptx2^)
ptx2^<- ptx1^ + ptx2^
écrire(ptx1^, ptx2^)
Ptx1<- Nil
écrire(ptx2^)
désallouer(ptx2)
Ptx2<- Nil
Ptc<- Nil
Fin
15
Exercice(2/2)
7
ptc ptx1 ptx2
ISET
Variables
ptc : pointeur sur chaîne de caractères
ptx1, ptx2 : pointeur sur entier
Début
allouer(ptc)
ptc^ <- ‘ISET’
écrire(ptc^)
allouer(ptx1)
lire(ptx1^)
ptx2<- ptx1
écrire(ptx2^)
ptx2^<- ptx1^ + ptx2^
écrire(ptx1^, ptx2^)
Ptx1<- Nil
écrire(ptx2^)
désallouer(ptx2)
Ptx2<- Nil
Ptc<- Nil
Fin
ISET ISET
ISET 100
ISET 100
100
ISET 200
200 200
ISET 200
200
ISET
ISET
ISET
ERROR: on a coupé l'accès à la
zone de mémoire sans la
désallouer. Elle est irrécupérable
16
Pointeur et enregistrement (1/3)
7
 Il est très courant d’utiliser un pointeur pour
mémoriser l’adresse d’un enregistrement.
17
Type
tpersonne = enregistrement
nom : chaine
tel : chaine
finenreg
Var
pers: tpersonne
pointpers : ^tpersonne
Début
pers.nom <- "Mohamed"
pers.tel <- "0145698521"
pointpers <- &pers
Ecrire (pointpers^.nom) //donne à l’écran Mohamed
Ecrire (pointpers^.tel) //donne à l’écran 0145698521
…
Fin
Pointeur et enregistrement (2/3)
7
 Dans un enregistrement, un des champs peut très bien être un
pointeur, par exemple sur un autre enregistrement.
18
Type
tinstit = enregistrement
nom_ins : chaine
tel : chaine
finenreg
télève = enregistrement
nom_el: chaine
pinstit : ^tinstit
finenreg
Var
instituteur : tinstit
élève1, élève2: télève
Début
instituteur.nom_ins <- "Dupond"
instituteur.tel <- "0123654896"
élève1.nom_el <- "Pierre"
élève1.pinstit <- &instituteur
élève2.nom_el <- "Hakim"
élève2.pinstit <- &instituteur
Ecrire (élève1.pinstit^.nom) // affiche Dupond à l’écran
Ecrire (élève2.pinstit^.nom) // idem
Passage de paramètres par adresse
7
En C, seul le passage de paramètres par valeur est
disponible. Le passage de paramètres résultats (i.e.
paramètres dont la valeur est modifiée par une fonction)
n’est pas supporté. Le seul moyen dont on dispose pour
approcher ce mode de passage est d’utiliser comme
paramètre effectif une adresse.
void incr(int *a)
{ *a = (*a)++ ; }
int main() {
int x = 5;
incr(&x);
printf("%d", x);
return 0 ;
}
19
Tableaux et pointeurs
720
 Par définition: si pa est un pointeur sur un élément d’un
tableau tab alors,
• pa+i pointe sur le i-ème élément du tableau après pa
• pa-i pointe sur le i-ème élément avant pa
 Le nom d’un tableau vaut l’adresse de son 1er élément:
 si pa=tab alors *(pa+i) identique à tab[i]
Exemple en C:
int *pa, a[5];
/*idem pa=a*/
pa = &a[0];
Note : si pa contient 0x10, l’adresse du premier
élément, alors pa+1 ou p++ vaut 0x14 dans le cas où
l’entier signé est codé sur 4 octets.

Contenu connexe

Tendances

Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données IIRiadh Bouslimi
 
Cours python
Cours pythonCours python
Cours pythonsalmazen
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Fabio Hernandez
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binairesSana Aroussi
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage CMohamed Lahby
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdfsalah fenni
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireLilia Sfaxi
 

Tendances (20)

Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Cours python
Cours pythonCours python
Cours python
 
Tp n 6 linux
Tp n 6 linuxTp n 6 linux
Tp n 6 linux
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++
 
Python
PythonPython
Python
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoire
 

Similaire à Cours algo: Les pointeurs

01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)Wael Ismail
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++Wael Ismail
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Fahad Golra
 
M2 INAE introduction python.pdf
M2 INAE introduction python.pdfM2 INAE introduction python.pdf
M2 INAE introduction python.pdfHajer Amdouni
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
ch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfFadouaBouafifSamoud
 
Debuter en Python.ppt
Debuter en Python.pptDebuter en Python.ppt
Debuter en Python.pptSofienBoutaib
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxbetalab
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111SaraMeriem1
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.netZakaria SMAHI
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 

Similaire à Cours algo: Les pointeurs (20)

01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C
 
M2 INAE introduction python.pdf
M2 INAE introduction python.pdfM2 INAE introduction python.pdf
M2 INAE introduction python.pdf
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
ch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdf
 
Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
Debuter en Python.ppt
Debuter en Python.pptDebuter en Python.ppt
Debuter en Python.ppt
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111
 
Formation python micro club.net
Formation python micro club.netFormation python micro club.net
Formation python micro club.net
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 

Plus de Sana REFAI

Chapitre 2 : Les Listes chainées en Algo et C
Chapitre 2 : Les Listes chainées en Algo et CChapitre 2 : Les Listes chainées en Algo et C
Chapitre 2 : Les Listes chainées en Algo et CSana REFAI
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéSana REFAI
 
Chap2: lescollections
Chap2: lescollections Chap2: lescollections
Chap2: lescollections Sana REFAI
 
Chap1lla génèricité.pptx
Chap1lla génèricité.pptxChap1lla génèricité.pptx
Chap1lla génèricité.pptxSana REFAI
 
Gestion de projets
Gestion de projetsGestion de projets
Gestion de projetsSana REFAI
 

Plus de Sana REFAI (7)

Chapitre 2 : Les Listes chainées en Algo et C
Chapitre 2 : Les Listes chainées en Algo et CChapitre 2 : Les Listes chainées en Algo et C
Chapitre 2 : Les Listes chainées en Algo et C
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicité
 
Chap2: lescollections
Chap2: lescollections Chap2: lescollections
Chap2: lescollections
 
Chap1lla génèricité.pptx
Chap1lla génèricité.pptxChap1lla génèricité.pptx
Chap1lla génèricité.pptx
 
Pfe
PfePfe
Pfe
 
Kinect
Kinect Kinect
Kinect
 
Gestion de projets
Gestion de projetsGestion de projets
Gestion de projets
 

Dernier

Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film françaisTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...NaimDoumissi
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film françaisTxaruka
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfSylvianeBachy
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Pharmacologie des cardiotoniques pour Pharmacie
Pharmacologie des cardiotoniques pour PharmaciePharmacologie des cardiotoniques pour Pharmacie
Pharmacologie des cardiotoniques pour PharmacieLoloshka
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Gabriel Gay-Para
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 

Dernier (20)

Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film français
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film français
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Pharmacologie des cardiotoniques pour Pharmacie
Pharmacologie des cardiotoniques pour PharmaciePharmacologie des cardiotoniques pour Pharmacie
Pharmacologie des cardiotoniques pour Pharmacie
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 

Cours algo: Les pointeurs

  • 1. 1 Algorithmique et programmation II Année Universitaire 2018/2019 Niveau : Tronc Commun Semestre2 Sana REFAI sana.refai@gmail.com 1
  • 2. Plan du cours 2 Chapitre 1: Pointeurs et allocation dynamique Chapitre 2: Les listes chaînées Chapitre 3: Les piles Chapitre 4: Les files Chapitre 5: Les arbres 2
  • 3. Chapitre 1: Les pointeurs 3
  • 4. Introduction(1/2) Inconvénients des variables statiques Les variables « classiques », déclarées avant l'exécution d'un programme sont des variables statiques, c'est à dire que la place qui leur est réservée en mémoire est figée durant toute l'exécution du programme. Ceci a deux conséquences : • Risque de manquer de place si la place réservée (par exemple le nombre d'éléments d'un tableau) est trop petite. Il faut alors que le programme prenne en charge le contrôle du débordement. • Risque de risque de gaspiller de la place si la place réservée est beaucoup plus grande que celle qui est effectivement utilisée par le programme. Un cahier, dont le nombre de pages est fixé a priori, fournit une bonne image d'une variable statique. 4
  • 5. Introduction(2/2) Introduction des variables dynamiques Les variables dynamiques vont permettre : • de prendre la place en mémoire au fur et à mesure des besoins, celle-ci étant bien sûr limitée par la taille de la mémoire, • de libérer de la place lorsqu'on n'en a plus besoin. Un classeur dans lequel on peut ajouter ou retirer des pages est une bonne image d'une variable dynamique. 5
  • 6. Le pointeur  Un pointeur est une variable dont le contenu est une adresse mémoire, elle sert à pointer sur une zone mémoire donnée contenant une variable d’un type bien précis sans tenir compte de sa valeur.  Exemple: P P^ @100C « Kélibia"  P pointe sur une chaine de caractère, le contenu de la case mémoire pointée par P est P^ sa valeur est « Kélibia » 6
  • 7. Notation et déclaration P : ^ entier : Définit un pointeur sur un entier. Q : ^ Objet : Définit un pointeur sur une structure. P^, T^ : Définit le contenu de P et le contenu de T.( autre présentation *P et *T) En algorithmique En C Syntaxe Variables: Nom_var: ^nom_type nom_type *Nom_var; Exemple Variables: Ptr1,Ptr2: ^entier Ptr3:^reel Int *Ptr1,*Ptr2; Float * Ptr3; 7
  • 8. Allocation / désallocation (1/4) 5  On définit un type t.  On déclare : ptr : pointeur_sur_t ou ^t. Création d'une variable dynamique de type t : allouer(ptr)  réserve un emplacement mémoire de la taille correspondant au type t,  met dans la variable ptr l'adresse de la zone mémoire qui a été réservée. L'emplacement pointé par ptr sera accessible par ptr^. 8
  • 9. Allocation / désallocation (2/4) 6 Exemple: ptr : ^t allouer(ptr) ptr ptr ptr^:t 9
  • 10. Allocation / désallocation (3/4) 7 Libération de la place occupée par une variable dynamique desallouer(ptr)  libère la place de la zone mémoire dont l'adresse est dans ptr (et la rend disponible pour l'allocation d'autres variables)  laisse la valeur du pointeur en l'état (n'efface pas l'adresse qui est dans la variable pointeur). 10
  • 11. Allocation / désallocation (4/4) Exemple: desallouer(ptr) ptr ptr ptr^:t En algorithmique En C Syntaxe allouer(ptr) ptr=(type*)malloc(sizeof(type)); Exemple desallouer(ptr) free(ptr); Remarque : si on fait appel au pointeur désalloué, il renvoie une information qui n'a aucun sens. 11
  • 12. Affectation entre pointeurs (1/2) 7  Les pointeurs peuvent être impliqués dans des affectations au cours desquelles des adresses sont assignées aux pointeurs.  Pour « vider » un pointeur, c'est à dire annuler l'adresse qu'il contient, on lui affecte une valeur prédéfinie nommée Nil (ou Null).  Attention :le fait de mettre Nil dans un pointeur ne libère pas l'emplacement sur lequel il pointait. L'emplacement devient irrécupérable car le lien vers cet emplacement a été coupé par la valeur Nil. Il faut désallouer avant d'affecter le pointeur avec Nil. ptr ← Nil Règle de bonne programmation : dès qu'on a désalloué un pointeur, il faut lui affecter la valeur Nil, pour qu'il ne conserve pas une adresse mémoire qui n'a plus d'existence physique. 12
  • 13. Affectation entre pointeurs (2/2) 7  On peut affecter un pointeur avec tout autre pointeur de même type.  Après cette affectation, deux pointeurs désignent la même zone de mémoire. Exemple ptr1, ptr2 : pointeur sur t allouer(ptr1) ptr2 ← ptr1 Pour libérer la zone mémoire on désalloue ptr1 ou (exclusif) ptr2, puis on met la valeur Nil dans ptr1 et dans ptr2. ptr2 ptr1 13
  • 14. Accès à la variable pointée 7  Une fois la variable ptr déclarée et allouée, l'accès en écriture ou lecture à la variable pointée par ptr se fait avec l'identificateur ptr^. On peut appliquer à ptr^ les mêmes instructions qu'à une variable simple. ptr1, ptr2 : pointeur sur t. ptr^ ← <expression de type t> lire(ptr^) écrire(ptr^) 14
  • 15. Exercice(1/2) 7 1-Dérouler l’algorithme suivant en montrant l'état de la mémoire en plus de ce qui s'affiche à l'écran. 2- Où est l'erreur dans cet algorithme? Variables ptc : pointeur sur chaîne de caractères ptx1, ptx2 : pointeur sur entier Début allouer(ptc) ptc^ <- ‘ISET’ écrire(ptc^) allouer(ptx1) lire(ptx1^) ptx2<- ptx1 écrire(ptx2^) ptx2^<- ptx1^ + ptx2^ écrire(ptx1^, ptx2^) Ptx1<- Nil écrire(ptx2^) désallouer(ptx2) Ptx2<- Nil Ptc<- Nil Fin 15
  • 16. Exercice(2/2) 7 ptc ptx1 ptx2 ISET Variables ptc : pointeur sur chaîne de caractères ptx1, ptx2 : pointeur sur entier Début allouer(ptc) ptc^ <- ‘ISET’ écrire(ptc^) allouer(ptx1) lire(ptx1^) ptx2<- ptx1 écrire(ptx2^) ptx2^<- ptx1^ + ptx2^ écrire(ptx1^, ptx2^) Ptx1<- Nil écrire(ptx2^) désallouer(ptx2) Ptx2<- Nil Ptc<- Nil Fin ISET ISET ISET 100 ISET 100 100 ISET 200 200 200 ISET 200 200 ISET ISET ISET ERROR: on a coupé l'accès à la zone de mémoire sans la désallouer. Elle est irrécupérable 16
  • 17. Pointeur et enregistrement (1/3) 7  Il est très courant d’utiliser un pointeur pour mémoriser l’adresse d’un enregistrement. 17 Type tpersonne = enregistrement nom : chaine tel : chaine finenreg Var pers: tpersonne pointpers : ^tpersonne Début pers.nom <- "Mohamed" pers.tel <- "0145698521" pointpers <- &pers Ecrire (pointpers^.nom) //donne à l’écran Mohamed Ecrire (pointpers^.tel) //donne à l’écran 0145698521 … Fin
  • 18. Pointeur et enregistrement (2/3) 7  Dans un enregistrement, un des champs peut très bien être un pointeur, par exemple sur un autre enregistrement. 18 Type tinstit = enregistrement nom_ins : chaine tel : chaine finenreg télève = enregistrement nom_el: chaine pinstit : ^tinstit finenreg Var instituteur : tinstit élève1, élève2: télève Début instituteur.nom_ins <- "Dupond" instituteur.tel <- "0123654896" élève1.nom_el <- "Pierre" élève1.pinstit <- &instituteur élève2.nom_el <- "Hakim" élève2.pinstit <- &instituteur Ecrire (élève1.pinstit^.nom) // affiche Dupond à l’écran Ecrire (élève2.pinstit^.nom) // idem
  • 19. Passage de paramètres par adresse 7 En C, seul le passage de paramètres par valeur est disponible. Le passage de paramètres résultats (i.e. paramètres dont la valeur est modifiée par une fonction) n’est pas supporté. Le seul moyen dont on dispose pour approcher ce mode de passage est d’utiliser comme paramètre effectif une adresse. void incr(int *a) { *a = (*a)++ ; } int main() { int x = 5; incr(&x); printf("%d", x); return 0 ; } 19
  • 20. Tableaux et pointeurs 720  Par définition: si pa est un pointeur sur un élément d’un tableau tab alors, • pa+i pointe sur le i-ème élément du tableau après pa • pa-i pointe sur le i-ème élément avant pa  Le nom d’un tableau vaut l’adresse de son 1er élément:  si pa=tab alors *(pa+i) identique à tab[i] Exemple en C: int *pa, a[5]; /*idem pa=a*/ pa = &a[0]; Note : si pa contient 0x10, l’adresse du premier élément, alors pa+1 ou p++ vaut 0x14 dans le cas où l’entier signé est codé sur 4 octets.

Notes de l'éditeur

  1. Rechercher un element ds un tableau
  2. Rechercher un element ds un tableau
  3. Rechercher un element ds un tableau
  4. Rechercher un element ds un tableau
  5. Rechercher un element ds un tableau
  6. Rechercher un element ds un tableau
  7. Rechercher un element ds un tableau
  8. Rechercher un element ds un tableau
  9. Rechercher un element ds un tableau
  10. Rechercher un element ds un tableau
  11. Rechercher un element ds un tableau
  12. Rechercher un element ds un tableau
  13. Rechercher un element ds un tableau
  14. Rechercher un element ds un tableau
  15. Rechercher un element ds un tableau
  16. Rechercher un element ds un tableau
  17. Rechercher un element ds un tableau
  18. Rechercher un element ds un tableau
  19. Rechercher un element ds un tableau