Votre question

Fonction Recursive pour convertir en binaire

Tags :
  • element
  • Programmation
Dernière réponse : dans Programmation
12 Janvier 2009 01:41:11

salut je suis debutante en c et j ai fait un programme pour convertir un nombre decimale en base 2,8 ou 16.
Mais je desire le faire avec un fonction recursive,Helas j ai pas encore trouver une solution.
Si quelqu un peut m aider ca serai chouette.
Merci d'avance

Autres pages sur : fonction recursive convertir binaire

12 Janvier 2009 07:25:09

Cherche encore un peu par toi même, c'est les bases il faut que tu y arrives seul.
Mets ce que tu as déjà fait, et ensuite je t'aiderai.
13 Janvier 2009 00:04:25

bon voila mon programme sans recursivité

#include<stdio.h>
#include<math.h>

void binaire(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,2);
nbr=nbr/2;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en binaire est: ");
for(i=k-1;i>=0;i--){
printf("%d ",t);
}
}

void octale(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,8);
nbr=nbr/8;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en octale est: ");
for(i=k-1;i>=0;i--){
printf("%d ",t);
}
}

void hexa(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,16);
nbr=nbr/16;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en Hexadecimale est: ");
for(i=k-1;i>=0;i--){
if(t==10){printf("A");}
if(t==11){printf("B");}
if(t==12){printf("C");}
if(t==13){printf("D");}
if(t==14){printf("E");}
if(t==15){printf("F");}
if(t<10){printf("%d ",t);}
}
}
void main(){
int nbr;

printf("entrer un nombre\n");
scanf("%d",&nbr);
binaire(nbr);
octale(nbr);
hexa(nbr);

}



et merci.
Contenus similaires
a b L Programmation
13 Janvier 2009 21:55:19

Généralement, pour trouver une récursivité, il faut penser que tu vas appliquer une fonction à un ensemble de données.
Le but est que dans cette fonction, tu traites un élément et/ou que tu découpes en un autre sous-élément (ou plusieurs sous-éléments) que tu peux utiliser en rappelant la fonction.
Une fois que ceci est fait, il faut penser à tous les cas d'arrêt et penser à éviter une récursivité infinie.

Dans ton cas, si tu veux convertir un nombre en binaire, l'ensemble est l'ensemble de bits représenté par le nombre donné en entrée, ton sous-ensemble sera un nouveau nombre amputé d'un bit (ça fait mal :)  ).
La récursivité en sortie sera l'ensemble des bits au format binaire (liste de 0 et 1).
15 Janvier 2009 00:54:19

merci trop.
J'ai trouvé la solution et la voila :


#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<string.h>
int comp;

void binaire(int i,int nbr,int t[40]){
if (nbr!=0){
t=fmod(nbr,2);
nbr=nbr/2;
comp++;
i++;
binaire(i,nbr,t);
}
}

void octale(int i,int nbr,int t[40]){
if (nbr!=0){
t=fmod(nbr,8);
nbr=nbr/8;
comp++;
i++;
octale(i,nbr,t);
}
}

void hexad(int i,int nbr,int t[40]){
if (nbr!=0){
t=fmod(nbr,16);
nbr=nbr/16;
comp++;
i++;
hexad(i,nbr,t);
}
}


void main(){
int choix,nbr,t[40],i;
char rep[4];

do{

clrscr();
printf("\n-------------------------LA LISTE DES CHOIX------------------------");
printf("\n 1---->Convertion d'un decimale vers BINAIRE.");
printf("\n 2---->Convertion d'un decimale vers OCTALE.");
printf("\n 3---->Convertion d'un decimale vers HEXADECIMALE.");
printf("\n 4---->Convertion d'un decimale vers BINAIRE,OCTALE et HEXADECIMALE.");
printf("\nchoix: ");
scanf("%d",&choix);
clrscr();
switch(choix){
case 1:
printf("Veuillez saisir le nombre a convertir en binaire: ");
scanf("%d",&nbr);
comp=0;
binaire(0,nbr,t);
i=comp-1;
printf("la solution est: ");
while(i>=0){
printf("%d ",t);
i--;
}
break;
case 2:
printf("Veuillez saisir le nombre a convertir en octale: ");
scanf("%d",&nbr);
comp=0;
octale(0,nbr,t);
i=comp-1;
printf("la solution est: ");
while(i>=0){
printf("%d",t);
i--;
}
break;
case 3:
printf("Veuillez saisir le nombre a convertir en hexadecimale: ");
scanf("%d",&nbr);
comp=0;
hexad(0,nbr,t);
i=comp-1;
printf("la solution est: ");
while(i>=0){
if(t==10){printf("A");}
if(t==11){printf("B");}
if(t==12){printf("C");}
if(t==13){printf("D");}
if(t==14){printf("E");}
if(t==15){printf("F");}
if(t<10){printf("%d",t);}
i--;
}
break;
case 4:
printf("Veuillez saisir le nombre a convertir: ");
scanf("%d",&nbr);
//convertion vers le binaire
comp=0;
binaire(0,nbr,t);
i=comp-1;
printf("la convertion en binaire est: ");
while(i>=0){
printf("%d ",t);
i--;
}
//convertion vers l'octale
comp=0;
octale(0,nbr,t);
i=comp-1;
printf("\nle convertion en octale est: ");
while(i>=0){
printf("%d",t);
i--;
}
//convertion vers l'hexadecimale
comp=0;
hexad(0,nbr,t);
i=comp-1;
printf("\nle convertion en hexadecimale est: ");
while(i>=0){
if(t==10){printf("A");}
if(t==11){printf("B");}
if(t==12){printf("C");}
if(t==13){printf("D");}
if(t==14){printf("E");}
if(t==15){printf("F");}
if(t<10){printf("%d",t);}
i--;
}
break;


}
printf("\n\nVoulez vous continuez?(oui/non)");
scanf("%s",rep);

}
while(strcmp(rep,"oui")==0 || strcmp(rep,"OUI")==0);
clrscr();
printf("\n\tPROGRAMME TERMINE");


}



en tous cas ca marche et s'il y a un conseil pour le code j'aimerai bien le savoir et merci pour tout.
a b L Programmation
15 Janvier 2009 20:36:55

Un seul conseil: Ajoute des commentaires sur les fonctions en décrivant ce qu'elles font et en décrivant leurs paramètres.
24 Avril 2011 21:50:17

Salut
i have a solution for u
#include<stdio.h>


void conversion(int n, int b)
{
char c[]={"0123456789ABCDEF"};
int q,r;
q=n/b;
r=n%b;
if(q!=0)
conversion(q,b);
printf("%c",c[r]);

}

main()
{
int n,b;
printf("donner un nombre decimal:");
scanf("%d",&n);
printf("donner la base voulue:");
scanf("%d",&b);
conversion(n,b);
printf("\n");
getch();
}
26 Mai 2012 12:13:42

einfachgirl a dit :
bon voila mon programme sans recursivité

#include<stdio.h>
#include<math.h>

void binaire(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,2);
nbr=nbr/2;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en binaire est: ");
for(i=k-1;i>=0;i--){
printf("%d ",t);
}
}

void octale(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,8);
nbr=nbr/8;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en octale est: ");
for(i=k-1;i>=0;i--){
printf("%d ",t);
}
}

void hexa(int nbr){
int t[10];
int i=0;
int k=0;
do{
t=fmod(nbr,16);
nbr=nbr/16;
i++;
k++;
}
while(nbr!=0);
printf("\nla conversion en Hexadecimale est: ");
for(i=k-1;i>=0;i--){
if(t==10){printf("A");}
if(t==11){printf("B");}
if(t==12){printf("C");}
if(t==13){printf("D");}
if(t==14){printf("E");}
if(t==15){printf("F");}
if(t<10){printf("%d ",t);}
}
}
void main(){
int nbr;

printf("entrer un nombre\n");
scanf("%d",&nbr);
binaire(nbr);
octale(nbr);
hexa(nbr);

}



et merci.

Remplasser ce code par le suivant pour qu'il soit fonctionnel
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<conio.h>
  4. /* la fonction de conversion en binaire */
  5. void binaire(int nbr){
  6. int t[10];
  7. int i=0;
  8. int k=0;
  9. do{
  10. t[i]=nbr%2;
  11. nbr=nbr/2;
  12. i++;
  13. k++;
  14. }
  15. while(nbr!=0);
  16. printf("\nla conversion en binaire est: ");
  17. for(i=k-1;i>=0;i--){
  18. printf("%d",t[i]);
  19. }
  20. }
  21. /* la Fonction de conversion en octal*/
  22. void octale(int nbr){
  23. int t[10];
  24. int i=0;
  25. int k=0;
  26. do{
  27. t[i]=nbr%8;
  28. nbr=nbr/8;
  29. i++;
  30. k++;
  31. }
  32. while(nbr!=0);
  33. printf("\nla conversion en octale est: ");
  34. for(i=k-1;i>=0;i--){
  35. printf("%d",t[i]);
  36. }
  37. }
  38. /* la Fonction de convertion en Hexadecimal */
  39. void hexa(int nbr){
  40. int t[10];
  41. int i=0;
  42. int k=0;
  43. do{
  44. t[i]=nbr%16;
  45. nbr=nbr/16;
  46. i++;
  47. k++;
  48. }
  49. while(nbr!=0);
  50. printf("\nla conversion en Hexadecimale est: ");
  51. for(i=k-1;i>=0;i--){
  52. if(t[i]==10){printf("A");}
  53. if(t[i]==11){printf("B");}
  54. if(t[i]==12){printf("C");}
  55. if(t[i]==13){printf("D");}
  56. if(t[i]==14){printf("E");}
  57. if(t[i]==15){printf("F");}
  58. if(t[i]<10){printf("%d",t[i]);}
  59. }
  60. }
  61. main(){
  62. int nbr;
  63.  
  64. printf("entrer un nombre: ");
  65. scanf("%d",&nbr);
  66. binaire(nbr);
  67. octale(nbr);
  68. hexa(nbr);
  69. getch();
  70. }



Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS