Vous êtes sur la page 1sur 70

Algorithmique

O U M A R Y. M A I G A
FST 2022_2023
Plan
2

 Introduction aux algorithmes


 Les variables et constantes
 Les structures conditionnelles
 Les boucles
 Structures de données: Tableaux
 Les fonctions
Définition d’un algorithme
3

 Définition 1: un algorithme est une suite (séquence) d’instructions


ordonnées pour résoudre un problème.
 Définition 2: un algorithme est une suite (séquence) d’instructions
ordonnées, qui transforment des données en entrée en des données
de sortie représentant la solution à un problème donné.
 Définition 3: procédure de calcul bien définie qui prend en entrée
une valeur, ou un ensemble de valeurs, et qui donne en sortie une
valeur, ou un ensemble de valeurs. Un algorithme est donc une
séquence d’étapes de calcul qui transforment l’entrée en sortie.
 Remarque
 Pas d’algorithme sans un problème
 Un algorithme est traduit en un programme pour l’exécuter sur un ordinateur.
Résolution de problèmes
4

 Plusieurs étapes pour résoudre un


problème
 Problème (Analyser et étudier le
problème à résoudre)
 Modèle (spécifier le modèle de
résolution et les formules
mathématiques)
 Algorithme (écrire l’algorithme)
 Programme (traduire l’algorithme en
programme)
 Résultats (exécuter le programme pour
obtenir des résultats)
 Exemple de problèmes
 Multiplication de nombres entiers
 Résolution d’équations du second
degré
Exemples d’algorithmes
5
 Chemin dans un graphe : le GPS, le téléphone IP,
problème d’acheminement (la Poste)
 Flots : affectations, emploi du temps, bagages
(aéroport), portes d’embarquement
 Scheduling (ordonnancement) fabrication de matériel
dans les usines, construction automobiles
 Compression/Décompression : MP3, xvid, divx, h264
codecs audio et vidéo, tar, zip.
 Cryptage : RSA (achat électronique)
 Internet : Routage des informations, moteurs de
recherche
 Traitement d’images (médecine) , effets spéciaux
(cinéma)
Algorithmes
6

 Les programmes deviennent gros


 On ne peut plus programmer et penser n’importe
comment
Algorithmique
7

 Remonte à l’Antiquité (Euclide : calcul du pgcd de deux


nombres, Archimède : calcul d’une approximation de π)
 Le mot algorithme vient du mathématicien arabe du 9ème
siècle Al Khou Warismi
 L’algorithmique est fondamentale en informatique. Elle
intervient dans
 Le software (logiciel)
 Le hardware : un processeur est un câblage d’algorithmes
fréquemment utilisés (multiplication …)
Algorithmique
8

 L’algorithmique est un domaine de l’informatique qui étudie la


conception et l’analyse des algorithmes. Elle s’intéresse à l’art de
construire des algorithmes ainsi qu’à caractériser leur validité, leur
robustesse, leur réutilisabilité, leur complexité ou leur efficacité.
Une bonne connaissance de l’algorithmique permet d’écrire des
algorithmes exacts et efficaces.
 Validité d’un algorithme est son aptitude à réaliser exactement la tâche pour
laquelle il a été conçu.
 Robustesse d’un algorithme est son aptitude à se protéger de conditions
anormales d’utilisation.
 Réutilisabilité d’un algorithme est son aptitude à être réutilisé pour résoudre des
tâches équivalentes à celle pour laquelle il a été conçu.
 Complexité d’un algorithme est le nombre d’instructions élémentaires à
exécuter pour réaliser la tâche pour laquelle il a été conçu.
 Efficacité d’un algorithme est son aptitude à utiliser de manière optimale les
ressources du matériel qui l’exécute.
Algorithme
9
 Un algorithme prend en entrée des données et fournit un
résultat permettant de donner la réponse à un problème
 Un algorithme est une série d’opérations à effectuer :
 Opérations exécutées en séquence ⇒ algorithme séquentiel.

 Opérations exécutées en parallèle ⇒ algorithme parallèle.

 Opérations exécutées sur un réseau de processeurs ⇒


algorithme réparti ou distribué.
 Mise en œuvre de l’algorithme
 implémentation (plus général que le codage)

 écriture de ces opérations dans un langage de


programmation. Donne un programme.
Algorithme versus programme
10

 Un programme implémente un algorithme


 Thèse de Turing-Church : les problèmes ayant une
solution algorithmique sont ceux solvables par une
machine de Turing (théorie de la calculabilité)
 On ne peut pas résoudre tous les problèmes avec des
algorithmes (indécidabilité)
 Problème de la halte
 Savoir de façon indépendante si un algorithme est juste
 Garantir la paix dans le monde
Comparaison d’algorithmes
11

 Tous les algorithmes ne sont pas équivalents. On les


différencie selon 2 critères
 Temps de calcul : lents vs rapides
 Mémoire utilisée : peu vs beaucoup
 On parle de complexité en temps (vitesse) ou en espace
(mémoire utilisée)
Structure d’un algorithme
12


Structure de données
13

 Langages : variables, boucle, incrémentation etc. . .


 Regroupement : structures de données et types abstraits
Variables
14

 Une variable sert à mémoriser de l’information. Un


programme a besoin de stocker provisoirement des
valeurs. Ces valeurs peuvent être de plusieurs types : elles
peuvent être des nombres, du texte, etc. Dès que l’on a
besoin de stocker une information dans un programme,
on utilise une variable.
 Ce qui est mis dans une variable est en fait mis dans une
partie de la mémoire
Type de données
15

 Un type de données, ou simplement type, définit le genre de


contenu d'une donnée et les opérations pouvant être effectuées sur
la variable correspondante.
 Par exemple:
 int représente un entier, on peut faire des additions, des
multiplications. La division est entière et on peut faire des
décalages de bits …
 Date représente une date, l’addition aura un certain sens, on
pourra écrire la date sous certaines formes (jj/mm/aaaa ou « 10
Septembre 2009 »)
 Les types les plus communs sont :
 int, float, double, char, boolean et le type pointeur

 Entier, réel, chaîne, caractère, booléen, pointeur


Identificateurs de Variables
16

 Chaque variable ou constante utilisée dans l’algorithme est


désigné par un nom unique appelé IDENTIFICATEUR.
 L’identificateur est une chaîne de caractères alphanumériques
(contenant uniquement des lettres [a-z, A-Z] et des chiffres [0-9]
et le caractère « _ » et qui ne commence pas par un chiffre)
 Deux variables ou constantes ne doivent pas avoir le même
identificateur
 Habituellement, les constantes sont identifiés par des chaînes de
caractères en MAJUSCULE.
Exemple d’algorithme
17

Problème: calculer le carré d’un nombre fournit par un


utilisateur
Solution:
Algorithme Carré
Variables
Entier nb, carréNb;
Debut
Ecrire (« Donner un nombre à élever au carré »);
Lire(nb);
carréNb←nb*nb;
Ecrire (« le carré de votre nombre est : »+carréNb);
Fin
Exemple d’algorithme
18

 Problème: calculer la surface d’un rectangle


Solution:
Algorithme SurfaceRectangle
Variables
Entier longueur, largeur, surface;
Debut
Ecrire (« Donner la longueur du rectangle »);
Lire(longueur);
Ecrire (« Donner la largeur du rectangle »);
Lire(largeur);
surface← longueur ∗ largeur;
Ecrire (« la surface du rectangle est : »+ surface);
Fin
Structure de données
19

 Une structure de données est une manière particulière de


stocker et d’organiser des données dans un ordinateur de
façon à pouvoir être utilisées efficacement.
 Différents types de structures de données existent pour
répondre à des problèmes très précis :
 B-arbres dans les bases de données
 Table de hash par les compilateurs pour retrouver les identificateurs.
Type abstrait de données
20
 Un type abstrait ou une structure de données abstraite est une
