SlideShare une entreprise Scribd logo
1
Chapitre 1
Introduction Générale
&
Concepts de Base
2
Plan
◼ TDA
◼ TD
◼ SD
◼ Pointeurs et références
3
Démarche de résolution d’un
problème
Prob.
Mise en œuvre
de l’algorithme
Formalisation
du problème
= spécification
Compréhension
du problème
Traduction en
langage
de
programmation
4
Rappel
◼ Algorithme : suite d’instructions qui
s’exécute dans un ordre séquentiel et qui
réalise un traitement
◼ Programme : algorithme traduit dans un
langage de programmation (ADA, C++,
Java, Cobol …)
5
Types de Données Abstraits
◼ Chaque TDA est caractérisé par:
◼ un nom
◼ des opérations prévues sur le type.
◼ La description fonctionnelle qui décrit les signatures des opérations
en indiquant leurs noms et leurs ensembles de départ et d’arrivée
◼ description axiomatique = sémantique
◼ Exemple:
◼ entier : +, -, / , …
◼ liste : Vider une liste, Insérer un élément dans la liste, …
◼ Un type de données abstrait est une spécification d’un TD
6
Exemple 1
7
Exemples 2
◼ estVide : {} → Booléen
◼ appartient : Elément x {} → Booléen
◼ ajouter : Elément x {} → {}
◼ enlever : Elément x {} → {}
◼ union : {} x {} → {}
◼ La description fonctionnelle pour TDA Ensemble = {}
8
Exemples 3
Axiomes de PEANO
◼  n  N ;  n’ / succ(n) = n’
◼  n, n’  N ; n  n’  succ(n)  succ(n’)
◼  n  N / succ(n) = 0
◼  n  N ; n + 0 = n
◼  n, n’  N ; n + succ(n’) = succ(n+n’)
◼  n  N ; n x 0 = 0
◼  n, n’  N ; n x succ(n’) = n + nxn’
◼ La description axiomatique pour TDA ℕ
9
Types de Données
◼ TD simple ou élémentaire ou primitif (entier, booléen,…) :
chaque variable de ce type peut prendre une seule valeur du
domaine à la fois
◼ TD composé ou structuré (ou de référence en java)
(tableau, enregistrement…): permet le stockage sous un
même nom de variable de plusieurs valeurs de même type
(exemple tableau d’entiers) ou non (exemple: type
enregistrement)
10
Création d’un type de données
Implémentation 1 Implémentation n
Implémentation 2 …
TD1 TD2
Niveau logique
Interface abstraite
Utilisateur
TDn
11
Implémentation d’un TDA
◼ Pour un même TDA plusieurs implémentations
(=implantations) sont possibles
◼ Dans les langages OO le concept de classe facilite
l’implémentation des TDA
12
Déclaration d'un TAD en C
// fichier pile.h: déclaration du Type Abstrait de Données PILE
// Modèle de la structure de données :
typedef struct {
int size;
int* base;
int* top; } PILE;
// Fonctions et macros proposées :
void init_pile(PILE* p_pile, int siz);
int push(PILE* p_pile, int val);
int pop(PILE* p_pile, int* p_val);
void del_pile(PILE* p_pile);
13
Définition des opérations permises
d'un TAD en C
// fichier pile.c
#include "pile.h"
void init_pile(PILE* p_pile, int siz) { /* code de l'implémentation*/}
int push(PILE* p_pile, int val) {/* code de l'implémentation*/} }
int pop(PILE* p_pile, int* p_val) {/* code de l'implémentation*/} }
void del_pile(PILE* p_pile) {/* code de l'implémentation*/} }
14
Définition des opérations permises
d'un TAD en C (plus précisément)
// fichier pile.c
#include "pile.h"
void init_pile(PILE* p_pile, int siz)
{ p_pile->size = siz;
p_pile->top = p_pile->base = malloc(siz * sizeof(int)); }
int push(PILE* p_pile, int val)
{ if ( p_pile->top == p_pile->base + p_pile->size ) return 0;
*p_pile->top++ = val; return 1; }
int pop(PILE* p_pile, int* p_val)
{ if ( p_pile->top == p_pile->base ) return 0; *p_val = *--p_pile->top; return 1; }
void del_pile(PILE* p_pile) { free(p_pile->base); p_pile->top = p_pile->base = 0;
p_pile->size = 0; }
15
Utilisation d’un TDA
◼ Se fait exclusivement par l’intermédiaire des
opérations qui leur sont associées et
indépendamment de son implémentation
◼ En-têtes des fonctions et procédures du TDA :
interface entre l’utilisateur et le TDA
◼ Manipulation du TDA sans connaître son
implémentation
◼ Utilisation indépendante vis-à-vis de tout
changement d’implantation
16
Utilisation d’un TDA en C
// Un programme d'essai
#include <stdio.h>
#include "pile.h"
main()
{
int i = 0;
PILE pile;
init_pile(&pile, 10);
push(&pile, 20);
pop(&pile, &i))
pile.size += 5;
del_pile(&pile);}
17
Structures de Données
TD individuels TD collectifs = SD
TD composés
TD simples
Exemple: Enregistrements Exemple: liste, tableau, pile,
file, arbres …
18
Structures de Données
◼ Les SD implémentées en utilisant des tableaux (contiguës)
sont statiques → inconvénients :
◼ Fixer le nombre maximal d’éléments dès le départ
◼ Impossibilité d’allouer de l’espace mémoire non contigu
même si cet espace est disponible mais fragmenté
◼ Allocation d’un bloc MC avec une taille initiale fixe
◼ Perte d’espace mémoire (espace occupé inutilement)
19
Solution : SD dynamiques
▪ Utilisation des pointeurs
▪ Pas de contrainte de taille initiale
▪ Pas d’allocation inutile de l’espace mémoire
▪ Indépendance de la position des cases libres de la MC
20
Pointeurs
◼ Pointeur : cellule dont la valeur réfère à une
autre cellule
◼ ^ : symbole des pointeurs
◼ Deux procédures pour la gestion des
pointeurs : Allouler et Libérer
21
Pointeurs
DefType
TypeCellule=…
DefVar
s (TypeCellule) – variable statique de type TypeCellule
p (^Type Cellule) – pointeur vers un objet de type TypeCellule
Début
…
Allouer(p)
…
Libérer(p)
…
Fin
22
Pointeurs
Procédure Allouer (Res p: ^Type Cellule)
-- Précond:
-- Postcond: p contient l’adresse d’une nouvelle cellule
allouée
Procédure Libérer (Don p: ^Type Cellule)
-- Précond:
-- Postcond: libère la cellule d’adresse p
23
Rôle des pointeurs
◼ Supposons qu'on a 1000 étudiants et un traitement donné à faire
(calcul moyenne, tri etc.):
1) traitement statique : tableau de 1000 étudiants taille complète
allouée dans la MC
2) traitement dynamique:
◼ on déclare le type étudiant
◼ on déclare un pointeur sur le type étudiant= adresse qui peut contenir 1
étudiant
◼ donc pour créer le premier étudiant il faut allouer un 1er espace puis un
2ième etc. Si on passe au 3ème étudiant et qu'on n'a plus besoin du
premier on libère l'espace donc on alloue et on libère selon notre
traitement

