Problème convertisseur Decimal/binaire

Résolu/Fermé
Thonyglandil Messages postés 3 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 20 avril 2011 - 20 avril 2011 à 15:38
Thonyglandil Messages postés 3 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 20 avril 2011 - 20 avril 2011 à 17:43
Bonjour,

J'ai besoin d'aide, ca fait 3 jours que je suis deçu et à chaque fois ca ne marche pas! Et étant novice ca n'aide pas! Je dois réaliser un convertisseur décimale/binaire en 32bits.

Voilà où j'en suis :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () 
{
	int nb, binaire, i;
	int tab[8];
	printf("Entrez un nombre entier compris entre 0 et 4 294 967 295 : ");
	scanf("%d", &nb);
	for(i = 0; i < 8; i++){
		binaire = nb % 2;
		tab[i] = binaire;
		printf("%d ", tab[i]);
		nb = nb / 2;
	}
	printf(" | ");
	for(i = 0; i < 8; i++){
		printf("%d ", tab[7 - i]);
	}
	return 0;
}


Ce programme fonctionne mais 8bits ce n'est pas suffisant! Dois-je mettre 32 dans mon tableau?

J'ai tenter une seconde fois avec une autre approche :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main () 
{
	int nb, binaire, i, x = 0, y = 0;
	int tab[32];
	printf("Entrez un nombre entier compris entre 0 et 4 294 967 295 : ");
	scanf("%d", &nb);
	do{
		binaire = nb % 2;
		tab[i] = binaire;
		printf("%d ", tab[i]);
		nb = nb / 2;
		x = y++;
	} while(nb >= 0);
	printf(" | ");
	for(i = 0; i < x; i++){
		printf("%d ", tab[x - i]);
	}
	return 0;
}


Mais cette fois ci, le programme plante une fois que l'on entre la valeur a convertir!

Merci d'avance pour votre aide!

A voir également:

5 réponses

m-killer Messages postés 21 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 1 mai 2012 4
Modifié par m-killer le 20/04/2011 à 16:21
Salut Thony,

Tout d'abord, sache que si cette fonction est faite juste pour afficher l'ecriture binaire d'un nombre en base 10, elle n'est pas necessaire puisque l'on peut utiliser les flags de printf pour ça (et oui, vive le C et stdio ^^)

Ensuite tu devrai essayer avec la meme boucle for, on vera plus claire dans ton code.

il y a aussi des petits probleme commpar exemple la variable i que n'a pas de valeur.

Et une derniere chose, je n'est pas compris l'utilité de la 2eme boucle
0
Thonyglandil Messages postés 3 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 20 avril 2011
Modifié par Thonyglandil le 20/04/2011 à 16:55
Bonjour,

Oui, il s'agit d'afficher la conversion d'un décimal en base 10 vers un binaire en base 2.
Je suis débutant en programmation, (la programmation est inclu dans le cursus de mes études qui la géologie. Il n'y a pas vraiment de rapport entre les 2 matières mais ce n'est pas moi qui est choisi de mettre de la programmation dans le cursus!)

En ce qui concerne les flags je n'ai jamais entendu parler de ça. S'il peuvent faciliter la chose, je veux bien utiliser cela! ^^

Le 2e boucle est la pour l'affichage du nombre binaire dans le bon sens, car après le calcul, le resultat est inverser!

Et pour la boucle for je ne vois pas comment je pourrai l'utiliser!

Merci pour le i, je n'avais pas vu! Pour le second code après 2 petite rectification, j'obtiens le bon resultat mais a l'enver!
D'où la deuxieme boucle pour le remettre a l'endroit! Mais celle ne fonctionne pas!
0
m-killer Messages postés 21 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 1 mai 2012 4
20 avril 2011 à 17:12
Bon pour la premiere solution, il n'existe pas de flag pour le binaire avec la fonction printf() (Pour ta culture general, il suffit de remplacer %d par %x pour ecrire un nombre en hexadecimal)

apres ta 1ere boucle, tu a un tableau avec tout tes chiffres, alors retire le printf de la 1ere boucle et ajoute ceci a la place de la 2eme:


int cpt=0
while(cpt<32){
printf("%i", tab[cpt]);
cpt++;
}

ou pour ecrire dans l'autre sens

int cpt=32
while(cpt>0){
printf("%i", tab[cpt]);
cpt--;
}

Voila, j'espere que sa marchera et que le binaire te servira en géologie =P
0
m-killer Messages postés 21 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 1 mai 2012 4
20 avril 2011 à 17:29
En fait il te restai des erreur: le tableau non reset, une boucle infini (nb/2 ne peu pas etre <0 !)

donc g refait tou le code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void reset(int tab[]);

int main ()
{
int nb, cpt=0;
int tab[32];
printf("Entrez un nombre entier compris entre 0 et 4 294 967 295 : ");
scanf("%d", &nb);
reset(tab);

do{
tab[cpt]=nb%2;
nb/=2;
cpt++;
}while(nb>1);
tab[cpt]=nb%2;

cpt=31;
while (cpt>=0){
printf("%d", tab[cpt]);
cpt--;
}

return 0;
}

void reset(int tab[])
{
int cpt=0;
while (cpt<32){
tab[cpt]=0;
cpt++;
}

}

voila, c verifier et sa marche ;D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Thonyglandil Messages postés 3 Date d'inscription mercredi 20 avril 2011 Statut Membre Dernière intervention 20 avril 2011
20 avril 2011 à 17:43
merci, de ton aide! Cela a résolu le problème du premier code! Ainsi que le deuxième car j'avais oublié d'entrer une valeur pour i ainsi que son incrémentation, et la coondition du while était mauvaise!

Bonne fin de journée! ^^
0