Conversion

delavega470 Messages postés 316 Statut Membre -  
delavega470 Messages postés 316 Statut Membre -
bonjour à tous j'ai fais cet exercice mais quand je fais la conversion de 12 par exemple en base 2 cela me donne 0011 au lieu de 1100 je ne sais pas comment inverser le reste de chaque division
help me svp
<code c>
#include <stdio.h>
#include <stdlib.h>
int nb,r,q,i,b;

int main()
{
printf("Entrer le nombre positif\n");
do{
scanf("%i",&nb);
}while(nb<=0);
do{
printf("Entrer la base 2, 8 ou 16\n");
scanf("%i",&b);
}while(b!=2 && b!=8 && b!=16);
switch(b){
//conversion en base 2
case 2:
printf("(lecture de droite a gauche\n");
printf("Votre nombre en base 2 est:\n");
do{ i=0;
q=nb/2;
r=nb-2*q;
nb=q;

printf("%i",r);

}while(q!=0);break;

case 8:
printf("lecture de droite a gauche");
printf("Votre nombre en base 8 est:\n");
do{
q=nb/8;
r=nb-8*q;
printf("%i",r);
nb=q;
}while(q!=0);break;

case 16:
printf("lecture de droite a gauche\n");
printf("Votre nombre en base 16 est:\n");
do{
q=nb/16;
r=nb-16*q;
switch(r){
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default:printf("%i",r);
}
nb=q;
}while(q!=0);break;
}printf("\n");

system("pause");
return 0;
}
</code c>

2 réponses

JwTdd
 
salut, au pire stoque chaques elements puis affiche les à l'envers
Pour faire directement un algo dans l'autre sens si tu reste en base 2^n tu peux utiliser des masques.
0
Niveka Messages postés 29 Statut Membre 4
 
salut! moi j'ai l'habitude d'utiliser une boucle FOR, le principe est simple après avoir calculé puis enregistré dans un tableau des restes possibles de ce nombre par 2, vous utilisez une décrémentation pour afficher le résultat. voici un exemple:


printf(" Ici vous changerez un nombre en base 2\n");
printf(" Entrer la valeur de a :\n");
scanf("%d", &a);
for(i=0; a!=0; i++)
{
tableau[i]=a%2;
a=(a-tableau[i])/2;
}
printf("%d en base 2 = \t",a);
for(j=i-1; j>=0 ; j--)
printf("%d",tableau[j]);
return 0;
0
delavega470 Messages postés 316 Statut Membre 48
 
j'ai refais mais j'ai un souci au niveau de la base 16
<code c>#include <stdio.h>
#include <stdlib.h>
int nb,r,q,i,b,j,t[8];

int main()
{ system("color FC");
printf("Entrer le nombre positif\n");
do{
scanf("%i",&nb);
}while(nb<=0);
do{
printf("Entrer la base 2, 8 ou 16\n");
scanf("%i",&b);
}while(b!=2 && b!=8 && b!=16);
switch(b){
//conversion en base 2
case 2:
for(i=0; nb!=0; i++)
{
t[i]=nb%2;
nb=(nb-t[i])/2;
} system("color FC");
printf(" le resultat base 2 = \t");
for(j=i-1; j>=0 ; j--)
{
printf("%d",t[j]);
} break;
//conversion en base 8
case 8:
for(i=0; nb!=0; i++)
{
t[i]=nb%8;
nb=(nb-t[i])/8;
}
printf(" le resultat base 8 = \t");
for(j=i-1; j>=0 ; j--)
{
printf("%d",t[j]);
} break;
//conversion en base 16
case 16:
for(i=0; nb!=0; i++)
{
t[i]=nb%16;
nb=(nb-t[i])/16;
switch(t[i]){
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default:printf("%i",t[j]);
for(j=i-1; j>=0 ; j--)
{
printf("%d",t[j]);
} break;
}
}



}

return 0;
}



</code c>
0