2024-09-10 15:05:59 +02:00
|
|
|
---- TP05: Réels ----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. Avec 12 chiffres après la virgule, on obtient bien le nombre de chiffres
|
|
|
|
souhaités, mais le programme affiche un 4 au lieu d'un 3 à la fin.
|
|
|
|
Avec 15 chiffres, on se rend compte que le programme affiche des chiffres
|
|
|
|
qu'on ne lui a pas demandé d'afficher, ce qui s'explique sûrement par
|
|
|
|
le fait qu'au niveau binaire, ce nombre est impossible à représenter
|
|
|
|
de façon exacte comme en base 10. Le 13e chiffre étant un 5,
|
|
|
|
on comprend donc que le progamme a simplement arrondi le nombre
|
|
|
|
à partir du 12e chiffre après la virgule.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Lors de l'emploi de l'opérateur %, on effectue l'opération sur deux réels
|
|
|
|
(de type double), ceci provoque une erreur car il n'y aura jamais de reste
|
|
|
|
dans une opération entre réels, car on effectue toujours une division
|
|
|
|
non euclidienne.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. On obtient les résultats suivants :
|
|
|
|
|
|
|
|
inf
|
|
|
|
-inf
|
|
|
|
-nan
|
|
|
|
|
|
|
|
Les 2 premiers résulats peuvent peut-être s'expliquer par le fait qu'informatiquement,
|
|
|
|
on divise +1.0 et -1.0 par une valeur nulle, ce qui revient donc
|
|
|
|
à multiplier ces nombres par l'inverse de la "valeur nulle", donc l'infini.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. En écrivant le programme de façon classique, on se rend compte que le tampon
|
|
|
|
stocke le saut de ligne comme un caractère lorsque l'utilisateur valide le réel
|
|
|
|
qu'il a entré. Le programme affiche donc 5 fois un saut de ligne sans attendre quoique
|
|
|
|
ce soit de l'utilisateur car le tampon n'est en réalité pas vide. Pour pallier ce problème,
|
|
|
|
il suffit d'ajouter un getchar qui ne stockera rien pour se débarasser du caractère \n :
|
|
|
|
|
|
|
|
On a donc le programme suivant :
|
|
|
|
|
|
|
|
# include <stdlib.h>
|
|
|
|
# include <stdio.h>
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
double nombre;
|
|
|
|
char lettre;
|
|
|
|
printf("Veuillez saisir un réel : ");
|
|
|
|
scanf("%lf", &nombre);
|
|
|
|
printf("\nSa notation scientifique est : %e\n", nombre);
|
|
|
|
printf("Veuillez taper un caractère : ");
|
|
|
|
getchar();
|
|
|
|
lettre = getchar();
|
|
|
|
printf("%c\n", lettre);
|
|
|
|
printf("%c\n", lettre);
|
|
|
|
printf("%c\n", lettre);
|
|
|
|
printf("%c\n", lettre);
|
|
|
|
printf("%c\n", lettre);
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5.
|