probleme programme passage differentes bases

probleme programme passage differentes bases - C - Programmation

Marsh Posté le 29-05-2008 à 14:50:11    

voila j'ai un problème mon programme que voici (plus bas !!) compile mais quand je l'applique il me dit erreur de segmentation(core dumped).
il n'affiche que un des deux "affiche 1"(a oui aussi il ne marche pas pour les base inférieurs à 10(dans le else)
 

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h> /*sert reeellement a quelquechose ?? metonnerait fort !!*/
  4. void clear(int tableau[50])
  5. {
  6. int i;
  7. for(i=0;i<50;i++)
  8. {
  9.  tableau[i]=20;
  10. }
  11. }
  12. void affiche(int tableau[50])
  13. {
  14. int i;
  15. printf("\nle nombre est :" );
  16. for (i=0;i<50;i++)
  17. {
  18.  if (tableau[i]==20)
  19.  {printf("." );}
  20.  else
  21.  {
  22.   printf("%i",tableau[i]);
  23.  }
  24. }
  25. }
  26. int main()
  27. {
  28. //long=int juste pour info c'est aussi des entiers ! reel : float ou double . plutot float pas besoin du double !
  29. int nombre,reste,base,resultat,basef;  // tu entres ce qu'il faut dans nombre en base 10 et base d'arrivée (je te laisse faire avec un scanf tout bete en base d�cimale, le meme qu'avant)  
  30. int expmax ; //ici doivent figurer toutes tes variables !!
  31. int tableau[50];
  32. int tab2[50];
  33. int inter;
  34. int compteur;
  35. int i;
  36. int fin = 0,continuer; // pourquoi une variable qui sert a mettre plutot des caractères ??un entier serait mieu ! int(pas long)
  37. expmax =1 ;
  38. resultat=0 ;
  39.   while (fin == 0)
  40.   {
  41. clear(tableau);
  42. printf("\n\nquel nombre souhaitez vous convertir ?" );
  43.         scanf("%d",&nombre);
  44.         printf ("\n\nquelle est la base de ce nombre ? " );
  45.         scanf ("%d",&base);
  46.         printf("\n\nen quelle base voulez vous obtenir le resultat? " );
  47.         scanf("%d",&basef);
  48. reste = nombre ;
  49. /*on cherche le rang le plus grand du premier chiffre : par exemple : 1265 : tu vas avoir 10^3 +265->on cherche ce 3 */
  50. while( (floor (nombre) / (pow(10,expmax)) )!=0 ) //floor : c'est la partie entiere dans ta division : si on trouve 0 c'est qu'on a d�pass� (floor-10^3 /10^4)= 0)
  51. {
  52.  expmax++ ;
  53. }
  54. expmax-- ; //on se ramène à l'exposant max avec la boucle d'avant , on l'avait dépassé d'1.
  55. if (base==10)
  56. { printf("bonour" );
  57.  compteur=49;
  58.  while(nombre!=0)
  59.  {
  60.   tableau[compteur]=nombre%basef;
  61.   nombre=nombre/basef;
  62.   compteur--;
  63.  }
  64.  affiche(tableau);
  65. }
  66. else
  67. { printf("\naffiche 1" );
  68.  clear(tab2);
  69.  printf("\naffiche 1" );
  70.  compteur=0;
  71.  while (nombre>=10)
  72.  {
  73.   inter=nombre/pow(10,expmax);
  74.   tab2[compteur]=inter;
  75.   nombre=nombre-inter*pow(10,expmax);
  76.   compteur++;
  77.   expmax--;
  78.  }
  79.  compteur=0;
  80.  expmax=0; printf("affiche 2" );
  81.  do
  82.  {
  83.   i=tab2[compteur];
  84.   compteur++;
  85.   expmax++;
  86.  }while(i!=20);
  87.  expmax--;
  88.  i=0;
  89.  do
  90.  {
  91.   resultat=resultat+tab2[i]*pow(base,expmax);
  92.   i++;
  93.   expmax--;
  94.  }
  95.  while(tab2[i]!=20);
  96.  affiche(tab2);
  97. }
  98. }
  99. }

Reply

Marsh Posté le 29-05-2008 à 14:50:11   

Reply

Marsh Posté le 30-05-2008 à 09:43:47    

Utilise gdb sur le core dump pour voir où ça segfault.
Essaie aussi de te passer de math.h, qui est est complètement inutile pour ce que tu fais.
Sur le principe aussi, si tu fais scanf(%d) tu attend forcément un nombre en base 10... Avec ton programme on ne peut pas entrer de nombre en hexa, par exemple.


Message édité par matafan le 30-05-2008 à 09:45:07
Reply

Sujets relatifs:

Leave a Replay

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