SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
CHAPITRE 3:
TABLEAUX ET POINTEURS
Abdelouahed Sabri
abdelouahed.sabri@gmail.com
Références:
[1] Anne Canteaut« Programmation en langage C »
[2] E. Boucharé« Langage C »
[3] PatrickTrau « www-ipst.u-strasbg.fr/pat/program/tpc_c.htm »
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz Fès
Sciences Mathématiques et Applications (SMA)
PLAN
 Tableaux simples
 Tableaux multidimensionnels
 Pointeurs
 Pointeurs et tableaux
2
INTRODUCTION
 Réflexion
 Manipuler les notes d’un étudiant:
 3 Modules
 Saisi de notes
 Saisi de coefficients
 Calcul de la moyenne
 Affichage des modules validés et modules non-validés
 ...
 Variable: ne permet de stocker qu’une seule donnée
(type)
 Il faut faire le traitement au-fur-et-à-mesure  très lourd
 Pour mieux organiser notre code, il faut utiliser
des variables élaborées: TABELAUX 3
INTRODUCTION
 Solution:
 La plupart des langages de programmation
proposent des conteneurs permettant de stocker un
ensemble de données dans une « seule variable »
 Et pour accéder au contenu, il suffit de la parcourir
 En C, on trouve deux types;
 Tableau: permet de stocker plusieurs données de même type
(Notes, coefficients, ...)
 Structure: permet de stocker des données hétérogènes
4
TABLEAUX SIMPLES
 Définition:
 Un tableau est une variable composée de données de même
type, stockées en mémoire de manière adjacente (l’une
après l’autre).
 Déclaration
type nom_du_tableau [nombre_d_elements];
 Exemples:
int note[20] ; // tableau de type entier de 20 éléments
float poids[15], tailles[6];
char prenom[255];
5
TABLEAUX SIMPLES
 Accès aux éléments
nomTableau[indiceElement]
 En C, les éléments d’un tableau de taille N sont indexés de
0 à N-1
l’indice du premier élément est 0
et l’indice du Nième élément est N-1
6
TABLEAUX SIMPLES
 Exemples:
int maListe[10];
maList[0]=25; //Affecter au 1er élément de maList la valeur 25.
maList[2]=3;
maList[9]=-30; //Affectation au dernier élément la valeur -30.
printf("%d", maList[0]); //affiche la valeur 25; le contenu du 1er élément
printf("%d", maList[2]); // affiche la valeur 3.
// Lecture de la console
scanf("%d", &maList [0]);
/*mémoriser dans le 1er élément (élément d’indice 0) du tableau un
entier saisi au clavier.*/ 7
TABLEAUX SIMPLES
 Initialisation
 Il est possible d’initialiser un tableau lors de sa déclaration:
type nomTableau[taille]= {Valeurs séparés par virgule};
 Exemples:
int nbr[10]={15,10,2,3,4,-5,6,8,8,9};
/* tableau de 10 éléments initialisés respectivement par les
valeurs indiqués entre { };
nbr[0]=15 ... nbre[5]=-5 ... nbre[10]=9
*/
int nbr[]={15,10,2,3,4,-5,6,8,8,9};
// même déclaration que la précédente
int tab[10]={1,2,3}; /* les 3 premiers éléments sont initialisés par
les valeurs indiqués et les7 autres
éléments sont initialisés par 0 */
8
TABLEAUX SIMPLES
 Initialisation (suite)
 Lors de l’initialisation d’un tableau, on peut omettre la
taille du tableau (le nombre des éléments )
type nomTableau[]= {Valeurs séparés par virgule};
 Le nombre d’éléments du tableau est égale au nombre de
valeurs indiquées dans la liste entre les accolades
 Exemple:
int nbr[]={15,10,2,3,4,-5,6,8,8,9};
/* tableau de 10 éléments initialisés respectivement par les
valeurs indiqués entre { };
nbr[0]=15 ... nbre[5]=-5 ... nbre[10]=9
*/
9
TABLEAUX SIMPLES
 Lecture et écriture dynamique
 Pour accéder aux éléments du tableau d’une manière
dynamique, utiliser les boucles (for de préférence)
 Exemple
int i, tab[5];
printf("Entrer les éléments du tableau :n");
for(i=0; i<5; i++)
scanf("%d", &tab[i]); // Lecture des éléments
printf("Les éléments du tableau sont:n");
for(i=0; i<5; i++)
printf("%dt", tab[i]); // Affichage des éléments
10
LES TABLEAUX SIMPLES
 Exercice:
 Ecrire un programme qui lit un tableau d’entiers au clavier et
qui affiche:
 Tous les éléments du tableau
 La somme des éléments
 Les éléments dans un sens inverse
