Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Bamako
FST 2020
TD N° 1 (INF1301) : Structures de données et Programmation
1
Exercice 4 : Représentation d’une matrice en C
L’objectif de cet exercice est de créer une bibliothèque pour manipuler les matrices (tableaux à
deux dimensions) de réels
1) Proposer un type C pour représenter les matrices de réels en utilisant les structures et les
pointeurs. Les matrices seront de dimension m × n où m désigne le nombre de lignes et n
le nombre de colonnes.
2) Ecrire une fonction creerMatrice () permettant de créer une matrice, dont les coefficients
ne sont pas initialisés.
3) Ecrire une fonction libérerMatrice (Matrice m) permettant de libérer la mémoire allouée à
une matrice.
4) Ecrire une fonction de copieMatrice (Matrice a, Matrice b) permettant de copier une
matrice.
5) Soit c une constante réelle, on souhaite disposer de constructeurs produisant des matrices
courantes :
- La matrice pleine, 𝑎𝑖𝑗 = 𝑐 pour tous 𝑖, 𝑗,
- La matrice diagonale, 𝑎𝑖𝑗 = 𝑐 pour tout 𝑖 et 𝑎𝑖𝑗 = 0 pour 𝑖 ≠ 𝑗,
- Les matrices triangulaires supérieures, telles que 𝑎𝑖𝑗 = 𝑐 si 𝑖 ≤ 𝑗, et 𝑎𝑖𝑗 = 0 sinon,
- Les matrices triangulaires inférieures, telles que 𝑎𝑖𝑗 = 𝑐 si 𝑖 ≥ 𝑗, et 𝑎𝑖𝑗 = 0 sinon.
Ecrire une fonction pour chaque type de matrice, qui initialisera une matrice déjà existante.
6) Ecrire une fonction afficherMatrice (Matrice m) permettant d’afficher les éléments d’une
matrice.
7) Implémenter la fonction void transposerMatrice (Matrice A, Matrice B) qui définit B
comme la transposée de A ( 𝑖. 𝑒. 𝑏𝑖𝑗 = 𝑎𝑗𝑖 pour tous 𝑖, 𝑗). Que se passe-t-il lors d’un appel
du type transposerMatrice (A, A)?
8) Implémenter la fonction void additionMatrice (Matrice A, Matrice B, Matrice C) qui
réalise l’addition de deux matrices (𝑐𝑖𝑗 = 𝑎𝑖𝑗 + 𝑏𝑖𝑗 pour tous 𝑖, 𝑗). Que se passe-t-il lors
d’un appel du type additionMatrice (A, B, A)?
9) Implémenter la fonction void produitMatrice (Matrice A, Matrice B, Matrice C) qui réalise
le produit de deux matrices (𝑐𝑖𝑗 = ∑𝑛𝑘=1 𝑎𝑖𝑘 𝑏𝑘𝑗 pour tous 𝑖, 𝑗). Que se passe-t-il lors d’un
appel du type produitMatrice (A, B, C) ?
10) On définit 𝑃𝑘𝑙 comme la matrice égale à la matrice identité sauf pour 4 coefficients : 𝑝𝑘𝑘 =
𝑝𝑙𝑙 = 0 et 𝑝𝑘𝑙 = 𝑝𝑙𝑘 = 1 . La matrice 𝑃𝑘𝑙 est appelée matrice de permutation ;
expliquez pourquoi en calculant 𝐴𝑃𝑘𝑙 et 𝑃𝑘𝑙 𝐴, où 𝐴 est une matrice quelconque.
2
Exercice 5 : Damier
Le jeu de dames se joue sur un damier carré divisé en 100 cases égales, alternativement claires et
foncées.
• Le jeu se joue sur les cases foncées du damier. Il y a donc 50 cases actives. La plus longue
diagonale, joignant deux coins du damier et comprenant 10 cases foncées, se dénomme la
grande diagonale.
• Le damier doit être placé de sorte que la première case de gauche, pour chaque joueur, soit
une case foncée.
• Le jeu de dames international se joue avec 20 pions blancs (clairs) et 20 pions noirs
(foncés). Avant de débuter une partie, les 20 pions noirs et les 20 pions blancs sont disposés
sur les 4 premières rangées de chaque joueur.
Notre objectif dans cet exercice est de proposer une structure de données permettant se stocker le
damier en mémoire, nous n’allons pas nous intéresser aux algorithmes des règles de jeu et des
stratégies. Pour plus d’informations veuillez consulter :
http://www.ffjd.fr/Web/index.php?page=reglesdujeu.
Figure 1. Damier
3
Exercice 6 : Définition d’une liste
Une liste est une séquence de zéro ou plusieurs éléments d’un type donnée.
On notera 𝐿𝑖𝑠𝑡𝑒 < 𝑇 > le type de liste dont les éléments sont de type 𝑇 (par exemple une liste
d’entier est de type 𝐿𝑖𝑠𝑡𝑒 < 𝑒𝑛𝑡𝑖𝑒𝑟 >).
Les opérations possibles sur une liste sont les suivantes :
• 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑑𝑒𝑟𝑛𝑖𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 < 𝑇 >): Retourne la position du dernier élément de la liste.
• 𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝑐𝑟é𝑒𝑟𝐿𝑖𝑠𝑡𝑒(): crée une liste constituée d’une suite vide.
• 𝐼𝑛𝑠𝑒𝑟𝑒𝑟𝐸𝑛𝑇𝑒𝑡𝑒(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿, 𝑇 𝑥): insère l’élément en tête de liste.
• 𝑖𝑛𝑠𝑒𝑟𝑒𝑟𝐴𝑝𝑟𝑒𝑠(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿, 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑝, 𝑇 𝑥): insère l’élément 𝑥 après la position 𝑝.
• 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟 (𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿, 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑝) : Supprime l’élément à la position 𝑝 dans la
liste L.
• 𝑒𝑠𝑡𝑉𝑖𝑑𝑒(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿): retourne 𝑣𝑟𝑎𝑖 si la liste est vide
• 𝐶𝑜𝑛𝑡𝑒𝑛𝑢(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿, 𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑝) : Retourne l’élément à la position 𝑝 dans la liste.
Le résultat est indéfini si 𝑝 = 𝑓𝑖𝑛(𝐿) ou si la position 𝑝 n’existe pas.
• 𝑃𝑟𝑒𝑚𝑖𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿): retourne la première position dans la liste 𝐿.
𝑇 𝑇𝑒𝑡𝑒(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿): retourne l’élément qui est à la première position de la liste 𝐿.
Indéfini si 𝐿 est vide.
𝑇 𝑄𝑢𝑒𝑢𝑒(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿) : Retourne l’élément qui est à la dernière position dans la liste
𝐿. Indéfini si 𝐿 est vide.
𝐸𝑛𝑡𝑖𝑒𝑟 𝐿𝑜𝑐𝑎𝑙𝑖𝑠𝑒𝑟 (𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿, 𝑇 𝑥) : retourne la position de l’élément 𝑥 dans la
liste. Si 𝑥 apparait plusieurs fois, c’est la position de la première occurrence de 𝑥. Si
𝑥 n’existe dans 𝐿 alors 𝑓𝑖𝑛() est retournée.
𝑉𝑖𝑑𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 < 𝑇 >): vide la liste
𝐴𝑓𝑓𝑖𝑐ℎ𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 < 𝑇 > 𝐿): affiche les éléments de la liste 𝐿 dans l’ordre d’apparition
dans L
5
o 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟 (𝐿𝑖𝑠𝑡𝑒 𝐿, 𝑒𝑛𝑡𝑖𝑒𝑟 𝑝) : Supprime l’élément à la position 𝑝 dans la liste
L.
o 𝐶𝑜𝑛𝑡𝑒𝑛𝑢(𝐿𝑖𝑠𝑡𝑒 𝐿, 𝑒𝑛𝑡𝑖𝑒𝑟 𝑝) : Retourne l’élément à la position 𝑝 dans la liste. Le
résultat est indéfini si 𝑝 = 𝑓𝑖𝑛(𝐿) ou si la position 𝑝 n’existe pas.
o 𝑃𝑟𝑒𝑚𝑖𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 𝐿): retourne la première position dans la liste 𝐿.
o 𝑒𝑛𝑡𝑖𝑒𝑟 𝑇𝑒𝑡𝑒(𝐿𝑖𝑠𝑡𝑒 𝐿): retourne l’élément qui est à la première position de la
liste 𝐿. Indéfini si 𝐿 est vide.
o 𝑒𝑛𝑡𝑖𝑒𝑟 𝑄𝑢𝑒𝑢𝑒(𝐿𝑖𝑠𝑡𝑒 𝐿) : Retourne l’élément qui est à la dernière position dans la
liste 𝐿. Indéfini si 𝐿 est vide.
o 𝐸𝑛𝑡𝑖𝑒𝑟 𝐿𝑜𝑐𝑎𝑙𝑖𝑠𝑒𝑟 (𝐿𝑖𝑠𝑡𝑒 𝐿, 𝑒𝑛𝑡𝑖𝑒𝑟 𝑥) : retourne la position de l’élément 𝑥 dans la
liste. Si 𝑥 apparait plusieurs fois, c’est la position de la première occurrence de 𝑥.
Si 𝑥 n’existe dans 𝐿 alors 𝑓𝑖𝑛() est retournée.
o 𝑉𝑖𝑑𝑒𝑟(𝐿𝑖𝑠𝑡𝑒 < 𝑇 >): vide la liste.
3. Proposer une implémentation de la notion de pile et de ses opérations en C.
6
Exercice 10 : Implémentation sous forme de tableau d’une pile d’entiers
L’objectif de cet exercice est de proposer une implémentation de pile d’entier sous forme de
tableau.
L’implémentation en utilisant un tableau fonctionne comme présentée sur la figure ci-dessous :
7
6. Proposer une implémentation de la notion de pile et de ses opérations en C.
8
Exercice 12 : Représentation d’une liste en C avec les pointeurs
1) Proposer un type C pour représenter les listes d’entiers.
2) Proposer une implémentation pour chacune des opérations données dans l’exercice sur la
définition d’une liste.
3) Ecrire un constructeur Liste cons (int h, Liste l) qui ajoute un élément en tête de liste ;
4) Ecrire une fonction libererListe (Liste l) permettant de libérer la mémoire allouée à une
liste.
5) Ecrire une fonction de copie de liste Liste copieLiset (Liste l).
6) Ecrire un algorithme qui permet de fusionner deux listes quelconques et retourne la liste
finale qui met les éléments de la deuxième liste à la suite des éléments de la première liste.
7) Ecrire un algorithme qui permet de fusionner deux listes triées dans l’ordre croissant et
retourne la liste finale.
8) Ecrire un algorithme qui permet d’éliminer tous les doublons dans une liste chaînée.
9) Implémenter les fonctions suivantes :
a. La fonction int longueur(Liste l) qui calcule la longueur d’une liste,
b. La fonction la fonction int occurrence (Liste l, entier x) qui calcule le nombre
d’occurrences d’un élément dans une liste. Proposer une autre version de la fonction
localiser en utilisant occurrence,
c. La fonction égale qui teste l’égalité de deux listes,
d. La fonction get qui retourne le ième élément d’une liste.