T1.programmation : Sujet du TP4
T1.programmation : Sujet du TP4
Groupe ESIEE, Denis BUREAU, mars 2002.
Attention !
Le sujet peut être modifié jusqu'à la veille du TP.
1 Les objectifs
Être capable de réaliser sur machine des programmes mettant en
oeuvre les notions vues au cours 4.
(créer un répertoire TPINFO\PRO\CONTROLE puis
un sous-répertoire TP4 pour y mettre l'ensemble des fichiers
à la fin de ce TP, mais travailler sur C:)
2 Fichiers de texte : FORMATE.CPP
2.1 Programme principal
- Écrire un programme qui saisit au clavier le nom d'un fichier
d'entree et le nom d'un fichier de sortie.
- Après chaque saisie, le programme ouvre le fichier et vérifie
que cette opération n'a pas échoué.
- Dans le cas contraire, il est possible d'appeler la procédure
standard exit() pour sortir du programme.
- Le prototype de cette procédure se trouve dans
<stdlib.h> et on passe généralement à cette
procédure un entier différent de 0 pour signaler que le
programme s'arrête sur une erreur.
- Si tout s'est bien passé, le programme principal appellera la
procédure
void formate( ifstream & fe, ofstream & fs );
décrite au paragraphe suivant.
(ne pas mettre const avant chaque paramètre)
- Ne pas oublier en tête du fichier les inclusions puis les
déclarations de constantes, de types et du prototype.
2.2 Procédure formate
3 Compilation séparée
3.1 Créer les fichiers
- Recopier 5 fois le fichier TRIREELS.CPP du TP2 dans le
répertoire TP4 en l'appelant MAIN.CPP,
TRI.CPP, ES.CPP, MESTYPES.H, et
MESPROTO.H (profitez-en pour vous entraîner avec les
commandes DOS).
- Éditer MAIN.CPP pour ne garder que le programme principal.
- Éditer TRI.CPP pour ne garder que la procédure de tri.
- Éditer ES.CPP pour ne garder que les procédures
d'Entrée/Sortie (saisie et affichage).
- Éditer MESTYPES.H pour ne garder que la déclaration des
types.
- Éditer MESPROTO.H pour ne garder que la déclaration des
prototypes des sous-programmes.
- Réfléchir aux inclusions nécessaires et modifier les fichiers
en conséquence.
- Attention : il ne faut pas inclure (directement ou
indirectement) deux fois les mêmes
déclarations dans le même fichier .CPP .
3.2 Créer un projet (avec MS-Visual C++ 6.0)
Les opérations ci-dessous sont très détaillées, mais avec un peu
d'habitude, cela paraît très simple.
- Menu File/New
- Cliquer sur Win32 Console Application
- Puis cliquer sur ...
- Choisir le bon répertoire
- Puis cliquer sur OK
- Dans le champ "Project name :", cliquer, puis taper le nom
TRICS (CS pour Compilation Séparée)
- Puis cliquer sur OK
- Vérifier que An empty project est bien sélectionné
- Puis cliquer sur Finish puis sur OK
- Cliquer sur File view puis sur le + de
TRICS files
- Cliquer avec le bouton droit sur Source Files et choisir
Add Files to Folder...
- Remonter dans le répertoire parent et sélectionner
les 3 fichiers .CPP
- Cliquer sur OK
- Menu File/Close Workspace
- A partir de ce moment, il suffit de choisir
TRICS\TRICS.DSW dans
file/Open Workspace... pour retrouver tous les fichiers du
projet et les fenêtres ouvertes correspondantes.
- Remarque 1 : pour ouvrir un .CPP visible dans la fenêtre
du projet, il suffit de double-cliquer sur son nom.
- Remarque 2 : pour qu'un .CPP soit visible dans la fenêtre
du projet, il suffit de cliquer sur le + de
Source Files.
- Remarque 3 : bien que ce ne soit pas indispensable, il peut être
pratique de faire apparaître les .H dans la rubrique
Header Files ; il suffit pour cela de procéder comme
pour ajouter les .CPP dans Source Files
(étape 11).
Sinon, ils seront automatiquement ajoutés à la rubrique
External Dependencies lors de la première compilation.
3.3 Tester le programme
- Soit il faut compiler chaque .CPP (Compile),
puis faire l'édition de liens (Build)
puis lancer l'exécution (Execute),
- soit il faut lancer la "fabrication conditionnelle"
(Build) qui compile les .CPP qui ont été
modifiés et effectue l'édition de liens,
puis lancer l'exécution (Execute),
- soit il faut lancer la "fabrication totale"
(Rebuild All) qui compile tous les .CPP et
effectue l'édition de liens,
puis lancer l'exécution (Execute),
- soit il faut lancer l'exécution (Execute)
qui lance auparavant la "fabrication conditionnelle".
Il est souhaitable de ne pas utiliser cette dernière possibilité
car il faut regarder les éventuels warnings avant de lancer
l'exécution.
Toutes les options décrites ci-dessus sont accessibles soit dans le menu
Build soit par les icônes situées complètement à droite.
Il est possible que dans certains .CPP il n'y ait pas
d'entrées/sorties; dans ce cas, il ne faut plus inclure
<iostream.h> .
Il ne doit plus y avoir aucun warning ni aucune erreur que ce soit pour
chaque compilation séparée ou pour l'édition de liens.
3.4 Première modification du programme
- Créer un fichier MESCONST.H qui contiendra la
définition de la constante entière MAX qui vaudra
par exemple 20.
- Ajouter un test dans la procédure de saisie pour limiter la
taille du tableau et ajouter un affichage au début du
programme principal pour prévenir l'utilisateur que ce programme
ne peut pas trier des tableaux de plus de MAX cases.
- Inclure "MESCONST.H" dans tous les .CPP qui en ont
besoin.
- Lancer la fabrication conditionnelle et tester le nouveau programme.
3.5 Deuxième modification du programme
- Créer un fichier MESVAR.H qui contiendra la
définition des variables entières globales NbT et
NbE qui contiendront respectivement le nombre de Tests et
le nombre d'Échanges effectués par la procédure de tri.
- Le programme principal devra afficher ces deux valeurs après
avoir appelé la procédure de tri.
- Penser à l'initialisation des deux variables.
- Dans TRI.CPP, insérer là où il faut
l'incrémentation de NbT et celle de NbE.
- Inclure "MESVAR.H" dans tous les .CPP qui en ont
besoin.
- Lancer la fabrication conditionnelle.
- Aucun warning et aucune erreur ne doivent apparaître à la
compilation de chaque .CPP ; par contre, quelles sont ces
erreurs à l'édition de liens ?
- Pour résoudre le problème sans avoir deux versions du fichier
MESVAR.H, il existe une solution :
- Placer le mot STATUT (ce n'est pas un mot standard
du C++) avant la déclaration de
chaque variable dans MESVAR.H .
- Ajouter la ligne #define STATUT extern avant
l'inclusion de MESVAR.H dans TRI.CPP .
- Ajouter la ligne #define STATUT //normal avant
l'inclusion de MESVAR.H dans MAIN.CPP .
- Les variables seront donc réellement déclarées dans
MAIN.CPP alors qu'elles seront extern dans
TRI.CPP .
- Lancer la fabrication conditionnelle.
- Tester le programme avec plusieurs tableaux différemment triés.
4 Projet
Ne pas travailler sur le projet pendant ce TP, à moins d'avoir fini
complètement les deux exercices et de les avoir montrés à Albert
CORNEC ou à Denis BUREAU.
5 Contrôle
Il est fortement conseillé de finaliser les 2 exercices, en travail
personnel si nécessaire.
Un contrôle des exercices effectués pendant le TP sera effectué
par une procédure automatique lancée peu de temps après le TP.
Pour que cette procédure trouve vos fichiers, ils doivent obligatoirement
se trouver dans le répertoire CONTROLE\TP4 à créer dans votre
répertoire TPINFO\PRO qui se trouve à la racine de votre
compte, et être nommés comme cela est indiqué pour chaque exercice.
Vous devez donc les recopier à partir de C:\TEMP.
Les exercices sont effectués en binôme, et les fichiers ne résident
que sur un seul compte. Pour que le second membre du binôme soit
pris en compte par la procédure automatique, il faut créer dans le
même répertoire un fichier login.NOM où login est le
login du second membre du binôme et NOM l'extension obligatoire.
Le contenu du fichier login.NOM est indifférent.
La moindre faute d'orthographe dans ces noms de fichiers ou bien dans
les répertoires et sous-répertoires concernés empêche la procédure
automatique de trouver le fichier ; l'exercice correspondant sera alors
considéré comme non fait.
Pour vérifier que toutes les obligations ci-dessus sont respectées,
vous devez exécuter sous DOS la commande
E:\TS1\PROF\BUREAUD\PRO\TP4\TESTFICH login
où login est le login du compte sur lequel sont les fichiers.
File translated from
TEX
by
TTH,
version 2.75.
On 12 Mar 2002, 20:34.