Probleme "if" en c ++
nikoleboss13
-
loupius -
loupius -
Bonjour,
Voici mon programme :
#include <stdlib.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
double heuresdenuit (double hd,double hf)
{
double hdn;
if ((6<hd<21)&&(6<hf<21)&&(hd<=hf)) hdn = 1;
if ((6<hd<21)&&(6<hf<21)&&(hd>hf)) hdn = 2;
if ((hd<6)&&(hf<6)&&(hf>hd) ) hdn = 3;
if ((hd<6)&&(hf<6)&&(hd>hf) ) hdn = 4;
if ((hd>21)&& (hf>21)&&(hd<hf)) hdn = 5;
if ((hd>21)&& (hf>21)&&(hf<hd)) hdn = 6;
if ((hd<6)&&(6<hf<21)&&(hd<hf)) hdn = 7;
if ((hf<6)&&(6<hd<21)&&(hf<hd)) hdn = 8;
if ((6<hd<21)&&(hf>21)) hdn = 9;
if ((6<hf<21)&&(hd>21)) hdn = 10;
if ((hd<6)&&(hf>21)) hdn = 11;
if ((hf<6)&&(hd>21)) hdn = 12;
return hdn;
}
int main( )
{
double hd,hf,hdn,n;
while (n!=0) {
printf("Indiquez l'heure de commancement : ");
scanf("%lf",&hd);
printf("Indiquez l'heure de fin : ");
scanf("%lf",&hf);
printf("\n");
printf("le nombre d'heures de nuit est : %lf ",heuresdenuit (hd,hf));
printf("\n");
system ("pause");
}}
je le fais tourner eavec dev c++.
MOn probleme est si je rentre par exemple hd=2 et hf=3 il me dit que hnc=7 au lieu 3.
Par contre si je met hd=13 et hf=17 il me sort bien hnc= 1 .
J'ai aussi remarquer que si je lever les lignes de hnc egal a 7 jusqu'a hnc egal a 12 (donc je laisse les lignes d ehnc=1 jusqu'a 6) alors la le programme marche bien.
J'y comprend plus rien.
Merci de votre aide
Voici mon programme :
#include <stdlib.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
double heuresdenuit (double hd,double hf)
{
double hdn;
if ((6<hd<21)&&(6<hf<21)&&(hd<=hf)) hdn = 1;
if ((6<hd<21)&&(6<hf<21)&&(hd>hf)) hdn = 2;
if ((hd<6)&&(hf<6)&&(hf>hd) ) hdn = 3;
if ((hd<6)&&(hf<6)&&(hd>hf) ) hdn = 4;
if ((hd>21)&& (hf>21)&&(hd<hf)) hdn = 5;
if ((hd>21)&& (hf>21)&&(hf<hd)) hdn = 6;
if ((hd<6)&&(6<hf<21)&&(hd<hf)) hdn = 7;
if ((hf<6)&&(6<hd<21)&&(hf<hd)) hdn = 8;
if ((6<hd<21)&&(hf>21)) hdn = 9;
if ((6<hf<21)&&(hd>21)) hdn = 10;
if ((hd<6)&&(hf>21)) hdn = 11;
if ((hf<6)&&(hd>21)) hdn = 12;
return hdn;
}
int main( )
{
double hd,hf,hdn,n;
while (n!=0) {
printf("Indiquez l'heure de commancement : ");
scanf("%lf",&hd);
printf("Indiquez l'heure de fin : ");
scanf("%lf",&hf);
printf("\n");
printf("le nombre d'heures de nuit est : %lf ",heuresdenuit (hd,hf));
printf("\n");
system ("pause");
}}
je le fais tourner eavec dev c++.
MOn probleme est si je rentre par exemple hd=2 et hf=3 il me dit que hnc=7 au lieu 3.
Par contre si je met hd=13 et hf=17 il me sort bien hnc= 1 .
J'ai aussi remarquer que si je lever les lignes de hnc egal a 7 jusqu'a hnc egal a 12 (donc je laisse les lignes d ehnc=1 jusqu'a 6) alors la le programme marche bien.
J'y comprend plus rien.
Merci de votre aide
A voir également:
- Probleme "if" en c ++
- If exist - Forum Java
- The realtek network controller was not found. if deep sleep mode is enabled please plug the cable ✓ - Forum Pilotes (drivers)
- If char ✓ - Forum Programmation
- The Realtek Network Controller was not found. - Forum Pilotes (drivers)
- Php if multiple conditions ✓ - Forum PHP
3 réponses
Salut,
if ((6<hd<21) n'est pas correct.
Cela va évaluer 6<hd qui va te renvoyer 1 ou 0 en fonction de la véracité de l'expression.
Et ensuite le programme évaluera 0 (ou 1)<21.
Toi ce que tu veux faire est : if((6<hd && hd<21) && ... )
De plus, tu devrais plutôt utiliser des else if ou alors effectuer directement tes return dans les if (par exemple : if ((6<hd<21)&&(6<hf<21)&&(hd<=hf)) return 1; )
Cela simplifiera considérablement tes conditions.
Sinon, pourquoi utiliser un compilateur C++ alors que ton programme est du C ? (utilisation de stdlib.h, stdio.h, etc)
Et enfin, en C pour afficher un double (comme un float), on utilise %f et non %lf.
printf("le nombre d'heures de nuit est : %f ",heuresdenuit (hd,hf));
Cdlt
if ((6<hd<21) n'est pas correct.
Cela va évaluer 6<hd qui va te renvoyer 1 ou 0 en fonction de la véracité de l'expression.
Et ensuite le programme évaluera 0 (ou 1)<21.
Toi ce que tu veux faire est : if((6<hd && hd<21) && ... )
De plus, tu devrais plutôt utiliser des else if ou alors effectuer directement tes return dans les if (par exemple : if ((6<hd<21)&&(6<hf<21)&&(hd<=hf)) return 1; )
Cela simplifiera considérablement tes conditions.
Sinon, pourquoi utiliser un compilateur C++ alors que ton programme est du C ? (utilisation de stdlib.h, stdio.h, etc)
Et enfin, en C pour afficher un double (comme un float), on utilise %f et non %lf.
printf("le nombre d'heures de nuit est : %f ",heuresdenuit (hd,hf));
Cdlt
salut
rappel: je suis une bille en C++
1. je savais pas qu'un langage proposait enfin des prédicats d'encadrement : a < x < b
d'habitude, il faut noter a < x et x < b. Jolie prouesse du C++
2. le plus important : toutes les lignes de tes tests sont exécutées.
en imaginant que les test avec encadrements fonctionne, il y a bien un moment ou hdn vaut 3... mais les tests continuent !!!
et arrivé au test if ((hd<6)&&(6<hf<21)&&(hd<hf)) hdn = 7; il se trouve que pour hd=2 et hf=3, la condition est vérifiée, on met donc 7 dans hdn ! exit le 3 :D
ça répond à ta question ?
rappel: je suis une bille en C++
1. je savais pas qu'un langage proposait enfin des prédicats d'encadrement : a < x < b
d'habitude, il faut noter a < x et x < b. Jolie prouesse du C++
2. le plus important : toutes les lignes de tes tests sont exécutées.
en imaginant que les test avec encadrements fonctionne, il y a bien un moment ou hdn vaut 3... mais les tests continuent !!!
et arrivé au test if ((hd<6)&&(6<hf<21)&&(hd<hf)) hdn = 7; il se trouve que pour hd=2 et hf=3, la condition est vérifiée, on met donc 7 dans hdn ! exit le 3 :D
ça répond à ta question ?