SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Examen principal + Correction ASD
Examen principal + Correction ASDExamen principal + Correction ASD
Examen principal + Correction ASDInes Ouaz
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetiquemohamed_SAYARI
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmiqueelharraj
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap IInes Ouaz
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionInes Ouaz
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivitéSana Aroussi
 
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
 
Cours tic complet
Cours tic completCours tic complet
Cours tic completsofixiito
 
Algorithme & structures de données Chap III
Algorithme & structures de données Chap IIIAlgorithme & structures de données Chap III
Algorithme & structures de données Chap IIIInes Ouaz
 
Algorithme et programmation.pdf
Algorithme et programmation.pdfAlgorithme et programmation.pdf
Algorithme et programmation.pdfGhassenHaamdi
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbresMohamed Lahby
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 

Was ist angesagt? (20)

Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Examen principal + Correction ASD
Examen principal + Correction ASDExamen principal + Correction ASD
Examen principal + Correction ASD
 
Les algorithmes d'arithmetique
Les algorithmes d'arithmetiqueLes algorithmes d'arithmetique
Les algorithmes d'arithmetique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap I
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correction
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Chapitre 1 rappel
Chapitre 1   rappelChapitre 1   rappel
Chapitre 1 rappel
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
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
 
Cours tic complet
Cours tic completCours tic complet
Cours tic complet
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Algorithme & structures de données Chap III
Algorithme & structures de données Chap IIIAlgorithme & structures de données Chap III
Algorithme & structures de données Chap III
 
A star
A starA star
A star
 
Algorithme et programmation.pdf
Algorithme et programmation.pdfAlgorithme et programmation.pdf
Algorithme et programmation.pdf
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbres
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 

Ähnlich wie 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
 
Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
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
 

Ähnlich wie Chapitre 1 rappel (20)

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
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Chapitre 1 (algorithme)
Chapitre 1 (algorithme)Chapitre 1 (algorithme)
Chapitre 1 (algorithme)
 
Asd
AsdAsd
Asd
 
Ktab asd
Ktab asdKtab asd
Ktab 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++
 

Mehr von 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 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 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétudeSana 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 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesSana 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 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 iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86Sana Aroussi
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursSana Aroussi
 

Mehr von 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 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 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
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 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
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 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 iii processeur intel 80x86
Chapitre iii processeur intel 80x86Chapitre iii processeur intel 80x86
Chapitre iii processeur intel 80x86
 
Chapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeursChapitre ii architecture interne des processeurs
Chapitre ii architecture interne des processeurs
 

Kürzlich hochgeladen

JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...Institut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesInstitut de l'Elevage - Idele
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéInstitut de l'Elevage - Idele
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfSophie569778
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 

Kürzlich hochgeladen (20)

JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentes
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversité
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 

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