Convertir un entier binaire en decimal (Langage C) ??
Résolu
yyassinos
Messages postés
13
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis bloquer, si qelq1 peut m'aider. mon prob est le suivant:
Comment écrire un programme (en Langage C) qui converti un entier binaire en décimal.
j'ai réussis a créer un prog qui converti un entier décimal en binaire, mais j'ai bloquer dans le sens contraire !!
si qelq1 peut m'aider et Merciii d'avance.
Je suis bloquer, si qelq1 peut m'aider. mon prob est le suivant:
Comment écrire un programme (en Langage C) qui converti un entier binaire en décimal.
j'ai réussis a créer un prog qui converti un entier décimal en binaire, mais j'ai bloquer dans le sens contraire !!
si qelq1 peut m'aider et Merciii d'avance.
9 réponses
-
Bonjour,
Ton problème est de convertir le binaire en décimal ? C'est bien cela ?
-
Bonjour,
Commence par nous poster le "code" que tu as fait. On pourra se faire une idée plus précise (n'oublie pas de le mettre dans les balises "code" (à droite du bouton "souligné")).
Cdlt,
Google is your friend -
Voila l'idée de code ke j'ai fait:
#include<stdio.h> #include<string.h> int i,j,k,n; char a[30],t['n'],t2['n']; main(){ printf("Donner un entier binaire:\n"); scanf("%s",&a); n=strlen(a); for(i=n-1;i>=0;i--){ for(j=0;j<=i;j++){ t2[k]=0; t2[k]=t2[k]+(t[j])*(2^i); k=k+1; } } for(k=0;k<=n-1;k++){ printf("%d",t2[k]); } return0; }-
char a[30],t['n'],t2['n'];
int i,j,k,n;
Evite les variables globales. Mets-les dans la fonction.
char t['n']; n'existe pas. Si tu veux un tableau d'une taille connue à l'exécution, je te conseille de passer par un pointeur : char *t. De même pour t2.
Ensuite, une fois que n sera connue, il faudra allouer la taille du pointeur : t=malloc(n); Et une fois que tu ne te serviras plus de la variable, il faudra utiliser, free(t);
main(){
Le prototype de main() sans argument est : int main (void)
t2[k]=0; t2[k]=t2[k]+(t[j])*(2^i);
Aucun intérêt de mettre t2[k] à 0 pour lui affecter une valeur juste après. Cela ne doit pas être dans la même boucle. 2^i, ne calcule pas la puissance (mais xor). Je te conseille de te faire une fonction puissance. Ou à défaut, tu peux utiliser pow() de la libmath.
return0;
Tu as oublié un espace entre return et 0;
Je te laisse tout corriger. Teste et indique-nous les erreurs qui restent. -
Mercii frère FIDDY pour tes conseils, enfin j'ai trouver la solution:
#include <stdio.h> #include <math.h> main() { int i,n,d=0; int t['n']; printf("Donnnez le nombre de bits a convertir : "); scanf("%d",&n); for(i=n-1;i>=0;i--) { printf("\nDonnez le i EME bit : "); scanf("%d",&t[i]); } for(i=0;i<n;i++) { d=d+t[i]*pow(2,i); } printf("\nLe nombre en decimal est : %d",d); return 0; } -
-
-
-
assalamou alaykom :)
j'ai 1 an sans faire aucun de language C lol , mais j'étais excellente, je pense que c'est une bonne idée
soit b votre nombre binaire à determiner l'équivalent en entier , exemple 11000101
le résultat (le nombre entier) est la somme ; i est un compteur (degré de puissance ou position)
somme := 0;
i:=0;
while (b>0)
begin
if ((b%10)==1) then %le chiffre des unité%
begin
if (i==0) then somme=1;
else
puis2 := 1;
for (y=1;y>i;i++)
puis2 := puis2 * 2; %2 à la puissance i %
end;
somme = somme + puis2;
b:=b/10;
i:=i+1;
end;
return somme;
bonne chance -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
#include<stdio.h>
#include<string.h>
int main(void){
int i,n;
char a[30];
printf("Donner un entier binaire:\n");
scanf("%s",&a);
n=strlen(a);
int resultat=0;
for(i=n-1;i>=0;i--){
if(a[i]=='1'){
resultat+=(2^(i+1));
}
}
printf("Resultat : %d",resultat);
return 0;
} -
J'ai refais le programme, je me suis trompé, c'étais pas i+1, j'ai ajouté une fonction puissance 2:
#include<stdio.h>
#include<string.h>
int power2(n){
int resultat=1;
while(n>0){
resultat*=2;
n--;
}
return resultat;
}
int main(void){
int i,n;
char a[30];
printf("Donner un entier binaire:\n");
scanf("%s",&a);
n=strlen(a);
int resultat=0;
for(i=n-1;i>=0;i--){
if(a[i]=='1'){
resultat+=(power2(i));
}
}
printf("Resultat : %d",resultat);
return 0;
}-
Pourquoi tu ne vérifies pas les codes que tu proposes ?
Tu verrais d'une part que ça ne compiles pas (il te manque un int dans la déclaration de power2) et d'autre part que ça ne fais pas ce que l'on veut car tu considères que a[i] correspond à 2^i ce qui est faux, car les bits se lisent de droite à gauche, contrairement au tableau qui va de gauche à droite !
De plus en utilisant la fonction power2 comme tu le fais, tu refais tout le calcul de 2^n à partir de 1 à chaque itération, tu fais donc beaucoup plus de calculs que nécessaire, car il suffit d'une petite opération pour modifier la puissance d'une itération à l'autre.
int n=strlen(a); int resultat=0; int puissance=1; for (int i=n-1; i>=0; i--) { if (a[i]=='1') resultat += puissance; puissance *= 2; }
Ou alors, pour optimiser un peu (en évitant par exemple le calcul de strlen) :
int resultat=0; char* b = a; for(;;) { if (b[0]=='1') (resultat <<= 1)++; else if (b[0]=='\0') break; else resultat <<= 1; b++; } -
-
-
-
-
#include<stdio.h>
#include<conio.h>
#include <math.h>
main()
{
int n,d,i,nb,p,s=0;
printf(" donnez le nombre de bits \n ");
scanf("%d",&nb);
int t[nb];
printf("\n la methede pour entrer un nombre en binaire ");
for(i=0;i<nb;i++)printf("\n * ");
printf("<= le pois le plus fort \n");
printf("\n donnez le nombre en binaire \n");
for(i=0;i<nb;i++)
{
scanf("%d",&t[i]);
}
for(i=0;i<nb;i++)
{
p=t[i]*(pow(2,i));
s=s+p;
}
for(i=nb-1;i>=0;i--)
{
printf(" %d",t[i]);
}
printf(" => %d ",s);
getch();} -
Non, c'est bien i+1, car dans la boucle i arrive à zéro,
J'ai testé "^" en C, et ça fonctionne bien, de mon coté.
Ce code fonctionne -t-il chez vous ?-
Le ^ existe en C, mais comme le disait fiddy, il ne s'agit pas d'un opérateur de puissance, mais d'un opérateur OU exclusif (voir Langage C - Les opérateurs).
Exemple : 2 ^ 6 = 010 ^ 110 = 100 = 4. On est loin de 64... -
Non, c'est bien i+1, car dans la boucle i arrive à zéro,
Non ! Prends un exemple concret, et tu verras bien.
Prenons par exemple a=10
Dans ce cas, n = 2
1ère boucle : i = n-1 = 1
a[1] = 1 donc resultat = resultat + 2 puissance (i+1) = 0 + 2 puissance 2 = 4.
2ème boucle : i = i-1 = 0
a[1] = 0 donc on touche pas à resultat
Donc resultat = 4.
Outch.
Re teste avec 2 puissance i, et là ça fonctionne ;-)
'ai testé "^" en C, et ça fonctionne bien, de mon coté.
J'ai pas dit que ça ne fonctionnait pas mais que cela ne représentait pas l'opérateur puissance. ^ représente le xor... Rien à voir.
-