Se connecter avec
S'enregistrer | Connectez-vous

Fonction Recursive pour convertir en binaire

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

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

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

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.

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();
}
redaviche@guest

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



OmaR a édité ce message
Lassé par la pub ? Créez un compte
Tom's guide dans le monde