Vous êtes sur la page 1sur 5

Tronc Commun

Élément : C avancé

Travaux Pratiques

Pr. Nabila ZRIRA & Pr. Hamza TOULNI


Département Informatique

Année Universitaire : 2023-2024


Travaux pratiques Tronc Commun
C avancé Année : 2023 – 2024

TP1 : Liste Simplement Chaînée (LSC)


Représentation des étudiants

Le but de ce TP est de maîtriser le principe des listes simplement chaînées ainsi que les fonctions
nécessaires pour les manipuler.

On souhaite représenter les informations des étudiants d’une promotion sous forme d’une Liste
Simplement Chaînée (LSC). Chaque maillon de la liste contient les informations d’un étudiant
et un pointeur vers le maillon suivant.

Chaque étudiant possède quatre champs : nom, prenom, code et moyenne.

Pour avoir le contrôle de la liste, on sauvegarde les trois éléments suivants debut, fin et
NB_Etudiants qui représentent respectivement un pointeur vers le début de la liste, un
pointeur vers la fin de la liste et une variable entière qui détermine le nombre d’étudiants de la
promotion.

1. Donner les structures de données à utiliser pour implémenter la liste simplement chaînée.
2. Ecrire une fonction Initialiser() qui permet d’initialiser la liste chaînée.
3. Ecrire une fonction Saisir_Etudiant()qui permet d’allouer la mémoire d’un
nouveau étudiant et place ses informations à l'intérieur. Cette fonction retourne l’adresse
de ce nouveau étudiant.
4. Ecrire une fonction Inserer_Liste_Vide() qui permet d’insérer un étudiant dans
une liste vide.
5. Ecrire la fonction Inserer_Debut() qui permet d’insérer un étudiant au début de la
liste.
6. Ecrire la fonction Inserer_Fin() qui permet d’insérer un étudiant à la fin de la liste.
7. Ecrire une fonction Afficher() qui permet d’afficher les informations de tous les
étudiants.
8. Ecrire une fonction Diviser_Promo() qui permet de diviser la promotion en deux
groupes, le premier groupe contiendra les étudiants admis (ceux qui ont une note >=12) et
le deuxième contiendra les non admis.
9. Ecrire une fonction Trier_Etudiants()qui permet de trier les étudiants admis par
ordre de mérite.
10. Ecrire une fonction Detruire()qui libère toute la mémoire utilisée par la liste chaînée.
11. Appeler toutes les fonctions précédentes dans la fonction main().

Page 2 sur 5
Travaux pratiques Tronc Commun
C avancé Année : 2023 – 2024

TP2 : Piles
Le but de ce TP est de maîtriser le principe des piles ainsi que les fonctions nécessaires pour les
manipuler.

Exercice 1 : Palindrome

Un palindrome est une chaîne de caractères qui se lit de la même manière de gauche à droite et
de droite à gauche. En utilisant une pile, écrivez un code en langage C qui permet de vérifier si
une chaîne de caractères est palindrome.

Exemple :

RADAR est palindrome


ENSMR n’est pas palindrome

Exercice 2 : Expression correctement parenthésée

Dans un logiciel de calcul formel ou, plus généralement dans un éditeur de texte (par exemple
l’éditeur utilisé pour écrire des codes), il y a une gestion dynamique du parenthésage. En effet,
si une parenthèse fermante de plus est ajoutée ou si elle n’est pas de même nature (une accolade
au lieu d’un crochet par exemple) que la parenthèse ouvrante associée alors un message d’erreur
est envoyé. Par exemple, les deux expressions suivantes sont erronées :

2 − 𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = √∑(𝑥𝑖 − 𝑦𝑖 ))2


𝑖=1

(Deux parenthèses fermantes pour une ouvrante)

𝑎𝑚 × 𝑏 𝑚 = (𝑎 × 𝑏]𝑚
(La parenthèse (crochet) fermante n’est pas de même nature que la « parenthèse » ouvrante)

Algorithme :

L’algorithme de traitement de la chaîne de caractères repose sur l’idée simple que toute
parenthèse fermante rencontrée doit être associée dans la pile à la parenthèse (qui doit donc
exister !) ouvrante de même nature située au sommet de la pile.

Pour chaque caractère de la chaîne passée en argument, il y a trois possibilités :

Page 3 sur 5
Travaux pratiques Tronc Commun
C avancé Année : 2023 – 2024

• Le caractère n’est pas une parenthèse : Dans ce cas, on ne fait rien et on traite l’éventuel
caractère suivant.

• Le caractère est une parenthèse ouvrante : Dans ce cas, la parenthèse ouvrante est placée
dans la pile.

• Le caractère est une parenthèse fermante : C’est dans ce cas que le traitement est le plus
intéressant. On doit vérifier que la pile des parenthèses ouvrantes est non vide. Par
ailleurs, le sommet de la pile doit être une parenthèse ouvrante de même nature que la
parenthèse fermante rencontrée. Si les deux conditions suivantes sont vérifiées, on
dépile.

Ecrivez en langage C, un programme qui demande une chaîne de caractères, et analyse la


correction du parenthésage. L’analyse de la chaîne de caractères se fera caractère après
caractère. On gèrera une pile contenant les parenthèses ouvrantes et on comparera chaque
parenthèse fermante au sommet (éventuel) de la pile.

Remarque importante : le terme « parenthèse » désigne, sans plus de précision, une


parenthèse, un crochet ou une accolade.

Page 4 sur 5
Travaux pratiques Tronc Commun
C avancé Année : 2023 – 2024

TP3 : Arbres binaires de recherche


Le but de ce TP est de maîtriser les fonctions des arbres binaires de recherche (ABR).

Partie 1 :

On considère l’Arbre Binaire de Recherche (ABR) suivant :

1. Insérer les éléments suivants : C, I, R dans l’ABR.


2. Afficher l’ABR selon les quatre types de parcours vus en cours.
3. Comment peut-on supprimer le nœud F de l’ABR ?

Partie 2 :

En utilisant le même ABR de la partie 1 :

4. Donner la structure de données à utiliser pour implémenter un tel ABR.


5. Ecrire une fonction Initialiser_Arbre()qui permet d’initialiser un ABR.
6. Ecrire une fonction Inserer()qui permet d’insérer un nœud dans un ABR.
7. Ecrire une fonction Chercher_Min()qui permet de rechercher la valeur minimale
d’un ABR.

Pour pouvoir traiter les données stockées dans un ABR, il faut parvenir à atteindre les nœuds
contenants ces données. Ceci demande des méthodes ou des algorithmes qui permettent
d’explorer un arbre dans le but de visiter tous ses nœuds.

8. Ecrire les fonctions des trois parcours en profondeur : infixe, suffixe et préfixe.

Page 5 sur 5

Vous aimerez peut-être aussi