SAVOIR SI UN NOMBRE EST PAIR OU IMPAIR

cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 - 1 févr. 2004 à 15:27
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008 - 11 févr. 2004 à 15:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20002-savoir-si-un-nombre-est-pair-ou-impair

cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
11 févr. 2004 à 15:37
Ben de toute façon un nombre est pair seulement s'il est entier.... Mais à mon avis la méthode modulo est plus rapide (et celle des bits par la même occasion)
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
11 févr. 2004 à 15:36
Ben de toute façon un nombre est pair seulement s'il est entier.... Mais à mon avis la méthode modulo est plus rapide (et celle des bits par la même occasion)
sitesref Messages postés 40 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 31 juillet 2004
9 févr. 2004 à 08:57
tibur tu l'as fait exprès de mettre 4 fois le même post super long ? ah la la..

en fait il y a une autre méthode pour tester l'imparité

bool EstImpair(int n)
{
bool ret = false;
int b = n/2; // c++ va automatiquement arrondir le résultat
if (b*2 n) ret false;
else ret = true;
return ret;
}

essayez avec un nbr, vous verrez que ça marche. le seul inconvénient est que ma méthode ne marche que pour des entiers...
et voilà...
sitesref Messages postés 40 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 31 juillet 2004
9 févr. 2004 à 08:57
tibur tu l'as fait exprès de mettre 4 fois le même post super long ? ah la la..

en fait il y a une autre méthode pour tester l'imparité

bool EstImpair(int n)
{
bool ret = false;
int b = n/2; // c++ va automatiquement arrondir le résultat
if (b*2 n) ret false;
else ret = true;
return ret;
}

essayez avec un nbr, vous verrez que ça marche. le seul inconvénient est que ma méthode ne marche que pour des entiers...
et voilà...
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
5 févr. 2004 à 01:50
Ya une methode (un peu) plus rapide :

#include
#include <time.h>

bool impaire(int i){
return i&1; // c'est un ET bit à bit sur le dernier bit de l'entier i
}

bool impaire2(int i){
return i%2;
}

int main(int argc, char**argv){

clock_t start_1, start_2, end_1, end_2;

start_1 = clock();
for(long int i=0; i<100000000; i++)
impaire(2);
end_1 = clock();


start_2 = clock();
for(long int i=0; i<100000000; i++)
impaire2(2);
end_2 = clock();

std::cout <<"elapsed 1 : " << end_1 - start_1 <<std::endl;
std::cout <<"elapsed 2 : " << end_2 - start_2 <<std::endl;

return 0;
}

resultats sur mon vieux 200 Mhz :

elapsed 1 : 856
elapsed 2 : 1057

Bon, d'accord, je fais chier le monde pour une 20 aine de % !
gnarf !

tib
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
5 févr. 2004 à 01:50
Ya une methode (un peu) plus rapide :

#include
#include <time.h>

bool impaire(int i){
return i&1; // c'est un ET bit à bit sur le dernier bit de l'entier i
}

bool impaire2(int i){
return i%2;
}

int main(int argc, char**argv){

clock_t start_1, start_2, end_1, end_2;

start_1 = clock();
for(long int i=0; i<100000000; i++)
impaire(2);
end_1 = clock();


start_2 = clock();
for(long int i=0; i<100000000; i++)
impaire2(2);
end_2 = clock();

std::cout <<"elapsed 1 : " << end_1 - start_1 <<std::endl;
std::cout <<"elapsed 2 : " << end_2 - start_2 <<std::endl;

return 0;
}

resultats sur mon vieux 200 Mhz :

elapsed 1 : 856
elapsed 2 : 1057

Bon, d'accord, je fais chier le monde pour une 20 aine de % !
gnarf !

tib
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
5 févr. 2004 à 01:49
Ya une methode (un peu) plus rapide :

#include
#include <time.h>

bool impaire(int i){
return i&1; // c'est un ET bit à bit sur le dernier bit de l'entier i
}

bool impaire2(int i){
return i%2;
}

int main(int argc, char**argv){

clock_t start_1, start_2, end_1, end_2;

start_1 = clock();
for(long int i=0; i<100000000; i++)
impaire(2);
end_1 = clock();


start_2 = clock();
for(long int i=0; i<100000000; i++)
impaire2(2);
end_2 = clock();

std::cout <<"elapsed 1 : " << end_1 - start_1 <<std::endl;
std::cout <<"elapsed 2 : " << end_2 - start_2 <<std::endl;

return 0;
}

resultats sur mon vieux 200 Mhz :

elapsed 1 : 856
elapsed 2 : 1057

Bon, d'accord, je fais chier le monde pour une 20 aine de % !
gnarf !

tib
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
3 févr. 2004 à 11:06
c quoi cette histoire de lettre...?????
dans un programme qui se propose de "trier" des CHIFFRES ???
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
3 févr. 2004 à 06:09
oui,
é =\\202
ê = \\210
ô = \\223
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
2 févr. 2004 à 16:52
c'est pas antislash + code ?
sman0 Messages postés 39 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 3 novembre 2005
1 févr. 2004 à 20:57
Salut

les lettres avec accents ne sont pas directement utilisables en c++
il faut donc remplacer les é à è ê et autres par des codes commencants par /

en voici quelques uns

é = /202
ê = /210
ô = /223
sman0 Messages postés 39 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 3 novembre 2005
1 févr. 2004 à 20:54
Salut

les lettres avec accents ne sont pas directement utilisables en c++
il faut donc remplacer les é à è ê et autres par des codes commencants par /

en voici quelques uns

é = /202
ê = /210
ô = /223
sman0 Messages postés 39 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 3 novembre 2005
1 févr. 2004 à 20:51
Salut

les lettres avec accents ne sont pas directement utilisables en c++
il faut donc remplacer les é à è ê et autres par des codes commencants par /

en voici quelques uns

é = /202
ê = /210
ô = /223
lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006
1 févr. 2004 à 20:22
Après le if, le else, etc. les portées ("{" et "}") ne sont pas nécessaire wiaeke, si il n'y a qu'une instruction.
Mais c'est vrai qu'elles facilitent la lecture du code, si on utilise aussi les alinéas.

Par contre pour le cout l'opérateur de redirection de flux ("<<" ou ">>") doit être dirigé vers la cible, donc ici vers le cout, vers l'écran. Pour le cin c'est l'inverse : ils sont dirigés du cin (le clavier) vers la variable.

+++
Lastpix'l
wiaeke Messages postés 38 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 9 avril 2005
1 févr. 2004 à 17:20
salut je crois que vous me connaissiez
au fait si le code est ecrit en c++ il vous faudra faire ceci:
apres un if ou un else if il faut
{ // ouvrir
votre code
} // fermer
et pour le cout c'est comme cela regarder
cout<< jhjimjjko<<endl; et non
cout >>hjrlkjt
<<endl; ou bien si c'est moi qui me trompe prevenez moi merci et a++
cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 2
1 févr. 2004 à 15:27
Arf ! J'ai fait une faute, pis je peux pas la corriger ! Je vous montre le code corrigé:

// Savoir si un nombre est pair ou impair
// By Re[M]i_34

#include

using namespace std;

int main ()
{
long number = 0; // Stocker les entrées
cout << endl
<< "Entrez un nombre inférieur à 2 milliards : ";
cin >> number;

if(number % 2L) // Tester le reste aprés division par 2
cout >> endl // Ici, si reste est 1
<< "Le nombre que vous avez entré est impair. " << endl;
else
cout << endl
<< "Le nombre que vous avez entré est pair. " << endl;
return 0;
}

Voilà :)
Rejoignez-nous