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
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
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
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 ?
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 .
Au temps pour moi... je l'avais oubliée, celle là
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
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...
× 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.
...
...
...
Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .