Je suis surpris, je n'ai pas trouvé de fonctions qui testent si un nombre est pair ou impair dans la librairie standard. J'ai regardé sur https://en.cppreference.com et sur http://www.cplusplus.com mais j'ai rien trouvé.
Quand une fonction est immédiate, il n'y a aucune raison quelle prenne de la place dans la bibliothèque standard. Exemples : - est-ce que c'est un nombre nul? Solution : bool isNul( int x ) { return x == 0; } - est-ce que deux nombres sont successifs? Solution : bool sontIlSuccessifs( int x , int y ) { return x+1 == y; } - est-ce que le nombre est impair? Solution : bool estImpair( int x ) { return x & 1; } - la fonction identité? Solution : double identite( double x ) { return x; }
Mais il y des contre-exemples, comme : - la macro min de 2 nombres qui vaut #define MIN(a,b) ((a)<(b)?(a):(b)) - pour savoir si c'est un chiffre qui peut être int isdigit( int x ) { return (unsigned char)x >= '0' && (unsigned char)x <= '9'; }
Je ne sais pas bien ce que tu appels "une fonction immédiate". Est-ce une fonction évidente ? ou une fonction qui tient sur une ligne ? Mais je comprend le sens du message: "trop simple, pas besoin!"
En tous cas, ça n'existe pas ! je ne me suis pas trompé!
La limitation, c'est quand même le type de l'argument: int, short, long, char, unsigned int, ... . Donc, pour être générique, il faudrait peut-être faire une fonction template ? (je pense que c'est mieux qu'une bonne vieille macro.)
Erreur de ma part, j'ai répondu pour du C (mais la bibliothèque standard du C++ n'a pas ajouté de isOdd()) Mon commentaire la macro MIN() est à remplacer en C++ par une fonction template min<>(). En effet on peut écrire vite fait une fonction générique isOdd()
template<typename T>
constexpr inline std::enable_if_t<std::is_integral_v<T>,bool>
isOdd( T x ) {
return (x & 1);
}
PS: La forme de ton template me surprend ... mais, débutant, je n'ai jamais encore "joué" avec <type_traits>, donc c'est normal! Je ferais plus tard ... si besoin.
Mon template est plutôt comme suit, (mais sans vérification du type) :
&1 est aujourd'hui de l'obfuscation. Il vaut mieux préférer le modulo 2 qui est sémantiquement plus fort, et laisser le compilo le remplacer par un et bit à bit.
(Il est vrais que je ne m'étais pas posé la question de nombres négatifs!)
Tests si Pair ou Impair
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
En recherche d'emploi.