Vous êtes sur la page 1sur 5

UNIVERSITE GASTON BERGER ANNEE UNIVERSITAIRE 2021/ 2022

DE SAINT-LOUIS

UFR DE SCIENCES APPLIQUEES


ET DE TECHNOLOGIE

SECTION INFORMATIQUE

LICENCE SCIENCE ET TECHNOLOGIE 2


Algorithmique et Programmation 3
(Langage C)
Fiche de TD/TP/TPE
Notations
* Exercice TD
° Exercice TP
*° Exercice TD/TP

Pointeurs, allocation dynamique, modularité

*Exercice 1
Un pointeur est une variable « pointant » vers un emplacement mémoire. Il peut ainsi être
représenté comme suit :
x
La représentation 7 indique que le contenu de x est 7

Soit la suite d’instructions suivante :


1. int x = 15, y = 23, z[10] = {23, 5, 67, 2, 78, -5, 42, 56, 89, 3}
2. int *pi ;
3. pi = &x ;
4. y = *pi + 5 ;
5. *pi += 1 ;
6. pi = &z[0] ;
7. y = *pi – 3 ;
8. pi = pi + 3 ;
9. x = *pi +7

Montrer à partir de la représentation graphique proposée, les changements des valeurs des
différentes variables pour chaque instruction.

*Exercice 2
On considère la suite d’instructions ci-après. Remplir le tableau (le contenu des variables) en
suivant les instructions.
Variable Adresse Contenu
int x,y,z ; x 20000 231 / …
int *p1, *p2 ; y 20002 472 / …
1. x=23 ; z 20004
2. y=47 ; p1 30000
3. z=100 ; p2 40000
4. p1=&x ;
5. p2=&z ;
6. *p1 = (*p2)++ ;
7. p1=p2 ;
8. p2=&y ;
9. *p1 -= *p2 ;
10. ++*p2 ;
11. *p1 *= *p2

*°Exercice 3
Un document est défini par son titre, son auteur, et peut avoir jusqu’à sept mots-cés.
1. Définir une structure « Document » et les différentes fonctions listées ci-dessous :
§ Une fonction de création d’un document à partir de ses caractéristiques;
elle fait l’allocation dynamique d’un pointeur sur un document et renvoie
ce dernier ;
§ Une fonction de destruction d’un document ;
§ une fonction d’affichage d’un document ;
§ une fonction permettant de récupérer le titre du document ;
§ une fonction permettant de récupérer le ième mot-clé ;
§ une fonction permettant d’ajouter un mot-clé à la liste des mots-clés.
§ une fonction permettant de faire la copie d’un document
§ une fonction permettant de savoir si un document contient un certain
mot-clé ;
2. Tester votre implémentation en créant des documents et en leur appliquant ces
différentes fonctions.

*°Exercice 4
On veut écrire un programme qui comporte un ensemble de fonctions permettant de
manipuler des matrices définies comme suit :
struct matrice {
int nblignes ;
int nbcolonnes ;
float **m ;
}
Écrire:
• une fonction de création de la matrice. Cette fonction fait l’allocation dynamique de la
matrice à partir d’un nombre de lignes et d’un nombre de colonnes spécifiés, et
initialise tous ses éléments à 0 ;
• une fonction qui permet de détruire la matrice ;
• une fonction d’affichage d’une matrice;
• une fonction qui permet de faire le produit de deux matrices ;
• une fonction qui calcule la multiplication d’une matrice par un réel ;
Écrire ensuite une fonction main() qui appelle les différentes fonctions.

*°Exercice 5

On veut manipuler un ensemble d’entiers sans répétition (un ensemble est dit sans répétition
s’il ne peut pas contenir deux fois le même élément).

Pour cela, on considère la structure « Ensemble » suivante définie dans le fichier


« ensemble.h » :

struct Ensemble {

int m_max; // nombre maximal d’éléments

int m_cardinal; // cardinal de l’ensemble (nombre d’éléments)

int *m_elements; // les éléments de l’ensemble

Les opérations sur les ensembles devront permettre :


i) de créer un ensemble pouvant contenir au plus un nombre N d’éléments passé en
argument,
ii) de déterminer le cardinal d’un ensemble,
iii) d’ajouter un élément (un entier) d’un ensemble,
iv) de supprimer un élément (un entier) d’un ensemble,
iv) de tester si un ensemble contient un élément donné,
v) de détruire un ensemble,

vi) d’afficher le contenu d’un ensemble au format E = [x1,x2,...,xn] où x1,x2,...,xn sont


