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 :

Vérification d'un nombre binaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut Vérification d'un nombre binaire
    bonjour, j'ai un petit problème, je veux vérifier au moment de la saisi le nombre ( n ) si il est sous la forme binaire ( contient que les chiffres 1 et 0 ). L'exercice m'oblige de déclarer la variable de type entier ( et pas une chaine de caractères ).

    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
    #include <stdio.h>
    void main()
    {
        int n, b, c, reserve; // b: boolean, reserve: reserver la valeur de n
        do
        {
            printf("donner n:\n");
            fflush(stdin);
            scanf("%d", &n);
            reserve = n;
            do
            {
                c = reserve % 10;
                reserve /= 10;
            } while ( reserve>0 || c == 0 || c == 1 );
            b = -1;
            if (c != 0 || c != 1)
                b = 0;
            else
                b = 1;
            if (b == 0)
                printf("le nombre n est pas binaire.\n");
        } while (b == 0);
     
    }
    Le programme n'affiche rien, je pense c'est une boucle infinie. J'ai fait le tournage, l'algorithme marche bien mais la traduction est nulle

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     } while ( reserve>0 || c == 0 || c == 1 );
    C'est subtil mais c'est incorrect : ta boucle tournera si reserve est supérieur à zéro OU si c est égal à zéro OU s'il est égal à 1.

    Ça veut dire que si un de tes chiffres est différent de 0 ou 1 mais que ce n'est pas le plus faible (celui des unités à droite), alors ta boucle continuera quand même à tourner alors qu'elle aurait dû s'arrêter, parce que reserve n'est pas encore nul. A contrario, même si ton nombre est propre, ta boucle continuera à tourner après la fin parce qu'étant nul, ton modulo 10 dans c sera égal 0, ce qui est une condition suffisante pour perpétuer la boucle, également.

    Essaie ceci : while (reserve>0 && (c==0 || c==1));

  3. #3
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     } while ( reserve>0 || c == 0 || c == 1 );
    Essaie ceci : while (reserve>0 && (c==0 || c==1));
    Autre que cette erreur vue par @Obsidian, une autre erreur à la ligne 17

    Remplace le par

    car si c = 1 alors la condition est vraie et si c=0 la condition est encore vraie !!!!

    Bonne continuation !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    b = 1;
    while (n && (n % 10 == 1 || n % 10 == 0))
        n /= 10;
    if (n)
        b = 0;
    évite d'utiliser les do while quand c'est pas nécessaire

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Sur le principe je te dirais, que tu feras des essais sur plusieurs nombres (binaires ou non) et que dans ce cas, la création d'une fonction serait souhaitable.

    Une fonction dont le prototype par exemple serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int is_binary(int binary)
    Tes tests seraient dans la fonction main(...).

Discussions similaires

  1. Gestion de nombre binaire...
    Par Zenol dans le forum C++
    Réponses: 20
    Dernier message: 16/01/2006, 21h11
  2. [LG] Convertir un nombre binaire en décimal
    Par minela28x dans le forum Langage
    Réponses: 5
    Dernier message: 05/01/2006, 10h33
  3. Affichage d'un nombre binaire
    Par Jero13 dans le forum C
    Réponses: 5
    Dernier message: 05/12/2005, 22h17
  4. conversion nombre binaire -> decimal
    Par spoun95 dans le forum Langage
    Réponses: 7
    Dernier message: 25/11/2005, 17h46
  5. Réponses: 6
    Dernier message: 28/07/2005, 21h14

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