SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
ALGORITHMIQUE & STRUCTURES
DE DONNÉES (ASD)
Université Saad Dahlab – Blida1
Faculté des Sciences
Département d’Informatique
Licence d’Informatique
Semestre 3 (2ème année)
Mme AROUSSI
2017-2018
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
PRÉAMBULE
Pré-requis: Cours (Algo1, S1) + (Algo 2, S2).
Volume horaire hebdomadaire: 3H Cours + 3H
TD/TP
Évaluation: 2 Interrogations (I1, I2) + 2 Tests TP (T1, T2)
+ Examen final.
Note TD: I1 noté sur 7,5 points; I2 noté sur 7,5 points; 3 points
présence et 2 points assiduité
Note TP: T1 noté sur 8 points; T2 noté sur 7 points; 3 points
présence et 2 points assiduité
Contrôle Continu (CC) = (TD + TP)/2
Moyenne = (Examen x 2 + CC) / 3
Coefficient 3; Crédits 6
2
OBJECTIFS DU COURS
Comprendre les notions d’algorithme, de structures de données
et de complexité :
Élaborer des algorithmes performants et efficaces
Acquérir la connaissance des structures de données séquentielles
(LLC, Files et Piles), hiérarchiques (arbres) et des algorithmes de
base sur les tris.
Maîtriser la récursivité (simple, multiple, mutuelle, imbriquée)
Comprendre la notion de complexité d’un algorithme
Savoir estimer la complexité d’un algorithme itératif ou récursif
3
CONTENU DU COURS
I. Rappels
II. Structures Séquentielles (Listes, Files, Piles)
III. Complexité des Algorithmes
IV. Récursivité
V. Structures Hiérarchiques (Arbres, ABR, AVL,
Tas)
VI. Algorithmes de Tri
VII. Ensembles
4
CHAPITRE I:
RAPPELS
Université Saad Dahlab – Blida 1
Faculté des Sciences
Département d’Informatique
Licence d’Informatique
Semestre 3 (2ème année)
Algorithmique & Structures de Données
Mme AROUSSI
2017-2018
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
PLAN DU CHAPITRE I
Généralités sur l’Algorithmique
Algorithmique et Programmation
Qualités d’un Bon Algorithme
Langage Algorithmique utilisé
Tableaux
Langage C
Pointeurs 6
7
Définition: Un algorithme est suite finie d’opérations
élémentaires constituant un schéma de calcul ou de résolution d’un
problème.
Historique : L’algorithmique est un terme d’origine arabe,
hommage à Al Khawarizmi (780-850) auteur d’un ouvrage décrivant
des méthodes de calculs algébriques.
GÉNÉRALITÉ SUR L’ALGORITHMIQUE
8
GÉNÉRALITÉ SUR L’ALGORITHMIQUE
ÉTAPES DE CONCEPTION D’UN ALGORITHME
Analyse
Conception
Programmation
Test
Définition du problème en terme
de séquences d’opérations de
calcul, de stockage de données
Définition précise des données,
des traitements et de leur
séquencement
Traduction et réalisation de
l’algorithme dans un langage
précis
Vérification du bon
fonctionnement de l’algorithme
9
Définition : Un programme est la traduction d’un algorithme
dans un langage de programmation.
ALGORITHMIQUE & PROGRAMMATION
Langage
de bas
niveau
Langage
de haut
niveau
Évolution
Binaire,
Assembleur
Procédural
(Pascal, C),
Logique (Prolog),
....
Orienté Objet
(C++, C#, Java),
....
10
ALGORITHMIQUE & PROGRAMMATION
DÉMARCHE DE PROGRAMMATION
Énoncé du
problème
Analyse du
problème
Algorithme
Choisir un
langage de
programmation
Programmation
(traduction
l’algorithme en
programme)
Programme
(code source)
Compilation
(traduction du
code source en
code objet)
Traduction du code
objet en code
machine exécutable,
compréhensible par
l'ordinateur
Programme
binaire
exécutable
Exécution du
programme
Résultats
11
QUALITÉ D’UN BON ALGORITHME
Correct: Il faut que le programme exécute correctement ses
tâches pour lesquelles il a été conçu.
Complet: Il faut que le programme considère tous les cas
possibles et donne un résultat dans chaque cas.
Efficace: Il faut que le programme exécute sa tâche avec
efficacité de telle sorte qu’il se déroule en un temps minimal et
qu’il consomme un minimum de ressources.
12
ALGORITHME Nom_de_l’algorithme
DEBUT
manipulation des objets et modules déclarés
FIN
Entête
Environnement
Corps
Déclarations des objets et Modules utilisés
dans l’algorithme
LANGAGE ALGORITHMIQUE UTILISÉ
13
SI expression logique ALORS
DSI
Bloc
FSI
SI expression logique ALORS
DSI
Bloc1
FSI
SINON
DSINON
Bloc2
FSINON
_
LANGAGE ALGORITHMIQUE UTILISÉ
LA CONDITIONNELLE ET L’ALTERNATIVE
14
POUR var ALLANT DE vinit A vfinale PAS i FAIRE
DPOUR
Bloc
FPOUR
TANT QUE condition FAIRE
DTQ
Bloc
FTQ
REPETER
Bloc
JUSQU'A condition
LANGAGE ALGORITHMIQUE UTILISÉ
LES BOUCLES
Tout algorithme utilise des objets qui seront déclarés
dans son environnement.
A chaque objet, il faudra faire correspondre :
Un NOM qui permettra de le désigner et de le distinguer des autres
éléments,
Un TYPE qui indique la nature de l'ensemble dans lequel l'objet
prend ses valeurs,
Une VALEUR affectée à cet objet à un moment donné.
LANGAGE ALGORITHMIQUE UTILISÉ
LES OBJETS
15
ALGORITHME nom_algorithme
Déclarations des étiquettes
Déclarations des constantes
Déclarations des types
Déclarations des variables
Déclarations des sous-programmes (modules)
DEBUT
corps de l'algorithme
FIN 16
17
Un type définit l'ensemble des valeurs que peut prendre un objet
qui y est défini ainsi que les opérations autorisées sur cet objet
LANGAGE ALGORITHMIQUE UTILISÉ
DÉCLARATION DE TYPES
Scalaire ( Entier, Booléen et
caractère)
Standard
Enuméré
Intervalle
Simple
TYPE
Structuré
Non Scalaire (Réel)
Non
Standard
Tableau
Enregistrement (structure)
Chaine de caractère
Ensemble
18
Afin de gagner du temps et d’écrire des algorithmes plus courts
et plus structurés,
on regroupe un ou plusieurs blocs, qui réalisent un travail bien précis,
dans un MODULE, auquel on donne un nom
et que l’on peut ensuite « appeler »
chaque fois qu’on le désire, en faisant seulement référence à
son nom et sans avoir, bien entendu, à le reconstruire.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
Nom du Module
Type du module
(0 à n) entrées (0 à m) sorties
(résultats)
Rôle du module
19
Un module est une entité qui va effectuer un traitement, à partir
de 0 à n objets en entrée, pour fournir 0 à n sorties (ou résultats). Il est
identifié par un nom, qui va nous permettre de le distinguer, de le
déclarer et de l’appeler. Il a aussi un type qui va dépendre du nombre
de sorties du module. S’il n’a qu’une seule sortie qui ne fait pas objet
des paramètres d’entrée, il est de type FONCTION sinon il est de
type PROCEDURE. Et finalement, un rôle qui doit résumer avec
précision ce que fait ce module.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
Nom
FONCTION
(0 à n)
entrées
une sortie
Rôle
Nom
PROCEDURE
(0 à n)
entrées
(0 à n)
sorties
Rôle
20
Sur le plan syntaxique un module a le même schéma qu’un
algorithme avec une interface bien définie et un mécanisme qui assure
la communication entre les différents modules.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
FONCTION Nom_fonction (paramètres formel d’entrée) : type du résultat
DEBUT
manipulation des objets et modules déclarés
Retourner (résultat_de_la_fonction)
FIN
Déclarations des objets et Modules utilisés dans l’algorithme
21
Sur le plan syntaxique un module a le même schéma qu’un
algorithme avec une interface bien définie et un mécanisme qui assure
la communication entre les différents modules.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
PROCEDURE Nom_procédure (paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie)
DEBUT
manipulation des objets et modules déclarés
FIN
Déclarations des objets et Modules utilisés dans l’algorithme
22
Le mécanisme de communication est synthétisé dans le schéma
suivant et il est totalement transparent pour l’utilisateur, car il lui
suffit de faire correctement ses déclarations.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
Quand l’appel à un module
est rencontré, l’exécution du
module appelant est suspendue
jusqu’à ce que le module appelé
soit totalement exécuté, puis
l’exécution du module appelant
repart immédiatement après
l’appel.
23
Il existe deux façons pour passer les paramètres à un module:
1. Lorsqu’un paramètre est fourni à un module et que l’on
souhaite que le module nous restitue la même valeur que le
paramètre avait à l’entrée, on effectuera un passage par
valeur des paramètres.
Il est recommandé d'utiliser systématiquement un passage par
valeur pour les fonctions.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
24
Il existe deux façons pour passer les paramètres à un module:
2. Mais lorsqu’un paramètre d’entrée est modifié lors de
l’exécution du module et c’est le contenu modifié du paramètre
que l’on souhaite avoir, on effectuera un passage par
variable (ou par référence). Dans ce cas le paramètre formel
doit être précédé du mot VAR.
Par contre, il faut utiliser un passage par variable pour tous les
paramètres de sortie d’un module. Et cela est évident car un
paramètre de sortie est évalué dans le module et c’est bien
entendu ce résultat que l’on souhaite avoir en sortie.
LANGAGE ALGORITHMIQUE UTILISÉ
MODULARITÉ
25
Exercice : Soit P un polynôme de degré 2 qui s’écrit de la
forme suivante P(X) = a X2 +b X + c. Ecrire un programme
qui permet de
Lire les coefficients du polynôme
Evaluer le polynôme en un point x qui sera lu
Résoudre l’équation P(x) = 0 et afficher les résultats,
LANGAGE ALGORITHMIQUE UTILISÉ
EXERCICE
PLAN DU CHAPITRE I
Généralités sur l’Algorithmique
Algorithmique et Programmation
Qualités d’un Bon Algorithme
Langage Algorithmique utilisé
Tableaux
Langage C
Pointeurs 26
C’est un objet décomposé en plusieurs éléments de même
type et dont chacun de ces éléments est repéré par un
indice (ou index).
Le nombre d'éléments du tableau constitue sa taille.
Le nombre d’indices qui permet de désigner un élément particulier
est appelée dimension du tableau.
Le type de l’indice est souvent intervalle [0 .. Taille-1].
TABLEAUX
NOTIONS DE BASE
27
7 5 6 3 2 1 1 4
éléments
0 1 2 3 4 5 6 7 Indices
La déclaration d’un tableau se fait en précisant le mot
TABLEAU, suivi de sa taille entre crochets et du type des
éléments.
Type Type_tableau = TABLEAU [taille] DE type_des_éléments, et
Nom_du_tableau : Type_Tableau, ou
Nom_du_tableau : TABLEAU [taille] DE type_des_éléments
L’accès à un élément du tableau s’effectue en précisant le nom du
tableau suivi de la valeur de l’indice entre crochets, e.g: Tab[1].
L'accès à un élément du Tableau peut être direct ou séquentiel.
TABLEAUX
NOTIONS DE BASE
28
On distingue généralement deux classes d’algorithmes:
Les algorithmes de parcours en vu de réaliser un traitement
donné
Les algorithmes de parcours en vu de rechercher une valeur
donnée.
Parmi les algorithmes traitant les tableaux à une
dimension:
Rechercher une valeur dans un tableau
si tableau ordonné alors recherche dichotomique
si tableau non ordonné alors recherche séquentielle
TABLEAUX
ALGORITHMES
29
Parmi les algorithmes traitant les tableaux à une
dimension:
La recherche d’une valeur
L’insertion d’une valeur
La suppression (logique ou physique) d’une valeur
Le remplacement d’une valeur par une autre (la modification)
L’interclassement de deux tableaux ordonnés.
L’union et l’intersection de deux tableaux.
Le tri d’un tableau: tri par sélection, tri par Bulles, tri par
insertion, tri par fusion, tri rapide, …..
TABLEAUX
ALGORITHMES
30
Un tableau multidimensionnel est considéré comme étant un
tableau dont les éléments sont eux mêmes des tableaux.
Il se définit de la manière suivante :
Type Type_tableau = TABLEAU [N1, N2, ....., Nd] DE
type_des_éléments, et Nom_du_tableau : Type_Tableau,
ou
Nom_du_tableau: TABLEAU [N1, N2, ....., Nd] DE
type_des_éléments
d est la dimension du tableau et Ni désigne le nombre d’éléments
dans chaque dimension.
Le nombre de dimensions n'est pas limité .
TABLEAUX MULTIDIMENSIONNELS
31
L'accès à un élément du tableau se fera par l'expression
Nom_du_tableau[i1][i2] …[id] ou
Nom_du_tableau[i1, i2, …, id] .
Exemple: un tableau d'entiers positifs à deux dimensions
(3 lignes, 4 colonnes) se définira avec la syntaxe suivante :
Tab : tableau[0..2, 0..3] d’entier
Le rangement en mémoire centrale du tableau se fait ligne par ligne.
TABLEAUX MULTIDIMENSIONNELS
32
Représentation du tableau
Tab[0,0] Tab[0,1] Tab[0,2] Tab[0,3]
Tab[1,0] Tab[1,1] Tab[1,2] Tab[1,3]
Tab[2,0] Tab[2,1] Tab[2,2] Tab[2,3]
PLAN DU CHAPITRE I
Généralités sur l’Algorithmique
Algorithmique et Programmation
Qualités d’un Bon Algorithme
Langage Algorithmique utilisé
Tableaux
Langage C
Pointeurs 33
Le langage C est né au début des années 1970 dans les
laboratoires AT&T aux Etats-Unis dans le but d’améliorer le
langage existant « B ».
C’est un langage de bas niveau dans le sens où il permet
l’accès aux données (bits, octets, adresses) que manipulent les
machines et qui ne sont pas souvent disponibles à partir de
langages évolués tels que Fortran, Pascal ou ADA
Il a été conçu pour l’écriture de systèmes d’exploitation et du
logiciel de base; Plus de 90% du noyau du système UNIX est
écrit en langage C.
LANGAGE C
PRÉSENTATION
34
Sa popularité : Il possède une communauté très importante
et de nombreux tutoriels et documentations. De plus, il existe
beaucoup de programmes et de bibliothèques développés en C.
Sa rapidité : ce qui en fait un langage de choix pour tout
programme où le temps de réponse (exécution) est crucial.
Sa légèreté : ce qui le rend utile pour les programmes
embarqués où la mémoire disponible est faible.
Sa portabilité : un programme développé en C marche
théoriquement sur n’importe quelle plateforme (Windows,
Linus, Unix, Mac, …)
LANGAGE C
POURQUOI L’APPRENDRE?
35
C est un langage qui possède des règles. Ces règles ont été
définies par des informaticiens professionnels et sont toutes
regroupées dans ce que l’on appelle la norme du langage.
Cette norme sert de référence à tous les programmeurs.
Il existe plusieurs normes : l’ANSI en 1989 (C89 ), l’ISO en
1990 (C90), le C99 et le C11.
Dans ce cours, nous allons nous servir de la norme utilisé C89
(http://flash-gordon.me.uk/ansi.c.txt).
En effet, même si c’est la plus ancienne et qu’elle semble restrictive à
certains, elle permet néanmoins de développer avec n’importe quel
compilateur sans problème, contrairement aux normes C99 et C11.
De plus, il est très facile ensuite de passer aux normes plus récentes.
LANGAGE C
NORME
36
Le strict minimum pour programmer en C se résume en
trois points:
Un éditeur de texte: pour écrire le code source.
Un compilateur: pour transformer le code en un fichier
exécutable compréhensible par le processeur.
Un débogueur: fondamentalement, il n’est pas indispensable,
mais il est très utile pour chasser les bugs et vérifier le
comportement de son programme.
LANGAGE C
OUTILS
37
Il existe deux moyens de récupérer tous ces logiciels :
On les prend séparément, et dans ce cas il faut compiler par
soi-même via l’invite de commande,
On utilise un environnement ou logiciel qui intègre les trois
logiciels: un Environnement de Développement Intégré (EDI)
ou Integrated Development Environment (IDE).
De nombreux IDE sont disponibles pour Windows:
Code::Blocks, Dev-C++, Visual C++,.....
Dans les TPs, nous allons nous servir du Code::Blocks
(http://www.codeblocks.org/downloads/binaries)
LANGAGE C
OUTILS
38
39
LANGAGE C (STRUCTURE)
Langage algorithmique Langage CProgrammeprincipale
Algorithme Principal
Déclarations
Début
…actions…
Fin
// directives
// déclaration des variables globales
// prototype des fonctions
int main ()
{
// déclarations des variables locales
// instructions
return 0 ;
}
Fonction
Fonction id (décl. param.) : type
Déclarations
Début
…actions…
retourner expr
Fin
type id (décl.param.)
{
// déclarations
// instructions
return expr ;
}
Procédure
Procédure id (décl. param.)
Déclarations
Début
…actions…
Fin
void id (décl. param.)
{
// déclarations
// instructions
}
40
LANGAGE C
TYPE DE DONNÉES
Type de données Signification Nbr
Octets
Plage de valeurs acceptées
char Caractère 1 - 128 à 127
unsigned char Caractère non signé 1 0 à 255
short int Entier court 2 -32 768 à 32 767
unsigned short int Entier court non signé 2 0 à 65 535
int Entier 2
4
-32 768 à 32 767
-2 147 483 648 à 2 147 483 647
unsigned int Entier non signé 2
4
0 à 65 535
0 à 4 294 967 295
long int Entier long 4 -2 147 483 648 à 2 147 483 647
unsigned long int Entier long non signé 4 0 à 4 294 967 295
float Flottant ou réel 4 3,4 x 10−38 à 3,4 x 1038 env.
double Flottant double 8 1,7 x10 −308 à 1,7 x10 308 env.
long double Flottant double long 10 3, 4 x10−4932 à 3, 4 x104932 env.
41
LANGAGE C (DÉCLARATION)
Déclaration Langage Algorithmique Langage C
Variable var id : type type id ;
Constante Const ID : type ←expr #define ID (expr)
const type ID = expr;
Tableau statique T: tableau [N] de type type T [N] ;
Chaine de caractères Ch: chaine [M] Char ch[M];
Pointeur Ptr: *type type* ptr;
Enregistrement structure id
déclaration des champs
finStructure
struct id {
déclaration des champs
} ;
42
LANGAGE C
OPÉRATEURS
Langage Algorithmique Langage C
Affectation id_var ←expr id_var = expr ;
Arithmétiques +, -, *, /, %(modulo) , ++,
- -
+, -, *, /, %, ++, - -
Affectation composée exp1 = exp1 op exp2 exp1 op= exp2
+= , -= , *= , /= , %=
Logiques et, ou, non &&, ||, !
Comparaison =, ≠, <, ≤, >, ≥ ==, !=, <, <=, >, >=
Affectation conditionnel
ternaire
Si exp1 alors exp2
Sinon exp3
exp1 ? exp2 : exp3
43
LANGAGE C
STRUCTURES DE CONTRÔLE CONDITIONNELLES
Langage algorithmique Langage C
Si condition alors
Dsi … Fsi
if (condition)
{ … ; }
Si condition alors
Dsi … Fsi
Sinon
Dsinon … Fsinon
if (condition)
{ … ; }
else
{ … ; }
Selon expr
cas val1 : …
.
.
cas valN : …
cas sinon : …
finSelon
switch (expr)
{
case val1 : … ; break ;
.
.
case valN : … ; break ;
default : …;
}
44
LANGAGE C
STRUCTURES DE CONTRÔLE ITÉRATIVES
Langage algorithmique Langage C
Pour i ← x a y pas de n faire
DPour
…actions..
Fpour
for(v=x ;v<=y ;v=v+n)
{
…actions…..;
}
Tantque condition
DTQ
…actions…
FTQ
while (condition)
{
…instructions… ;
}
repeter
…actions…
Jusqu’à condition
do
{
…instructions… ;
} while (non condition);
45
LANGAGE C
L’OPÉRATEUR SIZEOF
L’opérateur sizeof permet de calculer la taille
correspondant à un type.
sizeof (descripteur-de-type) représente la taille
(exprimée en octet) qu’occuperait en mémoire un objet
possédant le type indiqué
sizeof exp représente la taille qu’occuperait en
mémoire un objet possédant le même type que exp.
sizeof t ou sizeof t[0] où t est un tableau de taille n.
Cette formule exprime le nombre d’octets (n * sizeof(t)
) qu’occuperait le tableau.
46
LANGAGE C
FONCTIONS D’ENTRÉES-SORTIES
L’entête <stdio.h> (abréviation de standard in-out) fournit
trois flux que l’on peut utiliser directement :
stdin, l’entrée standard qui envoie au programme les données
issues du clavier, e.g:
scanf (format, &var1, &var2,..., &varn)
stdout, la sortie standard qui envoie les données que le
programme génère à l’écran, e.g.
printf (format, exp1, exp2, ... expn)
stderr, la sortie standard des erreurs qui seront affichées sur
l’écran.
LANGAGE C
FONCTIONS D’ENTRÉES-SORTIES
47
Déclaration lecture écriture format externe
int i; scanf("%d",&i); printf("%d",i); décimal
int i; scanf("%o",&i); printf("%o",i); octal
int i; scanf("%x",&i); printf("%x",i); hexadécimal
unsigned int i; scanf("%u",&i); printf("%u",i); décimal
short j; scanf("%hd",&j); printf("%d",j); décimal
short j; scanf("%ho",&j); printf("%o",j); octal
short j; scanf("%hx",&j); printf("%x",j); hexadécimal
unsigned short j; scanf("%hu",&j); printf("%u",j); décimal
long k; scanf("%ld",&k); printf("%d",k); décimal
long k; scanf("%lo",&k); printf("%o",k); octal
long k; scanf("%lx",&k); printf("%x",k); hexadécimal
unsigned long k; scanf("%lu",&k); printf("%u",k); décimal
LANGAGE C
FONCTIONS D’ENTRÉES-SORTIES
48
Déclaration lecture écriture format externe
float l; scanf("%f",&l); printf("%f",l); point décimal
float l; scanf("%e",&l); printf("%e",l); exponentielle
float l; printf("%g",l); la plus courte des deux
double m; scanf("%lf",&m); printf("%f",m); point décimal
double m; scanf("%le"&m); printf("%e",m); exponentielle
double m; printf("%g",m); la plus courte
long double n; scanf("%Lf"&n); printf("%Lf",n); point décimal
long double n; scanf("%Le"&n); printf("%Le",n); exponentielle
long double n; printf("%Lg",n); la plus courte
char o; scanf("%c",&o); printf("%c",o); caractère
char p[10];
scanf("%s",p); printf("%s",p);
chaîne de caractères
scanf("%s",&p[0]);
PLAN DU CHAPITRE I
Généralités sur l’Algorithmique
Algorithmique et Programmation
Qualités d’un Bon Algorithme
Langage Algorithmique utilisé
Tableaux
Langage C
Pointeurs 49
Une variable est destinée à contenir une valeur du type
avec lequel elle est déclarée. Physiquement, cette valeur se
situe en mémoire.
Exemple:
x: entier;
x ←10;
POINTEURS
VERSUS VARIABLES
50
Un pointeur est une variable destinée à contenir une adresse
mémoire, c.-à-d. une valeur identifiant un emplacement en mémoire.
Pour différencier un pointeur d'une variable ordinaire, on fait
précéder son nom de l’opérateur unaire d’indirection « * » lors de sa
déclaration.
Tout pointeur est associé à un type d’objet. Ce type est celui des
objets qui sont manipulables grâce au pointeur.
Les opérations les plus simples sur un pointeur sont les suivantes :
affectation d’une adresse au pointeur ;
utilisation du pointeur pour accéder à l’objet dont il contient
l’adresse.
POINTEURS
DÉFINITIONS ET OPÉRATIONS
51
Exemple:
x: entier; x ←10; px: * entier;
px ← &x; // affectation d’une adresse au pointeur ;
*px ← 20
POINTEURS
DÉFINITIONS ET OPÉRATIONS
52
20
La déclaration de variables réserve de l'espace en
mémoire pour ces variables pour toute la durée de vie du
programme c’est ce qu’on appelle l’allocation statique.
Elle impose par ailleurs de connaître avant le début de
l'exécution l'espace nécessaire au stockage de ces
variables, en particulier la dimension des tableaux.
Or dans de nombreuses applications, le nombre
d'éléments d'un tableau peut varier d'une exécution du
programme à l'autre d’où l’allocation dynamique.
POINTEURS
ALLOCATION DYNAMIQUE DU MÉMOIRE
53
Pour ce faire, on utilise des pointeurs.
Quand on fait une allocation dynamique de mémoire, on
obtient en retour un pointeur sur la zone mémoire allouée.
POINTEURS
ALLOCATION DYNAMIQUE DU MÉMOIRE
54
Algorithmique Langage C Rôle
ptr: *type
TAB Nil
type * ptr = NULL; Déclare un pointeur
ptr←(*type)
allouer()
ptr =(type *)
malloc(sizeof(type));
Retourner un pointeur pointant
vers un objet de type type.
liberer(ptr) free(ptr); Libérer l’espace mémoire alloué
à un pointeur « ptr ».
Les fonctions de langage C sont disponibles dans la bibliothèque <stdlib.h>
Par défaut, le tableau est de grandeur statique, i.e. qu’il
est impossible de les changer de taille après la
compilation.
Il est cependant possible de changer la taille après la
compilation. C’est ce qu’on appelle les tableaux
dynamiques.
Pour faire des tableaux dynamiques, il faut réserver un
espace mémoire d’une taille donnée puis d’assigner un
pointeur à cet espace mémoire.
POINTEURS
& LES TABLEAUX
55
POINTEURS
& LES TABLEAUX
56
Algorithmique Langage C Rôle
TAB: *type
TAB Nil
type * TAB =
NULL;
Déclarer un tableau
TAB←(*type)
allouerTab(N)
TAB =(type *)
malloc(N*
sizeof(type))
Allouer une plage mémoire à un
tableau de N éléments de type «
type»,
TAB = (type *)
calloc(N,
sizeof(type));
Allouer une plage mémoire à un
tableau de N éléments de type «
type » dont les valeurs sont
initialisées à zéro
liberer(TAB) free(TAB); Libérer l’espace mémoire alloué
à un pointeur « ptr ».
Ces fonctions sont disponibles dans la bibliothèque <stdlib.h>
Une autre utilité des pointeurs dans le langage C est de
permettre le passage par variable des paramètres dans
les procédures
Exemple:
POINTEURS
& LE PASSAGE PAR VARIABLE
57
Algorithmique Langage C
Procedure permuter (Var x, y: entier)
Var
Tmp; entier;
Debut
Tmp ← x;
x ← y;
y ← tmp;
Fin
void permuter(int *ptrx, *ptry)
{
int Tmp;
Tmp = *ptrx;
*ptrx = *ptry;
*ptry = tmp;
}
Appel:
x 5; y 80; permuter (x, y)
Appel: x=5; y=80; permuter (&x, &y)
On a souvent de modèles de structure dont un des
membres est un pointeur vers une structure de même
modèle. On parle de l’autoréférence
Cette représentation permet de construire des listes
chaînées et des arbres.
POINTEURS
& AUTORÉFÉRENCE
58
Algorithmique Langage C
Listes
chainées
maillon: structure {
val: entier;
suiv: * maillon;
};
struct maillon {
char nom[30];
struct maillon *suiv;
};
SOURCES DE CE COURS
59
N. EL-ALLIA , Cours d’Algorithmique et Structures de données
dynamiques, Ecole nationale Supérieure d’Informatique (ESI), 2010.
Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale
Supérieure d’Informatique (ESI), Disponible sur
http://zegour.esi.dz/Cours/Cours_sdd.htm
M. Le Gonidec, Introduction à la Programmation – Pratique du Langage C
–, Université du Sud, disponible sur http://legonidec.univ-tln.fr/0-Cours.pdf
Maude Manouvrier, Initiation à la Programmation Procédurale, à
L'algorithmique Et aux structures de Données par le Langage C,
Université Paris Dauphine, 2015, disponible sur
http://www.lamsade.dauphine.fr/~manouvri/C/Polys_C_MM.pdf
Christian Bac, Support de Cours de Langage C; 2013; Disponible sur
http://picolibre.int-evry.fr/projects/svn/coursc/Index.pdf

Contenu connexe

Tendances

Algorithme & structures de données Chap II
Algorithme & structures de données Chap IIAlgorithme & structures de données Chap II
Algorithme & structures de données Chap IIInes Ouaz
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite completChahrawoods Dmz
 
Examen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesExamen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesInes Ouaz
 
Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Ines Ouaz
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesSana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Travaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de donnéesTravaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de donnéesInes Ouaz
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
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 INITIATION A L'ALGORITHME ET PROGRAMMATION.06.12.21.pptx
COURS INITIATION A L'ALGORITHME ET  PROGRAMMATION.06.12.21.pptxCOURS INITIATION A L'ALGORITHME ET  PROGRAMMATION.06.12.21.pptx
COURS INITIATION A L'ALGORITHME ET PROGRAMMATION.06.12.21.pptxITNAV1
 

Tendances (20)

Algorithme & structures de données Chap II
Algorithme & structures de données Chap IIAlgorithme & structures de données Chap II
Algorithme & structures de données Chap II
 
Cours algorithmique et complexite complet
Cours algorithmique et complexite completCours algorithmique et complexite complet
Cours algorithmique et complexite complet
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Examen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesExamen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de données
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Travaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de donnéesTravaux dirigés 1: algorithme & structures de données
Travaux dirigés 1: algorithme & structures de données
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Les algorithmes de tri
Les algorithmes de triLes algorithmes de tri
Les algorithmes de tri
 
Les enregistrements
Les enregistrements Les enregistrements
Les enregistrements
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
01 correction-td smia-s2-info2
01 correction-td smia-s2-info201 correction-td smia-s2-info2
01 correction-td smia-s2-info2
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
COURS INITIATION A L'ALGORITHME ET PROGRAMMATION.06.12.21.pptx
COURS INITIATION A L'ALGORITHME ET  PROGRAMMATION.06.12.21.pptxCOURS INITIATION A L'ALGORITHME ET  PROGRAMMATION.06.12.21.pptx
COURS INITIATION A L'ALGORITHME ET PROGRAMMATION.06.12.21.pptx
 

Similaire à Chapitre 1 rappel

U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetAmine Chkr
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfadeljaouadi
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeInforMatica34
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
Chapitre 1 (algorithme)
Chapitre 1 (algorithme)Chapitre 1 (algorithme)
Chapitre 1 (algorithme)mahbouba
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithmemustapha4
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
COURS_ALGORITHME_SNINEH.pptx
COURS_ALGORITHME_SNINEH.pptxCOURS_ALGORITHME_SNINEH.pptx
COURS_ALGORITHME_SNINEH.pptxSalmaAhraimida
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels Bilel Abed
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 

Similaire à Chapitre 1 rappel (20)

Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Uml
UmlUml
Uml
 
Cours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdfCours - TC - Histoire Algorithmique.pdf
Cours - TC - Histoire Algorithmique.pdf
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Chapitre 1 (algorithme)
Chapitre 1 (algorithme)Chapitre 1 (algorithme)
Chapitre 1 (algorithme)
 
Ktab asd
Ktab asdKtab asd
Ktab asd
 
Asd
AsdAsd
Asd
 
4sci ap(2)
4sci ap(2)4sci ap(2)
4sci ap(2)
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithme
 
Apprentissage du java
Apprentissage du javaApprentissage du java
Apprentissage du java
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
COURS_ALGORITHME_SNINEH.pptx
COURS_ALGORITHME_SNINEH.pptxCOURS_ALGORITHME_SNINEH.pptx
COURS_ALGORITHME_SNINEH.pptx
 
langage C++
langage C++langage C++
langage C++
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 

Plus de Sana Aroussi

Gestion des threads
Gestion des threadsGestion des threads
Gestion des threadsSana Aroussi
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court cheminSana Aroussi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binairesSana Aroussi
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesSana Aroussi
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminSana Aroussi
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statiqueSana Aroussi
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Sana Aroussi
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busSana Aroussi
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptionsSana Aroussi
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoiresSana Aroussi
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsSana Aroussi
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de triSana Aroussi
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Sana Aroussi
 

Plus de Sana Aroussi (20)

Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Gestion des threads
Gestion des threadsGestion des threads
Gestion des threads
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
 
Chapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiquesChapitre 4 heuristiques et méta heuristiques
Chapitre 4 heuristiques et méta heuristiques
 
Chapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court cheminChapitre 2 problème de plus court chemin
Chapitre 2 problème de plus court chemin
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Chapitre 6 hachage statique
Chapitre 6 hachage statiqueChapitre 6 hachage statique
Chapitre 6 hachage statique
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Chapitre iv entrées sorties et bus
Chapitre iv entrées sorties et busChapitre iv entrées sorties et bus
Chapitre iv entrées sorties et bus
 
Chapitre iii interruptions
Chapitre iii interruptionsChapitre iii interruptions
Chapitre iii interruptions
 
Chapitre ii mémoires
Chapitre ii mémoiresChapitre ii mémoires
Chapitre ii mémoires
 
Chapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récentsChapitre i architectures des processeurs récents
Chapitre i architectures des processeurs récents
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
Chapitre iv algorithmes de tri
Chapitre iv algorithmes de triChapitre iv algorithmes de tri
Chapitre iv algorithmes de tri
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86
 

Dernier

Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...idelewebmestre
 
BOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairBOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairidelewebmestre
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinidelewebmestre
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsidelewebmestre
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresidelewebmestre
 
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la NièvreAccompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la Nièvreidelewebmestre
 
BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresidelewebmestre
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...idelewebmestre
 
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueBOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueidelewebmestre
 
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...idelewebmestre
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsidelewebmestre
 
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud PorcsBOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud Porcsidelewebmestre
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsidelewebmestre
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasidelewebmestre
 
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineBOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineidelewebmestre
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresidelewebmestre
 
Cours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesCours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesPierreFournier32
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...idelewebmestre
 
BOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airBOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airidelewebmestre
 

Dernier (20)

Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
 
BOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairBOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chair
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcin
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminants
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
 
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la NièvreAccompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
 
BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitières
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
 
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueBOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
 
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...BOW 2024 - 3-3 -  Adaptation des bâtiments pour ruminants au changement clima...
BOW 2024 - 3-3 - Adaptation des bâtiments pour ruminants au changement clima...
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
 
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud PorcsBOW 2024 - 3-6 - Adaptation climat chaud Porcs
BOW 2024 - 3-6 - Adaptation climat chaud Porcs
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
 
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineBOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
 
Cours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesCours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pages
 
Webinaire lésions podales_04.04.2024.pptx
Webinaire lésions podales_04.04.2024.pptxWebinaire lésions podales_04.04.2024.pptx
Webinaire lésions podales_04.04.2024.pptx
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
 
BOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein airBOW 2024 - Logement des veaux laitiers en plein air
BOW 2024 - Logement des veaux laitiers en plein air
 

Chapitre 1 rappel

  • 1. ALGORITHMIQUE & STRUCTURES DE DONNÉES (ASD) Université Saad Dahlab – Blida1 Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 3 (2ème année) Mme AROUSSI 2017-2018 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
  • 2. PRÉAMBULE Pré-requis: Cours (Algo1, S1) + (Algo 2, S2). Volume horaire hebdomadaire: 3H Cours + 3H TD/TP Évaluation: 2 Interrogations (I1, I2) + 2 Tests TP (T1, T2) + Examen final. Note TD: I1 noté sur 7,5 points; I2 noté sur 7,5 points; 3 points présence et 2 points assiduité Note TP: T1 noté sur 8 points; T2 noté sur 7 points; 3 points présence et 2 points assiduité Contrôle Continu (CC) = (TD + TP)/2 Moyenne = (Examen x 2 + CC) / 3 Coefficient 3; Crédits 6 2
  • 3. OBJECTIFS DU COURS Comprendre les notions d’algorithme, de structures de données et de complexité : Élaborer des algorithmes performants et efficaces Acquérir la connaissance des structures de données séquentielles (LLC, Files et Piles), hiérarchiques (arbres) et des algorithmes de base sur les tris. Maîtriser la récursivité (simple, multiple, mutuelle, imbriquée) Comprendre la notion de complexité d’un algorithme Savoir estimer la complexité d’un algorithme itératif ou récursif 3
  • 4. CONTENU DU COURS I. Rappels II. Structures Séquentielles (Listes, Files, Piles) III. Complexité des Algorithmes IV. Récursivité V. Structures Hiérarchiques (Arbres, ABR, AVL, Tas) VI. Algorithmes de Tri VII. Ensembles 4
  • 5. CHAPITRE I: RAPPELS Université Saad Dahlab – Blida 1 Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 3 (2ème année) Algorithmique & Structures de Données Mme AROUSSI 2017-2018 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/
  • 6. PLAN DU CHAPITRE I Généralités sur l’Algorithmique Algorithmique et Programmation Qualités d’un Bon Algorithme Langage Algorithmique utilisé Tableaux Langage C Pointeurs 6
  • 7. 7 Définition: Un algorithme est suite finie d’opérations élémentaires constituant un schéma de calcul ou de résolution d’un problème. Historique : L’algorithmique est un terme d’origine arabe, hommage à Al Khawarizmi (780-850) auteur d’un ouvrage décrivant des méthodes de calculs algébriques. GÉNÉRALITÉ SUR L’ALGORITHMIQUE
  • 8. 8 GÉNÉRALITÉ SUR L’ALGORITHMIQUE ÉTAPES DE CONCEPTION D’UN ALGORITHME Analyse Conception Programmation Test Définition du problème en terme de séquences d’opérations de calcul, de stockage de données Définition précise des données, des traitements et de leur séquencement Traduction et réalisation de l’algorithme dans un langage précis Vérification du bon fonctionnement de l’algorithme
  • 9. 9 Définition : Un programme est la traduction d’un algorithme dans un langage de programmation. ALGORITHMIQUE & PROGRAMMATION Langage de bas niveau Langage de haut niveau Évolution Binaire, Assembleur Procédural (Pascal, C), Logique (Prolog), .... Orienté Objet (C++, C#, Java), ....
  • 10. 10 ALGORITHMIQUE & PROGRAMMATION DÉMARCHE DE PROGRAMMATION Énoncé du problème Analyse du problème Algorithme Choisir un langage de programmation Programmation (traduction l’algorithme en programme) Programme (code source) Compilation (traduction du code source en code objet) Traduction du code objet en code machine exécutable, compréhensible par l'ordinateur Programme binaire exécutable Exécution du programme Résultats
  • 11. 11 QUALITÉ D’UN BON ALGORITHME Correct: Il faut que le programme exécute correctement ses tâches pour lesquelles il a été conçu. Complet: Il faut que le programme considère tous les cas possibles et donne un résultat dans chaque cas. Efficace: Il faut que le programme exécute sa tâche avec efficacité de telle sorte qu’il se déroule en un temps minimal et qu’il consomme un minimum de ressources.
  • 12. 12 ALGORITHME Nom_de_l’algorithme DEBUT manipulation des objets et modules déclarés FIN Entête Environnement Corps Déclarations des objets et Modules utilisés dans l’algorithme LANGAGE ALGORITHMIQUE UTILISÉ
  • 13. 13 SI expression logique ALORS DSI Bloc FSI SI expression logique ALORS DSI Bloc1 FSI SINON DSINON Bloc2 FSINON _ LANGAGE ALGORITHMIQUE UTILISÉ LA CONDITIONNELLE ET L’ALTERNATIVE
  • 14. 14 POUR var ALLANT DE vinit A vfinale PAS i FAIRE DPOUR Bloc FPOUR TANT QUE condition FAIRE DTQ Bloc FTQ REPETER Bloc JUSQU'A condition LANGAGE ALGORITHMIQUE UTILISÉ LES BOUCLES
  • 15. Tout algorithme utilise des objets qui seront déclarés dans son environnement. A chaque objet, il faudra faire correspondre : Un NOM qui permettra de le désigner et de le distinguer des autres éléments, Un TYPE qui indique la nature de l'ensemble dans lequel l'objet prend ses valeurs, Une VALEUR affectée à cet objet à un moment donné. LANGAGE ALGORITHMIQUE UTILISÉ LES OBJETS 15
  • 16. ALGORITHME nom_algorithme Déclarations des étiquettes Déclarations des constantes Déclarations des types Déclarations des variables Déclarations des sous-programmes (modules) DEBUT corps de l'algorithme FIN 16
  • 17. 17 Un type définit l'ensemble des valeurs que peut prendre un objet qui y est défini ainsi que les opérations autorisées sur cet objet LANGAGE ALGORITHMIQUE UTILISÉ DÉCLARATION DE TYPES Scalaire ( Entier, Booléen et caractère) Standard Enuméré Intervalle Simple TYPE Structuré Non Scalaire (Réel) Non Standard Tableau Enregistrement (structure) Chaine de caractère Ensemble
  • 18. 18 Afin de gagner du temps et d’écrire des algorithmes plus courts et plus structurés, on regroupe un ou plusieurs blocs, qui réalisent un travail bien précis, dans un MODULE, auquel on donne un nom et que l’on peut ensuite « appeler » chaque fois qu’on le désire, en faisant seulement référence à son nom et sans avoir, bien entendu, à le reconstruire. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ Nom du Module Type du module (0 à n) entrées (0 à m) sorties (résultats) Rôle du module
  • 19. 19 Un module est une entité qui va effectuer un traitement, à partir de 0 à n objets en entrée, pour fournir 0 à n sorties (ou résultats). Il est identifié par un nom, qui va nous permettre de le distinguer, de le déclarer et de l’appeler. Il a aussi un type qui va dépendre du nombre de sorties du module. S’il n’a qu’une seule sortie qui ne fait pas objet des paramètres d’entrée, il est de type FONCTION sinon il est de type PROCEDURE. Et finalement, un rôle qui doit résumer avec précision ce que fait ce module. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ Nom FONCTION (0 à n) entrées une sortie Rôle Nom PROCEDURE (0 à n) entrées (0 à n) sorties Rôle
  • 20. 20 Sur le plan syntaxique un module a le même schéma qu’un algorithme avec une interface bien définie et un mécanisme qui assure la communication entre les différents modules. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ FONCTION Nom_fonction (paramètres formel d’entrée) : type du résultat DEBUT manipulation des objets et modules déclarés Retourner (résultat_de_la_fonction) FIN Déclarations des objets et Modules utilisés dans l’algorithme
  • 21. 21 Sur le plan syntaxique un module a le même schéma qu’un algorithme avec une interface bien définie et un mécanisme qui assure la communication entre les différents modules. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ PROCEDURE Nom_procédure (paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie)(paramètres formels d’entrée/sortie) DEBUT manipulation des objets et modules déclarés FIN Déclarations des objets et Modules utilisés dans l’algorithme
  • 22. 22 Le mécanisme de communication est synthétisé dans le schéma suivant et il est totalement transparent pour l’utilisateur, car il lui suffit de faire correctement ses déclarations. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ Quand l’appel à un module est rencontré, l’exécution du module appelant est suspendue jusqu’à ce que le module appelé soit totalement exécuté, puis l’exécution du module appelant repart immédiatement après l’appel.
  • 23. 23 Il existe deux façons pour passer les paramètres à un module: 1. Lorsqu’un paramètre est fourni à un module et que l’on souhaite que le module nous restitue la même valeur que le paramètre avait à l’entrée, on effectuera un passage par valeur des paramètres. Il est recommandé d'utiliser systématiquement un passage par valeur pour les fonctions. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ
  • 24. 24 Il existe deux façons pour passer les paramètres à un module: 2. Mais lorsqu’un paramètre d’entrée est modifié lors de l’exécution du module et c’est le contenu modifié du paramètre que l’on souhaite avoir, on effectuera un passage par variable (ou par référence). Dans ce cas le paramètre formel doit être précédé du mot VAR. Par contre, il faut utiliser un passage par variable pour tous les paramètres de sortie d’un module. Et cela est évident car un paramètre de sortie est évalué dans le module et c’est bien entendu ce résultat que l’on souhaite avoir en sortie. LANGAGE ALGORITHMIQUE UTILISÉ MODULARITÉ
  • 25. 25 Exercice : Soit P un polynôme de degré 2 qui s’écrit de la forme suivante P(X) = a X2 +b X + c. Ecrire un programme qui permet de Lire les coefficients du polynôme Evaluer le polynôme en un point x qui sera lu Résoudre l’équation P(x) = 0 et afficher les résultats, LANGAGE ALGORITHMIQUE UTILISÉ EXERCICE
  • 26. PLAN DU CHAPITRE I Généralités sur l’Algorithmique Algorithmique et Programmation Qualités d’un Bon Algorithme Langage Algorithmique utilisé Tableaux Langage C Pointeurs 26
  • 27. C’est un objet décomposé en plusieurs éléments de même type et dont chacun de ces éléments est repéré par un indice (ou index). Le nombre d'éléments du tableau constitue sa taille. Le nombre d’indices qui permet de désigner un élément particulier est appelée dimension du tableau. Le type de l’indice est souvent intervalle [0 .. Taille-1]. TABLEAUX NOTIONS DE BASE 27 7 5 6 3 2 1 1 4 éléments 0 1 2 3 4 5 6 7 Indices
  • 28. La déclaration d’un tableau se fait en précisant le mot TABLEAU, suivi de sa taille entre crochets et du type des éléments. Type Type_tableau = TABLEAU [taille] DE type_des_éléments, et Nom_du_tableau : Type_Tableau, ou Nom_du_tableau : TABLEAU [taille] DE type_des_éléments L’accès à un élément du tableau s’effectue en précisant le nom du tableau suivi de la valeur de l’indice entre crochets, e.g: Tab[1]. L'accès à un élément du Tableau peut être direct ou séquentiel. TABLEAUX NOTIONS DE BASE 28
  • 29. On distingue généralement deux classes d’algorithmes: Les algorithmes de parcours en vu de réaliser un traitement donné Les algorithmes de parcours en vu de rechercher une valeur donnée. Parmi les algorithmes traitant les tableaux à une dimension: Rechercher une valeur dans un tableau si tableau ordonné alors recherche dichotomique si tableau non ordonné alors recherche séquentielle TABLEAUX ALGORITHMES 29
  • 30. Parmi les algorithmes traitant les tableaux à une dimension: La recherche d’une valeur L’insertion d’une valeur La suppression (logique ou physique) d’une valeur Le remplacement d’une valeur par une autre (la modification) L’interclassement de deux tableaux ordonnés. L’union et l’intersection de deux tableaux. Le tri d’un tableau: tri par sélection, tri par Bulles, tri par insertion, tri par fusion, tri rapide, ….. TABLEAUX ALGORITHMES 30
  • 31. Un tableau multidimensionnel est considéré comme étant un tableau dont les éléments sont eux mêmes des tableaux. Il se définit de la manière suivante : Type Type_tableau = TABLEAU [N1, N2, ....., Nd] DE type_des_éléments, et Nom_du_tableau : Type_Tableau, ou Nom_du_tableau: TABLEAU [N1, N2, ....., Nd] DE type_des_éléments d est la dimension du tableau et Ni désigne le nombre d’éléments dans chaque dimension. Le nombre de dimensions n'est pas limité . TABLEAUX MULTIDIMENSIONNELS 31
  • 32. L'accès à un élément du tableau se fera par l'expression Nom_du_tableau[i1][i2] …[id] ou Nom_du_tableau[i1, i2, …, id] . Exemple: un tableau d'entiers positifs à deux dimensions (3 lignes, 4 colonnes) se définira avec la syntaxe suivante : Tab : tableau[0..2, 0..3] d’entier Le rangement en mémoire centrale du tableau se fait ligne par ligne. TABLEAUX MULTIDIMENSIONNELS 32 Représentation du tableau Tab[0,0] Tab[0,1] Tab[0,2] Tab[0,3] Tab[1,0] Tab[1,1] Tab[1,2] Tab[1,3] Tab[2,0] Tab[2,1] Tab[2,2] Tab[2,3]
  • 33. PLAN DU CHAPITRE I Généralités sur l’Algorithmique Algorithmique et Programmation Qualités d’un Bon Algorithme Langage Algorithmique utilisé Tableaux Langage C Pointeurs 33
  • 34. Le langage C est né au début des années 1970 dans les laboratoires AT&T aux Etats-Unis dans le but d’améliorer le langage existant « B ». C’est un langage de bas niveau dans le sens où il permet l’accès aux données (bits, octets, adresses) que manipulent les machines et qui ne sont pas souvent disponibles à partir de langages évolués tels que Fortran, Pascal ou ADA Il a été conçu pour l’écriture de systèmes d’exploitation et du logiciel de base; Plus de 90% du noyau du système UNIX est écrit en langage C. LANGAGE C PRÉSENTATION 34
  • 35. Sa popularité : Il possède une communauté très importante et de nombreux tutoriels et documentations. De plus, il existe beaucoup de programmes et de bibliothèques développés en C. Sa rapidité : ce qui en fait un langage de choix pour tout programme où le temps de réponse (exécution) est crucial. Sa légèreté : ce qui le rend utile pour les programmes embarqués où la mémoire disponible est faible. Sa portabilité : un programme développé en C marche théoriquement sur n’importe quelle plateforme (Windows, Linus, Unix, Mac, …) LANGAGE C POURQUOI L’APPRENDRE? 35
  • 36. C est un langage qui possède des règles. Ces règles ont été définies par des informaticiens professionnels et sont toutes regroupées dans ce que l’on appelle la norme du langage. Cette norme sert de référence à tous les programmeurs. Il existe plusieurs normes : l’ANSI en 1989 (C89 ), l’ISO en 1990 (C90), le C99 et le C11. Dans ce cours, nous allons nous servir de la norme utilisé C89 (http://flash-gordon.me.uk/ansi.c.txt). En effet, même si c’est la plus ancienne et qu’elle semble restrictive à certains, elle permet néanmoins de développer avec n’importe quel compilateur sans problème, contrairement aux normes C99 et C11. De plus, il est très facile ensuite de passer aux normes plus récentes. LANGAGE C NORME 36
  • 37. Le strict minimum pour programmer en C se résume en trois points: Un éditeur de texte: pour écrire le code source. Un compilateur: pour transformer le code en un fichier exécutable compréhensible par le processeur. Un débogueur: fondamentalement, il n’est pas indispensable, mais il est très utile pour chasser les bugs et vérifier le comportement de son programme. LANGAGE C OUTILS 37
  • 38. Il existe deux moyens de récupérer tous ces logiciels : On les prend séparément, et dans ce cas il faut compiler par soi-même via l’invite de commande, On utilise un environnement ou logiciel qui intègre les trois logiciels: un Environnement de Développement Intégré (EDI) ou Integrated Development Environment (IDE). De nombreux IDE sont disponibles pour Windows: Code::Blocks, Dev-C++, Visual C++,..... Dans les TPs, nous allons nous servir du Code::Blocks (http://www.codeblocks.org/downloads/binaries) LANGAGE C OUTILS 38
  • 39. 39 LANGAGE C (STRUCTURE) Langage algorithmique Langage CProgrammeprincipale Algorithme Principal Déclarations Début …actions… Fin // directives // déclaration des variables globales // prototype des fonctions int main () { // déclarations des variables locales // instructions return 0 ; } Fonction Fonction id (décl. param.) : type Déclarations Début …actions… retourner expr Fin type id (décl.param.) { // déclarations // instructions return expr ; } Procédure Procédure id (décl. param.) Déclarations Début …actions… Fin void id (décl. param.) { // déclarations // instructions }
  • 40. 40 LANGAGE C TYPE DE DONNÉES Type de données Signification Nbr Octets Plage de valeurs acceptées char Caractère 1 - 128 à 127 unsigned char Caractère non signé 1 0 à 255 short int Entier court 2 -32 768 à 32 767 unsigned short int Entier court non signé 2 0 à 65 535 int Entier 2 4 -32 768 à 32 767 -2 147 483 648 à 2 147 483 647 unsigned int Entier non signé 2 4 0 à 65 535 0 à 4 294 967 295 long int Entier long 4 -2 147 483 648 à 2 147 483 647 unsigned long int Entier long non signé 4 0 à 4 294 967 295 float Flottant ou réel 4 3,4 x 10−38 à 3,4 x 1038 env. double Flottant double 8 1,7 x10 −308 à 1,7 x10 308 env. long double Flottant double long 10 3, 4 x10−4932 à 3, 4 x104932 env.
  • 41. 41 LANGAGE C (DÉCLARATION) Déclaration Langage Algorithmique Langage C Variable var id : type type id ; Constante Const ID : type ←expr #define ID (expr) const type ID = expr; Tableau statique T: tableau [N] de type type T [N] ; Chaine de caractères Ch: chaine [M] Char ch[M]; Pointeur Ptr: *type type* ptr; Enregistrement structure id déclaration des champs finStructure struct id { déclaration des champs } ;
  • 42. 42 LANGAGE C OPÉRATEURS Langage Algorithmique Langage C Affectation id_var ←expr id_var = expr ; Arithmétiques +, -, *, /, %(modulo) , ++, - - +, -, *, /, %, ++, - - Affectation composée exp1 = exp1 op exp2 exp1 op= exp2 += , -= , *= , /= , %= Logiques et, ou, non &&, ||, ! Comparaison =, ≠, <, ≤, >, ≥ ==, !=, <, <=, >, >= Affectation conditionnel ternaire Si exp1 alors exp2 Sinon exp3 exp1 ? exp2 : exp3
  • 43. 43 LANGAGE C STRUCTURES DE CONTRÔLE CONDITIONNELLES Langage algorithmique Langage C Si condition alors Dsi … Fsi if (condition) { … ; } Si condition alors Dsi … Fsi Sinon Dsinon … Fsinon if (condition) { … ; } else { … ; } Selon expr cas val1 : … . . cas valN : … cas sinon : … finSelon switch (expr) { case val1 : … ; break ; . . case valN : … ; break ; default : …; }
  • 44. 44 LANGAGE C STRUCTURES DE CONTRÔLE ITÉRATIVES Langage algorithmique Langage C Pour i ← x a y pas de n faire DPour …actions.. Fpour for(v=x ;v<=y ;v=v+n) { …actions…..; } Tantque condition DTQ …actions… FTQ while (condition) { …instructions… ; } repeter …actions… Jusqu’à condition do { …instructions… ; } while (non condition);
  • 45. 45 LANGAGE C L’OPÉRATEUR SIZEOF L’opérateur sizeof permet de calculer la taille correspondant à un type. sizeof (descripteur-de-type) représente la taille (exprimée en octet) qu’occuperait en mémoire un objet possédant le type indiqué sizeof exp représente la taille qu’occuperait en mémoire un objet possédant le même type que exp. sizeof t ou sizeof t[0] où t est un tableau de taille n. Cette formule exprime le nombre d’octets (n * sizeof(t) ) qu’occuperait le tableau.
  • 46. 46 LANGAGE C FONCTIONS D’ENTRÉES-SORTIES L’entête <stdio.h> (abréviation de standard in-out) fournit trois flux que l’on peut utiliser directement : stdin, l’entrée standard qui envoie au programme les données issues du clavier, e.g: scanf (format, &var1, &var2,..., &varn) stdout, la sortie standard qui envoie les données que le programme génère à l’écran, e.g. printf (format, exp1, exp2, ... expn) stderr, la sortie standard des erreurs qui seront affichées sur l’écran.
  • 47. LANGAGE C FONCTIONS D’ENTRÉES-SORTIES 47 Déclaration lecture écriture format externe int i; scanf("%d",&i); printf("%d",i); décimal int i; scanf("%o",&i); printf("%o",i); octal int i; scanf("%x",&i); printf("%x",i); hexadécimal unsigned int i; scanf("%u",&i); printf("%u",i); décimal short j; scanf("%hd",&j); printf("%d",j); décimal short j; scanf("%ho",&j); printf("%o",j); octal short j; scanf("%hx",&j); printf("%x",j); hexadécimal unsigned short j; scanf("%hu",&j); printf("%u",j); décimal long k; scanf("%ld",&k); printf("%d",k); décimal long k; scanf("%lo",&k); printf("%o",k); octal long k; scanf("%lx",&k); printf("%x",k); hexadécimal unsigned long k; scanf("%lu",&k); printf("%u",k); décimal
  • 48. LANGAGE C FONCTIONS D’ENTRÉES-SORTIES 48 Déclaration lecture écriture format externe float l; scanf("%f",&l); printf("%f",l); point décimal float l; scanf("%e",&l); printf("%e",l); exponentielle float l; printf("%g",l); la plus courte des deux double m; scanf("%lf",&m); printf("%f",m); point décimal double m; scanf("%le"&m); printf("%e",m); exponentielle double m; printf("%g",m); la plus courte long double n; scanf("%Lf"&n); printf("%Lf",n); point décimal long double n; scanf("%Le"&n); printf("%Le",n); exponentielle long double n; printf("%Lg",n); la plus courte char o; scanf("%c",&o); printf("%c",o); caractère char p[10]; scanf("%s",p); printf("%s",p); chaîne de caractères scanf("%s",&p[0]);
  • 49. PLAN DU CHAPITRE I Généralités sur l’Algorithmique Algorithmique et Programmation Qualités d’un Bon Algorithme Langage Algorithmique utilisé Tableaux Langage C Pointeurs 49
  • 50. Une variable est destinée à contenir une valeur du type avec lequel elle est déclarée. Physiquement, cette valeur se situe en mémoire. Exemple: x: entier; x ←10; POINTEURS VERSUS VARIABLES 50
  • 51. Un pointeur est une variable destinée à contenir une adresse mémoire, c.-à-d. une valeur identifiant un emplacement en mémoire. Pour différencier un pointeur d'une variable ordinaire, on fait précéder son nom de l’opérateur unaire d’indirection « * » lors de sa déclaration. Tout pointeur est associé à un type d’objet. Ce type est celui des objets qui sont manipulables grâce au pointeur. Les opérations les plus simples sur un pointeur sont les suivantes : affectation d’une adresse au pointeur ; utilisation du pointeur pour accéder à l’objet dont il contient l’adresse. POINTEURS DÉFINITIONS ET OPÉRATIONS 51
  • 52. Exemple: x: entier; x ←10; px: * entier; px ← &x; // affectation d’une adresse au pointeur ; *px ← 20 POINTEURS DÉFINITIONS ET OPÉRATIONS 52 20
  • 53. La déclaration de variables réserve de l'espace en mémoire pour ces variables pour toute la durée de vie du programme c’est ce qu’on appelle l’allocation statique. Elle impose par ailleurs de connaître avant le début de l'exécution l'espace nécessaire au stockage de ces variables, en particulier la dimension des tableaux. Or dans de nombreuses applications, le nombre d'éléments d'un tableau peut varier d'une exécution du programme à l'autre d’où l’allocation dynamique. POINTEURS ALLOCATION DYNAMIQUE DU MÉMOIRE 53
  • 54. Pour ce faire, on utilise des pointeurs. Quand on fait une allocation dynamique de mémoire, on obtient en retour un pointeur sur la zone mémoire allouée. POINTEURS ALLOCATION DYNAMIQUE DU MÉMOIRE 54 Algorithmique Langage C Rôle ptr: *type TAB Nil type * ptr = NULL; Déclare un pointeur ptr←(*type) allouer() ptr =(type *) malloc(sizeof(type)); Retourner un pointeur pointant vers un objet de type type. liberer(ptr) free(ptr); Libérer l’espace mémoire alloué à un pointeur « ptr ». Les fonctions de langage C sont disponibles dans la bibliothèque <stdlib.h>
  • 55. Par défaut, le tableau est de grandeur statique, i.e. qu’il est impossible de les changer de taille après la compilation. Il est cependant possible de changer la taille après la compilation. C’est ce qu’on appelle les tableaux dynamiques. Pour faire des tableaux dynamiques, il faut réserver un espace mémoire d’une taille donnée puis d’assigner un pointeur à cet espace mémoire. POINTEURS & LES TABLEAUX 55
  • 56. POINTEURS & LES TABLEAUX 56 Algorithmique Langage C Rôle TAB: *type TAB Nil type * TAB = NULL; Déclarer un tableau TAB←(*type) allouerTab(N) TAB =(type *) malloc(N* sizeof(type)) Allouer une plage mémoire à un tableau de N éléments de type « type», TAB = (type *) calloc(N, sizeof(type)); Allouer une plage mémoire à un tableau de N éléments de type « type » dont les valeurs sont initialisées à zéro liberer(TAB) free(TAB); Libérer l’espace mémoire alloué à un pointeur « ptr ». Ces fonctions sont disponibles dans la bibliothèque <stdlib.h>
  • 57. Une autre utilité des pointeurs dans le langage C est de permettre le passage par variable des paramètres dans les procédures Exemple: POINTEURS & LE PASSAGE PAR VARIABLE 57 Algorithmique Langage C Procedure permuter (Var x, y: entier) Var Tmp; entier; Debut Tmp ← x; x ← y; y ← tmp; Fin void permuter(int *ptrx, *ptry) { int Tmp; Tmp = *ptrx; *ptrx = *ptry; *ptry = tmp; } Appel: x 5; y 80; permuter (x, y) Appel: x=5; y=80; permuter (&x, &y)
  • 58. On a souvent de modèles de structure dont un des membres est un pointeur vers une structure de même modèle. On parle de l’autoréférence Cette représentation permet de construire des listes chaînées et des arbres. POINTEURS & AUTORÉFÉRENCE 58 Algorithmique Langage C Listes chainées maillon: structure { val: entier; suiv: * maillon; }; struct maillon { char nom[30]; struct maillon *suiv; };
  • 59. SOURCES DE CE COURS 59 N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole nationale Supérieure d’Informatique (ESI), 2010. Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale Supérieure d’Informatique (ESI), Disponible sur http://zegour.esi.dz/Cours/Cours_sdd.htm M. Le Gonidec, Introduction à la Programmation – Pratique du Langage C –, Université du Sud, disponible sur http://legonidec.univ-tln.fr/0-Cours.pdf Maude Manouvrier, Initiation à la Programmation Procédurale, à L'algorithmique Et aux structures de Données par le Langage C, Université Paris Dauphine, 2015, disponible sur http://www.lamsade.dauphine.fr/~manouvri/C/Polys_C_MM.pdf Christian Bac, Support de Cours de Langage C; 2013; Disponible sur http://picolibre.int-evry.fr/projects/svn/coursc/Index.pdf