T1.ini-pro : Sujet du TP4
T1.ini-pro : Sujet du TP4
Groupe ESIEE, Denis BUREAU, novembre 2000.
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 TD3.
Créer dans votre répertoire TPINFO\INIPRO\CONTROLE
un sous-répertoire TP3 pour y mettre les 4 .CPP de ce TP ;
la date avant laquelle ces fichiers doivent se trouver au bon endroit
avec le bon nom est précisée dans le fichier
E:\TS1\PROF\BUREAUD\INIPRO\TP3\DATES.TXT .
Il est nécessaire de tester au moins TOUS les exemples
donnés dans cet énoncé et de vérifier que la valeur obtenue
est bien la même.
D'autre part, on s'interdira évidemment d'utiliser les fonctions
floor() et ceil().
Dans la suite, le nombre de chiffres après la virgule sera toujours
supposé inférieur à 9.
2 Fonctions
- Écrire une fonction
arrpos_i(X,N) (d'abord en pseudo-langage,
puis traduire en C++) qui arrondit par valeur inférieure le nombre
X à N chiffres après la virgule.
Le réel X et l'entier N sont supposés positifs.
La fonction double pow(double N, double P)
calcule NP, et est utilisable après avoir inclus
math.h (pour mémoire, la fonction
double pow10(int) n'est pas dans la norme du C++).
- Écrire un programme principal
pour tester arrpos_i TANT QUE le réel
entré par l'utilisateur est non nul.
Par défaut, cout n'affichera que 6 chiffres significatifs.
Pour en avoir plus dans l'ensemble du programme,
il suffirait de mettre au début du programme
cout.precision( N ); où N est le nombre de chiffres
significatifs souhaité.
Mais ici, pour imposer à chaque fois
un affichage de N chiffres après la virgule
(ce qui n'est pas la même chose), il faut mettre au début du
programme cout.setf(ios::fixed); puis, pour chaque affichage,
cout << setprecision( N ) << X; où N est le nombre de
chiffres après la virgule souhaité pour X.
Remarque : Pour utiliser ces instructions de manipulation
du nombre de chiffres affichés après la virgule, il est
nécessaire de mettre #include <iomanip.h> .
Exemples : 3.14159 4 ® 3.1415 ,
3.14159 3 ® 3.141 et 3.14 2 ® 3.14 .
- Écrire une fonction
arrpos_s(X,N) (d'abord en pseudo-langage,
puis traduire en C++) qui arrondit par valeur supérieure le nombre
X à N chiffres après la virgule.
Le réel X et l'entier N sont supposés positifs.
- Modifier le programme principal
du 2. pour tester arrpos_s.
Exemples : 3.14159 1 ® 3.2 ,
3.14159 3 ® 3.142 ,
3.14 2 ® 3.14 et
3.14002 3 ® 3.141 .
- Écrire une fonction
arrpos_p(X,N) (d'abord en pseudo-langage,
puis traduire en C++) qui arrondit à la valeur la plus proche le
nombre X à N chiffres après la virgule.
Le réel X et l'entier N sont supposés positifs.
Cette fonction utilisera une seule fois soit arrpos_i ,
soit arrpos_s .
- Modifier le programme principal
du 4. pour tester arrpos_p.
Exemples : 3.14159 1 ® 3.1 ,
3.14159 3 ® 3.142 et 3.14 2 ® 3.14 .
- Écrire une fonction
arrondi(X,N,M) (d'abord en pseudo-langage,
puis traduire en C++) qui arrondit un nombre X
(positif ou négatif)
à N chiffres après la virgule, selon le mode M :
- si M = -1, par valeur inférieure,
- si M = 0, à la valeur la plus proche,
- si M = 1, par valeur supérieure.
L'entier N est supposé positif.
Cette fonction utilisera bien évidemment arrpos_i,
arrpos_p, et arrpos_s (sans les modifier !).
- Modifier le programme principal
du 6. pour tester arrondi.
Exemples : -314.15926 4 -1 ® -314.1593 ,
-314.15926 3 1 ® -314.159 ,
-314.15926 2 0 ® -314.16 ,
3.14159 2 1 ® 3.15 et
3.14 2 1 ® 3.14 .
Remarque :
Ce dernier programme principal, ainsi que les 4 fonctions
précédemment définies doivent être dans un même fichier
ARRONDIS.CPP.
- (Faire d'abord les exercices 3.1 à
3.6 s'il reste moins de deux heures)
CONVBASE.CPP :
Programme de conversion d'une base dans une autre (voir TD3).
3 Procédures
- Écrire une procédure
affiche (d'abord en pseudo-langage,
puis traduire en C++) qui affiche une fraction dont le numérateur
et le dénominateur sont passés en paramètres.
Le cas
général sera de la forme 5/7 ; les seuls cas particuliers
à considérer sont d'une part le numérateur nul, et d'autre
part le dénominateur égal à 1.
Un dénominateur nul ne gêne pas l'affichage.
Remarque :
Les problèmes posés par les signes négatifs seront
traités dans la procédure simplifie .
- Écrire un programme principal
pour tester affiche TANT QUE le
dénominateur entré par l'utilisateur est non nul.
Exemples : 0 4 ® 0 , -5 1 ® -5 et
5 -7 ® 5/-7 .
- Écrire une procédure
simplifie (d'abord en pseudo-langage,
puis traduire en C++) qui simplifie une fraction dont le numérateur
et le dénominateur sont passés en paramètres mixtes.
En cas
de nombres négatifs, le signe sera porté par le numérateur.
Il est conseillé de traiter le signe indépendamment de la
simplification ; celle-ci peut se faire en essayant de diviser le
numérateur et le dénominateur successivement par tous les
diviseurs compris entre un maximum et un minimum.
- Modifier le programme principal
du 2. pour tester simplifie en plus d'affiche.
Exemples : 25 35 ® 5 7 , 10 -4 ® -5 2 et
-33 -11 ® 3 1 .
- Écrire une procédure
ajoute (d'abord en pseudo-langage,
puis traduire en C++) qui additionne deux fractions dont les
numérateurs et dénominateurs sont passés en paramètres
d'entrée, le numérateur et le dénominateur du résultat
étant passés en paramètres de sortie.
- Modifier le programme principal
du 4. pour tester ajoute
en plus des deux autres procédures.
Essayer le programme
FRACS.EXE.
Exemples : 1 6 -1 3 ® -3 18 et
2 3 4 5 ® 22 15 .
Remarque :
Ce dernier programme principal, ainsi que les 3 procédures
précédemment définies doivent être dans un même fichier
FRACS.CPP.
- (travail personnel, faire d'abord l'exercice 2.9)
JHMS.CPP :
Écrire un programme
qui convertit un nombre d'heures ou de minutes ou de
secondes en jours,heures,minutes,secondes. Exemples :
hh mm ss : 94 0 0 ®
3j 22h 0mn 0s
hh mm ss : 0 0 93666 ®
1j 2h 1mn 6s
hh mm ss : 25 61 61 ®
1j 2h 2mn 1s
Ce seul énoncé suffit pour indiquer un programme principal du
type "saisie, traitement, affichage".
Il est conseillé de commencer par calculer le nombre total de
secondes, puis de le passer en paramètre à la procédure
de traitement.
File translated from
TEX
by
TTH,
version 2.75.
On 20 Nov 2000, 17:35.