Pa - Chapitre 2
Pa - Chapitre 2
Pa - Chapitre 2
Programmation Avancée
Préparé par Dr O.MESSAOUDI
2022/2023
Chapitre I
Rappels
• Généralité sur l’algorithmique
• Algorithmique et Programmation
• Langage algorithmique
• Tableaux
• Pointeurs
Généralité sur l’algorithmique
Langage de Langage de
Évolution
bas niveau haut niveau
Binaire, Procédural Orienté objet
Assembleur (Pascal, C) (C++, C#, Java),
Logique (Prolog) ...
Algorithmique et Programmation
Structures de données
Tableau nom_tableau[taille]:type
Algorithmique Langage C
Algorithm exemple; int main()
Var Tableau tab[10]:entier; {
Début int tab[4] = {10, 23,505,8};
tab[0] ← 0; tab[0] = 10;
affichier(tab[0]); printf( "%d", tab[0]);
affichier(*tab); printf( "%d", *tab);
affichier(tab); printf( "%p", tab);
Fin }
Tableaux
Tableaux multidimensionnels
Un tableau multidimensionnel est considéré comme
un tableau dont les éléments sont eux mêmes des
tableaux.
0 1 2 3 4 5 6 7
x: entier ...
x
0 1 2 3 4 5 6 7
x=5 5 ...
x
Les pointeurs
…
... ...
P
14098
&X
... ...
Les pointeurs
Exemples
x:enter; x = 10; px:*enter;
59 60 61 62 63 64 93 94 95 96 97 98
x px
x px
x px
Les pointeurs
Algorithmique
• La déclaration:
𝑝𝑡𝑟:∗ 𝑡𝑦𝑝𝑒;
𝑝𝑡𝑟 ← 𝑁𝑖𝑙;
• Réserver un espace mémoire/retourner un
pointeur vers type:
𝑝𝑡𝑟 ← ∗ 𝑡𝑦𝑝𝑒 𝑎𝑙𝑙𝑜𝑢𝑒𝑟()
• Libérer:
𝐿𝑖𝑏𝑒𝑟𝑒𝑟(𝑝𝑡𝑟)
Les pointeurs
Langage C
• La déclaration:
𝑡𝑦𝑝𝑒 ∗ 𝑝𝑡𝑟 = 𝑁𝑈𝐿𝐿;
• Réserver un espace mémoire/retourner un
pointeur vers type:
𝑝𝑡𝑟 = ∗ 𝑡𝑦𝑝𝑒 𝒎𝒂𝒍𝒍𝒐𝒄 𝒔𝒊𝒛𝒆𝒐𝒇 𝑡𝑦𝑝𝑒 ;
• Libérer:
𝒇𝒓𝒆𝒆(𝑝𝑡𝑟)
Les pointeurs
• La déclaration:
𝑇𝐴𝐵:∗ 𝑡𝑦𝑝𝑒;
𝑇𝐴𝐵 ← 𝑁𝑖𝑙;
• Réserver un espace mémoire/retourner un
pointeur vers type:
𝑇𝐴𝐵 ← ∗ 𝑡𝑦𝑝𝑒 𝒂𝒍𝒍𝒐𝒖𝒆𝒓𝑻𝒂𝒃(𝑁)
• Libérer:
𝑳𝒊𝒃𝒆𝒓𝒆𝒓(𝑇𝐴𝐵)
Les pointeurs
• La déclaration:
𝑡𝑦𝑝𝑒 ∗ 𝑇𝐴𝐵 = 𝑁𝑈𝐿𝐿;
• Réserver un espace mémoire/retourner un
pointeur vers type:
𝑇𝐴𝐵 = ∗ 𝑡𝑦𝑝𝑒 𝒎𝒂𝒍𝒍𝒐𝒄 𝑵 ∗ 𝒔𝒊𝒛𝒆𝒐𝒇 𝑡𝑦𝑝𝑒 ;
𝑇𝐴𝐵 = ∗ 𝑡𝑦𝑝𝑒 𝒄𝒂𝒍𝒍𝒐𝒄 𝑵, 𝒔𝒊𝒛𝒆𝒐𝒇 𝑡𝑦𝑝𝑒 ;
• Libérer:
𝒇𝒓𝒆𝒆(𝑝𝑡𝑟)
Les pointeurs
Algorithmique Langage C
Procedure permuter(var x,y:entier) void permuter(int *px,int *py)
Var temp:entier; {
Début int temp;
temp←x; temp = *px;
x←y; *px=py;
y←temp; *py=*temp;
Fin }
x←5;y←80;permuter(x,y); x=5;y=80;permuter(&x,&y);
Les pointeurs
Algorithmique Langage C
Définition
Une liste linéaire chainée (LLC) est un ensemble de
éléments reliés entre eux.
Définition
Une LLC est caractérisée par:
• L’adresse de son premier élément (la tête de liste)
• NIL constitue l’adresse qui ne pointe aucun élément
(indiquant la fin de la liste)
• Si la liste est vide, la tète doit alors être
positionnées à NIL
Les listes
Définition
Algorithmique Langage C
type Element = Structure struct Element
val : types {
Suiv: *Element types val;
fin struct Element *suiv;
}
Var tete: *Element struct Element *tete;
Les listes
Modèle
Opération Role
Opérations (langage C)
Les listes
Parcours
• Accès par valeur: il s’agit de rechercher
(séquentiellement à partir de la tète) une valeur 𝑣
dans la liste.
• Accès par position: il s’agit de rechercher
(séquentiellement à partir la tête) l’élément (son
adresse) qui se trouve à une position donnée. La
position est le numéro d’ordre du maillon dans la
liste.
Les listes
Mise à jour
• Constructeur d’une liste à partir de 𝑛 valeurs
données.
• Insertion d’une valeur 𝒗 à une position donnée 𝒊:
allouer un nouveau élémnt contenant 𝑣 et l’insérer
dans la liste à la 𝑖 ième position.
• Insertion d’une valeur 𝒗 dans une liste ordonnée:
allouer un nouveau élément contenant 𝑣 et
l’insérer dans la liste de telle sorte que la liste reste
ordonnée.
Les listes
Mise à jour
• Suppression du maillon se trouvant à une position
donnée: rechercher par position et le libérer
• Suppression d’une valeur dans la liste: recherche
par valeur et supprimer le maillon trouvé en
metton à jour le précédent (s’il existe).
• Destruction de tous les maillons d’une liste.
Les files d’attente
Définition
• est une structure de données basée sur le
principe « premier arrivé, premier sorti »
• Le fonctionnement ressemble à une file
d’attente : les premiers personnes à arriver
sont les premiers personnes à sortir de la file
Les files d’attente
Définition
• Est une collection d’éléments dans laquelle
tout nouvel élément est inséré à la fin
(queue) et tout élément ne peut être
supprimé que du début (tête)
Les files d’attente
Utilisation
• Les buffers: gérer des objets qui sont en
attente d’un traitement ultérieur
• La gestion des documents à imprimer
• Des programmes à exécuter
• Des messages reçus
• Elle sont utilisées également dans le
parcours des arbres.
Les files d’attente
Modèle
• Les opération habituelles sur les files:
• Initialisation
• Vérification du contenu (vide ou pleine)
• Enfilement (ajout)
• Défilement (retrait)
Opération Role
Implémentation
• Les files d’attente peuvent être présentées
en deux manières:
• Statique en utilisant les tableaux
• Dynamique en utilisant les listes linéaires
chainées
Les files d’attente
Implémentation Statique
• L’implémentation statique peut être réalisée
par:
• Décalage en utilisant un tableau avec une tète fixe
toujours à 0, et une queue variable
• Tableaux circulaire où la tète et la queue sont toujours
les deux variables
• À chaque défilement, on fait un décalage
Les files d’attente
Implémentation Statique
Définition de la structure
Opération Rôle
Initfile(F) 𝐹. 𝑄𝑢𝑒𝑢𝑒 ← −1
FileVide(F) 𝑅𝑒𝑡𝑜𝑢𝑟𝑛𝑒𝑟 𝐹. 𝑄𝑢𝑒𝑢𝑒 = −1
FilePleine(F) 𝑅𝑒𝑡𝑜𝑢𝑟𝑛𝑒𝑟 𝐹. 𝑄𝑢𝑒𝑢𝑒 = 𝑀𝑎𝑥 − 1
Enfiler(F,Val) 𝑆𝑖 𝑁𝑜𝑛 𝐹𝑖𝑙𝑒𝑣𝑖𝑑𝑒 𝐹
𝐹. 𝑄𝑢𝑒𝑢𝑒 ← 𝐹. 𝑄𝑢𝑒𝑢𝑒 + 1
𝐹. 𝐸𝑙𝑒𝑚𝑒𝑛𝑡𝑠 𝐹. 𝑄𝑢𝑒𝑢𝑒 ← 𝑋
Défiler(F,Val) 𝑆𝑖 𝑁𝑜𝑛 𝐹𝑖𝑙𝑒𝑣𝑖𝑑𝑒 𝐹
𝑋 ← 𝐹. 𝐸𝑙𝑒𝑚𝑒𝑛𝑡𝑠 0
𝑃𝑜𝑢𝑟 𝐼 ← 0 à 𝐹. 𝑄𝑢𝑒𝑢𝑒 − 1
𝐹. 𝐸𝑙𝑒𝑚𝑒𝑛𝑡𝑠 𝐼 ← 𝐹. 𝐸𝑙𝑒𝑚𝑒𝑛𝑡𝑠 𝐼 + 1
𝐹. 𝑄𝑢𝑒𝑢𝑒 ← 𝐹. 𝑄𝑢𝑒𝑢𝑒 − 1
Les files d’attente
Implémentation Dynamique
• La représentation dynamique utilise une liste
linéaire chaînée.
• L’enfilement se fait à la queue de la liste.
• Le défilement se fait de la tête de la liste.
• La file d’attente peut devenir vide, mais ne sera jamais
pleine.
Les files d’attente
Implémentation Dynamique
Définition de la structure