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 :

Correction de mes exercices en C++ moderne


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de toto81
    Homme Profil pro
    Agent TNT Express
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Agent TNT Express
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut Correction de mes exercices en C++ moderne
    Bonjour tout le monde! Je me suis mis a suivre un cours et je viens vers vous pour corriger mes exos si vous êtes motivé!

    Plutôt que créer 25.000 topic, j'afficherais tout mes exos ici, sauf si vous pensez que c'est mieux un nouveau topic à chaque fois.

    Donc voici le premier (mes réponses en gras):

    Nom : Sans titre-1.png
Affichages : 2827
Taille : 21,5 Ko

    Et voilà le deuxième:

    Nom : Sans titre-2.png
Affichages : 2389
Taille : 20,2 Ko

    Ma réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
     
    int main()
    {
        std::cout << std::boolalpha;
        std::cout << "0 ou 0 = " << (0 || 0) << std::endl;
        std::cout << "0 ou 1 = " << (0 || 1) << std::endl;
        std::cout << "1 ou 0 = " << (1 || 0) << std::endl;
        std::cout << "1 ou 1 = " << (!1 && 1 || 1 && !1) << std::endl;
    }
    Merci d'avance les amis

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ta réponse 1 me paraît correcte, mais ta réponse 2 ne me semble pas répondre à la question: On te demande le code du OU Exclusif, et toi tu postes le code (avec beaucoup de duplication) pour écrire une table de vérité du OU Inclusif qui se transforme en OU Exclusif pour le dernier élément...

    Pour moi, la réponse devrait juste être ceci: bool ouExclusif(bool a, bool b) { return (a && !b) || (!a && b); }
    Et puis, si tu veux faire une table de vérité autour, en C++ moderne...
    Code C++11 : 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
    #include <iostream>
    #include <iomanip>
    #include <functional>
    #include <string>
     
    void affichLigneTableVerite(std::string nomOperateur, bool a, bool b, std::function<bool(bool, bool)> op)
    {
    	bool resultat = op(a, b);
    	std::cout << std::setw(5) << a << ' ' << nomOperateur << ' ' << std::setw(5) << b << " = " << resultat << std::endl;
    }
     
    void tableVerite(std::string nomOperateur, std::function<bool(bool, bool)> op)
    {
    	std::cout << "Table de verite pour operateur " << nomOperateur << ":" << std::endl;
    	affichLigneTableVerite(nomOperateur, false, false, op);
    	affichLigneTableVerite(nomOperateur, false, true , op);
    	affichLigneTableVerite(nomOperateur, true , false, op);
    	affichLigneTableVerite(nomOperateur, true , true, op);
    	std::cout << std::endl;
    }
     
     
    bool et(bool a, bool b)
    {
    	return a && b;
    }
    bool ouInclusif(bool a, bool b)
    {
    	return a || b;
    }
    bool ouExclusif(bool a, bool b)
    {
    	return (a && !b) || (!a && b);
    }
     
    int main(void)
    {
    	std::cout << std::boolalpha;
    	tableVerite("AND", et);
    	tableVerite("OR", ouInclusif);
    	tableVerite("XOR", ouExclusif);
    	return 0;
    }
    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.

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    1) Je suis d'accord avec tes réponses, mais pour le code le seul xor que tu fais c'est la dernière ligne, donc les deux précédentes sont hors-sujet, n'est-ce pas? Ton code est bon mais on considère souvent qu'il est bon de placer entre parenthèse les "sous-propositions" pour éviter les erreurs de priorité d'opérateurs (que tu ne fais pas, la priorité de && > à celle de ||). Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (x || y) && !( x && y) ) std::cout << "x xor y == true";
    2) Je complète l'exercice de la façon suivante: écrire un programme qui affiche la table de vérité de xor
    3) Pour aller plus loin:
    a. (moyen) écrire une fonction qui affiche la table de vérité de toute proposition à deux variables propositionnelles
    b. (difficile) écrire une fonction qui prend en argument une chaîne de caractères décrivant une proposition logique et en affiche la table de vérité

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    le XOR c'est l'opérateur ^ qu'on peut composer en (a && !b) || (b && !a) qui est strictement identique à (x || y) && !( x && y) même si je n'avais jamais vu cette écriture

    De mes souvenirs de cours
    !(a && b) === (!a || !b)
    !(a || b) === (!a && !b)
    factorisation (les ! sont dits "barre" et la notation est une barre par-dessus et non un ! devant)

    Active les warning, une ligne comme (!1 && 1 || 1 && !1) le compilateur t'indiquera de faire attention, et il vaut mieux parenthéser trop que trop peu. Ca coûte rien (sauf quelques caractères sur ton disque )
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    le XOR c'est l'opérateur ^
    ^ c'est l'opérateur xor binaire, pas le xor logique donc 1 ^ 1 == false, ok, mais 1 ^ 2 == 3...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par stendhal666 Voir le message
    ^ c'est l'opérateur xor binaire, pas le xor logique donc 1 ^ 1 == false, ok, mais 1 ^ 2 == 3...
    On parle de logique, de true(1) et false(0), pas de 2, 3 ou class maison comparée à chien. Et ^ est tout à fait l'opérateur xor de ce cadre. Quand j'écris un xor (sisi ça arrive ) sur mes bool j'utilise ^ et pas les formules à rallonge indiquées plus haut. Et ça marche.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Bousk Voir le message
    On parle de logique, de true(1) et false(0), pas de 2, 3 ou class maison comparée à chien. Et ^ est tout à fait l'opérateur xor de ce cadre. Quand j'écris un xor (sisi ça arrive ) sur mes bool j'utilise ^ et pas les formules à rallonge indiquées plus haut. Et ça marche.
    Avec le même raisonnement, les opérateurs logiques sont & et |, pas && et ||. Mais non, les premiers sont des opérateurs binaires, les seconds des opérateurs logiques.

    Il ne s'agit pas de comparer des chiens et des maisons. Par exemple, mettons que je veuille vérifier si mon conteneur contient des éléments, je peux écrire:

    si je veux savoir si l'un ou l'autre seulement de mes conteneurs contient des éléments je peux écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // if ( cont1.size() ^ cont2.size() ) ... Aargh!
    if ( my_xor(cont1.size(), cont2.size()) ) ...
    Alors je ne dis pas que ce sera le plus beau code jamais vu mais il est légal et montre bien qu'il ne faut pas confondre l'opérateur ^, xor binaire, et un xor logique.

  8. #8
    Membre averti Avatar de toto81
    Homme Profil pro
    Agent TNT Express
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Agent TNT Express
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut
    Salut les gars!

    J'avoue avoir du mal à comprendre ce que me demande cet exo... Je vois pas la différence entre un (true ou false) en OU inclu ou exlu :/

    Est-ce que c'est plutôt ca:

    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
    #include <iostream>
    #include <bitset>
     
    bool Xor(bool a,bool b)
    {
        bool c;
        c = (!a && b || a && !b);
        return c;
    }
     
    int main()
    {
        std::cout << std::boolalpha;
        std::cout << "false ou false =" << Xor(false,false) << std::endl;
        std::cout << "false ou true =" << Xor(false,true) << std::endl;
        std::cout << "true ou false =" << Xor(true,false) << std::endl;
        std::cout << "true ou true =" << Xor(true,true) << std::endl;
        return 0;
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui, c'est plutôt ça et ça répond à la question (tu as clairement un code qui implémente explicitement l'opérateur XOR).
    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.

  10. #10
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    le xor signifie "l'un est vrai et l'autre est faux".
    Cela peut s'écrire de deux manières:
    • le premier est vrai et le deuxieme est faux, ou vice-versa
    • l'un des deux est vrai et l'un des deux est faux


    La première version s'écrit ((a && !b) || (!a&&b)), tandis que la second s'écrirait plutot ((a||b) && (!a||!b)).

    Edit: c'est vrai que l'un est faux est aussi l'opposé de les deux sont vrais, qui s'écrit ! (a && b), et donc donnerait un ((a||b) && !(a&&b)). Je prèfere la second écriture, qui est plus équilibrée (visuellement)

Discussions similaires

  1. Problème dans la page de correction d'un exercice?
    Par menoulette dans le forum Langage
    Réponses: 4
    Dernier message: 30/08/2009, 23h57
  2. Réponses: 11
    Dernier message: 04/02/2008, 20h37
  3. Correction d'un exercice en C++
    Par aniscpp dans le forum C++
    Réponses: 2
    Dernier message: 07/12/2006, 14h01
  4. besoin d'une correction sur un exercice.
    Par phakso dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 03/03/2006, 10h01

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