spécification mathématique d'un ensemble de données et de
l'ensemble des opérations qu'elles peuvent effectuer. On qualifie
d'abstrait ce type de données car il correspond à un cahier des
charges qu’une structure de données doit ensuite implémenter.
 Par exemple : le type abstrait de pile sera défini par 2 opérations :
 Push qui insère un élément dans la structure

 Pop qui extrait les éléments de la structure, avec la contrainte


que pop retourne l’élément qui a été empilé le plus récemment
et qui n’a pas encore été dépilé
 Les types abstraits sont des entités purement théoriques utilisés
principalement pour simplifier la description des algorithmes
Structures de données et type abstrait
21

 Quand la nature des données n’a pas d’influence sur les


opérations à effectuer, on parle alors de type abstrait
générique et on fait la confusion avec les structures de
données.
 Dans ce cours, on considérera que les structures de
données sont indépendantes du type des données et
qu’elles sont définies par l’ensemble des opérations
qu’elles effectuent sur ces données
22

 Permettent de gérer et d’organiser des données


 Sont définies à partir d’un ensemble d’opérations qu’elles
peuvent effectuer sur les données
Pseudo langage
23

 Tous les pseudo langages recouvrent les mêmes concepts


 Variables, affectation
 Structures de contrôle : séquence, conditionnelle, itération
 Découpage de l’algorithme en sous-programmes
(fonctions, procédures).
 Structures de données simples ou élaborées (tableaux,
listes, dictionnaires, etc.)
Pseudo langage : variables, affectation
24

 Les variables sont indiquées avec leur type : booléen b,


entier n, réel x, caractère c, chaîne s, etc.
 On est souple du moment qu’il n’y a pas d’ambiguïté
 Le signe de l’affectation n’est pas « = », ni « := »
 (comme en Pascal) mais «  » qui illustre bien la réalité
de l’affectation (« mettre dedans »)
Pseudo langage : structures de données
25

 Les tableaux sont utilisés. Si A est un tableau, A[i] est le


ième élément du tableau
 Les structures sont utilisées. Si P est une structure
modélisant un point et x un champ de cette structure
représentant l’abscisse du point, P.x est l’abscisse de P
 Remarque : une structure est une classe sans les
méthodes
Pseudo langage :
le séquencement des instructions
26

 Les instructions simples sont séquencés par « ; » (si


besoin)
 Les blocs d’instructions sont entourés par
 {…}
 début … fin
Expressions Booléennes
27

 Généralement, on a besoin de tester des conditions avant de


réaliser certaines instructions. Ces conditions sont définies
par des expressions booléennes qui peuvent êtres vraies ou
fausses
 On peut déclarer des variables de type Booléen qui ne peuvent
prendre que deux valeurs: vrai , faux
 Booléen possible;
 Booléen existe;
 existe←vrai;
 Une expression booléenne peut être réduite à une variable
booléenne
 Une expression booléenne peut être construite à partir des
entiers et des réels avec des opérateurs: <, ≤, >, ≥, =
 50 ≤ 100 est une expression booléenne dont la valeur est vraie
 x ≤150 est une expression vraie si x=100;
Expressions Booléennes
28

 Une expression booléenne peut aussi être construite à


partir d’autres expressions booléennes et des opérateurs:
non, et, ou
 Table de vérité

A B A et B A ou B Non A
vrai vrai vrai vrai faux
vrai faux faux vrai faux
faux vrai faux vrai vrai
faux faux faux faux vrai
Pseudo langage : la conditionnelle
29

 La conditionnelle est donnée par :


si (condition) {
instruction1;
} sinon {
instruction2;
}
Les Structures Conditionelles: Si
30

Si (test) { Si (test) {
… …
} } Sinon {

}
Test
(i==5) booléen b1 =true;
(i!=5) booléen b2 = !b1;
Pseudo langage : le choix multiple
31

 Le choix multiple a la syntaxe suivante:


Selon que (variable) {
valeur1: instructions;
valeur2: instructions;
…………………….
valeur n:instructions;
défaut: instructions
}
Remarque: la variable doit être dénombrable !
Boucles conditionnelles (les itérations)
32

 Nous utilisons plusieurs types de boucles :


 tant que (condition) { … }
 faire { … } tant que (condition)
 répéter {…} jusqu’à (condition)
 pour i de min à max { … }
Exemple: Boucle Pour
33
Problème: Écrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers
jusqu'à ce nombre
Algorithme Somme ;
Variables
Entier N, i, som;
Début
Ecrire ("Entrez un nombre :");
Lire(N);
som ←0;
Pour (i de 1 à N) {
som← som+i;
}
Ecrire("La somme est:" + som);
Fin
Exemple: Boucle tant que
34
Problème: Écrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu'à ce nombre
Algorithme Somme ;
Variables
Entier N, i, som;
Début
Ecrire ("Entrez un nombre :");
Lire(N);
som ←0;
i←1;

Tant que (i ≤N) {


som← som+i;
i ←i+1;

}
Ecrire("La somme est:" + som);
Fin
Comparaison: « pour » et « tant que »
35

 • Implicitement, l’instruction pour:


 initialise un compteur
 incrémente le compteur à chaque pas
 vérifie que le compteur ne dépasse pas la borne supérieure
 Explicitement, l’instruction tant que doit
 initialiser un compteur
 incrémenter le compteur à chaque pas
 vérifier que le compteur ne dépasse pas la borne supérieure
 Remarque :
 La boucle « pour » est généralement utilisée lorsque le nombre
d’itération connu à l’avance (exemple: parcours d’un tableau)
 La boucle « tant que » est utilisée lorsque l’itération s’arrête sur
événement particulier définie par une condition
Comparaison: « faire…tant que » et « tant que »
36

 boucle tant que


 condition vérifiée avant chaque exécution du traitement

 le traitement peut donc ne pas être exécuté

 boucle faire … tant que


 condition vérifiée après chaque exécution du traitement

 le traitement est exécuté au moins une fois

 Remarque: la boucle « faire … tant que » est typique


pour les saisies avec vérification (par exemple saisir
un nombre positif, si le nombre saisi par l’utilisateur
est négatif, on reprend).
Boucles conditionnelles
37

pour (i de 0 à 10) i← 𝒊 + 𝟏;

i← 𝟎;
Tant que (i!=10) { Accolades facultatives
i← 𝒊 + 𝟏; s'il n’y a qu'une instruction
}

i← 𝟎;
faire {
i← 𝒊 + 𝟏;
} tant que (i!=10);
Pseudo langage : les fonctions
38

 Une fonction est un « petit » programme qui renvoie une


valeur
 Elles permettent un découpage de l’algorithme qui rend sa
compréhension et son développement plus facile
Pseudo langage : les fonctions
39
 Une fonction a une liste de paramètres typés et un type de retour (son
prototype)
 Devant chaque paramètre, la manière dont le paramètre est passé est
mentionné.
 Passage de paramètre : un paramètre est soit
 En Entrée : la donnée est fournie du code appelant au code appelé,
autrement dit on passe la valeur à la fonction. On précède le paramètre
par e ou i (entrée ou input)
 En Sortie : la donnée est fournie par le code appelé au code appelant,
autrement dit la fonction passe cette valeur au code appelant. On précède
le paramètre par s ou o (sortie ou output)
 En Entrée/Sortie : la donnée est fournie par le code appelé à la fonction
(on passe la valeur à la fonction) qui ensuite fournit à son tour la valeur
au code appelant (la fonction passe à nouveau la valeur). On précède le
paramètre par es ou io (entrée/sortie ou input/output)
Pseudo langage : les fonctions
40
 maFonction (e int i, s int j, es int k);
 En Entrée : la fonction lit la valeur du paramètre, ici i. Les modifications
qu’elle fera avec i ne seront pas transmises au programme appelant
 En Sortie : la fonction ne lit pas la valeur du paramètre, ici j. Elle écrit
dans j et le programme appelant récupère cette valeur, donc j peut être
modifié par la fonction
 En Entrée/Sortie : la fonction lit la valeur du paramètre, ici k. et elle
passe au programme appelant les modifications faites pour k
 En l’absence de précision, on considérera que le paramètre est
passé en entrée.
 Le passage en entrée/sortie est souvent appelé passage par
référence ou par variable
Pseudo-langage : les fonctions
41

 Code appelant :
i 3
j 5
k 8
maFonction(i,j,k);
Afficher(i,j,k)
 maFonction(e int i, s int j, es int k) {
i i + 1
j 6
k k + 2
}
 Résultat de Afficher(i,j,k) : 4 6 10
Pseudo-langage : les fonctions
42

 Le passage de paramètre en e/s est aussi souvent appelé


passage par référence.
 Certains langages vont donner ou non la possibilité de
définir le mode de passage que l’on souhaite
 Java :
 types de base (int, float, double, …) sont passés uniquement en entrée
(i.e. par valeur)
 Les objets, ou plus précisément les références, sont passés uniquement
en e/s (i.e. par référence)
Fonctions/Procédures
43

 il peut en effet arriver que dans un programme, on ait à réaliser des


tâches répétitives, mais que ces tâches n'aient pas pour rôle de
générer une valeur particulière, ou qu'elles aient pour rôle d'en
générer plus d'une à la fois.
 Dans le code appelant, la valeur (retournée) d'une fonction était
toujours affectée à une variable (ou intégrée dans le calcul d'une
expression). L'appel à une procédure, lui, est toujours une
instruction autonome.
 Toute fonction devait, pour cette raison, comporter l'instruction «
Renvoyer ». Pour la même raison, l'instruction « Renvoyer » n'est
jamais utilisée dans une sous-procédure. La fonction est une valeur
calculée, qui renvoie son résultat vers la procédure principale. La
sous-procédure, elle, est un traitement. C'est aussi pourquoi la
déclaration de la fonction spécifiait le type de la valeur retournée,
tandis que la déclaration de la sous-procédure ne spécifie pas le type
de retour.
Fonctions récursives / La récurrence
44

 la récurrence ("induction") est un outil mathématique et


informatique essentiel
 Définition de suites par récurrence
 Démonstration par récurrence
 La récursivité est une notion très utilisée en
programmation, et qui permet l'expression d'algorithmes
concis, faciles à écrire et à comprendre.
 La récursivité peut toujours être remplacée par son
équivalent sous forme d'itérations mais au détriment
d'algorithmes plus complexes
Définition
45

 Un algorithme (fonction, procédure) est dite récursif


lorsqu'il s'appelle lui-même, c.-à-d., sa définition (son
code) contient un appel à lui-même.
 Un algorithme qui n'est pas récursif est dit itératif.
Structure d’un algorithme récursif
46

Algorithme P
………………
début
si (fin()) {
::::
//pas d'appel récursif
}
sinon {
:::
P(:::) //l'algorithme P appelle lui-même une
::: //ou plusieurs fois
}

Fin
Exemples
47
Calcul de la factorielle d'un nombre.
Définition itérative :
n! = F(n) = n * (n - 1) * (n -2) * ::: * 2 * 1
Version itérative
48

Algorithme Factorielle
Variables
Entier N, i, F;
Début
Ecrire ("Entrez un nombre :") ;
Lire(N);
F←1;
Pour (i de 2 à N) {
F←F*i;
}
Ecrire ("La factorielle est :" + F) ;
Fin
Version récursive
49

Définition récursive :
F(0) = 1
F(n) = n *F(n -1)
Entier Factorielle (entier n) {
si (n == 0) retourner 1;
sinon retourner factorielle(n-1)*n;
}
Appel à fact(4)
. 4*fact(3) = ?
. Appel à fact(3) 50
. . 3*fact(2) = ?
. . Appel à fact(2)
. . . 2*fact(1) = ?
. . . Appel à fact(1)
. . . . 1*fact(0) = ?
. . . . Appel à fact(0)
. . . . Retour de la valeur 1
. . . . 1*1
. . . Retour de la valeur 1
. . . 2*1
. . Retour de la valeur 2
. . 3*2
. Retour de la valeur 6
. 4*6
Retour de la valeur 24
Règles
51

 Tout algorithme récursif doit distinguer plusieurs cas, dont


l'un au moins ne doit pas comporter d'appel récursif.
 Les cas non récursifs d'un algorithme récursif sont appelés cas de
base.
 Les conditions que doivent satisfaire les données dans ces cas de
base sont appelées conditions de terminaison.
 Tout appel récursif doit se faire avec des données plus
proches de données satisfaisant une condition de
terminaison.
Exercices
52

 Exercice 1
 Ecrire un algorithme qui calcul le nième terme de la
suite de Fibbonacci définie par

𝐹0 = 1
ቐ 𝐹1 = 1
𝐹𝑛+2 = 𝐹𝑛+1 + 𝐹𝑛 ∀𝑛 ∈ ℕ
53

 Exercice 2

 Écrire une fonction récursive qui calcule la somme de


nombres de 1 a n, si n > 0 et renvoie 0 sinon.
 Exercice 3

 Donner un algorithme récursif pour calculer 𝑥 𝑛 , x et n


positifs non nuls.
Tableaux
54

 un tableau (array en anglais) est une Sdd de base qui est un


ensemble d’éléments, auquel on accède à travers un numéro
d’indice.
 Le temps d'accès à un élément par son indice est constant, quel
que soit l'élément désiré
 Les éléments d'un tableau sont contigus dans l'espace
mémoire. Avec l'indice, on sait donc à combien de cases
mémoire se trouve l'élément en partant du début du tableau.
 On désigne habituellement les tableaux par des lettres
majuscules. SI T est un tableau alors T[i] représente l’élément
à l’indice i.
Tableaux
55

 Avantages : accès direct au ième élément


 Inconvénients : les opérations d’insertion et de
suppression sont impossibles
 sauf si on crée un nouveau tableau, de taille plus
grande ou plus petite (selon l'opération). Il est alors
nécessaire de copier tous les éléments du tableau
original dans le nouveau
 tableau. Cela fait donc beaucoup d'opérations.
Tableaux
56

 Un tableau peut avoir une dimension, on parle alors de


vecteur
 Un tableau peut avoir plusieurs dimensions, on dit qu’il
est multidimensionnel. On le note T[i][k]
 La taille d’un tableau doit être définie avant son
utilisation et ne peut plus être changée.
 Les seules opérations possibles sont set et get (on
affecte un élément à un indice et on lit un élément à un
indice).
Exemple
57

Entier calcul (entier [] t) {


entier r ;
r←0;
pour (i de 0 à t.longueur-1 ){
r ← r + t[i] ;
}
Retourner r ;
}
Que calcule l’algorithme ?
Algorithmes simples sur les tableaux
58

 Recherche d’un élément dans un tableau


 Trier un tableau: on verra deux algorithmes de tri
simples.
 Le deuxième sera consacré aux différents
algorithmes de tri (INF1201).
Algorithmes de Tri
59
 Un algorithme de tri est un algorithme qui permet d'organiser
une collection d'objets selon une relation d'ordre déterminée.
 Les objets à trier sont des éléments d'un ensemble muni d'un
ordre total
 Tri d’un tableau d’entier

 Tri d’un tableau de chaine de caractères

 Les données sont organisées sous forme de tableau ou liste


pour permettre l’accès direct aux éléments
 Les algorithmes de tri peuvent être définis indépendamment de
l'ensemble des éléments et de la relation d’ordre associée.
 Les algorithmes de tri sont utilisés dans beaucoup de problèmes
en informatique et en mathématiques
Tri par insertion
60

 le tri par insertion est un algorithme de tri classique. Cette


méthode de tri est généralement appliqué à des tableaux
 Supposons qu’on souhaite trier D F A G B H E C
 On fait 2 paquets : 1 non trié - 1 trié
 Un paquet d’un élément est trié
 On prend un élément non trié et on le range à sa place dans le paquet
trié
 On prend D : D - F A G B H E C
 On prend F : D F - A G B H E C
 On prend A : A D F - G B H E C
 On prend G : A D F G - B H E C
 On prend B : A B D F G - H E C
Exemple
61
Tri par insertion : algorithme
62

1 n-1)