ses éléments.
1) Ecrivez dans un fichier « ensemble.c » les définitions des fonctions ci-dessus de
création et de manipulation d’un ensemble.
2) Définir dans le fichier « main.c » une fontion « main » dans laquelle vous allez faire
appel aux fonctions déjà définies. Pour cela, vous allez créer un ensemble, ajouter un
certain nombre d’éléments, en supprimer un certain nombre, tester si l’ensemble
contient un certain élément, afficher l’ensemble et finalement le détruire.
3) Rajouter l’union et l’intersection d’ensembles ;

*°Exercice 6
On veut écrire un programme permettant de gérer des étudiants. Chaque étudiant est défini
par son nom, son prénom, sa date de naissance, son ufr, sa classe, s’il est redoublant ou non,
les matières à suivre et les notes correspondantes représentées respectivement dans un
tableau de MAXNOTES matières et un tableau de MAXNOTES notes, un entier nb_notes
indiquant le nombre de notes valides dans le tableau des notes.
1. Déclarer dans un fichier « Date.h » un type « Date » pour des variables formées d’un
numéro de jour, d’un nom de mois et d’un numéro d’année ainsi que les fonctions de
lecture et d’écriture d’une date.
2. Déclarer dans un fichier « Etudiant.h » le type « Etudiant » correspondant ainsi que les
fonctions suivantes :
a. Saisie d’un étudiant.
b. Affichage d’un étudiant.
c. Attribution de note d’une matière à un étudiant.
d. Affichage de l’ensemble des étudiants qui ont la moyenne.
3. Écrire dans un fichier « Date.c » les définitions de fonctions correspondantes de lecture et
d’écriture d’une date. Pour la lecture, dans un premier temps, on ne se préoccupera pas
de la validité de la date entrée.
4. Écrire dans un fichier « Etudiant.c » les définitions de fonctions correspondantes.
5. Dans le fichier « main.c », il faudra saisir un nombre N d’étudiants, attribuer des notes aux
différentes matières, calculer la moyenne de chaque étudiant et afficher l’ensemble des
passants.
6. On voudrait maintenant rajouter une fonction qui permet de retrouver la note d’un
étudiant pour une matière. Expliquer comment le faire et écrire la fonction.
7. Proposez une autre représentation qui permet de gérer plus facilement les matières et les
notes correspondantes

Exercice 7
Une bibliothèque est définie par nom, son université d’appartenance et une liste de N livres
représentés comme suit :

inf23 La programmation en C Claude Delannoy Informatique

p15 L’existentialisme est un humanisme Jean Paul Sartre philosophie

inf05 Java pour les nuls Barry Burd Informatique


ang33 La ferme des animaux George Orwell Anglais

Chaque livre est ainsi défini par son identifiant, son titre, son auteur et sa discipline.

1) Définir le type « livre » et le type « Bibliotheque ».


2) Écrire une fonction de création d’une bibliothèque à partir de ses caractéristiques ; elle
renvoie un pointeur sur la bibliothèque ; à la création, la bibliothèque est vide ;
3) Écrire une fonction de destruction de la bibliothèque ;
4) Écrire une fonction qui rajoute un livre à la bibliothèque ;
5) Écrire une fonction qui recherche un livre par son identifiant ;
6) Écrire une fonction qui affiche tous les livres de la bibliothèque en informatique avec
toutes les informations les concernant ;
7) Écrire une fonction qui affiche tous les livres d’un auteur donné ;
8) Rajouter une fonction « main » qui crée une bibliothèque, rajoute un certain nombre de
livres et appelle les différentes fonctions.

NB : le programme sera écrit sous forme modulaire. On aura ainsi les différents fichiers :
« Bibliotheque.h », « Bibliotheque.c » et « main.c ».

*°Exercice 8
On considère les fonctions suivantes de calcul de surface de différentes figures auxquelles on
attribut respectivement les numéros 1, 2, et 3 :
double surf_rect (double a, double b) { return a*b ; }
double surf_tria (double a, double b) { return a*b/2 ; }
double surf_disq (double a, double b) { return 3.14*a*a ; }

On voudrait écrire un programme qui lit un numéro et deux réels correspondants aux
arguments des fonctions et selon le numéro, appelle la fonction correspondante.
On considèrera pour cela qu’on dispose d’un tableau dont chaque élément est constitué de
deux champs :
• Le numéro de la fonction ;
• L’adresse de la fonction

Vous aimerez peut-être aussi