SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
1
Algorithmique & structures
de données I
1ère IAG
Responsable : Dr. Fadoua Bouafif
Chapitre 5
Les tableaux & les pointeurs
2
Objectifs
 Définir un tableau à une dimension
 Définir un tableau à deux dimensions
 Manipuler les deux types de tableaux
 Savoir la définition et la déclaration d’un pointeur
 Apprendre la manipulation des pointeurs sur les tableaux
ASD I
3
Plan
1.Introduction
2.Définitions
3.Tableaux à une dimension
 Définition
 Manipulation
 Activité
4.Tableaux à deux dimensions
 Définition
 Manipulation
 Activité
5.Les pointeurs
 définition
 Déclaration
 Affectation
 Pointeur et tableau
6.Conclusion
4
ASD I
1 2
3 4
Introduction
Types de données
5
Types simples Types composés
ASD I
entier réel caractère
… Tableau Enregistrement listes
…
Tableau: définition
 Un tableau est une structure de données qui sert à stocker, dans une même variable, un
nombre fini d'éléments de mêmes type.
 Un tableau est un espace mémoire contigu, alloué en mémoire centrale, qui permet de stocker
« n » information de même type.
 Une case représente un élément du tableau caractérisée par une valeur et un indice
précisant sa position au sein de l'ensemble.
 L'indice début d'un tableau commence obligatoirement par 0 dans le langage C. En
algorithmique, l'indice peut être 0 ou 1 selon la convention adoptée.
 Il y a deux types de tableaux : tableau à une dimension et tableau à deux dimensions
6
ASD I
5 6 20 … 10 ..
bsup
binf
Une case
n= bsup-binf+1
Tableau à une dimension: déclaration
Un tableau est caractérisé par :
 Nom: représente où se trouve le 1er élément, càd l'adresse du 1er élément (nommé pointeur).
 Taille: représente le nombre d'éléments qu'il contient.
 Type: représente le type des éléments qu'il contient.
7
ASD I
Tableau à une dimension : Exemple
 Exemple:
Soit un tableau à une dimension à 5 cases:
 Une case i correspond à l'élément numéro i d’indice i-1
Exemple: La valeur 75 correspond à l’élément de la case 3 d’indice 2
8
ASD I
66 33 75 12 99
Indice: 0 1 2 3 4
case1 case2 case3 case4 case5
5 6
7 8
Tableau à une dimension:
déclaration en Algorithmique
9
ASD I
Utilisation du type Tableau Syntaxe 1
var : nom_tableau : tableau [indice_deb . . indice_fin] de type
Exemple:
var : A : tableau [0 .. 49] d'entier
Construction d’un
nouveau type
Syntaxe 2
type nom_type: tableau [indice_deb . . indice_fin] de type
var : nom_tableau : nom_type
Exemple:
type Tab : tableau [0 .. 49] d'entier
var : A : Tab
 Le nouveau type identifié par nom_type s'ajoute à la liste des types, qui peuvent être utilisés dans l'algorithme et qui
contient la définition de ce type.
Tableau à une dimension: déclaration en C
Syntaxe
Type_de_données Nom_tableau[dimension] ;
Exemples:
int A [50] ; /* tableau de 50 valeurs de type entier*/
float notes [20] ; /* tableau de 20 valeurs de type réelle*/
int tab [15] ; /* tableau de 15 valeurs de type entier*/
char t [5] ; /* tableau de 5 valeurs de type caractère*/
ASD I
10
Tableau à une dimension: Manipulation
11
ASD I
 L’initialisation d’un élément du tableau se fait comme suit :
 L'accès à une case du tableau est direct et se fait via le numéro (indice) de la case
correspondante.
 T[i] : désigne le contenu de la case numéro i+1 du tableau T.
Exemple:
A[3] : désigne le 4ème élément du tableau A.
 A[3] = 22
 Une case du tableau joue le rôle d’une variable
En Algorithmique En C
Nom_tableau[Indice]  expression Nom_tableau[Indice] = expression
Tableau à une dimension: Manipulation (suite)
12
ASD I
 Pour lire ou écrire un tableau T de N éléments, on utilisera les boucles:
En algorithmique En C
Lecture Pour i de 1 à N Faire
Ecrire(" Entrer l’élément ", i)
Lire (T[i])
FinPour
For(i=0;i<=N; i++ )
{
printf(" Entrer l’élément %d", i)
scanf(″%d″,&T[i]) ;
}
Ecriture Pour i de 1 à N Faire
Ecrire (T[i])
FinPour
For(i=0;i<=N; i++ )
{
printf(″T[%d]=%d″,i, T[i]) ;
}
9 10
11 12
Tableau à une dimension: Remarque en C
13
ASD I
 Un tableau peut être initialisé dès la déclaration :
Syntaxe:
Type_de_données nom_Tableau[dimension] = {case1, ..., case-n} ;
Exemples:
int tab[5] = {10, 20, 0, 3, 5} ; // déclaration d’un tableau de 5 cases d’entiers
int tab[5] = {10, 20} ; // le reste des valeurs sont initialisées à zéro
int tab[] = {10, 20, 0, 3, 5} ; /*la taille du tableau est déterminée par le compilateur par le nombre de
valeurs énumérées dans l'initialisation */
int tab[4] ={0} ; //toutes les cases du tableau seront initialisées à 0
#define n 10
int tab[5] = {2*n-1, n-1, n, n+1, 2*n+1} ;
Tableau à une dimension: Activité
 Ecrire un Algorithme (programme C) qui permet de déterminer, à partir de 20 notes
d’étudiants (fournies en données), combien d'entre elles sont supérieures à la moyenne de
la classe.
 Solution
14
ASD I
Tableau à deux dimensions
 Exemple:
Soit un tableau à deux dimensions de 4 Colonnes et 2 lignes :
 Une case i,j correspond à l'élément de la ligne i+1 et de la colonne j+1.
Exemple: la case(1,2) correspond à l’élément de la 2ème ligne et 3ème colonne
15
ASD I
Case 0,0 Case0,2
Case1,1 Case1,3
Indice i 0 1 2 3
j
0
1
Tableau à deux dimensions:
déclaration en Algorithmique
16
ASD I
Utilisation du type Tableau Syntaxe
var : nom_tableau: tableau [indice_ligne_deb .. indice_ligne_fin,
indice_colonne_deb .. indice_colonne_fin] de type
Exemple:
var : A : tableau [0 .. 49, 0..29] d'entier
Construction d’un
nouveau type
Syntaxe
type nom_type: tableau [indice_ligne_deb .. indice_ligne_fin,
indice_colonne_deb .. indice_colonne_fin] de type
var : nom_tableau : nom_type
Exemple:
type Tab : tableau [0 .. 49, 0 .. 29] d'entier
var : A : Tab
13 14
15 16
Tableau à deux dimensions: déclaration en C
Syntaxe:
Type_de_données nom_tableau [nombre de lignes] [nombre de colonnes] ;
Exemples:
int A [50][30]; // déclaration d’un tableau de 50 lignes et 30 colonnes de type entier
float [20][20] ; // déclaration d’un tableau de 20 lignes et 20 colonnes de type entier
ASD I
17
Tableau à deux dimensions: Manipulation
18
ASD I
 Les cases du tableau à 2 dimensions sont accessibles via le nom du tableau, l'indice de la
ligne et l'indice de la colonne.
 Les indices de la ligne et de la colonne ne doivent pas dépasser les intervalles déclarés.
 Désigne la case de la ligne i+1 et de la colonne j+1 du tableau T
Exemple:
En algorithmique En C
T[i, j] T[i][j];
En algorithmique En C
T : Tableau [0..9, 0..1] de réel
T[2, 1]
float T[10][2] ;
T[2][1];
 désigne la case de la ligne 3 et de la colonne 2 du tableau T.
Une case d'un tableau joue le rôle d'une variable
Tableau à deux dimensions : Manipulation (suite)
19
ASD I
 Pour lire ou écrire une matrice M d’ordre Nb_lig x Nb_col, on utilisera les boucles:
En algorithmique En C
Lecture Pour i de 1 à Nb_lig Faire
Pour j de 1 à Nb_col Faire
Ecrire(" Entrer l’élément ", i,j)
Lire (T[i,j])
FinPour
FinPour
For(i=0;i<=Nb_lig; i++ )
{
For(j=0;j<=Nb_col; j++ )
{
printf(" Entrer l’élément M[%d][%d] ", i,j)
scanf(″%d″,&T[i][j]) ;
}
}
Ecriture Pour i de 1 à Nb_lig Faire
Pour j de 1 à Nb_col Faire
Ecrire (T[i,j])
FinPour
FinPour
For(i=0;i<=Nb_lig; i++ )
{
For(j=0;j<=Nb_col; j++ )
{
printf(″M[%d][%d]=%d″, i, j, T[i][j]) ;
Tableau à deux dimensions : Remarque en C
20
ASD I
 Un tableau à deux dimensions peut être initialisé dès la déclaration :
 Les valeurs sont initialisées ligne par ligne de gauche à droite.
 Les composantes de chaque ligne du tableau sont comprises entre accolades.
 Pour améliorer la lisibilité des programmes, les composantes peuvent être indiquées sur
plusieurs lignes.
Exemple:
float notes[2] [2] = {{12, 13}, {9, 11}} ;
Ou
float notes[2] [2] = {{12, 13},
{9, 11}} ;
17 18
19 20
Tableau à deux dimensions: Activité
 Ecrire un Algorithme (programme C) qui permet de remplir une matrice M d’entier de L lignes
et C colonnes et d’afficher la valeur maximum de ses éléments . N.B 0< C<=20, 0< L<=20
 Solution
21
ASD I
Les pointeurs: définition
 Un pointeur est une variable dont la valeur est une adresse.
 Une variable pointée est une variable dont l’adresse est contenue dans un
pointeur.
22
x
Variable pointée
pt
Pointeur
L’adresse de x
Les pointeurs: Déclaration
 Un pointeur est une variable qui a le même type que la variable qu'il pointe
donc il doit être déclaré.
 En algorithme: la déclaration est faite avec puis le type du pointeur.
 En C: l'opérateur d'indirection * (astérisque) est utilisé pour définir un pointeur.
 Syntaxes
 Exemples : si la variable pointée est de type entier, alors le pointeur est de type entier aussi.
23
En Algorithme En C
nom_pointeur : ↑ type type *nom_pointeur ;
En Algorithme En C
var: x: entier
px: ↑ entier
{
int x;
int *px;
}
Remarque EN C
L'accès à la variable pointée peut être fait :
- Directement à travers le nom de la variable (x)
- Indirectement à travers le pointeur sur cette variable (*px)
Donc x (*px)
(*px) représente le contenu de la variable pointée par px
24
21 22
23 24
Les pointeurs: affectation
 Pour affecter l'adresse d'une variable à un pointeur, il faut utiliser les instructions suivantes:
 Syntaxes:
Exemples :
25
En Algorithme En C
nom_pointeur  ↑ nom_variable nom_pointeur = & nom_variable;
En Algorithme En C
var: x: entier
px: ↑ entier
Debut
px ↑ x
{
int x;
int *px;
px =&x;
}
- Si on affiche le contenu d'un pointeur, alors l’adresse de la variable pointée sera affichée.
- Si on affiche le contenu d'une variable pointée, alors la valeur associée à cette variable sera affichée. L'accès au
contenu de cette variable pointée s'appelle déréférencement.
Remarques
1. Si le contenu d'une variable pointée est modifié, l'adresse du pointeur n'est pas modifiée.
Exemples:
26
int i=12; i est une variable de type entier
int *adr; *adr est un pointeur de même type que i
adr =&i; adr pointe sur i
*adr =30; i prendra la valeur 30
 (*adr) = i; : (*adr) désigne la valeur de i.
Exemple
27
#include <stdio.h>
Void main( )
{
int i = 3;
int *P, *Z ; // P et Z sont des pointeurs sur une variable de type entier
P=&i; //P contient l’adresse de la variable i
Z=P;
printf (" le contenu de la case mémoire pointée par P est : %d ”, *P); // *P=3
*P = 5;
printf (”n i = %d et *Z = %d ”, i, *Z) ; // i=5 et *Z=5
}
Les objets i et *P sont identiques
 Ils ont les mêmes adresse et
valeur.

La modification de *P modifie i.
Remarques
2. Lorsque le pointeur ne reçoit aucune adresse, il se pointe sur nulle.
 Si vous déclarez un pointeur sans l’initialiser, alors lorsque vous tentez de l’utiliser, le
programme se plante. Pour éviter cela, le pointeur doit être initialisé à NIL (en C, NULL)
3. Les opérations possibles sur les pointeurs:
 Affectation entre les variables pointeurs de même type.
 Comparaison de pointeurs de même types en utilisant les opérateurs de comparaisons.
NIL : Not Identified Link
28
25 26
27 28
Pointeurs & Tableaux
 L'utilisation des pointeurs vers des tableaux est très courante en C.
 Il existe une relation importante entre un pointeur et un tableau du fait que toute
opération manipulant des indices de tableaux peut être faite à l’aide de pointeurs.
 Les pointeurs vers les tableaux conduisent généralement à des programmes qui
s'exécutent plus rapidement et consomment moins d'espace mémoire.
 En C, le compilateur convertit toujours une référence à un tableau en un pointeur sur
le début du tableau.
29
Pointeurs vers tableaux
30
Exemple:
int tab[ 100 ] ; // un tableau tab de 100 entiers
int *ptrtab ; // un pointeur ptrtab sur le type entier
ptrtab=tab; ptrtab= &tab[0] ;
 ptrtab pointe sur le premier élément du tableau
 ptrtab contient l’adresse du premier élément du tableau (& tab[0] )
 Le nom du tableau (tab) sans indice est considéré comme un pointeur vers l’ensemble du
tableau
Pour définir un pointeur destiné à référencer les éléments d'un tableau, il faut définir un pointeur sur le
type des éléments du tableau et non pas directement vers le tableau.
Pointeurs vers tableaux (suite)
31
Exemple:
int tab[ 100 ] ; // un tableau tab de 100 entiers
int *ptrtab ; // un pointeur ptrtab sur un entier
 *(ptrtab+5)=10; tab[5]=10; //affecter à la 6ème case du tableau la valeur 10
 ptrtab= &tab[1] // ptrtab pointe sur le second élément du tableau
Pour accéder à une autre valeur du tableau , il suffit d'ajouter son indice au pointeur de base
et d'appliquer l'opérateur d'indirection:
*(ptrtab + i) tob[i] ptrtab[i]
Pointeurs vers tableaux (suite)
32
 Le pointeur peut être utilisé comme un indice de parcours dans le tableau.
Exemple: Si ptrtab pointe sur la case i
 Ptrtab +=1 ou ++ptrtab référence la case suivante (i + 1) et
 Ptrtab -=1 ou --ptrtab référence la case précédente (i - 1)
Attention: Lors de l'utilisation de ces opérateurs, il faut veiller à ne pas être en dehors du tableau, que
ce soit au début ou à la fin sinon ça sera une erreur de débordement  Il faut toujours contrôler le
programme pour éviter cette situation.
 Comparaison de deux pointeurs, en C : il est utile de comparer deux pointeurs vers un même
tableau, par exemple :
ptrtab >&tab[99]; le résultat est vrai si le pointeur dépasse le dernier élément, sinon c’est faut.
ptrtab>&tab[99] ; ptrtab > Tab + 99; //Tab est un pointeur vers le début du tableau.
29 30
31 32
Pointeurs vers tableaux (suite)
33
 Soustraction de deux pointeurs de même types: cette opération fournit le nombre d'éléments
contenus entre les deux pointeurs.
Exemple: int tab[100], *a, *b, x;
a =&tab[5] ; // a pointe sur le 6ème élément du tableau
b=&tab[20] ; // b pointe sur 21ème élément du tableau
 x = b - a ; // x= 15, le nombre des éléments qui sépare les deux pointeurs
34
► Si p pointe vers un élément dans un tableau T, l'instruction n = p - T; affecte à n le numéro
d'indice de l'élément du tableau T vers lequel pointe p.
► Si p’ pointe vers le dernier élément de T (p’ = & T[99];) alors, n va avoir la valeur 99 après la
soustraction.
T
0 … 25 …. 99
p
n = p - T; // n= 25
p’
n = p’ - T; // n= 99
Pointeurs vers tableaux (suite)
Pointeurs vers tableaux: activité
35
Ecrire un programme en C qui permet d’afficher le contenu du tableau en utilisant un pointeur :
Conclusion
36
 Dans ce chapitre nous avons:
 Définie et manipulé les tableaux à une dimension et à deux
dimensions en algorithmique et en C
 Définie un pointeur
 Appris la manipulation des pointeurs sur les tableaux
33 34
35 36

Contenu connexe

Similaire à Ch5-les tableaux et les pointeurs.pdf

Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Aziz Darouichi
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdiversHajar Yazine
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
ExercicescorrigesdiversKarim Amane
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de javaAmir Souissi
 
les fondamentaux sur la matrice et les tableux .pdf
les fondamentaux sur la matrice et les tableux .pdfles fondamentaux sur la matrice et les tableux .pdf
les fondamentaux sur la matrice et les tableux .pdfLamissGhoul1
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdfsalah fenni
 
Les Structures de données
Les Structures de donnéesLes Structures de données
Les Structures de donnéesHichem Kemali
 
Tableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxTableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxPROFPROF11
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
1 rappel d'excel
1 rappel d'excel1 rappel d'excel
1 rappel d'excelkkatia31
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptxMaNl13
 

Similaire à Ch5-les tableaux et les pointeurs.pdf (20)

Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Chapitre3 tableauxcpp
Chapitre3 tableauxcppChapitre3 tableauxcpp
Chapitre3 tableauxcpp
 
Chapitre 2
Chapitre 2Chapitre 2
Chapitre 2
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
langage C++
langage C++langage C++
langage C++
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
les fondamentaux sur la matrice et les tableux .pdf
les fondamentaux sur la matrice et les tableux .pdfles fondamentaux sur la matrice et les tableux .pdf
les fondamentaux sur la matrice et les tableux .pdf
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Les Structures de données
Les Structures de donnéesLes Structures de données
Les Structures de données
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Tableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxTableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptx
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Cours d'algorithmique
Cours d'algorithmiqueCours d'algorithmique
Cours d'algorithmique
 
1 rappel d'excel
1 rappel d'excel1 rappel d'excel
1 rappel d'excel
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptx
 

Plus de FadouaBouafifSamoud

Plus de FadouaBouafifSamoud (8)

Ch3-les structures conditionnelles.pdf
Ch3-les structures conditionnelles.pdfCh3-les structures conditionnelles.pdf
Ch3-les structures conditionnelles.pdf
 
Ch4- les structures répétitives.pdf
Ch4- les structures répétitives.pdfCh4- les structures répétitives.pdf
Ch4- les structures répétitives.pdf
 
Ch1-Généralités.pdf
Ch1-Généralités.pdfCh1-Généralités.pdf
Ch1-Généralités.pdf
 
ch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdfch7_les chaines de caractères.pdf
ch7_les chaines de caractères.pdf
 
ch6 les sous programmes.pdf
ch6 les sous programmes.pdfch6 les sous programmes.pdf
ch6 les sous programmes.pdf
 
ch4_les listes.pdf
ch4_les listes.pdfch4_les listes.pdf
ch4_les listes.pdf
 
ch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdf
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 

Dernier

A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
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
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeBenamraneMarwa
 

Dernier (15)

A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
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...
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étude
 

Ch5-les tableaux et les pointeurs.pdf

  • 1. 1 Algorithmique & structures de données I 1ère IAG Responsable : Dr. Fadoua Bouafif Chapitre 5 Les tableaux & les pointeurs 2 Objectifs  Définir un tableau à une dimension  Définir un tableau à deux dimensions  Manipuler les deux types de tableaux  Savoir la définition et la déclaration d’un pointeur  Apprendre la manipulation des pointeurs sur les tableaux ASD I 3 Plan 1.Introduction 2.Définitions 3.Tableaux à une dimension  Définition  Manipulation  Activité 4.Tableaux à deux dimensions  Définition  Manipulation  Activité 5.Les pointeurs  définition  Déclaration  Affectation  Pointeur et tableau 6.Conclusion 4 ASD I 1 2 3 4
  • 2. Introduction Types de données 5 Types simples Types composés ASD I entier réel caractère … Tableau Enregistrement listes … Tableau: définition  Un tableau est une structure de données qui sert à stocker, dans une même variable, un nombre fini d'éléments de mêmes type.  Un tableau est un espace mémoire contigu, alloué en mémoire centrale, qui permet de stocker « n » information de même type.  Une case représente un élément du tableau caractérisée par une valeur et un indice précisant sa position au sein de l'ensemble.  L'indice début d'un tableau commence obligatoirement par 0 dans le langage C. En algorithmique, l'indice peut être 0 ou 1 selon la convention adoptée.  Il y a deux types de tableaux : tableau à une dimension et tableau à deux dimensions 6 ASD I 5 6 20 … 10 .. bsup binf Une case n= bsup-binf+1 Tableau à une dimension: déclaration Un tableau est caractérisé par :  Nom: représente où se trouve le 1er élément, càd l'adresse du 1er élément (nommé pointeur).  Taille: représente le nombre d'éléments qu'il contient.  Type: représente le type des éléments qu'il contient. 7 ASD I Tableau à une dimension : Exemple  Exemple: Soit un tableau à une dimension à 5 cases:  Une case i correspond à l'élément numéro i d’indice i-1 Exemple: La valeur 75 correspond à l’élément de la case 3 d’indice 2 8 ASD I 66 33 75 12 99 Indice: 0 1 2 3 4 case1 case2 case3 case4 case5 5 6 7 8
  • 3. Tableau à une dimension: déclaration en Algorithmique 9 ASD I Utilisation du type Tableau Syntaxe 1 var : nom_tableau : tableau [indice_deb . . indice_fin] de type Exemple: var : A : tableau [0 .. 49] d'entier Construction d’un nouveau type Syntaxe 2 type nom_type: tableau [indice_deb . . indice_fin] de type var : nom_tableau : nom_type Exemple: type Tab : tableau [0 .. 49] d'entier var : A : Tab  Le nouveau type identifié par nom_type s'ajoute à la liste des types, qui peuvent être utilisés dans l'algorithme et qui contient la définition de ce type. Tableau à une dimension: déclaration en C Syntaxe Type_de_données Nom_tableau[dimension] ; Exemples: int A [50] ; /* tableau de 50 valeurs de type entier*/ float notes [20] ; /* tableau de 20 valeurs de type réelle*/ int tab [15] ; /* tableau de 15 valeurs de type entier*/ char t [5] ; /* tableau de 5 valeurs de type caractère*/ ASD I 10 Tableau à une dimension: Manipulation 11 ASD I  L’initialisation d’un élément du tableau se fait comme suit :  L'accès à une case du tableau est direct et se fait via le numéro (indice) de la case correspondante.  T[i] : désigne le contenu de la case numéro i+1 du tableau T. Exemple: A[3] : désigne le 4ème élément du tableau A.  A[3] = 22  Une case du tableau joue le rôle d’une variable En Algorithmique En C Nom_tableau[Indice]  expression Nom_tableau[Indice] = expression Tableau à une dimension: Manipulation (suite) 12 ASD I  Pour lire ou écrire un tableau T de N éléments, on utilisera les boucles: En algorithmique En C Lecture Pour i de 1 à N Faire Ecrire(" Entrer l’élément ", i) Lire (T[i]) FinPour For(i=0;i<=N; i++ ) { printf(" Entrer l’élément %d", i) scanf(″%d″,&T[i]) ; } Ecriture Pour i de 1 à N Faire Ecrire (T[i]) FinPour For(i=0;i<=N; i++ ) { printf(″T[%d]=%d″,i, T[i]) ; } 9 10 11 12
  • 4. Tableau à une dimension: Remarque en C 13 ASD I  Un tableau peut être initialisé dès la déclaration : Syntaxe: Type_de_données nom_Tableau[dimension] = {case1, ..., case-n} ; Exemples: int tab[5] = {10, 20, 0, 3, 5} ; // déclaration d’un tableau de 5 cases d’entiers int tab[5] = {10, 20} ; // le reste des valeurs sont initialisées à zéro int tab[] = {10, 20, 0, 3, 5} ; /*la taille du tableau est déterminée par le compilateur par le nombre de valeurs énumérées dans l'initialisation */ int tab[4] ={0} ; //toutes les cases du tableau seront initialisées à 0 #define n 10 int tab[5] = {2*n-1, n-1, n, n+1, 2*n+1} ; Tableau à une dimension: Activité  Ecrire un Algorithme (programme C) qui permet de déterminer, à partir de 20 notes d’étudiants (fournies en données), combien d'entre elles sont supérieures à la moyenne de la classe.  Solution 14 ASD I Tableau à deux dimensions  Exemple: Soit un tableau à deux dimensions de 4 Colonnes et 2 lignes :  Une case i,j correspond à l'élément de la ligne i+1 et de la colonne j+1. Exemple: la case(1,2) correspond à l’élément de la 2ème ligne et 3ème colonne 15 ASD I Case 0,0 Case0,2 Case1,1 Case1,3 Indice i 0 1 2 3 j 0 1 Tableau à deux dimensions: déclaration en Algorithmique 16 ASD I Utilisation du type Tableau Syntaxe var : nom_tableau: tableau [indice_ligne_deb .. indice_ligne_fin, indice_colonne_deb .. indice_colonne_fin] de type Exemple: var : A : tableau [0 .. 49, 0..29] d'entier Construction d’un nouveau type Syntaxe type nom_type: tableau [indice_ligne_deb .. indice_ligne_fin, indice_colonne_deb .. indice_colonne_fin] de type var : nom_tableau : nom_type Exemple: type Tab : tableau [0 .. 49, 0 .. 29] d'entier var : A : Tab 13 14 15 16
  • 5. Tableau à deux dimensions: déclaration en C Syntaxe: Type_de_données nom_tableau [nombre de lignes] [nombre de colonnes] ; Exemples: int A [50][30]; // déclaration d’un tableau de 50 lignes et 30 colonnes de type entier float [20][20] ; // déclaration d’un tableau de 20 lignes et 20 colonnes de type entier ASD I 17 Tableau à deux dimensions: Manipulation 18 ASD I  Les cases du tableau à 2 dimensions sont accessibles via le nom du tableau, l'indice de la ligne et l'indice de la colonne.  Les indices de la ligne et de la colonne ne doivent pas dépasser les intervalles déclarés.  Désigne la case de la ligne i+1 et de la colonne j+1 du tableau T Exemple: En algorithmique En C T[i, j] T[i][j]; En algorithmique En C T : Tableau [0..9, 0..1] de réel T[2, 1] float T[10][2] ; T[2][1];  désigne la case de la ligne 3 et de la colonne 2 du tableau T. Une case d'un tableau joue le rôle d'une variable Tableau à deux dimensions : Manipulation (suite) 19 ASD I  Pour lire ou écrire une matrice M d’ordre Nb_lig x Nb_col, on utilisera les boucles: En algorithmique En C Lecture Pour i de 1 à Nb_lig Faire Pour j de 1 à Nb_col Faire Ecrire(" Entrer l’élément ", i,j) Lire (T[i,j]) FinPour FinPour For(i=0;i<=Nb_lig; i++ ) { For(j=0;j<=Nb_col; j++ ) { printf(" Entrer l’élément M[%d][%d] ", i,j) scanf(″%d″,&T[i][j]) ; } } Ecriture Pour i de 1 à Nb_lig Faire Pour j de 1 à Nb_col Faire Ecrire (T[i,j]) FinPour FinPour For(i=0;i<=Nb_lig; i++ ) { For(j=0;j<=Nb_col; j++ ) { printf(″M[%d][%d]=%d″, i, j, T[i][j]) ; Tableau à deux dimensions : Remarque en C 20 ASD I  Un tableau à deux dimensions peut être initialisé dès la déclaration :  Les valeurs sont initialisées ligne par ligne de gauche à droite.  Les composantes de chaque ligne du tableau sont comprises entre accolades.  Pour améliorer la lisibilité des programmes, les composantes peuvent être indiquées sur plusieurs lignes. Exemple: float notes[2] [2] = {{12, 13}, {9, 11}} ; Ou float notes[2] [2] = {{12, 13}, {9, 11}} ; 17 18 19 20
  • 6. Tableau à deux dimensions: Activité  Ecrire un Algorithme (programme C) qui permet de remplir une matrice M d’entier de L lignes et C colonnes et d’afficher la valeur maximum de ses éléments . N.B 0< C<=20, 0< L<=20  Solution 21 ASD I Les pointeurs: définition  Un pointeur est une variable dont la valeur est une adresse.  Une variable pointée est une variable dont l’adresse est contenue dans un pointeur. 22 x Variable pointée pt Pointeur L’adresse de x Les pointeurs: Déclaration  Un pointeur est une variable qui a le même type que la variable qu'il pointe donc il doit être déclaré.  En algorithme: la déclaration est faite avec puis le type du pointeur.  En C: l'opérateur d'indirection * (astérisque) est utilisé pour définir un pointeur.  Syntaxes  Exemples : si la variable pointée est de type entier, alors le pointeur est de type entier aussi. 23 En Algorithme En C nom_pointeur : ↑ type type *nom_pointeur ; En Algorithme En C var: x: entier px: ↑ entier { int x; int *px; } Remarque EN C L'accès à la variable pointée peut être fait : - Directement à travers le nom de la variable (x) - Indirectement à travers le pointeur sur cette variable (*px) Donc x (*px) (*px) représente le contenu de la variable pointée par px 24 21 22 23 24
  • 7. Les pointeurs: affectation  Pour affecter l'adresse d'une variable à un pointeur, il faut utiliser les instructions suivantes:  Syntaxes: Exemples : 25 En Algorithme En C nom_pointeur  ↑ nom_variable nom_pointeur = & nom_variable; En Algorithme En C var: x: entier px: ↑ entier Debut px ↑ x { int x; int *px; px =&x; } - Si on affiche le contenu d'un pointeur, alors l’adresse de la variable pointée sera affichée. - Si on affiche le contenu d'une variable pointée, alors la valeur associée à cette variable sera affichée. L'accès au contenu de cette variable pointée s'appelle déréférencement. Remarques 1. Si le contenu d'une variable pointée est modifié, l'adresse du pointeur n'est pas modifiée. Exemples: 26 int i=12; i est une variable de type entier int *adr; *adr est un pointeur de même type que i adr =&i; adr pointe sur i *adr =30; i prendra la valeur 30  (*adr) = i; : (*adr) désigne la valeur de i. Exemple 27 #include <stdio.h> Void main( ) { int i = 3; int *P, *Z ; // P et Z sont des pointeurs sur une variable de type entier P=&i; //P contient l’adresse de la variable i Z=P; printf (" le contenu de la case mémoire pointée par P est : %d ”, *P); // *P=3 *P = 5; printf (”n i = %d et *Z = %d ”, i, *Z) ; // i=5 et *Z=5 } Les objets i et *P sont identiques  Ils ont les mêmes adresse et valeur.  La modification de *P modifie i. Remarques 2. Lorsque le pointeur ne reçoit aucune adresse, il se pointe sur nulle.  Si vous déclarez un pointeur sans l’initialiser, alors lorsque vous tentez de l’utiliser, le programme se plante. Pour éviter cela, le pointeur doit être initialisé à NIL (en C, NULL) 3. Les opérations possibles sur les pointeurs:  Affectation entre les variables pointeurs de même type.  Comparaison de pointeurs de même types en utilisant les opérateurs de comparaisons. NIL : Not Identified Link 28 25 26 27 28
  • 8. Pointeurs & Tableaux  L'utilisation des pointeurs vers des tableaux est très courante en C.  Il existe une relation importante entre un pointeur et un tableau du fait que toute opération manipulant des indices de tableaux peut être faite à l’aide de pointeurs.  Les pointeurs vers les tableaux conduisent généralement à des programmes qui s'exécutent plus rapidement et consomment moins d'espace mémoire.  En C, le compilateur convertit toujours une référence à un tableau en un pointeur sur le début du tableau. 29 Pointeurs vers tableaux 30 Exemple: int tab[ 100 ] ; // un tableau tab de 100 entiers int *ptrtab ; // un pointeur ptrtab sur le type entier ptrtab=tab; ptrtab= &tab[0] ;  ptrtab pointe sur le premier élément du tableau  ptrtab contient l’adresse du premier élément du tableau (& tab[0] )  Le nom du tableau (tab) sans indice est considéré comme un pointeur vers l’ensemble du tableau Pour définir un pointeur destiné à référencer les éléments d'un tableau, il faut définir un pointeur sur le type des éléments du tableau et non pas directement vers le tableau. Pointeurs vers tableaux (suite) 31 Exemple: int tab[ 100 ] ; // un tableau tab de 100 entiers int *ptrtab ; // un pointeur ptrtab sur un entier  *(ptrtab+5)=10; tab[5]=10; //affecter à la 6ème case du tableau la valeur 10  ptrtab= &tab[1] // ptrtab pointe sur le second élément du tableau Pour accéder à une autre valeur du tableau , il suffit d'ajouter son indice au pointeur de base et d'appliquer l'opérateur d'indirection: *(ptrtab + i) tob[i] ptrtab[i] Pointeurs vers tableaux (suite) 32  Le pointeur peut être utilisé comme un indice de parcours dans le tableau. Exemple: Si ptrtab pointe sur la case i  Ptrtab +=1 ou ++ptrtab référence la case suivante (i + 1) et  Ptrtab -=1 ou --ptrtab référence la case précédente (i - 1) Attention: Lors de l'utilisation de ces opérateurs, il faut veiller à ne pas être en dehors du tableau, que ce soit au début ou à la fin sinon ça sera une erreur de débordement  Il faut toujours contrôler le programme pour éviter cette situation.  Comparaison de deux pointeurs, en C : il est utile de comparer deux pointeurs vers un même tableau, par exemple : ptrtab >&tab[99]; le résultat est vrai si le pointeur dépasse le dernier élément, sinon c’est faut. ptrtab>&tab[99] ; ptrtab > Tab + 99; //Tab est un pointeur vers le début du tableau. 29 30 31 32
  • 9. Pointeurs vers tableaux (suite) 33  Soustraction de deux pointeurs de même types: cette opération fournit le nombre d'éléments contenus entre les deux pointeurs. Exemple: int tab[100], *a, *b, x; a =&tab[5] ; // a pointe sur le 6ème élément du tableau b=&tab[20] ; // b pointe sur 21ème élément du tableau  x = b - a ; // x= 15, le nombre des éléments qui sépare les deux pointeurs 34 ► Si p pointe vers un élément dans un tableau T, l'instruction n = p - T; affecte à n le numéro d'indice de l'élément du tableau T vers lequel pointe p. ► Si p’ pointe vers le dernier élément de T (p’ = & T[99];) alors, n va avoir la valeur 99 après la soustraction. T 0 … 25 …. 99 p n = p - T; // n= 25 p’ n = p’ - T; // n= 99 Pointeurs vers tableaux (suite) Pointeurs vers tableaux: activité 35 Ecrire un programme en C qui permet d’afficher le contenu du tableau en utilisant un pointeur : Conclusion 36  Dans ce chapitre nous avons:  Définie et manipulé les tableaux à une dimension et à deux dimensions en algorithmique et en C  Définie un pointeur  Appris la manipulation des pointeurs sur les tableaux 33 34 35 36