hjkk
Tri par sélection
63

 Le tri par sélection est un algorithme de tri par comparaison


 Sur un tableau de n éléments, le principe du tri par sélection
est le suivant :
 rechercher le plus petit élément du tableau, et l'échanger avec l'élément
d'indice 0 ;
 rechercher le second plus petit élément du tableau, et l'échanger avec
l'élément d'indice 1 ;
 continuer de cette façon jusqu'à ce que le tableau soit entièrement trié.
 Le tri par sélection est utilisable aussi sur des listes
 Le principe est identique, mais au lieu de déplacer les éléments par
échanges, on réalise des suppressions et insertions dans la liste
Algorithme de Tri par sélection
64

fonction triSelection(Entier[] t){


pour (i de 0 à t.longueur -1){
min ← i;
pour (j de i + 1 à t.longueur-1){
si t[j] < t[min], alors min ← j;
}
si (min != i){
temp←t[i];
t[i]←t[min];
t[min]← 𝑡𝑒𝑚𝑝;
}
}
}
Structure/Enregistrement

 Un enregistrement est un type de données défini par


l'utilisateur et qui permet de grouper un nombre fini
d'éléments (ou champs) de types éventuellement différents.
 Le type tableau nous a permis de définir une structure
composée de plusieurs éléments de même type. Mais ne
permet pas de regrouper les informations n'ayant le même
type.
 Une nouvelle structure appelée enregistrement est plus
adaptée pour représenter ce type d'information, par
exemple les informations concernant un étudiant.
Déclaration d’une structure

 Puisque l'enregistrement est un nouveau type, on commence par sa


déclaration :
identifiant_du_type = enregistrement Structure identifiant_du_type {
Type_1 champ_1; Type_1 champ_1;
Type_2 champ_2;
Type_2 champ_2;
………………
……………… Type_n champ_n;
Type_n champ_n; }
fin

 Déclaration d’une variable dont le type est une structure:


identifiant_type identifiant_variable;
Exemple
 Définition d’un couple est une structure ayant deux
champs de type entier.
couple = enregistrement Structure couple{
entier a; entier a;
entier b; entier b;
fin }

Structure Etudiant{
chaîne nom ; Couple c;
chaîne prénom; c.a ← 3;
caractère sexe; c.b ← 2;
entier age; Ecrire(c.a); (* affichera 3 *)
réel note ;
}
Fonctions utiles pour une structure
 Pour travailler sur un nouveau type , il est parfois
nécessaire de définir quelques fonctions élémentaires
pour créer une variable à partir de ses sous-valeurs

couple creerCouple(entier m, entier n){


Couple c;
c.a ← m;
c.b ← n;
renvoyer c;
}

 On peut aussi définir d’autres fonctions pour d’autres.


Type énuméré
 type JOURS = (Lundi, Mardi, Mercredi, Jeudi, Vendredi,
Samedi, Dimanche) ;
 type MOIS = (Janvier, Février, Mars, Avril, Mai, Juin,
Juillet, Aout, Septembre, Octobre, Novembre, Décembre);
 Couleur = (ROUGE, JAUNE, VERT, BLEU, VIOLET)
Références
70

 T. Cormen, C. Leiserson, R. Rivest : “Introduction à


l’algorithmique”, Dunod
 D. Knuth : “The Art of Computer Programming”
 R. Tarjan : “Data Structures and Network Algorithms”
 Kernighan, Ritchie, C Programming Language 2nd
Edition, Prentice Hall 1989

Vous aimerez peut-être aussi