DEV/DEV1.1/TP05/TP05_reponses.txt

161 lines
3.8 KiB
Plaintext
Raw Permalink Normal View History

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;
}
2024-09-10 16:54:52 +02:00
5.
# include <stdlib.h>
# include <stdio.h>
int main(void) {
double montant;
printf("Combien d'euros souhaitez vous investir ?\n -->");
scanf("%lf", &montant);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
montant = montant + (4*montant/100);
printf("%9.4f\n", montant);
return EXIT_SUCCESS;
}
6.
Version 1 :
# include <stdlib.h>
# include <stdio.h>
int main(void) {
double reel_1;
double reel_2;
double reel_3;
double reel_4;
double reel_5;
printf("Veuillez entrer un réel : ");
scanf("%lf", &reel_1);
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel_2);
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel_3);
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel_4);
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel_5);
getchar();
printf("\nSomme : %f\n", reel_1 + reel_2 + reel_3 + reel_4 + reel_5);
return EXIT_SUCCESS;
}
Version 2 :
# include <stdlib.h>
# include <stdio.h>
int main(void) {
double reel;
double somme;
somme = 0;
printf("Veuillez entrer un réel : ");
scanf("%lf", &reel);
somme += reel;
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel);
somme += reel;
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel);
somme += reel;
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel);
somme += reel;
getchar();
printf("\nVeuillez entrer un réel : ");
scanf("%lf", &reel);
somme += reel;
getchar();
printf("\nSomme : %f\n", somme);
return EXIT_SUCCESS;
}