Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT Affiche valeur binaire

    13 septembre 2018 à 11:53:01

    Bonjour je dois réaliser ce travail avec QT :

    L’utilisateur entre une valeur en base 10. L’application doit afficher cette valeur en binaire (mot de 16 bits obligatoire) ainsi que le nombre de « 1 » et de « 0 » de ce mot.

    Néanmoins je ne sais pas comment m'y rendre et comment réaliser le code.

    Merci pour votre aide

    -
    Edité par MathsFacile 13 septembre 2018 à 11:53:13

    • Partager sur Facebook
    • Partager sur Twitter
      13 septembre 2018 à 12:14:11

      Hello,

      Une fois que l'utilisateur a saisi un nombre, il suffit de le traiter avec std::bitset, il y a tout ce qu'il faut pour ce que tu demandes ;).

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        13 septembre 2018 à 12:16:05

        Salut,

        Le plus facile est sans doute encore de travailler avec un std::bitset : tu récupère la valeur introduite par l'utilisateur sous la forme d'un entier non signé , et tu fournis cette valeur au constructeur de bitset.

        Une fois que tu as ton bitset, tu utilise la fonction membre to_string pour récupérer la chaine de caractères correspondante, et pouvoir éventuellement l'afficher.

        Pour compter le nombre de 1 (ou de 0), tu pourras ensuite utiliser l'algorithme std::count_if qui fera le travail ;)

        Je ne vais pas te donner le code tout de suite, ce serait trop facile, et tu n'apprendrait rien...

        Mais comme je t'ai donné toutes les information et tous les liens vers la documentation des fonctionnalités dont tu as besoin, tu devrais pouvoir t'en sortir assez facilement, car cela représente un code de 5 lignes maximum (en plus des inclusions nécessaires) ;)

        EDIT Grillé :'(

        -
        Edité par koala01 13 septembre 2018 à 12:16:37

        • Partager sur Facebook
        • Partager sur Twitter
        Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
          13 septembre 2018 à 12:26:41

          koala01 a écrit:

          Pour compter le nombre de 1 (ou de 0), tu pourras ensuite utiliser l'algorithme std::count_if qui fera le travail ;)

          Même pas besoin d'algo', std::bitset::count renvoie le nombre de bits valant true :p.

          -
          Edité par Guit0Xx 13 septembre 2018 à 12:29:03

          • Partager sur Facebook
          • Partager sur Twitter

          ...

            13 septembre 2018 à 12:31:55

            Je ne sais pas comment créer mon code en fait.. Je ne suiis pas doué en QT et en c++
            • Partager sur Facebook
            • Partager sur Twitter
              13 septembre 2018 à 13:01:16

              Dans un premier temps, tu n'as pas forcément besoin de Qt. Un simple bout de code C++ "standard" fera le job. Après j'imagine que tu dois avoir quelques bases quand même ? Par exemple, est-ce que tu as déjà eu l'occasion de coder un petit truc pour récupérer une saisie de l'utilisateur ?

              -
              Edité par Guit0Xx 13 septembre 2018 à 13:01:28

              • Partager sur Facebook
              • Partager sur Twitter

              ...

                13 septembre 2018 à 14:43:47

                Guit0Xx a écrit:

                koala01 a écrit:

                Pour compter le nombre de 1 (ou de 0), tu pourras ensuite utiliser l'algorithme std::count_if qui fera le travail ;)

                Même pas besoin d'algo', std::bitset::count renvoie le nombre de bits valant true :p.

                Au temps pour moi... je l'avais oubliée, celle là :p

                • Partager sur Facebook
                • Partager sur Twitter
                Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                  13 septembre 2018 à 15:17:42

                  Salut,

                  MathsFacile a écrit:

                  Je ne sais pas comment créer mon code en fait.. Je ne suiis pas doué en QT et en c++


                  Si vous n'avez pas les bases, alors vous auriez besoin d'un cours.

                  Sinon, pourriez-vous être plus clair, plus explicite, sur ce qui vous pose problème ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Dream on, Dream on, Dream until your dream comes true
                    13 septembre 2018 à 20:56:16

                    Salut tout le monde,

                    @MathsFacile , juste un petit conseil avant d'utiliser Qt apprend les base du C++ de peur que cela te coûte la vie un jour;

                    Vu que std::bitset tu ne le pige pas bien, voici un code qui prend un entier et l'affiche en base 2 en passant par un QString. 

                    #include <QCoreApplication>
                    #include <QDebug>
                    
                    int main(int argc, char** argv){
                    
                        QCoreApplication app(argc,argv);
                    
                        int  val = 3;
                        QString txt = QString::number(val,2);
                        qDebug() << " " << val << " vaut " << txt << "en base 2";
                        return app.exec();
                    }

                    Nota: sache que tu peut changer la valeur de la base si tu veux, il suffit de remplacer  le deuxième paramètre de la méthode number par la base voulus. 

                    -
                    Edité par EL-jos 13 septembre 2018 à 20:58:11

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .

                      13 septembre 2018 à 23:04:59

                      Je pense que passer par un bitset reste la meilleure solution, après j'imagine que l'exo porte sur la décomposition binaire, donc l'usage des opérateurs de décalage (<< et >>) et des opérateurs binaires (^,&, et |) que tu as certainement vu en cours, j'ai du mal à croire qu'un prof serait assez idiot pour poser un exo de ce genre sans avoir abordé ces opérateurs. Un peu de math, le décalage à gauche (<<) est équivalent à une multiplication par 2, à droite (>>), c'est une division euclidienne par 2 dont le reste vaut 1 si le nombre est impair et 0 sinon (un peu d'arithmétique permet de démontrer tout ça).  On déduit facilement que le reste de la division euclidienne par 2 et le "and" binaire avec 1 sot des des opérations équivalentes (ça aussi ça se démontre facilement avec un peu d'algèbre booléenne en plus).  

                      A partir de ces constations, il est facile de déduire un algorithme qui va construire une chaîne composée uniquement des caractères '0' et '1'. Si notre encodage se fait sur 16 bits, la logique veut que somme(0) + somme(1) = 16, cependant il est d'usage d'enlever les '0' non significatifs, c'est à dire ceux qui sont situés à gauche du "1" le plus à gauche, là encore, ce n'est pas terriblement compliqué, il faut juste faire bosser un peu le truc inutile et très lourd qui se situe au sommet de notre colonne vertébrale...

                      -
                      Edité par int21h 13 septembre 2018 à 23:18:26

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                      QT Affiche valeur binaire

                      × 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