Contenu connexe

Similaire à Chapitre 1 TDA Démarche de résolution d’un problème.pdf

Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
ramadanmahdi
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
haythem_2015
 
algo-imsi-2.pdf
algo-imsi-2.pdfalgo-imsi-2.pdf
algo-imsi-2.pdf
Wafaa Ibrihich
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
Abdoulaye Dieng
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
frwebhelp
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
Didier Plaindoux
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
Alexandre Hamez
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
Loic Yon
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
Microsoft
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
salah fenni
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
mohamed El babili
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
Sana Aroussi
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
Asmaa BENGUEDDACH
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
Abdoulaye Dieng
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
Nanchi6
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
Sana REFAI
 
Hibernate
HibernateHibernate
Hibernate
Maher Megadmini
 

Similaire à Chapitre 1 TDA Démarche de résolution d’un problème.pdf (20)

Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
algo-imsi-2.pdf
algo-imsi-2.pdfalgo-imsi-2.pdf
algo-imsi-2.pdf
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Part1
Part1Part1
Part1
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
 
Hibernate
HibernateHibernate
Hibernate
 

Chapitre 1 TDA Démarche de résolution d’un problème.pdf

  • 2. 2 Plan ◼ TDA ◼ TD ◼ SD ◼ Pointeurs et références
  • 3. 3 Démarche de résolution d’un problème Prob. Mise en œuvre de l’algorithme Formalisation du problème = spécification Compréhension du problème Traduction en langage de programmation
  • 4. 4 Rappel ◼ Algorithme : suite d’instructions qui s’exécute dans un ordre séquentiel et qui réalise un traitement ◼ Programme : algorithme traduit dans un langage de programmation (ADA, C++, Java, Cobol …)
  • 5. 5 Types de Données Abstraits ◼ Chaque TDA est caractérisé par: ◼ un nom ◼ des opérations prévues sur le type. ◼ La description fonctionnelle qui décrit les signatures des opérations en indiquant leurs noms et leurs ensembles de départ et d’arrivée ◼ description axiomatique = sémantique ◼ Exemple: ◼ entier : +, -, / , … ◼ liste : Vider une liste, Insérer un élément dans la liste, … ◼ Un type de données abstrait est une spécification d’un TD
  • 7. 7 Exemples 2 ◼ estVide : {} → Booléen ◼ appartient : Elément x {} → Booléen ◼ ajouter : Elément x {} → {} ◼ enlever : Elément x {} → {} ◼ union : {} x {} → {} ◼ La description fonctionnelle pour TDA Ensemble = {}
  • 8. 8 Exemples 3 Axiomes de PEANO ◼  n  N ;  n’ / succ(n) = n’ ◼  n, n’  N ; n  n’  succ(n)  succ(n’) ◼  n  N / succ(n) = 0 ◼  n  N ; n + 0 = n ◼  n, n’  N ; n + succ(n’) = succ(n+n’) ◼  n  N ; n x 0 = 0 ◼  n, n’  N ; n x succ(n’) = n + nxn’ ◼ La description axiomatique pour TDA ℕ
  • 9. 9 Types de Données ◼ TD simple ou élémentaire ou primitif (entier, booléen,…) : chaque variable de ce type peut prendre une seule valeur du domaine à la fois ◼ TD composé ou structuré (ou de référence en java) (tableau, enregistrement…): permet le stockage sous un même nom de variable de plusieurs valeurs de même type (exemple tableau d’entiers) ou non (exemple: type enregistrement)
  • 10. 10 Création d’un type de données Implémentation 1 Implémentation n Implémentation 2 … TD1 TD2 Niveau logique Interface abstraite Utilisateur TDn
  • 11. 11 Implémentation d’un TDA ◼ Pour un même TDA plusieurs implémentations (=implantations) sont possibles ◼ Dans les langages OO le concept de classe facilite l’implémentation des TDA
  • 12. 12 Déclaration d'un TAD en C // fichier pile.h: déclaration du Type Abstrait de Données PILE // Modèle de la structure de données : typedef struct { int size; int* base; int* top; } PILE; // Fonctions et macros proposées : void init_pile(PILE* p_pile, int siz); int push(PILE* p_pile, int val); int pop(PILE* p_pile, int* p_val); void del_pile(PILE* p_pile);
  • 13. 13 Définition des opérations permises d'un TAD en C // fichier pile.c #include "pile.h" void init_pile(PILE* p_pile, int siz) { /* code de l'implémentation*/} int push(PILE* p_pile, int val) {/* code de l'implémentation*/} } int pop(PILE* p_pile, int* p_val) {/* code de l'implémentation*/} } void del_pile(PILE* p_pile) {/* code de l'implémentation*/} }
  • 14. 14 Définition des opérations permises d'un TAD en C (plus précisément) // fichier pile.c #include "pile.h" void init_pile(PILE* p_pile, int siz) { p_pile->size = siz; p_pile->top = p_pile->base = malloc(siz * sizeof(int)); } int push(PILE* p_pile, int val) { if ( p_pile->top == p_pile->base + p_pile->size ) return 0; *p_pile->top++ = val; return 1; } int pop(PILE* p_pile, int* p_val) { if ( p_pile->top == p_pile->base ) return 0; *p_val = *--p_pile->top; return 1; } void del_pile(PILE* p_pile) { free(p_pile->base); p_pile->top = p_pile->base = 0; p_pile->size = 0; }
  • 15. 15 Utilisation d’un TDA ◼ Se fait exclusivement par l’intermédiaire des opérations qui leur sont associées et indépendamment de son implémentation ◼ En-têtes des fonctions et procédures du TDA : interface entre l’utilisateur et le TDA ◼ Manipulation du TDA sans connaître son implémentation ◼ Utilisation indépendante vis-à-vis de tout changement d’implantation
  • 16. 16 Utilisation d’un TDA en C // Un programme d'essai #include <stdio.h> #include "pile.h" main() { int i = 0; PILE pile; init_pile(&pile, 10); push(&pile, 20); pop(&pile, &i)) pile.size += 5; del_pile(&pile);}
  • 17. 17 Structures de Données TD individuels TD collectifs = SD TD composés TD simples Exemple: Enregistrements Exemple: liste, tableau, pile, file, arbres …
  • 18. 18 Structures de Données ◼ Les SD implémentées en utilisant des tableaux (contiguës) sont statiques → inconvénients : ◼ Fixer le nombre maximal d’éléments dès le départ ◼ Impossibilité d’allouer de l’espace mémoire non contigu même si cet espace est disponible mais fragmenté ◼ Allocation d’un bloc MC avec une taille initiale fixe ◼ Perte d’espace mémoire (espace occupé inutilement)
  • 19. 19 Solution : SD dynamiques ▪ Utilisation des pointeurs ▪ Pas de contrainte de taille initiale ▪ Pas d’allocation inutile de l’espace mémoire ▪ Indépendance de la position des cases libres de la MC
  • 20. 20 Pointeurs ◼ Pointeur : cellule dont la valeur réfère à une autre cellule ◼ ^ : symbole des pointeurs ◼ Deux procédures pour la gestion des pointeurs : Allouler et Libérer
  • 21. 21 Pointeurs DefType TypeCellule=… DefVar s (TypeCellule) – variable statique de type TypeCellule p (^Type Cellule) – pointeur vers un objet de type TypeCellule Début … Allouer(p) … Libérer(p) … Fin
  • 22. 22 Pointeurs Procédure Allouer (Res p: ^Type Cellule) -- Précond: -- Postcond: p contient l’adresse d’une nouvelle cellule allouée Procédure Libérer (Don p: ^Type Cellule) -- Précond: -- Postcond: libère la cellule d’adresse p
  • 23. 23 Rôle des pointeurs ◼ Supposons qu'on a 1000 étudiants et un traitement donné à faire (calcul moyenne, tri etc.): 1) traitement statique : tableau de 1000 étudiants taille complète allouée dans la MC 2) traitement dynamique: ◼ on déclare le type étudiant ◼ on déclare un pointeur sur le type étudiant= adresse qui peut contenir 1 étudiant ◼ donc pour créer le premier étudiant il faut allouer un 1er espace puis un 2ième etc. Si on passe au 3ème étudiant et qu'on n'a plus besoin du premier on libère l'espace donc on alloue et on libère selon notre traitement