DEV/DEV1.1/TP05/TP05_reponses.txt
2024-09-10 15:05:59 +02:00

65 lines
2.0 KiB
Plaintext

---- 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.