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 du décimal au binaire


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : octobre 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut conversion du décimal au binaire
    Bonjour,
    j'ai 2 programmes en langage C,le premier:
    Pour afficher sur 8 bits la représentation binaire d'un nombre entier positif par la division successive par 2.
    Exp:
    75/2=37; il reste 1
    37/2=18; il reste 1
    18/2= 9; il reste 0
    9/2= 4 ; il reste 1
    4/2= 2; il reste 0
    2/2= 2; il reste 1
    1/2= 0; il reste 1
    on prend le reste en inverse ca donne (1101011)
    pr completer 8 bits on ajoute zero a gauche et ca devient (01101011) mais si on a un grand nombre ca va prendre du temps c'est pour ca on a choisi la 2eme methode par la soustraction successive de puissance de 2 ca veut dire on suivant les ponderations de 2
    Exp:
    197=128+64+4+1
    Donc 197 est (11000101)
    je veux les solution par 2 methode svp dans le langage C
    je sais comment faire mais je sais pas rediger dans le langage c svp repondez moi le plus vite possible

  2. #2
    Membre à l'essai
    Inscrit en
    octobre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : octobre 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut binaire
    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
     
    #include <stdio.h> 
    int main (int argc,char **v) 
    {
       int nbr=atoi(v[1]); 
       if (nbr>255)
       {
          printf ("Faire deuxieme methode");return(-1);
       }; 
       int tab[7]; 
       int num; 
       int i=0; 
       while (nbr!=0) 
       {
          num=nbr%2; 
          tab[i]=num; 
          printf("%d ",tab[i]); 
          nbr/=2; 
          printf("%d\n",nbr); 
          i++; 
       } 
       while (i<8) 
       {
          tab[i]=0; 
          i++;
       } 
       i--; 
       while(i>=0) 
       {
          printf("%d",tab[i]); 
          i--; 
       } 
       getchar(); 
       return 1; 
    }
    voila ce que j'ai fait pour le 1er execice svp aidez moi pour faire le 2eme

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 512
    Points : 20 982
    Points
    20 982
    Par défaut
    Citation Envoyé par souzen Voir le message
    voila ce que j'ai fait pour le 1er execice
    J'ai ajouté quelques sécurités élémentaires (paramètres de la ligne de commande, conversion...).
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
     
    int main (int argc, char **v)
    {
       int ret = EXIT_SUCCESS;
       int err = argc < 2;
       if (!err)
       {
          char *pend;
          int nbr = strtol (v[1], &pend, 10);
          err = *pend != 0;
          if (!err)
          {
             if (nbr > 255)
             {
                printf ("Faire deuxieme methode");
                return (-1);
             }
             int tab[7];
             int num;
             int i = 0;
             while (nbr != 0)
             {
                num = nbr % 2;
                assert (i < sizeof tab / sizeof *tab);
                tab[i] = num;
                printf ("%d ", tab[i]);
                nbr /= 2;
                printf ("%d\n", nbr);
                i++;
             }
             while (i < 8)
             {
                tab[i] = 0;
                i++;
             }
             i--;
             while (i >= 0)
             {
                printf ("%d", tab[i]);
                i--;
             }
          }
       }
       if (err)
       {
          puts ("Utilisation : appli <valeur numerique en decimal>");
          ret = EXIT_FAILURE;
       }
       return ret;
    }
    Il y a un problème de débordement de tableau.
    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
     
    0 64
    0 32
    0 16
    0 8
    0 4
    0 2
    0 1
    Assertion failed: i<sizeof tab/sizeof *tab, file C:\dev\hello\main.c, line 27
     
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.
     
    Process returned 3 (0x3)   execution time : 2.035 s
    Press any key to continue.
    Ceci fonctionne pour les unsigned long.
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <limits.h>
     
    #define NELEM(a) (sizeof(a)/sizeof*(a))
     
    int main (int argc, char **v)
    {
       int ret = EXIT_SUCCESS;
       int err = argc < 2;
       if (!err)
       {
          char *pend;
          unsigned long nbr = strtol (v[1], &pend, 10);
          err = *pend != 0;
          if (!err)
          {
             {
                int tab[sizeof (unsigned long) * CHAR_BIT];
                int num;
                int i = 0;
                while (nbr != 0)
                {
                   num = nbr % 2;
                   assert (i < (int) NELEM(tab));
                   tab[i] = num;
                   nbr /= 2;
                   i++;
                }
                while (i < NELEM(tab))
                {
                   tab[i] = 0;
                   i++;
                }
                i--;
                while (i >= 0)
                {
                   printf ("%d", tab[i]);
                   i--;
                }
             }
          }
       }
       if (err)
       {
          puts ("Utilisation : appli <valeur numerique en decimal>");
          ret = EXIT_FAILURE;
       }
       return ret;
    }
    Pose des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par souzen Voir le message
    <...>
    Exp:
    75/2=37; il reste 1
    37/2=18; il reste 1
    18/2= 9; il reste 0
    9/2= 4 ; il reste 1
    4/2= 2; il reste 0
    2/2= 2; il reste 0
    1/2= 0; il reste 1
    on prend le reste en inverse ca donne (1001011)
    <...>
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 290
    Points : 23 390
    Points
    23 390
    Par défaut
    Citation Envoyé par souzen Voir le message
    mais si on a un grand nombre ca va prendre du temps c'est pour ca on a choisi la 2eme methode par la soustraction successive de puissance de 2 ca veut dire on suivant les ponderations de 2
    En réalité, cet exercice n'a de sens que d'un point de vue pédagogique, puisque tes entiers sont stockés en binaire dans ta machine. Ça veut dire que ton compilateur a déjà fait le travail que tu lui fais faire au moment de compiler ton programme ...

    Pour les soustractions successives, ça marche aussi, mais pas forcément sur les grands chiffres puisque tu doit soit avoir précalculé toutes ces puissances (ce qui limite la taille des entiers que tu peux traiter), soit les calculer en temps réel, ce qui ne coûte pas moins cher que de diviser ton nombre par deux ...

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    pourquoi pas faire a coup de masque binaire et de division par deux (theoriquement tres rapide puisque ca reviens a faire un decalage de bit)

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 290
    Points : 23 390
    Points
    23 390
    Par défaut
    Citation Envoyé par daedric Voir le message
    (theoriquement tres rapide puisque ca reviens a faire un decalage de bit)
    C'est très rapide ... si ton nombre est déjà en binaire !

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 512
    Points : 20 982
    Points
    20 982
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est très rapide ... si ton nombre est déjà en binaire !
    Qu'est-ce qu'un nombre qui n'est pas en binaire ? A ma connaissance, les machines actuelles sont binaires et toute valeur numérique est une combinaison de bits.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 290
    Points : 23 390
    Points
    23 390
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Qu'est-ce qu'un nombre qui n'est pas en binaire ? A ma connaissance, les machines actuelles sont binaires et toute valeur numérique est une combinaison de bits.
    D'où mon post précédent :

    http://www.developpez.net/forums/d62...e/#post3695582

  10. #10
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    Toutes donnees est en binaire dans la memoire d'un pc d'ailleurs ^^

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    septembre 2007
    Messages
    7 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 290
    Points : 23 390
    Points
    23 390
    Par défaut Bis repetita
    Citation Envoyé par daedric Voir le message
    Toutes donnees est en binaire dans la memoire d'un pc d'ailleurs ^^
    D'où mon post précédent (bis).

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : août 2017
    Messages : 2
    Points : 0
    Points
    0
    Par défaut converir un décimal au binaire par
    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
    /* converir un décimal au binaire par JAOUAD ALLAMI */
    #include <stdio.h>
    #include <stdlib.h>
     /* Déclarations */
     int T[8]; /* tableau donné  */
     int N;     /* dimension      */
     int I,J;     /* indices courants */
     
    int main(void)
    {
        // Déclaration de variable
        int nombreEnt = 0;
     
        printf("Entrer un nombre entier : ");
        scanf("%d",&nombreEnt);
        printf("\n \n \nLa Conversion de %d en binaire est ...\n \n \n ", nombreEnt);
         for (I=0; I<8; I++)
         {
            T[I]=nombreEnt%2;
            // printf(" \n nombre entier nombreEnt%2 %d: ",nombreEnt%2);
               //printf("\n%d \n", T[I]);
               //T[J]=T[I];
               nombreEnt=nombreEnt/2;
         }
         for (I=7; I>=0; I--)
         {  
             printf("%d ", T[I]); 
          }  
     
         scanf("%d",&nombreEnt);
    }

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 512
    Points : 20 982
    Points
    20 982
    Par défaut
    Merci d'utiliser les balises de code ... Et post de 2008, merci pour le déterrage de cadavre ... Qui code encore en C de nos jours ?
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    2 268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 2 268
    Points : 4 830
    Points
    4 830
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Merci d'utiliser les balises de code ... Et post de 2008, merci pour le déterrage de cadavre ... Qui code encore en C de nos jours ?
    Aller, un peu de lecture pour savoir si le C ne fait pas partie des langages classés aux oubliettes :
    https://www.developpez.com/actu/2175...et-l-embarque/

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

Discussions similaires

  1. programme de conversion de décimal en binaire et octale
    Par sk8trasher dans le forum Débuter
    Réponses: 3
    Dernier message: 04/06/2012, 20h37
  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. Conversion d'un nombre binaire en décimal
    Par grungy-soul dans le forum Général Java
    Réponses: 7
    Dernier message: 28/05/2008, 09h23
  5. conversion de décimal à binaire
    Par sousou2007 dans le forum C++
    Réponses: 10
    Dernier message: 19/10/2007, 12h33

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