Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conversion en binaire, tableau

    20 juin 2022 à 15:42:34

    Bonjour,

    Je réalise un exercice et j'ai des difficultés a comprendre la conversion binaire, ci-joint une image suivi du code, mais globalement j'ai une série de nombre simplifié (avant le okkk) que je transforme en binaire sauf que au lieu d'avoir des : 100 101 000 j'ai juste des 1 0 1 comme sur l'image (après le okk). J'espère avoir bien expliqué mon souci, merci d'avance !

    (code en c)

    int *convert_binary(int *a, int len)
    {
            int i = 0;
            int j = 0;
            int nbr = 0;
    
            printf("%d\n", a[0]);
            printf("%d\n", a[1]);
            printf("%d\n", a[2]);
            printf("%d\n", a[3]);
            printf("%d\n", a[4]);
            printf("OKKKKKK");
            while (i < len)
            {
                    nbr = a[i];
                    j = i;
                    while (nbr > 0)
                    {
                            a[j] = nbr % 2;
                            nbr = nbr / 2;
                            j++;
                    }
                    printf("%d\n", a[i]);
                    i++;
            }
            return (a);
    }



    -
    Edité par NicolasArty 20 juin 2022 à 16:25:51

    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2022 à 15:52:39

      Il y a déjà un problème dans le prototype de ta fonction : tu sembles déclarer a comme un entier (int) et tu l'utilise dans la fonction comme un pointeur (tableau).

      Je suppose que tu dois écrire chaque valeur du tableau en binaire ?

      Alors fait toi plutôt une fonction qui écrit un entier en binaire et ensuite tu l'utilisera pour écrire chaque valeur du tableau. Ça te tortureras moins l'esprit.

      PS : Tu peux décrire l’énoncé de l'exercice ?

      -
      Edité par rouIoude 20 juin 2022 à 16:08:09

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        20 juin 2022 à 16:05:43

        rouIoude a écrit:

        Il y a déjà un problème dans le prototype de ta fonction : tu sembles déclarer a comme un entier (int) et tu l'utilise dans la fonction comme un pointeur (tableau).

        Je suppose que tu dois écrire chaque valeur du tableau en binaire ?

        Alors fait toi plutôt une fonction qui écrit un entier en binaire et ensuite tu l'utilisera pour écrire chaque valeur du tableau. Ça te tortureras moins l'esprit.

        -
        Edité par rouIoude il y a 6 minutes


        Merci à toi, faute de frappe sur le prototype c'est bien int *a

        Je suis pas sur de bien avoir compris ce que tu m'as dit, mais je vais y réfléchir, merci

        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2022 à 16:10:57

          Si tu n'as pas compris ce que j'ai dit, c'est qu'il y a une incompréhension sur l’énoncé ?

          Peut-tu décrire l'énoncé de l'exercice ?

          PS : Comme a est un pointeur et que tu retournes a, le type de retour ne correspond plus (int) 

          -
          Edité par rouIoude 20 juin 2022 à 16:13:36

          • Partager sur Facebook
          • Partager sur Twitter
          ...
            20 juin 2022 à 16:28:35

            J'ai re modifié,

            Je renvoie bien un tableau, lors du copie/colle les * ce sont supprimés, 

            En fait dans mon tableau a je vais avoir des nombres, je souhaite simplement transformé en binaire par exemple si j'ai 4 je transforme en 100 (conversion)

            rouIoude a écrit:

            Si tu n'as pas compris ce que j'ai dit, c'est qu'il y a une incompréhension sur l’énoncé ?

            Peut-tu décrire l'énoncé de l'exercice ?

            PS : Comme a est un pointeur et que tu retournes a, le type de retour ne correspond plus (int) 

            -
            Edité par rouIoude il y a 12 minutes



            • Partager sur Facebook
            • Partager sur Twitter
              20 juin 2022 à 17:40:06

              Ok, C'est bien ce que j'avais compris.

              Transformé ?  Normalement un nombre reste inchangé, qu'il soit écrit en binaire, décimal, octal, hexadécimal ... Il a toujours la même valeur !

              Donc tu veux juste les écrire ou les conserver sous forme binaire ? Car si tu veux les conserver sous forme binaire, il faudrait les stocker dans une chaîne de caractère. (Ça n'a pas grande utilité de les conserver sous cette forme).

              Bon j'en reviens à ma première proposition, c'est de le faire pour un entier et non pas pour un tableau d'entier. Tu ne comprend pas ça ?

              Tu fais une fonction qui reçoit un entier et qui l'écris en binaire (ou qui le transforme si tu y tiens).

              • Partager sur Facebook
              • Partager sur Twitter
              ...
                20 juin 2022 à 18:22:04

                Effectivement, il ne s'agit pas de "transformer" en binaire, mais d'afficher des caractères constituant une représentation textuelle en base 2 du nombre entier en question (l'écran affiche des caractères).

                En ce qui me concerne, je vois un intérêt à stocker cette représentation sous la forme d'une chaîne de caractères : faire une fonction que je peux tester et le fait que je peux dissocier la logique qui permet de générer une chaîne affichable de son affichage proprement dit.

                #include <string.h>
                #include <assert.h>
                
                char * byte_to_binarystring(int i, char * str) {
                        /* TODO */
                        return "TODO";
                }
                
                int main(void) {
                        {
                        char str[9] = { '\0' };
                        assert(strcmp(byte_to_binarystring(4, str), "00000100") == 0 &&
                                                "int 4 is string: 00000100");
                        }
                        {
                        char str[9] = { '\0' };
                        assert(byte_to_binarystring(256, str) == NULL &&
                                                "int 256 exceeds a byte and returns NULL");
                        }
                        return 0;
                }
                

                Sur certains systèmes la fonction itoa() permet directement de faire cela (en base 2 ou autres bases). La fonction n'est pas dans le C standard, mais le K&R la mentionne et en propose une implémentation.

                https://m.cplusplus.com/reference/cstdlib/itoa/

                Comme le rappelle cette doc, le standard sprintf() peut être utilisé pour gérer un affichage en décimal, hexadécimal, octal (mais il n'y a pas de spécificateurs d'affichage pour le binaire).

                -
                Edité par Dlks 20 juin 2022 à 18:41:43

                • Partager sur Facebook
                • Partager sur Twitter
                  20 juin 2022 à 18:59:04

                  Merci pour votre aide,

                  Pour mieux comprendre, je fais le radix sort pour le push swap et de dans il se sert du binaire pour comparer les bits et swap d'une stack a l'autre

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 juin 2022 à 19:25:17

                    Bonjour,

                    avec un radixsort sur une clé entière tu n'as pas besoin d'avoir directement «la clé en binaire». Tu utilises les opérateurs binaires pour obtenir le bit courant.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 juin 2022 à 19:33:39

                      rouIoude a écrit:

                      PS : Tu peux décrire l’énoncé de l'exercice ?

                      Je me doutais bien qu'on était sur un problème X Y !

                      • Partager sur Facebook
                      • Partager sur Twitter
                      ...
                        20 juin 2022 à 19:47:13

                        Ahhhh, je comprends mieux merci haha
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Conversion en binaire, tableau

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown