Fonction Recursive pour convertir en binaire
Dernière réponse : dans Programmation
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
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
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.
#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.
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).
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.
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();
}
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();
}
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
#include<stdio.h> #include<math.h> #include<conio.h> /* la fonction de conversion en binaire */ void binaire(int nbr){ int t[10]; int i=0; int k=0; do{ t[i]=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]); } } /* la Fonction de conversion en octal*/ void octale(int nbr){ int t[10]; int i=0; int k=0; do{ t[i]=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]); } } /* la Fonction de convertion en Hexadecimal */ void hexa(int nbr){ int t[10]; int i=0; int k=0; do{ t[i]=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]);} } } main(){ int nbr; printf("entrer un nombre: "); scanf("%d",&nbr); binaire(nbr); octale(nbr); hexa(nbr); getch(); }
OmaR a édité ce message
Lassé par la pub ? Créez un compte