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 :

Affichage de nombre réguliers sans utiliser de tableau


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Affichage de nombre réguliers sans utiliser de tableau
    Bien le bonjour,

    J'ai un soucis sur un exercice (je commence la prog en C)
    Et le problème est le suivant :

    Après un calcul de nombre régulier (avec un binaire qui possède autant de 0 que de 1) je dois afficher dans un petit printf() tout les nombres réguliers trouvés entre un intervalle [a,b]. Jusque là, rien de bien compliqué. Le souci majeur est que, suivant l'intervalle, le nombre de variables à afficher pour les réguliers va augmenter et je dois donc faire un printf qui varie en fonction des résultats.
    Je précise : interdit d'utiliser des tableaux, pointeur, chaînes de caractère ou autre, seulement fonctionnalité de base. Et du coup, je bloque un peu là

    Si quelqu'un peut m'aiguiller, j'ai l'impression de tourner en rond dans la méthode à adopter.

    ps : j'ai réussi l'exercice sans souci en utilisant la syntaxe de C (plusieurs printf de suite sans saut de ligne et tout se retrouve collé...) mais je voulais savoir s'il était possible de faire une méthode disons plus.. propre (je suis un peu maniaque) comme dans d'autres langages où il est plus simple de concaténer des opérations, résultats de boucle etc..)

    Cordialement,

    Severrakh

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 783
    Points
    23 783
    Par défaut
    Bonjour,

    Quelle est, dans ta situation, la définition exacte d'un « nombre régulier » ? Après quelques recherches, je suis arrivé à une situation qui les définit comme les nombres dont l'inverse s'écrit de manière finie dans la base dans laquelle on travaille (ex : en base dix, « 2 » est régulier parce que « 1 ÷ 2 = 0,5 » mais « 3 » ne l'est pas parce que « 1 ÷ 3 = 0,33333… »).

    En binaire, avoir autant de zéros que de uns (en ignorant les zéros non significatifs) n'est pas une propriété qui permet de l'affirmer (on peut exhiber plein de contre-exemples).

    Si, toutefois, ton but est quand même d'identifier ceux-ci, tu peux compter facilement le nombre de bits d'un entier binaire en utilisant le ET logique « & » et l'opérateur de décalage « >> » jusqu'à ce que ce nombre devienne nul. Tu peux mettre être encore plus efficace en utilisant la formule « n & (n-1) » qui te permet d'itérer un nombre de fois exactement égal au nombre de bits à 1.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    En binaire, avoir autant de zéros que de uns (en ignorant les zéros non significatifs) n'est pas une propriété qui permet de l'affirmer (on peut exhiber plein de contre-exemples).
    Merci de me le faire remarquer ! Je ne me ferai pas avoir à utiliser cette méthode une prochaine fois.

    Sinon dans l'exercice que je recherche c'est effectivement ce que l'on souhaite.

    Merci également pour la méthode par bits, même si elle n'est pas nécessaire dans cet exercice, je vais essayer de l'utiliser ça m'a l'air intéressant.

  4. #4
    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 163
    Points
    17 163
    Par défaut
    pour ton "nombre de variables à afficher va augmenter", c'est le signe d'une boucle non ou mal codée...

    L'affichage d'une ligne peut être fait en plusieurs appels de printf, le dernier étant le seul utilisant le '\n'. C'est une méthode convenable pour une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i;
    printf("les premiers entiers sont:");
    for(i=0; i<10; ++i) {
        printf(" %d",i);
    }
    printf("\n");
    affiche "les premiers entiers sont: 0 1 2 3 4 5 6 7 8 9" et retourne à la ligne

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    ps : j'ai réussi l'exercice sans souci en utilisant la syntaxe de C (plusieurs printf de suite sans saut de ligne et tout se retrouve collé...) mais je voulais savoir s'il était possible de faire une méthode disons plus.. propre (je suis un peu maniaque) comme dans d'autres langages où il est plus simple de concaténer des opérations, résultats de boucle etc..)
    C'est en effet la méthode que j'ai utilisé, je voulais seulement savoir si c'était donc normal ou si il existait une autre méthode.
    Mais apparemment non, c'est la syntaxe normal pour le C.

    Merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Dites-moi si je me trompe, mais les nombres réguliers ne sont-ils pas limités aux produits de puissances des facteurs de la base? (ce qui en base 10, donne les produits de puissances de 2 et de 5)

    La base 2 étant un nombre premier, cela signifierait que seules les puissances de deux sont des nombres réguliers en base 2...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2014, 19h15
  2. Réponses: 13
    Dernier message: 08/12/2006, 10h31
  3. Decimal -> Binaire (sans utiliser de tableau)
    Par Sandro Munda dans le forum C
    Réponses: 3
    Dernier message: 14/10/2006, 18h09
  4. Réponses: 4
    Dernier message: 15/05/2006, 12h38
  5. conversion binaire-décimal sans utiliser le tableau
    Par ahmed doua dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/03/2006, 10h54

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