3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 avril 2009 à 01:25
24 avril 2009 à 01:25
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 ?
mouaaahhh ZERO pointé !
j'ai lu trop vite... le test pour hdn = 7 n'est pas ce que j'ai compris.
Mais l'explication de fiddy me semble juste (si le C++ était fabuleurx, ça se saurait)
donc le test avec hdn = 7 est vérifié car hd < 6 et l'encadrement n'est compris que par toi => hdn = 7 !!!
j'ai lu trop vite... le test pour hdn = 7 n'est pas ce que j'ai compris.
Mais l'explication de fiddy me semble juste (si le C++ était fabuleurx, ça se saurait)
donc le test avec hdn = 7 est vérifié car hd < 6 et l'encadrement n'est compris que par toi => hdn = 7 !!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 avril 2009 à 01:36
24 avril 2009 à 01:36
si le C++ était fabuleurx, ça se saurait
Objection ! Je dirais plutôt : "si le C et le C++ étaient des langages faciles". ^^
Objection ! Je dirais plutôt : "si le C et le C++ étaient des langages faciles". ^^