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 :

Compréhension (fizz buzz)


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Compréhension (fizz buzz)
    bonjour,

    en fait j ai lu un débat sur le forum ou il était plusieurs fois dit qu en sortant de l école certains ne savaient même pas faire un fizz buzz.
    Je me suis donc renseigné, le principe C est bien d afficher des chiffres (genre de 1 à 50) et si le nombre est divisible par 5 remplacer par fizz, si divisible par 7 remplacer par buzz et si divisible par 5 et 7 remplacer par fizz buzz ? Don c dites moi si je me trompe.

    Ensuite j ai commencé à apprendre le c++ il y a quelques semaines (200 pages dévorées sur les 600 du bouquin). Je me suis dit 'ça peut être un bon exercice' mais j ai un problème, j ai pas du comprendre correctement l énoncé car j ai trouvé ça assez facile. J explique ce à quoi je pense :

    Conditions SI imbriquées en utilisant des modulo (% si j ai bien retenu ce que j ai lu, par exemple variable_a_tester%5).

    En gros on lance un compteur que l on incrémente à chaque boucle et dedans on met Si le 'resultat' du modulo 5 ET du modulo 7 est zéro alors on affiche fizz buzz sinon si le résultat du modulo 5 est 0 on affiche fizz sinon si le résultat du modulo 7 est 0 on affiche buzz sinon on affiche la variable.

    Du coup je me dis que j ai mal compris le sujet ou qu il y a un piège quelque part ?

    Merci de me dire si j ai mal compris l exercice et de me précisé où je me trompe dans l énoncé de l exercice avant que j essaye de le faire en c++.

    Merci d avance et désolé pour la question idiote. (et j espère que j ai été clair)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Le principe du fizzbuzz c'est de mettre le candidat sous pression [pour voir sa réaction], en donnant un exercice bidon mais avec un temps [très] court.
    En plus, pour cet exercice, le recruteur n'impose pas le langage : donc tu perds du temps à choisir.

    Et je ne sais pas où j'ai lu cela , mais certains candidats n'arrivent pas à le coder.

    Et les recruteurs attendent plus un code comme celui ci , comme quoi même avec un exercice bidon il faut que ce soit une réponse pas trop naturelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        bool is_ok;
     
        for(size_t count = 1, is_ok=true; count <= 50; ++count, is_ok=true) {
            if ((count % 5) == 0) { std::cout << "fizz"; is_ok = false; }
            if ((count % 7) == 0) { std::cout << (is_ok? "": " ") << "buzz"; is_ok = false; }
            if (is_ok) { std::cout << count; }
     
            std::cout << std::endl;
        }

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    aaaahhhh faut pas que je vois la réponse. vil gredin. En fait c'est bidon et dans mon raisonnement j ai juste ? Je trouvais ça super facile alors que niveau dev je suis zéro (j ai juste fais des scripts en Perl sur des systèmes Unix pour automatiser certains truc et C est loiiiin) je pensais donc pas avoir compris l exercice mais je trouve bizarre quand même que de jeunes diplômés n y arrivent pas.

    édit : merci pour ta réponse

  4. #4
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Citation Envoyé par kullervo Voir le message
    Je me suis donc renseigné, le principe C est bien d afficher des chiffres (genre de 1 à 50) et si le nombre est divisible par 5 remplacer par fizz, si divisible par 7 remplacer par buzz et si divisible par 5 et 7 remplacer par fizz buzz ?
    Dans la forme la plus souvent citée, à la place de 5, 7 et 50, c'est 3, 5 et 100.

    Citation Envoyé par foetus Voir le message
    Et je ne sais pas où j'ai lu cela , mais certains candidats n'arrivent pas à le coder.
    Je l'ai lu plusieurs fois dans la page 4 du fil « Honte à ceux qui promettent aux gens qu'ils vont devenir dev pro en quelques semaines ».

    Citation Envoyé par foetus Voir le message
    Et les recruteurs attendent plus un code comme celui ci
    Est-ce que plusieurs recruteurs t'ont fait passer le test du fizzbuzz et dit qu'ils auraient préféré un code comme celui-ci ou bien s'agit-il du retour d'un seul recruteur ?

    Citation Envoyé par kullervo Voir le message
    mais je trouve bizarre quand même que de jeunes diplômés n y arrivent pas
    Je trouve ça bizarre aussi.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Je l'ai lu plusieurs fois dans la page 4 du fil « Honte à ceux qui promettent aux gens qu'ils vont devenir dev pro en quelques semaines ».
    Cela doit être ici que je l'ai vu alors


    Citation Envoyé par Pyramidev Voir le message
    Est-ce que plusieurs recruteurs t'ont fait passer le test du fizzbuzz et dit qu'ils auraient préféré un code comme celui-ci ou bien s'agit-il du retour d'un seul recruteur ?
    Il me semble que c'est une correction que j'ai vu sur Internet (<- le gars qui est sûr qui n'est pas sûr )

    Moi aussi, j'ai passé ce test (2 ou 3 fois en 5 ans), et j'ai toujours fait avec les 3 tests (comme le décrit @kullervo).
    Mais, après réflexion, ce qui pour moi ne passe pas, ce sont ces 3 tests "très scolaire", alors qu'avec 2 tests indépendants, en affichant "fizz buzz" en 2 parties, cela fait plus technique : ouais c'est de la br4nl$tte de phoque


    Édit : trouvé sur les Internets, page originale
    -> I've interviewed lots of people who do just this: because this is an interview, they assume I'm going to ask something challenging. This doesn't mean that they overcomplicate things in the real world.

    But FizzBuzz isn't a good way to do this. The differences in optimality, extensibility, and readability are so minor that it depends a lot on your assumptions and your interpretation of the problem.

    Approach A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if i % 3 == 0 and i % 5 == 0:
       print "FizzBuzz"
    else if i % 3 == 0:
       print "Fizz"
    else if i % 5 == 0: 
       print "Buzz"
    else:
       print i
    Approach B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    s = ""
    if i % 3 == 0: 
       s = "Fizz"
    if i % 5 == 0:
       s += "Buzz"
    if s == "":
       s = str(i)
    print s
    Personally, I find approach A to be both more readability and extensible. After all, if you change the requirement to "print Foo when i is divisible by 3 and 5", then it's easy to update the code. And, it is most clearly maps to the problem statement, in my opinion.

    Others though argue that approach B is better. If you added additional requirements (print Foo if it's divisibly by 7), it'd be easier to update this. Also, it shows a "3 maps to Fizz and 5 maps to Buzz" logic.

    I disagree on the readability and extensibility of approach B, but those people aren't wrong. They're just looking at the problem from a different but equally valid perspective.

    If you envision the problem as being a sequence of "divisibility by N -> print S" requirements, then approach B is maybe better.

    But if you envision it as possibly a coincidence that there's a relationship between the string for {3 and 5} and the string for each, then approach A is maybe better.

  6. #6
    Membre à l'essai Avatar de fabzyr
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    C'est bien , vous arriver tous a le faire mais en lisant votre code on ne comprend pas , en lisant votre code on est censé savoir ce que fait la fonction ...

    Je pense que c'est fais aussi pour tester la clarté de votre code pour que l'on puisse savoir le lire comme un algorithme.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    @fabzyr Hier j'ai regardé les critiques du test fizz buzz, et c'est justement le problème.
    On demande de faire un algo intéressant. Mais parce qu'on a voulu en plus mettre sous pression le candidat en réduisant le temps de réponse, la montagne accouche d'une souris.

    Il y a 1 opération mathématique, le modulo que certains candidats ne connaissent pas, des boucles imbriquées (2-3 tests basiques), de l'affichage, et un peu d'algo (faire le double test en premier).
    Qu'est ce que tu veux optimiser, rendre présentable/ indenter, ... avec si peu ?

    Et le pire dans cette histoire 1) c'est qu'il y a 2 versions 2) on peut le coder avec des tableaux ou y aller en mode bourrin style en JavaScript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var i=1;i<100;i++){
       console.log(((['Fizz'][i%3] || '') + (['Buzz'][i%5] || '')) || i)
    }
    Tu images le recruteur qui connait que dalle à la programmation (pour lui un PC, c'est Windows Word+Excel ) que veux-tu qu'il corrige avec sa réponse type ?
    Ou alors, c'est un développeur qui corrige. Mais s'il ne connait pas le langage utilisé, comment il corrige ?

  8. #8
    Membre à l'essai Avatar de fabzyr
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    On verra bien je suis justement a la recherche d'un stage j'en parlerai a mes futurs recruteur :p.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    OK en fait il y a 50 solutions différentes mais aucune meilleure que les autres (ça dépend du point de vue de la personne en face en fait)? Après je voulais juste savoir si mon raisonnement était le bon et si j avais bien compris l énoncé.

    En tout cas merci pour vos réponses 💋. Me reste plus qu à m envoyé le reste du bouquin pour essayé d être capable de "m'amuser" un peu avec le c++

    May the force be with you.

  10. #10
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Citation Envoyé par kullervo Voir le message
    OK en fait il y a 50 solutions différentes mais aucune meilleure que les autres (ça dépend du point de vue de la personne en face en fait)?
    Certaines solutions ressemblent plutôt à des blagues.

    Dans la page FizzBuzz de rosettacode.org, tu verras plusieurs solutions dans plein de langages différents.
    Dans le cas de C++, 6 solutions sont présentées, dont 2 avec des templates.
    L'une de ces 2 solutions est un délire avec Boost.MPL.

    Citation Envoyé par foetus Voir le message
    on peut le coder avec des tableaux ou y aller en mode bourrin style en JavaScript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(var i=1;i<100;i++){
       console.log(((['Fizz'][i%3] || '') + (['Buzz'][i%5] || '')) || i)
    }
    Des indices hors limites pour simuler des tests booléens ! C'est original.
    Dans le même genre, dans la page FizzBuzz de rosettacode.org, du côté de Python, il y a une solution amusante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(1,101): print("Fizz"*(i%3==0) + "Buzz"*(i%5==0) or i)
    Elle repose sur les règles suivantes du Python :
    • Une chaîne multipliée par un nombre n répète cette chaîne n fois.
    • False est converti en 0. True est converti en 1.
    • Dans un contexte booléen, une chaîne est considérée comme vraie ssi elle est non vide.
    • Si a est considéré comme vrai, alors a or b retourne a. Sinon, il retourne b. a et b ne sont pas forcément des booléens.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par foetus Voir le message
    Ou alors, c'est un développeur qui corrige. Mais s'il ne connait pas le langage utilisé, comment il corrige ?
    Personnellement, pour recruter quelqu'un, le fizzbuzz, je le demanderais explicitement dans le langage utilisé dans le projet (ou un des s'il y en a plusieurs)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Compréhension de fseek
    Par Argonz dans le forum C
    Réponses: 9
    Dernier message: 12/01/2004, 15h01
  2. compréhension du profil d'une fonction
    Par lor dans le forum MFC
    Réponses: 7
    Dernier message: 08/01/2004, 12h59
  3. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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