R1.01 – Prog#7 – Exercice 9

Un nombre réel peut être représenté sous deux formes dites virgule fixe ou notation scientifique (ou virgule flottante).

  1. un nombre en virgule fixe est composé d’au maximum quatre parties contiguës (sans espace ou séparateur quelconque) :
    1. son signe : ‘+’ ou ‘-‘. S’il est absent, le nombre est considéré comme positif.
    2. sa partie entière, toujours exprimée en base 10,
    3. le caractère point décimal ‘.’ car nous sommes dans le système anglo-saxon !
    4. sa partie décimale, elle aussi toujours exprimée en base 10,

    Si le point décimal est présent, il doit obligatoirement être précédé ou suivi d’au moins un digit décimal.

  2. un nombre en notation scientifique est composé de trois parties obligatoires :
    1. un nombre réel en virgule fixe, exprimé en base 10, signé ou non,
    2. le caractère ‘e’ ou ‘E’,
    3. un nombre entier exprimé en base 10, signé ou non, qui représente la puissance de 10 par laquelle il faut multiplier la première partie pour obtenir la valeur réelle.

      De plus, pour que la chaîne représentant un nombre réel soit valide, il faut que la valeur soit compatible avec le type correspondant (float ou double).

Ecrire la fonction extractionsReels() qui, dans une boucle, extrait (opérateur >>) au clavier (ou sur un fichier redirigé sur l’entrée standard cin) tous les réels et les affiche à l’écran à raison d’un par ligne. La boucle se termine lorsque l’extraction échoue (fail()).

Faire plusieurs essais, en saisissant un ou plusieurs réels par ligne, séparés ou non par des caractères d’espacement, en saisissant des lignes vierges ou seulement composées de caractères d’espacement.

Vous devez constater que :

  1. n’importe quel réel valide est extrait,
  2. tous les caractères d’espacement sont ignorés,
  3. le programme se termine au premier échec d’extraction (voir les indications ci-dessus). Le caractère “fin-de-fichier” (Ctrl+D) permet aussi de terminer la saisie.

Les réels suivants sont valides :

123
123.45
-12e12
-12.e-12
+12.23
-.23
1234567890

La dernière valeur est valide mais tronquée : 1.23457e+09.

Les réels suivants sont invalides et terminent le programme :

-.e12
1e123456789
-e12