Tds SD
Tds SD
Exercice 1
On désire implanter, en langage C, le type abstrait de données Vecteur, défini dans le cours. On
rappelle, ci-dessous, une spécification minimale du TAD Vecteur :
Type Vecteur
Utilise Entier, Elément
Opérations
vect : Entier → Vecteur
changer_ième: Vecteur x Entier x Elément → Vecteur
ième : Vecteur x Entier → Elément
taille : Vecteur → Entier
Préconditions
vect(i) est_défini_ssi i ≥ 0
ième(v,i) est_défini_ssi 0 ≤ i < taille(v)
changer_ième(v,i,e) est_défini_ssi 0 ≤ i < taille(v)
Axiomes
Soit, i, j : Entier, e : Elément, v : Vecteur
si 0 ≤ i < taille(v) alors ième(changer_ième(v,i,e),i) = e
si 0 ≤ i < taille(v) et 0 ≤ j < taille(v) et i ≠ j
alors ième(changer_ième(v,i,e),j) = ième(v,j)
taille(vect(i)) = i
taille(changer_ième(v,i,e)) = taille(v)
Il existe plusieurs méthodes pour représenter les vecteurs. Parmi celles-ci une méthode qui consiste à
représenter un vecteur sous la forme d'un tableau. On considère ici, un vecteur comme est une structure
regroupant un entier, pour la taille, et un pointeur sur les éléments du vecteur.
a)- Donner la déclaration complète, en C, de la structure de données représentant le TAD Vecteur
d'entiers, c-à-d :
- Donner les déclarations nécessaires pour définir le type Vecteur d'entiers ;
- Donner les déclarations, en C, des primitives du TAD Vecteur d'entiers.
b)- Définir les primitives (ou opérations de base) du TAD Vecteur d'entiers, c'est à dire : pour chaque
primitive, écrire la fonction C correspondante.
c)- Au TAD Vecteur d'entiers on ajoute les deux opérations auxiliaires suivantes:
- produit_scalaire qui calcule le produit scalaire de deux vecteurs d'entiers.
- decalage_circulaire qui prend un vecteur et retourne le vecteur dans lequel tous les
éléments sont décalés d'une place vers la droite (le dernier est inséré à la 1ère place).
Ecrire en langage C les deux opérations ci-dessus.
- 1/2 -
TD n°1 : [ Types Abstraits de Données]
Exercice2
On considère la représentation simplement chaînée pour le TAD Liste défini en cours pour une liste
de nombres entiers.
a)- Ecrire la fonction affiche qui affiche les éléments d'une liste chaînée L.
b)- Ecrire la fonction copie qui crée une copie d'une liste chaînée L.
c)- Ecrire la fonction concat qui concatène deux listes L1 et L2 (sans qu'elles soient modifiées).
d)- Ecrire la fonction supprime_occur qui supprime toutes les occurrences d'une valeur val dans
une liste L.
e)- Ecrire la fonction récursive compte_occur qui calcule le nombre d'occurrences d'un élément e
dans une liste L
f)- Ecrire la fonction purge qui purge une liste L (i.e., enlève les doublons).
g) -Ecrire la fonction récursive inverse qui crée la liste miroir LM d'une liste L.
Exercice 3
Une liste triée est une liste dont les éléments sont toujours rangés dans un ordre défini par une clé (un
champ ou une combinaison de champs d'un élément). Pour simplifier, on considère des listes de nombres
entiers.
a)- Ecrire la fonction insere_tri qui insère un élément dans une liste triée LT.
b)- Ecrire la fonction fusion_tri qui fusionne deux listes triées LT1 et LT2 (sans qu'elles soient
modifiées).
Exercice 4
a)- Ecrire la fonction insere_avant qui insère, dans une liste doublement chaînée Ld, un entier e
avant un noeud d'adresse pN.
b)- (Question facultative) Ecrire la fonction supprime_poccur qui supprime, dans une liste
doublement chaînée Ld, la première occurrence d'un élément connaissant l'adresse pN de son noeud.
Exercice 5
Refaire l'exercice 3 ci-dessus, en considérant une liste chaînée circulaire Lc.
- 2/2 -
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Exercice1
On s'intéresse au TAD Pile, défini dans le cours. Les primitives du TAD Pile sont supposées
déjà définies.
a)- Ecrire un algorithme (ou une fonction C), taille_pile, qui calcule le nombre d'éléments
dans une pile donnée.
b)- Ecrire un algorithme (ou une fonction C), copie_pile, qui retourne une copie d'une pile
donnée.
Exercice2
Utiliser une pile pour évaluer une expression arithmétique postfixée codée sur un tableau de
caractères, en supposant pour simplifier que: tous les opérateurs sont binaires et limités à +, -,
* et / . On utilise uniquement des nombres entiers naturels
Indication : On utilise la pile pour stocker les opérandes. Dès qu'on lit une opération, on
récupère les deux opérandes sur le dessus de la pile, on effectue l'opération et on met le
résultat sur la pile. A la fin de la lecture de l'expression, il ne doit rester dans la pile qu'une
seule valeur: le résultat du calcul.
Note : on se donne la primitive « est-opérande » pour tester si un caractère est opérande ou
pas de même la primitive « effectuer-opération » pour effectuer une opération arithmétique
entre deux opérandes.
Exercice3
Ecrire une primitive (ou algorithme) qui retourne une file inversée. Note : La représentation
du TAD file par tableau circulaire est conseillée.
Exercice 4
Nous avons également vu en cours une implémentation d'une file par un tableau circulaire.
Dans cet exercice, nous allons implémenter une file de taille N à l'aide de deux piles de taille
N. L'idée est la suivante : Le sommet de la première pile correspond à l'avant de la file, tandis
que le sommet de la seconde pile correspond à l'arrière de la file. Lorsque la première pile est
vide, la seconde peut être retournée sur la première. Ce retournement est utilisé pour retirer
l'élément en tête de file lorsque la pile correspondant à l'avant est vide.
1) Ecrire toutes les primitives standards concernant une file, à savoir Création d’une file ;
tester si une file vide ou pleine ; retourner la tête d’une file.
2) Ecrire la primitive enfiler (F) correspondante à cette nouvelle conception de la file
3) De même écrire la primitive défiler (F).
Note : on pourra utiliser toutes les primitives du cours aux pile et files
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Exercice2
Indication : On utilise la pile pour stocker les opérandes. Dès qu'on lit une opération, on
récupère les deux opérandes sur le dessus de la pile, on effectue l'opération et on met le
résultat sur la pile. A la fin de la lecture de l'expression, il ne doit rester dans la pile qu'une
seule valeur: le résultat du calcul.
Note : on se donne la primitive « est-opérande » pour tester si un caractère est opérande ou
pas de même la primitive « effectuer-opération » pour effectuer une opération arithmétique
entre deux opérandes.
Dans cet exercice, une expression arithmétique est postfixée au lieu d’infixée et à
laquelle on est habitué. On peut définir une expression postfixée (EP) comme suit :
Une variable ou un nombre est une expression postfixée. Si Ο est un opérateur et x et y
deux EP alors xyΟ est une EP.
1/5
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Une telle Expression sera délimitée par le caractère ‘%’ et mise dans un tableau de
caractères de taille maximale Max , nommé tableau.
Dans cet exercice comme mentionné dans la note de l’énnoncé on suppose que l’on
dispose déjà de deux primitives (ici fonctions), la première nommée « estopérande » qui
retourne vrai si le caractère de l’expression arithmétique est un opérande sinon elle
retourne 0. La deuxième primitive nommée « effectueroper » effectue une opération
arithmétique entre 2 opérandes.
Algorithme évaluer-EP ( E , EP : tableau[MAX] de caractères) : réel
Var : i entier ; opd, opg, résultat : réel ; p : Pile)
Début
P ! pile_vide ( ) ;
i !0;
tant que EP[i]<> ‘%’ faire
si estopérande(EP[i]) alors empiler(p, ValeurSommet(EP[i])
sinon
opd ! Sommet(p) ;
p ! dépiler(p) ;
opg! Sommet(p) ;
p! dépiler(p) ;
p! empiler(p, effectueroper(opg, EP[i], opd)) ;
i++ ;
fin tant que
résultat! Sommet(p) ;
p! dépiler(p) ;
retourner(résultat) ;
fin.
Note importante : ValeurSommet est une fonction qui permet de donner la valeur
numérique de l’opérande parce qu’il est inséré dans le tableau comme caractère et ce afin
de pouvoir effectuer les opérations arithmétiques .
Exercice 3
2/5
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Exercice 4
Dans cet exercice une nouvelle représentation d’une file aura lieu. En effet, une file de taille
N va être représentée par deux piles de taille N.
Note importante : - Etant donné que la taille de la file est N , alors les 2 piles ne peuvent
jamais contenir en même temps N éléments, mais par contre le nombre total des éléments
contenus en même temps dans les 2 piles peut atteindre N .
typdef struct {
Tête : pile ;
Queue : pile ;
} file-2-piles.
3/5
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Fin.
Primitive pour enfiler un élément e dans une file
4/5
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
[Link]! depiler([Link]) ;
Fin de tantque .
F.Tête! depiler (F.Tête) ;
5/5
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Objectifs : - Initier à la manipulation des arbres (représentés par pointeurs ou par tableaux) ;
- Distinguer différents arbres binaires : de recherche et tas.
Exercice 1
On considère la représentation par pointeurs pour le TAD Arbre_Binaire défini en cours pour un arbre binaire
contenant des nombres entiers. Ecrire en langage C les fonctions suivantes :
a)- La fonction taille qui calcule le nombre de nœuds dans un arbre binaire Ab.
b)- La fonction hauteur qui calcule la hauteur d'un arbre binaire Ab.
c)- La fonction est_feuille qui retourne 1 si un arbre binaire Ab correspond à une feuille, 0 sinon.
d)- La fonction appartient_AB qui retourne 1 si un élément e appartient à un arbre binaire Ab, 0 sinon.
Exercice 2
Un arbre binaire de recherche est un arbre binaire tel que pour tout nœud, les clés de tous les nœuds du sous-arbre
gauche (resp. du sous-arbre droit) sont inférieures ou égales (resp. supérieures) à la clé du nœud.
a)- Dessiner l'arbre binaire de recherche obtenu par ajouts successifs aux feuilles des éléments suivants :
10, 12, 7, 14, 16, 15, 4, 9, 8, 5, 3, 2.
b)- Supprimer les éléments 15, 9, 7, en utilisant l'algorithme vu en cours.
c)- Ecrire la série de nombres entiers qui résulte de l'arbre précédent en utilisant chacun des parcours suivants :
préfixe, infixe, postfixe et en largeur (par niveau).
Exercice 3
On considère la représentation par pointeurs pour le TAD Arbre_Rech défini en cours pour un arbre binaire de
recherche contenant des nombres entiers.
a)- Ecrire en C la fonction récursive affiche_infixe qui affiche, à l'aide d'un parcours infixe, les éléments d'un
arbre binaire de recherche Abr.
b)- Proposer en pseudo-code l'algorithme affiche_en_largeur qui affiche, à l'aide d'un parcours en largeur,
les éléments d'un arbre binaire de recherche Abr. (Indication : Utiliser la structure de données File)
c)- (Question facultative) Ecrire en C la fonction itérative appartient_ABR qui retourne 1 si un élément e
appartient à un arbre binaire de recherche Abr, 0 sinon.
d)- (Question facultative) Ecrire la fonction fusion_ABR qui fusionne deux arbres binaires de recherche Abr1 et
Abr2 (sans duplication des éléments).
Exercice 4
Un tas est un arbre binaire parfait tel que la clé de chaque nœud est supérieure ou égale aux clés de ses fils. On
considère la représentation par tableaux pour le TAD Tas défini en cours pour un tas contenant des entiers.
a)- Donner l'arbre binaire parfait correspondant au tableau T d'entiers suivants : {7, 1, 6, 4, 5, 2, 3, 10, 9, 11, 8}
b)- Transformer cet arbre pour qu'il vérifie la propriété du tas.
c)- (Question facultative) Exécuter l'algorithme du tri par tas sur le tableau T.
d)- (Question facultative) Ecrire en C la fonction appartient_Tas qui retourne 1 si un élément e appartient à
un tas T, 0 sinon.
- 1/1 -
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Objectifs : - Initier à la manipulation des arbres (représentés par pointeurs ou par tableaux) ;
- Distinguer différents arbres binaires : de recherche et tas.
Exercice 1
a)
int taille(Arbre_Binaire Ab) {
// nombre de noeuds dans un arbre binaire
if (est_vide(Ab)) return 0;
return (1+taille(gauche(Ab))+taille(droite(Ab))); }
b)
int hauteur(Arbre_Binaire Ab) {
if (est_vide(Ab)) return -1;
else {
int hg=1+hauteur(gauche(Ab));
int hd=1+hauteur(droite(Ab));
return (hg<hd?hd:hg);}
}
1 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
c)
if (est_vide(Ab)) {
exit(-1); }
return (est_vide(gauche(Ab)) && est_vide(droite(Ab));
}
Exercice 2
2 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
3 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Il y a en général trois cas à considérer qui sont décrits par les 3 suppressions suivantes :
15 n'a pas de fils ; il est simplement éliminé.
9 a un seul fils (8 qui est son fils gauche) ; 9 est remplacé par 8.
4 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
c) parcours préfixe : 10 5 4 3 2 8 12 14 16
parcours infixe : 2 3 4 5 8 10 12 14 16
parcours postfixe : 2 3 4 8 5 16 14 12 10
parcours en largeur (par niveau) : 10 5 12 4 8 14 3 16 2
Exercice 3
a)
void affiche_infixe(Arbre_Binaire Abr) {
if (Abr) {
affiche_infixe(Abr->fg);
printf("%d ", Abr->val);
affiche_infixe(Abr->fd);
} }
5 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Variables :
si non(est_vide(Abr)) alors
pn! tete(F);F!défiler(F);
afficher(contenu(racine(pn)));
si non(est_vide(gauche(pn))) alors
F!enfiler(F, gauche(pn));
fsi
si non(est_vide(droite(pn))) alors
F!enfiler(F, droite(pn));
fin si
fin tantque
Fin.
6 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
La non duplication des éléments est gérée par l'opération d'insertion dans un arbre
binaire de recherche.
7 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
En dessinant cet arbre binaire parfait, on remarque bien que ce n'est pas un tas (il ne
vérifie pas la propriété d'un tas).
Je rappelle qu'on travaille directement dans le tableau représentant l'arbre binaire
parfait.
8 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
L'idée est simple (voir cours) : on parcourt le tableau de la droite vers la gauche. Les
feuilles (des arbres réduits à un élément) sont des tas. Ici dans T (de la droite à la
gauche), ce sont les nœuds contenant resp. 8, 11, 9, 10, 6 et 2
En suivant notre parcours dans le tableau de la droite à sa gauche, on tombera sur le
nœud 5 d'indice 4 dans le tableau : il s'agit de la racine d'un arbre binaire parfait (les
fils de 5 sont 11 et 8). Ce n'est pas un tas, on utilisera l'opération Entasser(T,4). Il sera
transformé en le tas de racine 11 (ses fils sont 5 et 8).
On continue de la même façon pour les autres sous-arbres : un arbre de racine en
position i ses fils sont des tas, on utilisera Entasser(T, i).
9 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Finalement, on obtient le tas suivant qui vérifie les propriétés d'un tas: T= {11,10,6,9,8,2,3,4,7,5,1}
10 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Echanger la racine du tas avec la dernière information, et ignorer la dernière case du tableau
1)
11 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
2)
3)
4)
5)
12 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
1ère itération
6) 7)
Entasser
9)
8)
2ème itération
10) 11)
13 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
12)
3ème itération
14)
13)
4ème itération
15) 16)
5ème itération
14 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
17) 18)
6ème itération
19)
20)
7ème itération
21) 22)
8ème itération
15 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
23) 24)
9ème itération
Notre tableau maintenant est réduit en un seul élément, donc on va s'arrêter ici: 10ème itération
Avec:
16 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Question d)- Ici, il s'agit de faire un simple parcours du tableau de son début à sa fin
n, res : Entier
Début
n ! [Link]
res ! 0
i ! 1
tant que ((i<= n) et (res=0) faire
si ([Link][i]=e) alors
res ! 1
fsi
i ! i+1
ftq
retourner res;
Fin
17 sur 17
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Exercice n°1.
Un groupe d’amis organise une randonnée dans les grandes montagnes.
On a représenté par le graphe ci-dessus les sommets B, C, D, F, T, N par lesquels ils peuvent choisir
de passer.
Une arête entre deux sommets coïncide avec l’existence d’un chemin entre les deux sommets.
1) Donner la définition formelle de ce graphe
2) Déterminer le degré de chacun des sommets de ce graphe. Donner le résultat sous forme de
tableau
3) Ce graphe est –il connexe ? justifier
Exercice2
Une grande ville a créé un jardin pédagogique sur le thème de l’écologie, jardin qui doit être visité par
la suite par la majorité des classes de cette ville. Ce jardin comporte six zones distinctes correspondant
aux thèmes :
A. Eau B. Economie d’énergie C. Plantations et cultures locales
D. Développement durable E. Biotechnologies F. Contes d’ici (et d’ailleurs)
Ces zones sont reliées par des passages (portes) où sont proposées des questionnaires.
Le jardin et les portes sont représentés par le graphe ci-dessous (chaque porte et
donc chaque questionnaire est représenté par une arête)
Question préliminaire :
Si un visiteur répond à tous les questionnaires, à combien de questionnaires aura-t-il répondu ?
Autres questions :
1) Donner la matrice d’adjacence G associée à ce graphe
2) Le graphe est-il complet ? Est-il connexe ? Justifier
3) Donner la liste d’adjacence associée.
Exercice4 :
Considérons le graphe G décrit par le schéma ci-dessous :
Exercice4 :
a) Dans chacune des trois représentations, quel temps faut-il pour déterminer si
deux sommets u et v donnés sont voisins ?.
b) Dans chacune des trois représentations, quel temps faut-il pour calculer le
degré sortant d'un sommet ? Même question pour le degré entrant ?
Exercice5 :
Réécrivez l'algorithme générique de parcours d'un graphe vu en cours de façon
adaptée à chaque représentation. Quel est le temps d'exécution, à chaque fois ?
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Solution
Exercice n°1.
A={ (B ;C),(B ;F),(C ;D),(C ;F),(C ;T),(D ;F),(D ;T),(D ;N),(F ;N), (F ;T),(N ;T) }
Sommets B C D F N T
Degrés 2 4 4 5 3 4
3) Ce graphe est connexe car tous les sommets peuvent être reliés entre
eux par (au moins) une chaî[Link] exemple, la chaîne BCDNTF contient
tous les sommets.
Exercice2
Question préliminaire :Il y a dix questionnaires car il y a dix arêtes.
2) Ce graphe est connexe car, pour chaque paire de sommets, il existe une
chaîne les reliant. Ce graphe n’est pas complet car, par exemple, les
sommets E et F ne sont pas adjacents.
1 sur 2
Université Mohammed V-Agdal Année Universitaire 2022/2023
Faculté des Sciences de Rabat MODULE SD
Département d'Informatique Semestre 4 (SMI4)
Solution
3) La liste d’adjacence :
2 sur 2