11
LES TABLEAUX MULTIDIMENSIONNELS
 Définition:
 Un tableau à plusieurs dimensions est défini comme
un tableau de tableaux.
 Définir et utiliser des tableaux de dimensions 2, 3, …
dimensions.
 Pour un tableau de N dimensions, il faut donner la
taille pour chaque dimension (N valeurs)
 Déclaration:
type nom_tableau [N1] [N2] [N3] …[Nn] ;
12
TABLEAU À DEUX DIMENSIONS
 Un tableau à deux dimensions peut être
interprété comme une matrice.
 Un tableau à 2 dimensions de L lignes et C colonnes
contient donc L*C composantes.
L lignes
C colonnes
13
TABLEAU À DEUX DIMENSIONS
 Déclaration
type NomTableau[nbLignes][nbColonnes];
 Exemple
int t[10][20];
float M1[20][20], M2[50][100];
char liste[100][20];
TABLEAU À DEUX DIMENSIONS
 Accès aux éléments
 Considérons un tableau à 2D de n lignes et m colonnes.
les indices des lignes du tableau varient de 0 à n-1, et les
colonnes de 0 à m-1.
 La composante de la 2ème ligne et 4ème colonne d’un
tableau T est notée: T[1][3].
 Exemple:
int t[3][2]; // Matrice de 3x2
t[0][0]=5; // Mettre 5 à la 1ére ligne et 1ére colonne
t[2][1]=-3: // Mettre -3 à la 3éme ligne et 3éme colonne
15
TABLEAU À DEUX DIMENSIONS
 Initialisation
 Comme pour le cas simple, lors de la déclaration d'un
tableau multidimensionnel, on peut initialiser ses
éléments, en indiquant la liste des valeurs respectives
entre accolades.
 A l'intérieur de la liste, les composantes de chaque ligne
du tableau sont aussi (pas obligatoire) comprises entre
accolades.
 Exemple
int t[4][3]= { {1 , 3, 0} , {-4 , 9 , 2} , {6, 3 , -1} , {4, 0 , 5} };
int t[4][3]= { 1 , 3, 0 , -4 , 9 , 2 , 6, 3 , -1 , 4, 0 , 5 };
16
TABLEAU À DEUX DIMENSIONS
 Remarques
 Lors de l'initialisation, les valeurs sont affectées ligne par
ligne en passant de gauche à droite.
 Comme pour le cas 1D, il n’est pas nécessaire d’indiquer
toutes les valeurs. Les valeurs manquantes seront
initialisées par zéro.
 Il est cependant défendu d'indiquer trop de valeurs pour
un tableau.
17
TABLEAU À DEUX DIMENSIONS
 Affichage des éléments
 Pour afficher les éléments des tableaux à 2 dimensions, on
utilise deux indices et la boucle for, souvent imbriquée, pour
parcourir les lignes et les colonnes.
 Exemple
for(int i=0;i<NL; i++){
for(int j=0;j<NC; j++)
printf("%dt",Tab[i][j]);
printf("n");
}
// NL : le nombre de lignes
// NC : le nombre de colonnes 18
LES POINTEURS
19
LES POINTEURS
 Réflexion;
int i=5;
printf ("i=%d son adresse mémoire:%d", i,&i);
Va donner comme résultat aprés execution
i=5 son adresse mémoire:2293532
int i=5,j=-154;
printf ("j=%d son adresse mémoire:%dn", j,&j);
printf ("i=%d son adresse mémoire:%d", i,&i);
Va donner comme résultat aprés execution
j=-154 son adresse mémoire:2293528
i=5 son adresse mémoire:2293532
20
-154 5
jj
2293528 2293532 ………adresse
mémoire
iiVariable
LES POINTEURS
 Définition
 Variable: sert à stocker les données manipulées par un
programme. Lorsque l’on déclare une variable, un espace
mémoire lui sera réservé pour y stocker sa valeur.
L’emplacement de cet espace dans la mémoire est nommé
adresse.
 Pointeur: est une variable qui désigne un emplacement
mémoire (une adresse) occupée par une donnée
21
2293532 5
pp
2293532 ……2290004adresse
mémoire
iiVariable
…
On dit que p pointe sur l’adresse mémoire occupée par la
variable i
LES POINTEURS
 Déclaration:
un pointeur est déclaré au moyen de l’opération d’indirection «*».
 Syntaxe :
type * Nom_du_Pointeur>;
Nom_du_Pointeur ne peut (doit) recevoir que des adresses de
variables du type Type
 Exemple:
 int i, j; // déclaration de deux variables de type entier
 int *p; // déclaration d’un pointeur sur une variable entière
 float *ptr; // déclaration d’un pointeur sur une variable float
 char nom, *ptr;
