FICHE DES TRAVAUX DIRIGES ET PRATIQUES.
“Apprendre a bien programmer resemble 4 apprendre 4 aller a bicyclette. Si vous n'osez. pas
Parce que vous aver, peur d'une chute alors vous n’allez jamais apprendre.»
Série 0 : Rappels
Exercice
Comment déclarer :
1) un pointeur sur un tableau de 3 entiers
2) un tableau de 5 tableau de 3 pointeurs sur void
3) un pointeur sur un tableau de 5 pointeurs sur int
4) un tableau de 5 pointeurs sur fonction non prototypée retourant un pointeur sur un tableau
de 5 entiers
5) un tableau de 4 pointeurs sur fonction ayant comme argument un pointeur sur int et un int
retournant un pointeur sur un tableau de 5 entiers.
Préciser la taille des objets alloués par ces déclarations
Exercice
A quels objets correspondent les déclarations suivantes ;
int *«{5]0 ;
int (*O1511)
int (*£)Gin, int *{J[5))
int (*(*f)(int, void *)){5]
int (*(*)(int, void *))[5]
Exercice 3:
Ecrire différentes fonctions de manipulation des chaines de caractéres :
1. concaténation de deux chafnes
2. concaténation de deux chafnes limitée aux n premiers caractéres
3. comparaison de deux chaines
4, recopie d'une chaine dans une autre
5, recopie d'une chaine dans une autre limitée aux n premiers caractéres
6. longueur d'une chaine
7. recherche de la premiére occurrence d'un caractére dans une chaine ( on restitue un pointeur
sur cette occurrence)
8. recherche de la demiére occurrence d'un caractére dans une chaine (on restitue un pointeur
sur cette occurrence).
Exercice
Convertir une chaine de chiffres en son équivalent numérique entier en ignorant les éventuels blancs
et tabulations placés en téte de ligne.
Bxercice 5:
Ecrire une fonction qui donne la décomposition binaire d'un entier en utilisant les opérations
modulo et division, autre part en utilisant les opérations bit a bit.
Programmation avancée en C Licence 2~ 2011/2012 - Page 1/7Exercice 6 :
Que fait la fonction suivante :
int bizarre(char *ptr){
char *saveptr=ptr ;
while(*ptr++!="\0’) ;
return (ptr-saveptr-1) ;Sérié 3 : Le préprocesseur
Exercice 1 :
Ecrire des macros :
1. qui définit une constante n,
2. qui calcule le cube d'un nombre,
3. qui calcule la somme de deux nombres,
4. qui calcule le volume d'une sphére( v=42" )
Utiliser ces macros dans une fonction main() qui affiche la somme des volumes de n sphéres : on
Passera en argument au programme les R, oit R, est le rayon de la i ® sphate.
Vous pourrez utiliser la fonction double strtod(const char *s, NULL) qui convertir une chaine de
caractéres s en double: Combien de fois cette fonction est elle appelée a Iexécution de votre
programme ?
Exercice 2 :
Créer cing fichiers toto.h, toto, tata.h, tata.c, et main.c
Dans toto.h est déclarée la fonction somme() qui calcule la somme de deux entiers. Cette fonction
étant définie dans toto.c
Dans tata.h est déclarée la fonction produit() qui calcule le produit de deux entiers. Cette fonction
étant définie dans tata.c
On impose que le fichier tatah doit dé
réciproquement.
Le fichier main.c appelle ces deux fonctions
Ecrire un makefile qui permet de compiler l'ensemble de ces fichiers.
le probléme en utilisant les directives de compilation conditionnelle,
‘pendre (cest a dire inclure) du fichier totoh en
Que ce passe til ? Résoudre
Exercice 3 :
Le fichier den-téte
défini la macro assert) qui prend en argument un booléen (un entier)
Gui indique une condition qui doit éte vérifiée a Vexécution du programme, et qui, si cette condition
West pas vérifiée, met fin a l'exécution du programme et affiche un
message d'erreur,
Ecrire un programme qui vérifie avec assert () si le nomibre arguments qui lui ont été passés
est supérieur & 3. Compiler ce programme tel quel puis en rajoutant un NDEBUG en haut du fichier
source. Décrire ce que donne I'
‘exécution du programme compilé dans les
deux cas et proposer une définition de la macro assert (),,
Serie 4: Les classes des déclarations
Exercice 1 :
Exécuter le programme suivant :
int main(void){
int *p1, p2, *f10,"{20 :
p1=f1(4) ;
p2=f2(*pl) ;
prine{("p1=%d_*p2=%d \n", *p1,*p2) ;
return 0 ;
}
int *f1(int mf
intn=5 ;
nt=m ;
return (&n) ;
}
int *f2(int m){
int p=8 ;
pt=m;
return (&p) ;
Que ce passe t -il si les variables locales des fonctions f1 et f2 sont de classe static ?Série 5 :La programmation modulaire
Exercice 1:
Ecrire un module de manipulation des polynémes
1. Dans une premiere version, on définira le type des polynémes suivants :
#define NBCOEF 10
dppedef struct {
unsigned char degre;
short coef[NBCOEF ]
}
Dans une seconde version, on définira un type plus adaptée pour la représentation des
polynémes creux,
2. Les opérations suivantes seront réalisées sur le type polynéme:
lecture sur l'entrée standard
impression sur la sortie standard
Ja valeur en un point
addition
soustraction
produit
dérivée n®**
3. Eerire une fonction main qui utilisera ce module et lancera T'exécution de ces diverses
fonctions au gré des commandes frappées par l'utilisateur
4. Utiliser l'utilitaire make pour automatiser la compilation.
vVVVVVVv
Exercice 2 : La compilation séparée :
1. Ecrire une fonction strlen, qui renvoie la longueur (définie comme étant le nombre de
caractéres précédent le caractére nul '\0', ce dernier non compris) d'une chaine de caractéres,
2. Ecrire une fonction strcmp prenant comme arguments deux chaines de caractéres, et
Tenvoyant un entier positif, nul ou négatif, selon que la premiere chaine est, respectivement,
plus grande, égale, ou plus petite que la seconde dans ordre lexicographique,
Ecrire une fonction strap qui transforme une chaine pour la mettre entigrement en
majuscules. La conversion de chaque caractére sera faite au moyen de toupper.
4. Nous proposons de créer une bibliothéque a partir des fonctions précédentes :
> Créer un module mon_string dans lequel vous allez définir toutes ces fonctions.
® Créer un fichier contenant la fonction main pour tester votre module,
3.Série 6 : Les opérations sur les fichiers
Exercice 1:
Ecrire une fonction qui donne le premier élément commun 4 deux fichiers d'entiers triés.
Exercice 2:
A partir de deux fichiers contenant des éléments ttiées, obtenir dans un troisiéme fichier la réunion
triée de ces éléments.
Exercice 3:
Ecrire une fonction pour insérer n caractéres en début d'un fichier.
Exercice 4 ;
Calculer et afficher le nombres de caractéres d'un fichier ASCII .
Exercice 5 :
‘Trouver Terreur dans le programme suivant :
FILE *fp ;
if(fp=fopen(fichier,"r"){
Mire le fichier jusqu’é la fin
i
felose({p) ;
Exercice 6 :
Supposons que I'on dispose d'un fichier constitué d'un ensemble dlentrée et que chaque entrée tiene
Sur G4 octets. On suppose également que fp est un pointeur sur le fichier. Utliser fy fonction fseek
Pour réaliser les opérations suivantes ;
1. Placer Ie curseur au début de la n'** entrée (On suppose que la Premiére entrée a pour
numéro 0)
2. Placer le curseur au début de la derniére entrée du fichier
3. se déplacer d'une entrée vers l'avant
4. se déplacer de deux entrées vers l'artigreTRAVAUX PRATIQUES.
Des trava
UX Pratiques longs et Compliqués comme les TPR.
TP1 : Imp] © quicksort 8énérique.
ip émentation d
TP2: Réalisation de Tencapsulation enc