Fonction Recursive pour convertir en binaire
Forum Programmation : Fonction Recursive pour convertir en binaire
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
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.
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[i]=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[i]);
}
}
void octale(int nbr){
int t[10];
int i=0;
int k=0;
do{
t[i]=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[i]);
}
}
void hexa(int nbr){
int t[10];
int i=0;
int k=0;
do{
t[i]=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[i]==10){printf("A" );}
if(t[i]==11){printf("B" );}
if(t[i]==12){printf("C" );}
if(t[i]==13){printf("D" );}
if(t[i]==14){printf("E" );}
if(t[i]==15){printf("F" );}
if(t[i]<10){printf("%d ",t[i]);}
}
}
void main(){
int nbr;
printf("entrer un nombre\n" );
scanf("%d",&nbr);
binaire(nbr);
octale(nbr);
hexa(nbr);
}
et merci.
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).
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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[i]=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[i]=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[i]=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]);
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]);
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[i]==10){printf("A" );}
if(t[i]==11){printf("B" );}
if(t[i]==12){printf("C" );}
if(t[i]==13){printf("D" );}
if(t[i]==14){printf("E" );}
if(t[i]==15){printf("F" );}
if(t[i]<10){printf("%d",t[i]);}
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]);
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]);
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[i]==10){printf("A" );}
if(t[i]==11){printf("B" );}
if(t[i]==12){printf("C" );}
if(t[i]==13){printf("D" );}
if(t[i]==14){printf("E" );}
if(t[i]==15){printf("F" );}
if(t[i]<10){printf("%d",t[i]);}
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.
Un seul conseil: Ajoute des commentaires sur les fonctions en décrivant ce qu'elles font et en décrivant leurs paramètres.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci
Il y a 636 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
