Conversion

Fermé
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 11 mars 2015 à 10:37
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 25 mars 2015 à 15:52
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>
A voir également:

2 réponses

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 28 Date d'inscription lundi 16 février 2015 Statut Membre Dernière intervention 9 juin 2016 4
11 mars 2015 à 15:40
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 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48
25 mars 2015 à 15:52
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