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 :

Conversion de nombre décimal en binaire


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Conversion de nombre décimal en binaire
    Bonjour à tous suis un débutant, aidez moi svp !
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        int x=16;
        int i=0;
        int j;
        int R;
     
         int t[100];
         do
         {
             R = x%2;
             t[i]=R;
             i++;
             x = x/2;
         } while ( (x<0) && (x>0));
        j =i-1;
         for(i=0;i<j;i++)
         {
             printf("%d",t[j-i-1]);
         }
         return 0;
    }
    resultat ?



    Shc'omprend pas pourquoi sa ne passe pas!
    Aidez moi svp, je dois rendre ce devoir de maison vendredi, aussi donner moi des liens de cours en language c, sa m'aidera beaucoup
    . . d'avance.
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Citation Envoyé par Emma2064 Voir le message
    Shc'omprend pas pourquoi sa ne passe pas!
    Honnêtement ? Nous non plus. Les variables sont mal nommées, et il n'y a pas de commentaire.

    La seule chose que je vois c'est while( (x<0) && (x>0));, tant que x est négatif et positif, donc jamais.

    Quant aux cours de C, il y en a sur le bandeau en haut de la page, et une multitude sur le net.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre habitué Avatar de RaphaelG
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2016
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 94
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par Emma2064 Voir le message
    Bonjour à tous suis un débutant, aidez moi svp !
    ...
    Shc'omprend pas pourquoi sa ne passe pas!
    Aidez moi svp, je dois rendre ce devoir de maison vendredi, aussi donner moi des liens de cours en language c, sa m'aidera beaucoup
    . . d'avance.
    D'ici vendredi, tu as encore du temps pour bosser dessus.

    Une petite aide quand même :
    Comme l'a dit Daïmanu, tu ne rentres qu'une seule fois dans ta boucle do while.
    Quant à ta boucle for, tu n'y rentres jamais. i=1, j=0 et ta condition c'est i<j.
    Petit conseil : avec printf, regarde comment tes variables évoluent. N'hésite pas, mets en partout.

    Ceci dit, je vois pas comment ce que tu as essayé de faire peut convertir un nombre en binaire.
    Je devine que c'est x=16 que tu veux convertir ?
    Moi je ferais un masque du style 0x00000001, 0x00000002 ... 0x80000000 pour isoler le bit que je veux traiter avec un bitwise AND (un et logique, l'opérateur &, quoi) et ensuite je ferais des décalages à droite pour que ce bit passe en poids le plus faible. ( >> )
    Don't forget, google is your friend. Look at bitwise operations.
    IMHO, you should RTFM ASAP. IHTH.

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    En effet, c'est dommage que tes noms de variables soit peu explicites.

    Des concepts importants sont utilisés dans ton code. Utiliser un do-while suivi d'une boucle for est une très bonne idée. Utiliser la division euclidienne pour accéder au bit suivant est aussi bien vu.
    Par contre, tu as un petit problème avec le tests.
    while ( (x>0) && (x<0) ); n'est évidement pas le bon test, il faut continuer tant que x est non nul, ça s'écris while ( x != 0 );.
    Le test dans la boucle for ne va pas assez loin. En renommant la variable j en dernierIndiceRempli tu devrais mieux voir pourquoi.

    Pour des cours sur le langage C, cliquer sur le bouton Tutoriels C est une possibilité.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emma2064 Voir le message
    Bonjour à tous suis un débutant, aidez moi svp !
    Bonjour

    Il faut bien que tu comprennes que les instructions que tu tapes ont une signification précises pour l'ordinateur car il n'a pas la possibilité de "comprendre à ta place". Pour lui, 1 ce n'est pas 0 et s'il voit un "&&" ("et" logique) il n'admettra alors que les propositions vérifiant toutes les conditions (or x ne peut pas être à la fois "plus petit" que 0 et "plus grand" que 0). Donc quand tu tapes une instruction, tu dois aussi la dérouler dans ta tête pour vérifier qu'elle correspond bien à ce que tu veux faire. Et c'est bien dommage car c'est quasiment la seule erreur de ton code (en fait c'est la seule "grosse" erreur car la seconde est minime et se situe à la ligne 20).

    Sinon quelques remarques plus générales: prends le temps de penser à des noms de variable représentatifs de ce qu'elles représentent. Un nombre à convertir (donc connu) ne se nomme pas "x" (comme "inconnu") mais plutôt "n" ou même "nombre". Un nombre max d'éléments ne se nomme pas "j" mais plutôt "nb_items" ou "nb_occur". ALors effectivement ça te prendra un peu de temps "au début" mais ensuite ça te permettra d'avanver 100 fois plus vite dans ton algo (parce que les noms auront une signification). Et c'est dommage car la seule variable (presque) bien nommée ("R" pour "reste") est inutile. Ben oui, tu calcules un modulo que tu copies dans R puis tu copies "R" dans "tab[i]" => autant calculer directement le modulo dans "tab[i]" !!!
    Les autres remarques (surtout pour les printf() à mettre de partout) sont bonnes aussi.

    Citation Envoyé par RaphaelG Voir le message
    Ceci dit, je vois pas comment ce que tu as essayé de faire peut convertir un nombre en binaire.
    En fait il ne cherche pas à convertir mais juste afficher. Et son algo, bien que mal programmé, est tout à fait correct : diviser par 2 en ne conservant que les restes jusqu'à ce que le nombre à diviser fasse 0 puis afficher les restes récupérés dans l'ordre inverse de celui de la récupération (sa boucle d'affichage qui affiche tab[j-i-1]).

    Citation Envoyé par RaphaelG Voir le message
    Moi je ferais un masque du style 0x00000001, 0x00000002 ... 0x80000000 pour isoler le bit que je veux traiter avec un bitwise AND (un et logique, l'opérateur &, quoi) et ensuite je ferais des décalages à droite pour que ce bit passe en poids le plus faible. ( >> )
    Ouais mais non. Il est débutant (donc ça m'étonnerait qu'il ait panné un seul mot de tout ce que t'as écrit) et il est clair qu'il s'agit ici d'un exo destiné à lui faire faire des manipulations de base sur les boucles (un while sur n différent de 0 et un for pour afficher les restes récupérés) et pas un truc qu'il mettra 10 ans à écrire et 15 ans à se relire derrière...

    Citation Envoyé par dalfab Voir le message
    Le test dans la boucle for ne va pas assez loin.
    Ce n'est pas que ça. Parce que même en faisant une occurrence de plus ça n'affichera pas le bon élément (à cause de son opération qui utilise un "j" erroné lors de l'affichage). Donc soit effectivement il fait une occurrence de plus mais aussi il corrige l'opération ; soit il corrige plus simplement son "j" de la ligne 20 sans toucher au reste...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 7
    Points : 7
    Points
    7
    Par défaut

    Merci aux ingénieur et aux autres mercii à tous ! Sa été résolu depuis le Jeudi, passée et bon, j'ai été le seul à pouvoir expliquer correctement mon programme
    correctement Grace à vous ! Vous êtes les meilleurs.

    Seulement, j'ai beaucoup de problème en info sur tout la ( Logique ) bref bref, je ferais de mon mieux pour être comme vous!!!

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

Discussions similaires

  1. Conversion nombre décimal <-> binaire (signé et flottant)
    Par lecteur1001 dans le forum Simulink
    Réponses: 12
    Dernier message: 06/01/2011, 16h49
  2. Conversion d'un nombre décimal en binaire.
    Par ariuss dans le forum Débuter
    Réponses: 6
    Dernier message: 17/10/2009, 11h38
  3. [TPW] Conversion d'un nombre décimal en binaire
    Par thimo2 dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 10/04/2009, 00h24
  4. Réponses: 13
    Dernier message: 20/10/2008, 21h16
  5. CRITERIA - Représentation binaire d'un nombre décimal signé.
    Par RamDevTeam dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/08/2005, 14h56

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