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 :

addition de nombres binaires avec deux strings


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut addition de nombres binaires avec deux strings
    Bonjour, je dois creer une methode avec deux strings pour additionner deux chaines de nombres binaires et le resultat sera sur une troisieme string. Mais je n'arrive pas a voir comment additionner deux chaines normalement.Merci. Voici mon code :
    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
    int main()
    {
     
        string b;
        string c;
        cout<<"entre une chaine";
        cin>>b;
        cout<<"entre une chaine";
        cin>>c;
        saisirChaineDeBits(b,c);
     
        return 0;
    }
     
    string et(string s1,string s2);
    {
        string s1;
        string s2;
        string s3;
        int 0;
        cout << "Tapez une chaine : "; cin >> s1;
        cout << "Tapez une chaine : "; cin >> s2;
     
        for( i=0; i<s.at(); i++)
        s3=
    //boucle for pour changer de carac
    //boucle if pour faire le calcul if s1=0 and s2=1 then s3=0
    //concatenation pour affichage de s3 sur une ligne
    }
     
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 646
    Points : 10 607
    Points
    10 607
    Par défaut
    Je ne vois pas trop le problème ou

    Tu as 2 chaînes de caractères.
    Il faut vérifier dans un premier temps si elles ne sont composées que des caractères '1' et '0'.
    Même si cette vérification pourra être intégrée pendant l'addition par la suite.

    Ensuite la longueur de la chaîne résultat est égale à la longueur de la plus grande de 2 chaînes en entrée + 1.

    L'addition est assez classique: il faut faire un parcours de droite à gauche de tes 2 chaînes en entrée et avoir une retenue:
    • Si retenue == '0' =>
      • '0' + '0' = '0' retenue = '0'
      • '1' + '0' = '1' retenue = '0'
      • '0' + '1' = '1' retenue = '0'
      • '1' + '1' = '0' retenue = '1'
    • Si retenue == '1' =>
      • '0' + '0' = '1' retenue = '0'
      • '1' + '0' = '0' retenue = '1'
      • '0' + '1' = '0' retenue = '1'
      • '1' + '1' = '1' retenue = '1'


  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J ai mis un if pour les retenues mais quand j essai de compiler ca ne marche pas je crois qu il faut faire une concaténation ?

  4. #4
    Membre régulier
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Oman

    Informations professionnelles :
    Activité : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 118
    Points
    118
    Par défaut
    Il y a décidément beaucoup de gens qui saisissent des ChainesDeBits avec des strings en argument, ce soir:
    Un autre saisisseur... Ou le même???

    Bref, il est difficile de t'aider. Tu ne maîtrises clairement pas le langage. Je proposerais d'abord que tu fasses un tour par un tutoriel C.

    En espérant que ton exercice ne soit pas à rendre pour lundi.

    Bon courage si tu te lances vraiment!

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 125
    Points : 33 029
    Points
    33 029
    Billets dans le blog
    4
    Par défaut
    Salut,

    mis à part qu'une classe d'étudiants canadiens viennent d'avoir ce devoir, il est où le problème ?
    Je vois juste 3 lignes de commentaires là. Nous ne feront pas ton devoir à ta place.
    Pour "résoudre" ça, suffit de se replonger dans les cours d'addition, je crois que c'est en CP ou pas loin, bref l'école primaire. La propagation de la retenue.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Surtout qu'en binaire, il n'y a que quatre possibilités:
    • 0+0=0
    • 1+0=1
    • 0+1=1
    • 1+1=11

    En partant du bon coté de la chaine, c'est facile.
    Il suffit juste de savoir où est le chiffre des unités.

  7. #7
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    C'est marrant, le premier algo qui m'est venu en tête c'est pas la façon "traditionnelle" de faire une addition, mais se base sur le fait qu'une addition soit un xor et un and.
    (Çà donne un algo en O(n²) dans le pire des cas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    string add(string a, string b) {
      while (b != 0) {
        a ^= b;
        b &= a;
        b <<= 1;
      }
      return a;
    }
    Mais sinon une addition reste une addition, quelque soit la base (2, 10, 16, autre..) ça marche pareil.

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    en N²?
    Alors que tu peux la faire en N?

  9. #9
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    C'est le premier truc qui m'est venu en tête (et c'est clairement pas la meilleure façon de faire).

    J'indiquais juste que c'était une autre solution et qu'en fonction de comment on regarde le problème, l'une ou l'autre des solutions nous apparait plus naturelle.
    On se rend compte après qu'on est en O(n²) parce que l'ordre de traitement des bits n'est pas fixé, et qu'on peut retomber en O(n) en les traitant un-à-un dans le bon ordre.

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/04/2011, 14h46
  2. Réponses: 4
    Dernier message: 24/07/2010, 11h35
  3. Réponses: 2
    Dernier message: 19/04/2010, 17h12
  4. Addition de deux String qui sont des nombres
    Par ramon.dekker dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 06/10/2008, 17h03
  5. Réponses: 1
    Dernier message: 21/04/2008, 16h00

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