// déclaration d’une variable de type char et un pointeur sur char.
22
LES POINTEURS
 Initialisation:
 Lorsqu’on déclare un pointeur sans l’initialiser, on ne sait
pas sur quoi il pointe.
 Pointeur qui ne pointe sur rien
 int *ptr = NULL;
 Pointeur qui pointe sur une variable
 int i=5;
 int *p=&i;
 Pointeurs qui pointent sur la même adresse
 int i=5;
 int *p=&i;
 int *q=p; 23
2293532 5
22935322293528
pp ii
2293532 2293532 5
22935322293528
pp ii
2293524
qq
LES POINTEURS
 Manipulation:
 Exemple:
int i=5;
int *p=&i;
 &i: l’adresse mémoire de la variable i
 printf("%dn",&i);  2293528
 p: l’adresse mémoire sur laquelle pointe p
printf("%dn",p); 2293528
 *p: représente le contenu de la case mémoire sur laquelle p
pointe:
printf("%dn",*p);  5
 &p: l’adresse mémoire de la variable p:
printf("%dn",&p);  2293532
LES POINTEURS
 Manipulation (suite):
 Pointeur qui ne pointe sur rien
int *p = NULL;
int i=5;
p=&i;
printf("*p=%dn",*p);  *p=5
*p=80;
printf("i=%dn",i);  i=80
int *q=p;
printf("*q=%dn",*p);  *q=80
(*p)++; // eq. à i++;
25
5 2293528
22935322293528
ii pp
0
2293532
pp
22935322293528
ii pp
2293524
80 2293528
22935322293528
ii pp
qq
2293528 80 2293528
LES POINTEURS
 Manipulation (suite):
 Exercice: que produit le code suivant
int a=51;
int b=120;
int * ptr;
ptr = (a>b) ? &a : &b;
(*ptr)++;
printf("a=%d, b=%d, *pointeur=%d n", a,b,*ptr);
26
LES POINTEURS
 Manipulation (suite):
 Exercice: que produit le code suivant
int a=51;
int b=120;
int * ptr;
ptr = (a>b) ? &a : &b; // ptr pointe sur la case b
(*ptr)++; // incrément ele contenu de la case pointée par ptr
printf("a=%d, b=%d, *pointeur=%d n", a,b,*ptr);
 Le résultat:
a=51, b=121, *pointeur=121
27
LES POINTEURS ET TABLEAUX
 Réflexion
 int tab[4]={1,58, 7};
28
1 58 7 0 0
2293496
tab[0]tab[0]
1 58 7 0 0
2293496
tabtab
tab[1]tab[1] tab[2]tab[2] tab[3]tab[3] tab[4]tab[4]
Equivalent à
 Le nom d'un tableau représente l'adresse de son
premier élément
 Équivalent à dire que le nom d'un tableau est
un pointeur constant sur le premier élément du tableau
LES POINTEURS ET TABLEAUX
 Pointeurs et tableaux sont en étroite relation:
 Exemple 1:
int tab[10]={1,58, 7}, i;
printf ("%dn",*(tab)); // 1: tab pointe sur le 1er élément
printf ("%dn",*(tab+1)); // 58: tab+1 pointe sur le 2éme élément
printf ("%d",*(tab+i)); // 7: tab+i pointe sur le iéme élément
 Exemple 2:
int tab[10]={1,58, 7}, i;
int *ptr;
ptr=tab; // équivalent à ptr=&tabl[0];
printf ("%dn",*(ptr)); // 1: ptr pointe sur le 1er élément de tab
printf ("%dn",*(ptr+1)); // 58: ptr+1 point esur le 2éme élément de tab
i=2;
printf ("%d",*(ptr+i)); // 7: ptr+i point sur l’iéme élément de tab
29
LES POINTEURS ET TABLEAUX
 Relation entre pointeur et tableau (suite):
 Exercice:
 Déclarer un tableau de 5 éléments {15, 8, -8, 7, 9}
 Afficher en utilisant une boucle for tous les éléments du
tableau:
1. Utilisant les indexes
2. Utilisant les pointeurs
30
LES POINTEURS ET TABLEAUX
 Relation entre pointeur et tableau (suite):
 Solution
#include <stdio.h>
main()
{
int tab[5]={15, 8, -8, 7, 9}, i;
for (i=0; i<5; i++)
{
printf ("%dt",tab[i]);
}
printf("n");
for (i=0; i<5; i++)
{
printf ("%dt",*(tab+i));
}
}
31
OCCUPATION MÉMOIRE
 Taille d’une variable
 Pour toute variable créée, une zone mémoire lui sera
associée, servant à stocker son contenu
 La taille dépend du type de la variable:
 char : 1 octet
 int : 2 ou 4 octets (selon l’architecture du système)
 float : 4 octets
 double : 8 octets
 etc
32
OCCUPATION MÉMOIRE
 Taille d’une variable
 L’opérateur « sizeof()» retourne la taille en octets
d’un type ou d’une variable passée en paramètre.
sizeof( type) ou bien sizeof( nom_variable)
 Exemple:
double x, tab[]={1,2,5,8};
printf("Sur mon système un ‘double’ fait %d octets", sizeof(x)); 
taille de la variable x: 8 octets
// équivalent à
printf("Sur mon système un ‘double’ fait %d octets", sizeof(double));
 taille de la variable du type double: 8 octets
// Astuce: taille d’un tableau: sizeof(tab)/sizeof(type)
printf ("Taille du tableau est: %d", sizeof(tab)/sizeof(double));
33
ALLOCATION DYNAMIQUE
 Cas d’un pointeur:
 Contrairement aux variables, un pointeur n’a pas
d’existence tant qu’on ne l’a pas initialisé.
 Il existe en C, des fonctions permettant d'allouer la
mémoire à un pointeur.
 La fonction malloc de la bibliothèque « stdlib » permet
de réserver de la mémoire au cours d’exécution d’un
programme.
 Syntaxe:
malloc( <NombreOctets> )
 Elle renvoie l’adresse d’un bloc mémoire de taille indiquée
en argument <NombreOctets>.
 Elle renvoie 0 dans le cas d’échec.
34
ALLOCATION DYNAMIQUE
 Cas d’un pointeur: allocation (Réservation) de mémoire
 Exemple 1: Sans allocation de mémoire
#include <stdio.h>
#include<stdlib.h>
main()
{
char *ptrChr;
printf("Entrer un texte de 10 caractéresn");
scanf("%s",ptrChr);
printf("Texte saisi: %sn",ptrChr);
}
 Erreur d’exécution: après la saisi du texte par
l’utilisateur, le programme va générer une erreur (Bug).
Car le pointeur ptrChr n’a d’espace mémoire réservé 35
ALLOCATION DYNAMIQUE
 Cas d’un pointeur: allocation (Réservation) de mémoire
 Exemple 2: Avec allocation de mémoire
#include <stdio.h>
#include<stdlib.h>
main()
{
char *ptrChr;
//Réservation de la mémoire
ptrChr = (char*)malloc(255); /* lui réservé 255 octets en mémoire */
printf("Entrer un texte: n");
scanf("%s",ptrChr);
printf("Texte saisi: %sn",ptrChr);
}
 Le texte saisi sera affiché sans problème 36
ALLOCATION DYNAMIQUE
 Cas d’un pointeur: Libération de la mémoire réservée:
 La fonction free de la biblio. « stdlib » permet la
libération de l’emplacement mémoire réservé par malloc.
Syntaxe:
free(<Pointeur>);
37
ALLOCATION DYNAMIQUE
 Cas d’un pointeur: allocation/libération de mémoire
 Exemple:
char *ptrChr;
int *ptrIn;
float *ptrNotes;
//Réservation de la mémoire
ptrChr = (char*)malloc(10); /* réserve 10 octets mémoire (10 caractères) */
ptrIn = (int*)malloc(20); /*réserve 20 octets, soit la place pour 5 entiers*/
ptrNotes =(float*)malloc(16); /*réserve 16 octets, soit la place pour 4 réels */
//Libération de la mémoire
free(ptrChr); /* libère l’espace mémoire réservé pour ptr*/
free(ptrIn); /* libère l’espace mémoire réservé pour le pointeur notes */
free(ptrNotes); /* libère l’espace mémoire réservé pour le pointeur notes */ 38

Mais conteúdo relacionado

Mais procurados

Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
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
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donneeswebreaker
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfsalah fenni
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHPInes Ouaz
 

Mais procurados (20)

Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
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
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donnees
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHP
 

Destaque

Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratiqueAbdelouahed Abdou
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données répartiesAbdelouahed Abdou
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)Abdelouahed Abdou
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'imagesAbdelouahed Abdou
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Abdelouahed Abdou
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourceAfrica Performances
 

Destaque (11)

Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données réparties
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'images
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
 

Semelhante a Chapitre 3 tableaux et pointeurs en C

LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeaymaneelfellah
 
Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfFadouaBouafifSamoud
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Aziz Darouichi
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfShiniGami0o0
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: TableauInforMatica34
 
Tableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxTableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxPROFPROF11
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingSmee Kaem Chann
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111SaraMeriem1
 
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
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)abdellah12
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptxMaNl13
 

Semelhante a Chapitre 3 tableaux et pointeurs en C (20)

LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithme
 
Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdf
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdf
 
Pointeuren c
Pointeuren cPointeuren c
Pointeuren c
 
Chapitre3 tableauxcpp
Chapitre3 tableauxcppChapitre3 tableauxcpp
Chapitre3 tableauxcpp
 
Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
Tableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptxTableau a deux dimensions (1).pptx
Tableau a deux dimensions (1).pptx
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
Lecture 3: Visualization and Programming
Lecture 3: Visualization and ProgrammingLecture 3: Visualization and Programming
Lecture 3: Visualization and Programming
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111
 
Langage c partie_2
Langage c partie_2Langage c partie_2
Langage c partie_2
 
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
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
 
langage C++
langage C++langage C++
langage C++
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptx
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 

Último

systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfssuser40e112
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
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
 
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
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.docKarimKhrifech
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
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
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
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
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 
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
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
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
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 

Último (20)

systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
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...
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.doc
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
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
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
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
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 
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
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
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
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
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
 

Chapitre 3 tableaux et pointeurs en C

  • 1. CHAPITRE 3: TABLEAUX ET POINTEURS Abdelouahed Sabri abdelouahed.sabri@gmail.com Références: [1] Anne Canteaut« Programmation en langage C » [2] E. Boucharé« Langage C » [3] PatrickTrau « www-ipst.u-strasbg.fr/pat/program/tpc_c.htm » Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz Fès Sciences Mathématiques et Applications (SMA)
  • 2. PLAN  Tableaux simples  Tableaux multidimensionnels  Pointeurs  Pointeurs et tableaux 2
  • 3. INTRODUCTION  Réflexion  Manipuler les notes d’un étudiant:  3 Modules  Saisi de notes  Saisi de coefficients  Calcul de la moyenne  Affichage des modules validés et modules non-validés  ...  Variable: ne permet de stocker qu’une seule donnée (type)  Il faut faire le traitement au-fur-et-à-mesure  très lourd  Pour mieux organiser notre code, il faut utiliser des variables élaborées: TABELAUX 3
  • 4. INTRODUCTION  Solution:  La plupart des langages de programmation proposent des conteneurs permettant de stocker un ensemble de données dans une « seule variable »  Et pour accéder au contenu, il suffit de la parcourir  En C, on trouve deux types;  Tableau: permet de stocker plusieurs données de même type (Notes, coefficients, ...)  Structure: permet de stocker des données hétérogènes 4
  • 5. TABLEAUX SIMPLES  Définition:  Un tableau est une variable composée de données de même type, stockées en mémoire de manière adjacente (l’une après l’autre).  Déclaration type nom_du_tableau [nombre_d_elements];  Exemples: int note[20] ; // tableau de type entier de 20 éléments float poids[15], tailles[6]; char prenom[255]; 5
  • 6. TABLEAUX SIMPLES  Accès aux éléments nomTableau[indiceElement]  En C, les éléments d’un tableau de taille N sont indexés de 0 à N-1 l’indice du premier élément est 0 et l’indice du Nième élément est N-1 6
  • 7. TABLEAUX SIMPLES  Exemples: int maListe[10]; maList[0]=25; //Affecter au 1er élément de maList la valeur 25. maList[2]=3; maList[9]=-30; //Affectation au dernier élément la valeur -30. printf("%d", maList[0]); //affiche la valeur 25; le contenu du 1er élément printf("%d", maList[2]); // affiche la valeur 3. // Lecture de la console scanf("%d", &maList [0]); /*mémoriser dans le 1er élément (élément d’indice 0) du tableau un entier saisi au clavier.*/ 7
  • 8. TABLEAUX SIMPLES  Initialisation  Il est possible d’initialiser un tableau lors de sa déclaration: type nomTableau[taille]= {Valeurs séparés par virgule};  Exemples: int nbr[10]={15,10,2,3,4,-5,6,8,8,9}; /* tableau de 10 éléments initialisés respectivement par les valeurs indiqués entre { }; nbr[0]=15 ... nbre[5]=-5 ... nbre[10]=9 */ int nbr[]={15,10,2,3,4,-5,6,8,8,9}; // même déclaration que la précédente int tab[10]={1,2,3}; /* les 3 premiers éléments sont initialisés par les valeurs indiqués et les7 autres éléments sont initialisés par 0 */ 8
  • 9. TABLEAUX SIMPLES  Initialisation (suite)  Lors de l’initialisation d’un tableau, on peut omettre la taille du tableau (le nombre des éléments ) type nomTableau[]= {Valeurs séparés par virgule};  Le nombre d’éléments du tableau est égale au nombre de valeurs indiquées dans la liste entre les accolades  Exemple: int nbr[]={15,10,2,3,4,-5,6,8,8,9}; /* tableau de 10 éléments initialisés respectivement par les valeurs indiqués entre { }; nbr[0]=15 ... nbre[5]=-5 ... nbre[10]=9 */ 9
  • 10. TABLEAUX SIMPLES  Lecture et écriture dynamique  Pour accéder aux éléments du tableau d’une manière dynamique, utiliser les boucles (for de préférence)  Exemple int i, tab[5]; printf("Entrer les éléments du tableau :n"); for(i=0; i<5; i++) scanf("%d", &tab[i]); // Lecture des éléments printf("Les éléments du tableau sont:n"); for(i=0; i<5; i++) printf("%dt", tab[i]); // Affichage des éléments 10
  • 11. LES TABLEAUX SIMPLES  Exercice:  Ecrire un programme qui lit un tableau d’entiers au clavier et qui affiche:  Tous les éléments du tableau  La somme des éléments  Les éléments dans un sens inverse 11
  • 12. LES TABLEAUX MULTIDIMENSIONNELS  Définition:  Un tableau à plusieurs dimensions est défini comme un tableau de tableaux.  Définir et utiliser des tableaux de dimensions 2, 3, … dimensions.  Pour un tableau de N dimensions, il faut donner la taille pour chaque dimension (N valeurs)  Déclaration: type nom_tableau [N1] [N2] [N3] …[Nn] ; 12
  • 13. TABLEAU À DEUX DIMENSIONS  Un tableau à deux dimensions peut être interprété comme une matrice.  Un tableau à 2 dimensions de L lignes et C colonnes contient donc L*C composantes. L lignes C colonnes 13
  • 14. TABLEAU À DEUX DIMENSIONS  Déclaration type NomTableau[nbLignes][nbColonnes];  Exemple int t[10][20]; float M1[20][20], M2[50][100]; char liste[100][20];
  • 15. TABLEAU À DEUX DIMENSIONS  Accès aux éléments  Considérons un tableau à 2D de n lignes et m colonnes. les indices des lignes du tableau varient de 0 à n-1, et les colonnes de 0 à m-1.  La composante de la 2ème ligne et 4ème colonne d’un tableau T est notée: T[1][3].  Exemple: int t[3][2]; // Matrice de 3x2 t[0][0]=5; // Mettre 5 à la 1ére ligne et 1ére colonne t[2][1]=-3: // Mettre -3 à la 3éme ligne et 3éme colonne 15
  • 16. TABLEAU À DEUX DIMENSIONS  Initialisation  Comme pour le cas simple, lors de la déclaration d'un tableau multidimensionnel, on peut initialiser ses éléments, en indiquant la liste des valeurs respectives entre accolades.  A l'intérieur de la liste, les composantes de chaque ligne du tableau sont aussi (pas obligatoire) comprises entre accolades.  Exemple int t[4][3]= { {1 , 3, 0} , {-4 , 9 , 2} , {6, 3 , -1} , {4, 0 , 5} }; int t[4][3]= { 1 , 3, 0 , -4 , 9 , 2 , 6, 3 , -1 , 4, 0 , 5 }; 16
  • 17. TABLEAU À DEUX DIMENSIONS  Remarques  Lors de l'initialisation, les valeurs sont affectées ligne par ligne en passant de gauche à droite.  Comme pour le cas 1D, il n’est pas nécessaire d’indiquer toutes les valeurs. Les valeurs manquantes seront initialisées par zéro.  Il est cependant défendu d'indiquer trop de valeurs pour un tableau. 17
  • 18. TABLEAU À DEUX DIMENSIONS  Affichage des éléments  Pour afficher les éléments des tableaux à 2 dimensions, on utilise deux indices et la boucle for, souvent imbriquée, pour parcourir les lignes et les colonnes.  Exemple for(int i=0;i<NL; i++){ for(int j=0;j<NC; j++) printf("%dt",Tab[i][j]); printf("n"); } // NL : le nombre de lignes // NC : le nombre de colonnes 18
  • 20. LES POINTEURS  Réflexion; int i=5; printf ("i=%d son adresse mémoire:%d", i,&i); Va donner comme résultat aprés execution i=5 son adresse mémoire:2293532 int i=5,j=-154; printf ("j=%d son adresse mémoire:%dn", j,&j); printf ("i=%d son adresse mémoire:%d", i,&i); Va donner comme résultat aprés execution j=-154 son adresse mémoire:2293528 i=5 son adresse mémoire:2293532 20 -154 5 jj 2293528 2293532 ………adresse mémoire iiVariable
  • 21. LES POINTEURS  Définition  Variable: sert à stocker les données manipulées par un programme. Lorsque l’on déclare une variable, un espace mémoire lui sera réservé pour y stocker sa valeur. L’emplacement de cet espace dans la mémoire est nommé adresse.  Pointeur: est une variable qui désigne un emplacement mémoire (une adresse) occupée par une donnée 21 2293532 5 pp 2293532 ……2290004adresse mémoire iiVariable … On dit que p pointe sur l’adresse mémoire occupée par la variable i
  • 22. LES POINTEURS  Déclaration: un pointeur est déclaré au moyen de l’opération d’indirection «*».  Syntaxe : type * Nom_du_Pointeur>; Nom_du_Pointeur ne peut (doit) recevoir que des adresses de variables du type Type  Exemple:  int i, j; // déclaration de deux variables de type entier  int *p; // déclaration d’un pointeur sur une variable entière  float *ptr; // déclaration d’un pointeur sur une variable float  char nom, *ptr; // déclaration d’une variable de type char et un pointeur sur char. 22
  • 23. LES POINTEURS  Initialisation:  Lorsqu’on déclare un pointeur sans l’initialiser, on ne sait pas sur quoi il pointe.  Pointeur qui ne pointe sur rien  int *ptr = NULL;  Pointeur qui pointe sur une variable  int i=5;  int *p=&i;  Pointeurs qui pointent sur la même adresse  int i=5;  int *p=&i;  int *q=p; 23 2293532 5 22935322293528 pp ii 2293532 2293532 5 22935322293528 pp ii 2293524 qq
  • 24. LES POINTEURS  Manipulation:  Exemple: int i=5; int *p=&i;  &i: l’adresse mémoire de la variable i  printf("%dn",&i);  2293528  p: l’adresse mémoire sur laquelle pointe p printf("%dn",p); 2293528  *p: représente le contenu de la case mémoire sur laquelle p pointe: printf("%dn",*p);  5  &p: l’adresse mémoire de la variable p: printf("%dn",&p);  2293532
  • 25. LES POINTEURS  Manipulation (suite):  Pointeur qui ne pointe sur rien int *p = NULL; int i=5; p=&i; printf("*p=%dn",*p);  *p=5 *p=80; printf("i=%dn",i);  i=80 int *q=p; printf("*q=%dn",*p);  *q=80 (*p)++; // eq. à i++; 25 5 2293528 22935322293528 ii pp 0 2293532 pp 22935322293528 ii pp 2293524 80 2293528 22935322293528 ii pp qq 2293528 80 2293528
  • 26. LES POINTEURS  Manipulation (suite):  Exercice: que produit le code suivant int a=51; int b=120; int * ptr; ptr = (a>b) ? &a : &b; (*ptr)++; printf("a=%d, b=%d, *pointeur=%d n", a,b,*ptr); 26
  • 27. LES POINTEURS  Manipulation (suite):  Exercice: que produit le code suivant int a=51; int b=120; int * ptr; ptr = (a>b) ? &a : &b; // ptr pointe sur la case b (*ptr)++; // incrément ele contenu de la case pointée par ptr printf("a=%d, b=%d, *pointeur=%d n", a,b,*ptr);  Le résultat: a=51, b=121, *pointeur=121 27
  • 28. LES POINTEURS ET TABLEAUX  Réflexion  int tab[4]={1,58, 7}; 28 1 58 7 0 0 2293496 tab[0]tab[0] 1 58 7 0 0 2293496 tabtab tab[1]tab[1] tab[2]tab[2] tab[3]tab[3] tab[4]tab[4] Equivalent à  Le nom d'un tableau représente l'adresse de son premier élément  Équivalent à dire que le nom d'un tableau est un pointeur constant sur le premier élément du tableau
  • 29. LES POINTEURS ET TABLEAUX  Pointeurs et tableaux sont en étroite relation:  Exemple 1: int tab[10]={1,58, 7}, i; printf ("%dn",*(tab)); // 1: tab pointe sur le 1er élément printf ("%dn",*(tab+1)); // 58: tab+1 pointe sur le 2éme élément printf ("%d",*(tab+i)); // 7: tab+i pointe sur le iéme élément  Exemple 2: int tab[10]={1,58, 7}, i; int *ptr; ptr=tab; // équivalent à ptr=&tabl[0]; printf ("%dn",*(ptr)); // 1: ptr pointe sur le 1er élément de tab printf ("%dn",*(ptr+1)); // 58: ptr+1 point esur le 2éme élément de tab i=2; printf ("%d",*(ptr+i)); // 7: ptr+i point sur l’iéme élément de tab 29
  • 30. LES POINTEURS ET TABLEAUX  Relation entre pointeur et tableau (suite):  Exercice:  Déclarer un tableau de 5 éléments {15, 8, -8, 7, 9}  Afficher en utilisant une boucle for tous les éléments du tableau: 1. Utilisant les indexes 2. Utilisant les pointeurs 30
  • 31. LES POINTEURS ET TABLEAUX  Relation entre pointeur et tableau (suite):  Solution #include <stdio.h> main() { int tab[5]={15, 8, -8, 7, 9}, i; for (i=0; i<5; i++) { printf ("%dt",tab[i]); } printf("n"); for (i=0; i<5; i++) { printf ("%dt",*(tab+i)); } } 31
  • 32. OCCUPATION MÉMOIRE  Taille d’une variable  Pour toute variable créée, une zone mémoire lui sera associée, servant à stocker son contenu  La taille dépend du type de la variable:  char : 1 octet  int : 2 ou 4 octets (selon l’architecture du système)  float : 4 octets  double : 8 octets  etc 32
  • 33. OCCUPATION MÉMOIRE  Taille d’une variable  L’opérateur « sizeof()» retourne la taille en octets d’un type ou d’une variable passée en paramètre. sizeof( type) ou bien sizeof( nom_variable)  Exemple: double x, tab[]={1,2,5,8}; printf("Sur mon système un ‘double’ fait %d octets", sizeof(x));  taille de la variable x: 8 octets // équivalent à printf("Sur mon système un ‘double’ fait %d octets", sizeof(double));  taille de la variable du type double: 8 octets // Astuce: taille d’un tableau: sizeof(tab)/sizeof(type) printf ("Taille du tableau est: %d", sizeof(tab)/sizeof(double)); 33
  • 34. ALLOCATION DYNAMIQUE  Cas d’un pointeur:  Contrairement aux variables, un pointeur n’a pas d’existence tant qu’on ne l’a pas initialisé.  Il existe en C, des fonctions permettant d'allouer la mémoire à un pointeur.  La fonction malloc de la bibliothèque « stdlib » permet de réserver de la mémoire au cours d’exécution d’un programme.  Syntaxe: malloc( <NombreOctets> )  Elle renvoie l’adresse d’un bloc mémoire de taille indiquée en argument <NombreOctets>.  Elle renvoie 0 dans le cas d’échec. 34
  • 35. ALLOCATION DYNAMIQUE  Cas d’un pointeur: allocation (Réservation) de mémoire  Exemple 1: Sans allocation de mémoire #include <stdio.h> #include<stdlib.h> main() { char *ptrChr; printf("Entrer un texte de 10 caractéresn"); scanf("%s",ptrChr); printf("Texte saisi: %sn",ptrChr); }  Erreur d’exécution: après la saisi du texte par l’utilisateur, le programme va générer une erreur (Bug). Car le pointeur ptrChr n’a d’espace mémoire réservé 35
  • 36. ALLOCATION DYNAMIQUE  Cas d’un pointeur: allocation (Réservation) de mémoire  Exemple 2: Avec allocation de mémoire #include <stdio.h> #include<stdlib.h> main() { char *ptrChr; //Réservation de la mémoire ptrChr = (char*)malloc(255); /* lui réservé 255 octets en mémoire */ printf("Entrer un texte: n"); scanf("%s",ptrChr); printf("Texte saisi: %sn",ptrChr); }  Le texte saisi sera affiché sans problème 36
  • 37. ALLOCATION DYNAMIQUE  Cas d’un pointeur: Libération de la mémoire réservée:  La fonction free de la biblio. « stdlib » permet la libération de l’emplacement mémoire réservé par malloc. Syntaxe: free(<Pointeur>); 37
  • 38. ALLOCATION DYNAMIQUE  Cas d’un pointeur: allocation/libération de mémoire  Exemple: char *ptrChr; int *ptrIn; float *ptrNotes; //Réservation de la mémoire ptrChr = (char*)malloc(10); /* réserve 10 octets mémoire (10 caractères) */ ptrIn = (int*)malloc(20); /*réserve 20 octets, soit la place pour 5 entiers*/ ptrNotes =(float*)malloc(16); /*réserve 16 octets, soit la place pour 4 réels */ //Libération de la mémoire free(ptrChr); /* libère l’espace mémoire réservé pour ptr*/ free(ptrIn); /* libère l’espace mémoire réservé pour le pointeur notes */ free(ptrNotes); /* libère l’espace mémoire réservé pour le pointeur notes */ 38