Partage
  • Partager sur Facebook
  • Partager sur Twitter

Je n'arrive pas à faire cet exercice

(cours de gbdivers)

    26 octobre 2018 à 16:15:19

    Salut, je suis entrain de faire un exercice du cours de gbdivers dont voici l'énoncé :

    "Dans le code suivant, replacer @@@@ par une expression n'utilisant que les valeurs a et b et les opérateurs logiques &&|| et !, de façon à reproduire la table de vérité précédente."

    #include <iostream>
     
    bool eval(bool a,bool b) {
        return (@@@@);
    }
     
    int main() {
        std::cout << std::noboolalpha;
        std::cout << "|  a  |  b  |  XOR   " << std::endl;
        std::cout << "|  0  |  0  |   " << eval(false, false) << std::endl;
        std::cout << "|  0  |  1  |   " << eval(false, true)  << std::endl;
        std::cout << "|  1  |  0  |   " << eval(true,  false) << std::endl;
        std::cout << "|  1  |  1  |   " << eval(true,  true)  << std::endl;
    }

    Moi j'ai fait ceci :

    #include <iostream>
    
    bool eval(bool a, bool b)
    {
        return ((a && b) || (!a && b) || (a && !b) || (a && b));
    }
    
    int main()
    {
        std::cout << std::noboolalpha;
        std::cout << "|  a  |  b  |  XOR  " << std::endl;
        std::cout << "|  0  |  0  |  " << eval(false, false) << std::endl;
        std::cout << "|  0  |  1  |  " << eval(false, true) << std::endl;
        std::cout << "|  1  |  0  |  " << eval(true, false) << std::endl;
        std::cout << "|  1  |  1  |  " << eval(true, true) << std::endl;
    }
    

    Quand j'exécute, ça me met dans la colonne "XOR"

    -> (de haut en bas) 0, 1, 1, 1

    Or, la table de vérité de la consigne donne dans la colonne "XOR"

    -> (toujours de haut en bas) 0, 1, 1, 0

    J'ai essayé par tous les moyens de changer le dernier 1 en 0 mais impossible.

    (j'ai essayé de mettre :

    //1
    return ((a && b) || (!a && b) || (a && !b) || (a || b));
    */ 
    //Ca n'a pas marché...
    
    //2
    return ((a && b) || (!a && b) || (a && !b) || (!a && !b));
    //Ca n'a pas marché non plus

    )

    Merci d'avance !





    • Partager sur Facebook
    • Partager sur Twitter

    C++ à la vie à la mort. (Le python c'est bien aussi) || Rejoignez : https://discord.gg/9r3zqgg

      26 octobre 2018 à 17:10:59

      Tu utilises 4 termes : (terme1) || (terme2) || (terme3) || (terme4)

      Mais terme1 et terme4 sont identique, donc, en utilisant que des OU (||), ça sert à rien.

      Avec une approche qu'avec que des OU (||), tu devrais, au maximum, avoir autant de terme que de ligne à "1", donc que 2.

      A toi de trouver les 2 termes. ;)

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        26 octobre 2018 à 17:14:49

        Bonjour,

        Tu fais des || de 4 termes, il suffit de 2 termes pour que ça fonctionne. Et dans les 3 lignes que tu indiques, tu as les 2 termes à utiliser et 2 autres qui sont de trop.
        Autre indice : en écrivant (a && b) tu auras quelque chose de vrai si a et b sont vrais, et comme tu fais des || la dernière ligne sera toujours à vraie, mais tu souhaites que ce cas soit faux. Le cas (a && b) est donc un mauvais départ.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

        Je n'arrive pas à faire cet exercice

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown