IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Convertisseur décimal vers binaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 109
    Par défaut Convertisseur décimal vers binaire
    Bonjour j'essaye aujourd'hui de faire un convertisseur décimal binaire mais j'ai un souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <string.h>
     
    int main(void)
    {
        char reste[256]="";
        char result[256]="";
        int ent;
        printf("Saisir un nombre: ");
        scanf("%d", &ent);
        while(ent != 0){
            ent=ent/2;
            printf("nombre entier: %d\n", ent);
            sprintf(reste, "%d", ent%2);
            strcat(result, reste);
            printf("Binaire : %s \n", result );
    }
     
     
     
     
     
     
        return (0);
    }
    J'ai essayé de faire des divisions successives par 2 tant que mon entier est différent de 0, et d'ajouter le reste de la division avec sprintf à une chaine pour ensuite concaténer en boucle mais ça ne marche pas du tout !

    pour 10 ça marche, ça me donne 1010 par contre pour 22 ça me donne 11010 alors ça devrait me donner 10110

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Bonjour,

    Ce n'est pas mauvais du tout ! Il y a juste deux défauts :

    • Tu fais ta division à la ligne 12 et mets à jour ta variable, alors que tu extrais le reste à la ligne 14. L'opérateur modulo « % » fait lui-même sa propre division, il ne récupère pas le résultat de la division précédente. La division proprement dite devrait se retrouver en fait tout en bas de ta boucle.
    • Une fois le processus terminé, il faut lire la suite de bits dans l'ordre inverse, du dernier jusqu'au premier.


    Si tu lances ton programme avec un nombre suffisant de valeurs, tu t'apercevras que tu obtiens bien les bonnes valeurs mais à l'envers et décalées d'un bit (un bit en trop d'un côté et un bit manquant de l'autre).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 109
    Par défaut suite
    Re-bonjour,

    J'ai changé mon code tout à l'heure mais ce n'était qu'une partie de mon exercice !

    L'exercice en question, demande à l'utilisateur de saisir un nombre, mon algo est censé calculer l'équivalent binaire pour chaque nombre entre 1 et ce nombre, puis de déterminer pour chaque conversion binaire si celle-ci est un palindrome : 1001 est un palindrome et pour chaque binaire déterminé comme palindrome, faire la somme de chaque nombre(non binaire donc).
    ex : ou ent est égal à 5 :
    1=1
    3=11
    5=101
    1+3+5=9

    Voilà pour que ce soit clair, parceque j'étais pas sur que ça soit bien expliqué !
    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdio.h>
    #include <string.h>
     
     
     
    int main(void)
    {
     
    	int i;
     
    	char reste[256]="";
        char result[256]="";
        int ent=0;
    	char result2[256]={};
    	int longueur = strlen(result);
    	int resultMul=1;
     
    	printf("Saisir un nombre: ");
    	scanf("%d", &ent);
    	for(i=1 ; i<ent; i++ ){
    		while(i != 0){
            	sprintf(reste, "%d", i%2);
            	strcat(result, reste);
            	i=i/2;
            	printf("Binaire de %d: %s \n", i, result );
    			result2[i] += result[longueur-i-1];
    			printf("%s", result2);
    			if(strcmp(result, result2) ==0){
    				printf("Le Binaire de %d est un palindrome", i);
    				resultMul += i;
    			}
     
     
     
    	}
     
    	return 0;
    		}
    }

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par drakop Voir le message
    Re-bonjour,

    J'ai changé mon code tout à l'heure mais ce n'était qu'une partie de mon exercice !
    […]

    Voilà pour que ce soit clair, parceque j'étais pas sur que ça soit bien expliqué !
    Bien mais du coup, ça ne nous dit pas où est ton problème. Par contre, il y en a déjà qui saute aux yeux : entre les lignes 21 et 25, tu utilises ton indice de boucle i comme accumulateur pour faire tes calculs, et tu le divises par 2 successivement jusqu'à ce qu'il arrive à zéro. C'est utile pour le décomposer en binaire mais par conséquent, à chaque tour de boucle, i vaut de nouveau zéro. Ta boucle tourne à l'infini et ne progresse jamais.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 109
    Par défaut re
    En gros j'ai essayé de tester avec uniquement 2 boucles, 3 boucles mais ça n'a pas marché.

    En gros j'ai obtenu principalement 2 resultats :

    1- le i qui démarre à 0 ce qui est bizarre car je l'ai initialisé à 1 et j'ai qu'une seule fois le reste et je n'ai pas les autres printf etc.

    Saisir un nombre: 5
    Binaire de 0: 1
    2- toujours le i à 0 mais cette fois une boucle infinie
    Saisir un nombre: 5
    Binaire de 0: 11111111111111111111111111111111111111 etc etc


  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Je viens de t'expliquer pourquoi : tu utilises i comme indice de boucle mais tu travailles dessus quand tu fais tes calculs. C'est absurde.

    Passe par une variable intermédiaire : déclare un « int j », remplace tous tes i par des j dans la boucle for de la ligne 21, et insère une ligne i=j; entre les lignes 21 et 22.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PIC 18F] Convertisseur Décimal/Binaire to DTMF en assembleur
    Par YASSSCOTT dans le forum Autres architectures
    Réponses: 0
    Dernier message: 20/03/2015, 15h56
  2. conversion décimal vers binaire 32 bit
    Par Oscar02 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/05/2014, 02h12
  3. Convertir un décimal en binaire
    Par rouliane dans le forum C++
    Réponses: 4
    Dernier message: 14/12/2006, 16h15
  4. Réponses: 2
    Dernier message: 06/11/2006, 09h55
  5. Probleme convertisseur RS232 vers RS485
    Par nico_ioltech dans le forum Composants
    Réponses: 2
    Dernier message: 05/10/2005, 09h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo