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

  1. É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++).
  2. É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 .
  3. É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.
  4. 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 .
  5. É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 .
  6. 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 .
  7. É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 :

    L'entier N est supposé positif. Cette fonction utilisera bien évidemment arrpos_i, arrpos_p, et arrpos_s (sans les modifier !).
  8. 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.
  9. (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

  1. É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 .
  2. É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 .
  3. É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.
  4. 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 .
  5. É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.
  6. 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.
  7. (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.