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

changer un entier en double ? ou bien mon algo est mauvais ...help - C++ - Programmation

Marsh Posté le 08-07-2003 à 12:23:11    

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

Reply

Marsh Posté le 08-07-2003 à 12:23:11   

Reply

Marsh Posté le 08-07-2003 à 12:29:57    

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 ...

Reply

Marsh Posté le 08-07-2003 à 12:32:32    

oh le superbe rebouclage en récursif !

Reply

Marsh Posté le 08-07-2003 à 12:32:59    

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


Message édité par farib le 08-07-2003 à 12:33:10
Reply

Marsh Posté le 08-07-2003 à 12:33:20    

++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.
 
 
 

Reply

Marsh Posté le 08-07-2003 à 12:34:55    

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:

Reply

Marsh Posté le 08-07-2003 à 12:35:30    

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
Reply

Marsh Posté le 08-07-2003 à 12:42:25    

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 '-'

Reply

Marsh Posté le 08-07-2003 à 12:45:31    

++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:

Reply

Marsh Posté le 08-07-2003 à 12:46:12    

aucune de viable

Reply

Marsh Posté le 08-07-2003 à 12:46:12   

Reply

Marsh Posté le 08-07-2003 à 12:59:29    

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
Reply

Marsh Posté le 08-07-2003 à 13:02:31    

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.

Reply

Marsh Posté le 08-07-2003 à 13:09:47    

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]

Reply

Marsh Posté le 08-07-2003 à 13:16:56    

Documente toi sur les namespace C++.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-07-2003 à 13:24:55    

:whistle:


Message édité par xiluoc le 08-07-2003 à 13:27:41
Reply

Marsh Posté le 08-07-2003 à 13:28:29    

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à

Reply

Marsh Posté le 08-07-2003 à 13:32:10    

++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 ????

Reply

Marsh Posté le 08-07-2003 à 14:47:34    

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
Reply

Marsh Posté le 08-07-2003 à 15:24:19    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed