Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1167 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  changer un entier en double ? ou bien mon algo est mauvais ...help

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

changer un entier en double ? ou bien mon algo est mauvais ...help

n°450961
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 12:23:11  profilanswer
 

en cherchant sur le forum j ai trouver ca : int number_of_digits= 1 +(int) log10(abs(a)); qui mest bien util.
 
l ennonce du pb est de crer une fonction int digit( int n, int k)
qui renvoie le chiffre d un nombre.
 
exemple :
digit(5642,0) = 2
digit(5645,2) = 6
 
 
 
j ai fait ca mais le compilo memerde pour la conversion de int en double pour log10.
 
 

Code :
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cmath>
  4. using namespace std;
  5. int digit(int n, int k) {;
  6. //double a=n;
  7. int number_of_digits= 1 +(int) log10(abs(a));
  8. char buffer [number_of_digits];
  9. //int b=a;
  10. itoa (n,buffer,10);
  11. return n[number_of_digits-k];
  12. }
  13. int main() {
  14. char answer;
  15. double  a,b;
  16. cout << "Enter your number : ";
  17. cin >>a;
  18. cout << "Which digit  : ";
  19. cin >>b;
  20. cout << "Result : " << digit(a,b) << "/n";
  21. cout <<"quit ? [y/n]";
  22. cin >> answer;
  23. if (answer!='y') {
  24. main(); }
  25. }

 
 
 
j ai regarder du cote conversion int en double et vice versa, y apas uen autre methode ??
 
merci

mood
Publicité
Posté le 08-07-2003 à 12:23:11  profilanswer
 

n°450968
Taz
bisounours-codeur
Posté le 08-07-2003 à 12:29:57  profilanswer
 

t'as pas fini tes conneries? ta fonction digit est un desastre. fais un recherche sur le forum sur comment transformer un nombre en chaine, y a des tas d'exemples 'C++' à base de string (et pas mauvais C n'est ce pas). ton code est d'ailleurs invalide en C++ à cause tu ableau à taille variable ...

n°450972
farib
Posté le 08-07-2003 à 12:32:32  profilanswer
 

oh le superbe rebouclage en récursif !

n°450973
farib
Posté le 08-07-2003 à 12:32:59  profilanswer
 

eh, Taz, tu m'en laisses un bout, dis ?


Message édité par farib le 08-07-2003 à 12:33:10
n°450974
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 12:33:20  profilanswer
 

++Taz a écrit :

t'as pas fini tes conneries? ta fonction digit est un desastre. fais un recherche sur le forum sur comment transformer un nombre en chaine, y a des tas d'exemples 'C++' à base de string (et pas mauvais C n'est ce pas). ton code est d'ailleurs invalide en C++ à cause tu ableau à taille variable ...


 
meuh non ca a lair bien
 
je rentre un nombre int.
j obtiens sa longueur avec   1 + abs(log10(nombre))
je converti ce nombre en string avec itoa
et voila.
 
 
 

n°450977
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 12:34:55  profilanswer
 

farib a écrit :

oh le superbe rebouclage en récursif !


j aimerai plus de details je ne demande qu a aprendre et m ameliorer, je nai jamais poster un bout de code sans critique, c est si moche que ca ?  :cry:  :lol:

n°450979
farib
Posté le 08-07-2003 à 12:35:30  profilanswer
 

bah déja je comprend pas ce que ton programme est sensé faire...
edit : ah, si


Message édité par farib le 08-07-2003 à 12:35:58
n°450983
Taz
bisounours-codeur
Posté le 08-07-2003 à 12:42:25  profilanswer
 

Code :
  1. #include <sstream>
  2. #include <string>
  3. int digit(int n, int k)
  4. {
  5.   ostringstream os;
  6.   os << n;
  7.   return os.str()[k];
  8. }


 
mais t'as interet et a verifier ton indice k et à gérer le cas ou on renvoie le '-'

n°450987
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 12:45:31  profilanswer
 

++Taz a écrit :

Code :
  1. #include <sstream>
  2. #include <string>
  3. int digit(int n, int k)
  4. {
  5.   ostringstream os;
  6.   os << n;
  7.   return os.str()[k];
  8. }


 
mais t'as interet et a verifier ton indice k et à gérer le cas ou on renvoie le '-'


merci, et sinon tu vois une autre methode sans faire appel sstream ?
 
 
 
 
 :jap:

n°450989
Taz
bisounours-codeur
Posté le 08-07-2003 à 12:46:12  profilanswer
 

aucune de viable

mood
Publicité
Posté le 08-07-2003 à 12:46:12  profilanswer
 

n°450992
HelloWorld
Salut tout le monde!
Posté le 08-07-2003 à 12:59:29  profilanswer
 

Et un truc du genre :

Code :
  1. char digit( int n, int k )
  2. {
  3.     int d1 = ::pow( 10, k );
  4.     int d2 = d1 * 10; //::pow( 10, k + 1 );
  5.     return ((n % d2) / d1) + '0';
  6. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°450993
Taz
bisounours-codeur
Posté le 08-07-2003 à 13:02:31  profilanswer
 

mouef, ça doit marcher aussi
 
au fait: si tu fais
#include <cmath>
 
pow est introduit dans std::
 
par contre, effectivement, si tu fais
 
extern "C"
{
  #include <math.h>
}
 
alors oui, pow est dans le référenciel lexical global.

n°450997
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 13:09:47  profilanswer
 

HelloWorld a écrit :

Et un truc du genre :

Code :
  1. char digit( int n, int k )
  2. {
  3.     int d1 = ::pow( 10, k );
  4.     int d2 = d1 * 10; //::pow( 10, k + 1 );
  5.     return ((n % d2) / d1) + '0';
  6. }




ca marche bien aussi maia y aun truc bizarre
::pow( sa amrche tout suel sans inclure cmath !
lorsque j inclus cmath et j enleve les ::
il memerde avec double , int ect ..
 
a quoi serve c :: ?
thks
 [:alarmclock119]

n°451004
HelloWorld
Salut tout le monde!
Posté le 08-07-2003 à 13:16:56  profilanswer
 

Documente toi sur les namespace C++.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°451011
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 13:24:55  profilanswer
 

:whistle:


Message édité par xiluoc le 08-07-2003 à 13:27:41
n°451015
Taz
bisounours-codeur
Posté le 08-07-2003 à 13:28:29  profilanswer
 

coulix a aucune notion d'objet. alors on va le laisser tranquille avec les NS et arretez de l'embrouillez. tu vous using namespace std; partout et voilà

n°451028
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 13:32:10  profilanswer
 

++Taz a écrit :

coulix a aucune notion d'objet. alors on va le laisser tranquille avec les NS et arretez de l'embrouillez. tu vous using namespace std; partout et voilà


j ai compris que les ::
sa marchait comme ca  
 
 

Code :
  1. namespace MonEspace
  2. {
  3. int a, b, c;
  4. }
  5. int a;
  6. void main ()
  7. {
  8. a = 1;// la variable a globale reçoit la valeur 1
  9. MonEspace::a = 2;// la variable a de l'espace de nommage MonEspace reçoit 2
  10. }

 
 
mais :: tout seul ????

n°451151
HelloWorld
Salut tout le monde!
Posté le 08-07-2003 à 14:47:34  profilanswer
 

C'est le namespace global.

Code :
  1. int a;
  2. int main( void )
  3. {
  4.     int a;
  5.     ::a = 2; // le a en dehors du main
  6.     return 0;
  7. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°451218
xiluoc
un pc pour les unirs ....
Posté le 08-07-2003 à 15:24:19  profilanswer
 

HelloWorld a écrit :

C'est le namespace global.

Code :
  1. int a;
  2. int main( void )
  3. {
  4.     int a;
  5.     ::a = 2; // le a en dehors du main
  6.     return 0;
  7. }




ok tks sa refere a une var globale en fait


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  changer un entier en double ? ou bien mon algo est mauvais ...help

 

Sujets relatifs
Changer deux frames à partir d'un seul lien[HELP] Faire un driver c'est dur ?
Comment transformer des caractères en entier ?ASP : Double FOR avec un splitt :??:
help comment mettre mes bordure de cadre en couleur noirchanger l'attribut taille d'un fichier ???
algo de graph[HELP] Compatibilite avec bcp de browsers
HELP pour commande gestion de camera !!changer de séquence
Plus de sujets relatifs à : changer un entier en double ? ou bien mon algo est mauvais ...help


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR