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 :

Un nombre puissance 2, commet faire? meilleur solution?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut Un nombre puissance 2, commet faire? meilleur solution?
    Bonjour tout le monde,

    Je viens de rentrer d'un interview pour une Entry-level position, sachant que j ai plus d experience qu en Java que du C/C++, j ai fait du c/C++ a l universite et depuis 2ans je suis plein dans java et specialement j2me.

    Bref, voila le genre de questions que j ai eu a faire pendant l interview, sachant que je ne savais pas que j aurais a faire a ca, j ai cru que j ai deja passe leur interview technique online
    Je veux savoir qu est ce que vous pensez de cette questions et qu elle est la meilleur reponse:

    La questions est d ecrire une fonction en C pour retourner true or false si le nombre entre en parametre est un nombre puissance 2?

    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    pas de volontaires?
    allez les guru du C, ils sont ou?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut
    tu prends la racine carrée de ce nombre et tu regardes si la partie décimale est nulle ou pas. ta fonction retournera un entier tel que 0 pour false et 1 pour true. apres savoir si c'est la meilleure solution pour ça...

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Loe,
    Citation Envoyé par john stedd Voir le message
    tu prends la racine carrée de ce nombre et tu regardes si la partie décimale est nulle ou pas. ta fonction retournera un entier tel que 0 pour false et 1 pour true. apres savoir si c'est la meilleure solution pour ça...
    Bigre !!

    Il faut réfléchir un peu avant de répondre.

  5. #5
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    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
     
    #include <limits.h>
     
    int testPuissance2 (unsigned int pTest)
    {
        // cas pTest == 0, pas une puissance de 2
        if (pTest == 0)
             return 0;
     
        // Plus grand entier d'un seul bit
        unsigned int uMax = UINT_MAX / 2 + 1;
     
        // Decalage a gauche jusqu'a avoir le bit de poid fort a 1
        while (ptest < uMax)
             pTest <<= 1;
     
        // Si mon nombre est plus grand, il y a donc plus d'un bit à 1
        // donc pas une puissance de 2
        if (pTest > uMax)
            return 0;
     
        return 1;
    }

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par fenkys Voir le message
    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
     
    #include <limits.h>
     
    int testPuissance2 (unsigned int pTest)
    {
        // cas pTest == 0, pas une puissance de 2
        if (pTest == 0)
             return 0;
     
        // Plus grand entier d'un seul bit
        unsigned int uMax = UINT_MAX / 2 + 1;
     
        // Decalage a gauche jusqu'a avoir le bit de poid fort a 1
        while (ptest < uMax)
             pTest <<= 1;
     
        // Si mon nombre est plus grand, il y a donc plus d'un bit à 1
        // donc pas une puissance de 2
        if (pTest > uMax)
            return 0;
     
        return 1;
    }
    Elegant! N'oublie pas les balises codes, et de tester que ptest est différent de 0, sinon tu as une boucle infinie. N'oublie pas non plus que le C est sensible à la casse (mais j'imagine que c'est une faute de frappe).

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    alors les experts en C on droit a ce genre de questions lors de leur interview?

    Ah encore un autre truc j ai du a faire a une autre questions mais plustot C++ c est le fonctions constantes et qu en declarant la vriable mutable si je me trompe pas, c est quoi l interret de faire ca?

    Je me suis bien amuse dans cet interview dans tout les cas!!!

    ca me donne envie de m y mettre au C serieusement!!!

  8. #8
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Mon navigateur a une combinaison de touche (que je ne connais pas encore) qui poste la page alors que je ne le veux pas. C'est pourquoi j'ai beaucoup de pages inachevée qui apparaissent dans les forums que je dois éditer.

    Ma solution est élégante, mais face à celle de Jean Marc, elle est un peu ridicule. Surtout qu'on a tous mal répondu puisque la question n'est pas puissance de 2, mais puissance 2.

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par fenkys Voir le message
    Ma solution est élégante, mais face à celle de Jean Marc, elle est un peu ridicule. Surtout qu'on a tous mal répondu puisque la question n'est pas puissance de 2, mais puissance 2.
    Le tout est de connaitre le truc; je ne pretends pas l'avoir invente.

    Note: jhaythem a plus ou moins confirme que l'interpretation puissance de 2 etait la bonne en donnant la solution (qu'on lui a donnee je suppose).

  10. #10
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Merci tout le monde pour vos reponses!! specialement Jean Marc,

    Oui tu as raison pour 0. peut etre qu il fallait poser cette question aussi... ouch...

    J ai trouve ca un peu stressant de poser toutes ces questions aussi techniques en C sachant que je suis plus Java... et le pire c est que je viens d un domaine plustot wireless donc la memoire est chere et on la preserve au maximum, donc ils etait entrain de me poser des question ou le temps de reponse doit etre rapide et to do Not care about the memory.... bon j ai eu le temps de leur expliquer que je suis habitue autrement... mais bon onverra...

    Merci encore pour vos reponses et je vous tiens au courant si je suis pris, je serais plus souvent ici que dans la partie Java!!!!

    Cheers,

  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    S'il s'agit d'un entier, on peut examiner sa valeur bit par bit. Si c'est une puissance de 2, un seul bit doit être à 1. Exemple

    4 a la représentation binaire 100
    8 a la représentation binaire 1000
    16 a la représentation binaire 10000
    etc.

    Donc:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
     
    int est_puissance_2(unsigned int n)
    {
        int ret = 0;
     
        if (n > 0)
        {
            int compteur = 0;
            while (compteur < 2 && n > 0)
            {
                if (n & 0x1)
                {
                    compteur++;
                }
                n = n >> 1;
            }
     
            if ( compteur == 1)
            {
                ret = 1;
            }
        }
     
        return ret;
    }
     
    int main(void)
    {
        int nombre = 0;
     
        for (nombre = 0; nombre < 33; nombre++)
        {
            if (est_puissance_2(nombre))
            {
                printf("%2d -> OK\n", nombre);
            }
            else
            {
                printf("%2d -> KO\n", nombre);
            }
        }
     
        return 0;
    }

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #12
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    oui c est un entier,
    il y a encore une solution beaucoup plus facile!!!
    moi je suis partis sur une fonction recursive... mais bon c etait pas ca.
    Si n un entier puissance 2:
    (n & -n) == n

    Voila je me demande si c est normal de poser ce genre de questions dans un interview?? parceque vraiment c est pas evident du tout a trouver ca dans des conditions de stress et de pressions

    Qu est ce que vous en pensez?

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par jhaythem Voir le message
    oui c est un entier,
    il y a encore une solution beaucoup plus facile!!!
    moi je suis partis sur une fonction recursive... mais bon c etait pas ca.
    Si n un entier puissance 2:
    (n & -n) == n
    Depuis quand 0 est une puissance de 2?

    Voila je me demande si c est normal de poser ce genre de questions dans un interview?? parceque vraiment c est pas evident du tout a trouver ca dans des conditions de stress et de pressions

    Qu est ce que vous en pensez?
    Ca depend ce qu'ils deduisent de cela. La seule chose qu'on peut deduire d'une reponse correcte, c'est que le probleme a deja ete rencontre. Quand je pose des questions de ce genre (jamais pose celle-la, mais j'en ai deja pose qu'on peut contester de la meme maniere) lors d'une interview technique, c'est plus pour voir comment reagissent les gens que pour tester les connaissances.

  14. #14
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int isPowerOfTwo(unsigned n)
    {
       return n != 0 && (n & (n-1)) == 0;
    }

  15. #15
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int isPowerOfTwo(unsigned n)
    {
       return n != 0 && (n & (n-1)) == 0;
    }
    un gagnant!!!

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jhaythem Voir le message
    Je viens de rentrer d'un interview pour une Entry-level position, sachant que j ai plus d experience qu en Java que du C/C++, j ai fait du c/C++ a l universite et depuis 2ans je suis plein dans java et specialement j2me.

    Bref, voila le genre de questions que j ai eu a faire pendant l interview, sachant que je ne savais pas que j aurais a faire a ca, j ai cru que j ai deja passe leur interview technique online
    Je veux savoir qu est ce que vous pensez de cette questions et qu elle est la meilleur reponse:

    La questions est d ecrire une fonction en C pour retourner true or false si le nombre entre en parametre est un nombre puissance 2?
    i
    Nice try, mais non, on est pas là pour faire tes exercices à ta place... Alors, en attendant, poste le code avec lequel tu as un problème...

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2010, 11h22
  2. La meilleur solution pour faire mon agencement
    Par moithibault dans le forum Tkinter
    Réponses: 2
    Dernier message: 10/10/2009, 22h52
  3. recherche de meilleure solution, nombre de combinaison gigantesque
    Par Zwiter dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 13/05/2009, 11h42
  4. [Joomla!] Meilleure solution pour faire rapidement un site pro.
    Par petozak dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 27/02/2007, 02h33

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