tu peux écrire tes nombres comme ça en C++ aussi, et c'est pfs pratique (par exemple, la constante de Kavendish (gravitation) vaut: 6.67e-11, c'est plus pratique à écrire que 0.0000000000667 :) et c'est même plus facile à relire.
kanagan
Messages postés26Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention29 mars 2006 3 déc. 2004 à 22:26
Salut Kirua,
euh je suis débutant alors j'ai pas tout compris ce que tu as écrit, ça devient compliquer :-(
C'est quoi le e/E ?
Sinon pour tester le +/- je vais essayer mais je ne te garantis rien ;-)
kanagan
Messages postés26Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention29 mars 2006 3 déc. 2004 à 22:16
Salut Saros,
alors normalement je pense tu peux faire ça avec les bases < 10, par contre pour les autres (comme la base hexa) je ne pense pas que ça marche...
Dites moi si je me trompe.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 3 déc. 2004 à 22:10
vérifie que la chaîne de caractères ne contient que des 0-9, avec éventuellement un + ou un - devant. je suppose que tu ne gères pas les nombres non-entiers, donc tu ne dois pas vérifier le . ou le e/E. ça devrait aller non? commence par tester le +/- facultatif en début de chaîne, puis pour le reste vérifie que chaque fois les caractères sont compris entre '0' et '9' (ou '1' et '0', mais je pense que c'est le premier cas) pour balayer l'intervalle ASCII des chiffres.
kanagan
Messages postés26Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention29 mars 2006 3 déc. 2004 à 22:04
Merci coucou747, je vais essayer de modifier ma fonction afin qu'elle me retourne une chaine.
Sinon tu as dit que je devrai tester si l'argument que je recupere est un nombre, mais comment je peux faire ça ?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 3 déc. 2004 à 22:01
j'aurais plutôt fait comme ça:
string ToBase2(unsigned int n)
{
string str = "";
while(n > 0)
{
//n & 1 retourne vrai si le bit de poids faible est allumé, sinon faux
str = ((n & 1) ? '1' : '0') + str;
n >>= 1; //revient à diviser n par 2 (n/=2)
}
return str;
}
comme ça on n'utilise que des opérateurs binaires et c'est itératif (plus rapide que récursif)
Saros
Messages postés921Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention23 septembre 2010 3 déc. 2004 à 21:09
J'ai bien aimé la méthode... que j'ai trouvé originale...
On peut faire comme ça avec n'importe quelle base ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 3 déc. 2004 à 20:19
Les arguments c'est pas tellement pourri de faire comme ça, le truc c'est que tu devrais tester si ton argument est vraiment un nombre...
Moi cequi me dérange, c'est que ta fonction n'a pas de retour... Pourquois ne pas lui faire renvoyer une chaine ? ça permetrais de faire du code réutilisable.....
minet03
Messages postés415Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention 2 décembre 20053 3 déc. 2004 à 17:54
Je pense que ton code peut être amélioré au niveau de arg[]. En fait si il n'y a pas de chiffre entré, au lieu d'afficher une erreur, demande d'entrer un chiffre. Ce qui serai moins chian pour qqu qui lance le prog en cliquant dessus, il ne serai pas obligé de paC sur la consol pour l'ouvrir.
Bonne continuation
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 déc. 2004 à 17:49
Mais si ca marche, essaie depuis une commande dos et tu verras
asmanur
Messages postés230Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 4 août 2005 3 déc. 2004 à 12:47
Ah dsl t'es sous linux j'avais pas vu lol
Donc c peut etre différent (j'ai jamais programmé sous linux) mais en tout cas sous win ca marcherait pas
a+
asmanur
Messages postés230Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 4 août 2005 3 déc. 2004 à 12:45
ex quand tu clikes sur sur un *.doc l'application par défaut (Word) se lance et win lui file comme paramètre (en utilisant argv[]) le nom du fichier "associé" à l'éxécutable
si tu veux que l'utilisateur saississe un nb au clavier utilise scanf ou cin (respectivement C et C++ standard)
kanagan
Messages postés26Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention29 mars 2006 3 déc. 2004 à 11:43
Oui j'utilise argv, ce qui me permet de récuperer le nombre sur la ligne de commande du terminal.
Pourquoi ce n'est pas bien ?
Qu'est ce que tu entends par fichiers associés à l'exécutable? J'ai pas compris dsl...
asmanur
Messages postés230Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 4 août 2005 3 déc. 2004 à 07:43
Pour récupérer le nombre à convertir t'utilises argv?
C'est pas plutot les fichiers qui sont associés à l'éxécutable??
4 déc. 2004 à 11:05
3 déc. 2004 à 22:45
pour les bases de plus que 16 faut commencer par grouper dans un tableau de char ou de int...
3 déc. 2004 à 22:31
si tu écris 5e2 ou 5E2 ça revient à écrire:
5 * 10^2 (5 fois 10 exposant 2) = 500
c'est pratique quand tu joues avec des nombres très grands ou très petits:
3e9 = 3 milliards
3e-9 = 3 milliardièmes (3 * 10^-9)
tu peux écrire tes nombres comme ça en C++ aussi, et c'est pfs pratique (par exemple, la constante de Kavendish (gravitation) vaut: 6.67e-11, c'est plus pratique à écrire que 0.0000000000667 :) et c'est même plus facile à relire.
3 déc. 2004 à 22:26
euh je suis débutant alors j'ai pas tout compris ce que tu as écrit, ça devient compliquer :-(
C'est quoi le e/E ?
Sinon pour tester le +/- je vais essayer mais je ne te garantis rien ;-)
3 déc. 2004 à 22:16
alors normalement je pense tu peux faire ça avec les bases < 10, par contre pour les autres (comme la base hexa) je ne pense pas que ça marche...
Dites moi si je me trompe.
3 déc. 2004 à 22:10
3 déc. 2004 à 22:04
Sinon tu as dit que je devrai tester si l'argument que je recupere est un nombre, mais comment je peux faire ça ?
3 déc. 2004 à 22:01
string ToBase2(unsigned int n)
{
string str = "";
while(n > 0)
{
//n & 1 retourne vrai si le bit de poids faible est allumé, sinon faux
str = ((n & 1) ? '1' : '0') + str;
n >>= 1; //revient à diviser n par 2 (n/=2)
}
return str;
}
comme ça on n'utilise que des opérateurs binaires et c'est itératif (plus rapide que récursif)
3 déc. 2004 à 21:09
On peut faire comme ça avec n'importe quelle base ?
3 déc. 2004 à 20:19
Moi cequi me dérange, c'est que ta fonction n'a pas de retour... Pourquois ne pas lui faire renvoyer une chaine ? ça permetrais de faire du code réutilisable.....
3 déc. 2004 à 17:54
Bonne continuation
3 déc. 2004 à 17:49
3 déc. 2004 à 12:47
Donc c peut etre différent (j'ai jamais programmé sous linux) mais en tout cas sous win ca marcherait pas
a+
3 déc. 2004 à 12:45
si tu veux que l'utilisateur saississe un nb au clavier utilise scanf ou cin (respectivement C et C++ standard)
3 déc. 2004 à 11:43
Pourquoi ce n'est pas bien ?
Qu'est ce que tu entends par fichiers associés à l'exécutable? J'ai pas compris dsl...
3 déc. 2004 à 07:43
C'est pas plutot les fichiers qui sont associés à l'éxécutable??