<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Première/Logique booléenne et fonctions logiques</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Opérateurs logiques (ET, OU, NON, XOR, NAND), tables de vérité,<br/>
propriétés algébriques de l'algèbre de Boole, lois de De Morgan,<br/>
simplification d'expressions et lien avec la programmation Python.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q01 : Comportement de l'opérateur OU</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la valeur de sortie d'un opérateur OU inclusif ($a + b$)<br/>
si l'entrée $a$ vaut $1$ et l'entrée $b$ vaut $1$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le OU inclusif est défini par la table de vérité :<br/>
$(0,0)\to 0$, $(0,1)\to 1$, $(1,0)\to 1$, $(1,1)\to 1$.<br/>
Il s'oppose au OU exclusif (XOR) qui renvoie $0$ pour $(1,1)$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La sortie vaut $2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec une addition arithmétique. La logique<br/>
booléenne ne manipule que les valeurs $0$ et $1$, jamais $2$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La sortie vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec le OU exclusif (XOR), qui vaut $0$<br/>
lorsque les deux entrées sont identiques. Avec le OU inclusif,<br/>
dès qu'au moins une entrée vaut $1$, la sortie vaut $1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La sortie est indéterminée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la sortie d'une fonction logique est toujours<br/>
déterminée par sa table de vérité, sans ambiguïté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La sortie vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le OU inclusif renvoie $1$ dès qu'au moins<br/>
une entrée vaut $1$. Sa table de vérité ne contient un $0$<br/>
que pour la combinaison $(0, 0)$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q02 : Structure des tables de vérité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Combien de lignes comporte la table de vérité d'une fonction<br/>
logique possédant $4$ variables d'entrée ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec $n$ variables booléennes, chacune peut valoir $0$ ou $1$<br/>
indépendamment des autres, donc la table de vérité contient<br/>
$2^n$ lignes. Pour $n = 4$, on obtient $2^{4} = 16$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle comporte $12$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec $4 \times 3$ (produit) au lieu de<br/>
$2^{4}$ (puissance). Le bon raisonnement est combinatoire :<br/>
chaque variable peut prendre $2$ valeurs indépendamment.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle comporte $16$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $2^{4} = 16$ combinaisons possibles pour<br/>
quatre variables binaires.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle comporte $8$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le nombre de lignes pour $3$ variables ($2^{3}$).<br/>
Avec $4$ variables, il faut calculer $2^{4}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle comporte $4$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion entre le nombre de variables et le nombre<br/>
de combinaisons. Avec $n$ variables, on a $2^n$ combinaisons,<br/>
pas $n$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q03 : Syntaxe de programmation</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel mot-clé Python correspond à l'opérateur de négation<br/>
logique (NON) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Python privilégie une syntaxe en mots anglais lisibles : <code>not</code>,<br/>
<code>and</code> et <code>or</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le mot-clé <code>inv</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>inv</code> n'existe pas en Python comme mot-clé de négation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le mot-clé <code>not</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python utilise les mots-clés en toutes<br/>
lettres : <code>not</code>, <code>and</code> et <code>or</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le mot-clé <code>negative</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>negative</code> n'est pas un mot-clé Python.<br/>
Le mot-clé est <code>not</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le symbole <code>!</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la syntaxe du C, du C++, de Java ou de<br/>
JavaScript, pas celle de Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q04 : Étude de l'élément absorbant</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>D'après les propriétés du ET logique ($\cdot$), que vaut<br/>
systématiquement l'expression $a \cdot 0$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans l'algèbre de Boole, $0$ est l'élément absorbant du ET et<br/>
l'élément neutre du OU. Symétriquement, $1$ est l'élément<br/>
neutre du ET et l'élément absorbant du OU.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec l'élément neutre. C'est $a \cdot 1$<br/>
qui vaut $a$ ; avec $0$ comme second opérande, le résultat<br/>
est forcément $0$ (élément absorbant).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0$ est l'élément absorbant du ET logique.<br/>
Quelle que soit la valeur de $a$, le produit $a \cdot 0$ vaut $0$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $\overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a aucune négation dans l'expression. Le ET<br/>
avec $0$ donne toujours $0$, pas le complémentaire de $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion possible avec le OU logique. Pour le ET,<br/>
la sortie ne vaut $1$ que si toutes les entrées valent $1$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q05 : Principes fondamentaux</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Laquelle de ces égalités exprime qu'une variable booléenne $a$ et sa<br/>
négation $\overline{a}$ ne peuvent jamais être <strong>fausses</strong> en même<br/>
temps ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une variable booléenne est soit vraie, soit fausse : l'une des deux<br/>
valeurs $a$ ou $\overline{a}$ vaut $1$, d'où $a + \overline{a} = 1$.<br/>
De même, elles ne valent jamais $1$ ensemble, d'où<br/>
$a \cdot \overline{a} = 0$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot 1 = a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $a \cdot 1 = a$ dit que $1$ est l'élément neutre du ET.<br/>
Elle ne fait pas intervenir $\overline{a}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{\overline{a}} = a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $\overline{\overline{a}} = a$ dit que nier deux fois<br/>
redonne la valeur de départ. Elle ne compare pas $a$ et<br/>
$\overline{a}$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot \overline{a} = 0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $a \cdot \overline{a} = 0$ exprime que $a$ et<br/>
$\overline{a}$ ne peuvent pas être <strong>vraies</strong> en même temps, et non<br/>
qu'elles ne peuvent pas être fausses ensemble.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a + \overline{a} = 1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $a + \overline{a}$ ne vaudrait $0$ que si $a$ et<br/>
$\overline{a}$ valaient toutes deux $0$, ce qui est impossible. Le<br/>
OU vaut donc toujours $1$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q06 : Transformation d'expressions</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la seconde loi de De Morgan, relative au<br/>
complément d'un produit ($\overline{a \cdot b}$) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les lois de De Morgan permettent de transformer le complément<br/>
d'une opération binaire :<br/>
$\overline{a + b} = \overline{a} \cdot \overline{b}$ et<br/>
$\overline{a \cdot b} = \overline{a} + \overline{b}$.<br/>
Mémo : « on inverse chaque variable et on échange les opérateurs ».</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a \cdot b} = a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a bien transformé le ET en OU, mais on a<br/>
oublié de complémenter chaque variable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a + b} = \overline{a} \cdot \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la première loi de De Morgan (complément<br/>
d'une somme), pas la seconde demandée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a \cdot b} = \overline{a} \cdot \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a bien complémenté chaque variable, mais on a<br/>
oublié de changer l'opérateur. De Morgan transforme un<br/>
produit en somme et réciproquement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$\overline{a \cdot b} = \overline{a} + \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on complémente chaque variable et on<br/>
remplace le ET par un OU. C'est bien la seconde loi de<br/>
De Morgan.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q07 : Simplification algébrique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression simplifiée $a + a \cdot b$ d'après les<br/>
lois d'absorption ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Loi d'absorption : $a + a \cdot b = a \cdot (1 + b) = a \cdot 1 = a$.<br/>
Sa duale s'écrit $a \cdot (a + b) = a$. À distinguer de<br/>
$a + \overline{a} \cdot b = a + b$ qui est une autre identité.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : si $a = 0$ et $b = 0$, l'expression vaut $0$,<br/>
donc elle ne peut pas être identiquement égale à $1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oubli de la variable dominante. Si $a = 1$,<br/>
l'expression vaut $1$ même quand $b = 0$ : elle ne peut<br/>
donc pas se réduire à $b$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la simplification d'une autre absorption,<br/>
$a + \overline{a} \cdot b = a + b$. Ici, le facteur est $b$<br/>
(sans complément), donc la simplification est plus forte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on factorise par $a$ pour obtenir<br/>
$a \cdot (1 + b) = a \cdot 1 = a$. La présence de $b$<br/>
n'apporte rien quand $a$ est déjà vrai.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q08 : Étude du OU exclusif</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Dans quel cas précis la fonction XOR ($a \oplus b$) renvoie-t-elle<br/>
la valeur $1$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Table de vérité du XOR : $(0,0)\to 0$, $(0,1)\to 1$,<br/>
$(1,0)\to 1$, $(1,1)\to 0$. C'est l'opérateur de<br/>
« différence » ou « non-équivalence ».</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lorsque les deux entrées sont identiques</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est exactement le contraire. Le XOR renvoie $0$ (et non<br/>
$1$) lorsque les deux entrées sont identiques.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Lorsque exactement une des deux entrées vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le XOR détecte la différence entre les<br/>
entrées. Il renvoie $1$ si et seulement si exactement<br/>
une seule des deux entrées vaut $1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lorsque les deux entrées valent $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour $(1, 1)$, le XOR renvoie $0$ et non $1$.<br/>
C'est précisément ce qui le différencie du OU inclusif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lorsque au moins une entrée vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour $(0, 0)$, au moins une entrée vaut $0$<br/>
mais le XOR renvoie $0$, pas $1$. La condition n'est<br/>
donc pas suffisante.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q09 : Tester la première note d'une liste peut-être vide</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>La fonction <code>premiere_reussie(notes)</code> doit renvoyer <code>True</code> si la<br/>
liste <code>notes</code> n'est pas vide et que sa première note vaut au moins<br/>
$10$, et <code>False</code> dans tous les autres cas, sans jamais provoquer<br/>
d'erreur. Quelle expression faut-il renvoyer ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les opérateurs <code>and</code> et <code>or</code> sont séquentiels : <code>a and b</code> n'évalue<br/>
pas <code>b</code> si <code>a</code> est faux, <code>a or b</code> n'évalue pas <code>b</code> si <code>a</code> est vrai.<br/>
On place donc en premier la condition qui protège la seconde.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>notes[0] &gt;= 10 and len(notes) &gt; 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'ordre compte. <code>notes[0]</code> est évalué en premier, et pour<br/>
la liste vide il provoque une <code>IndexError</code> avant que la longueur<br/>
soit testée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>len(notes) &gt; 0 and notes[0] &gt;= 10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le <code>and</code> est évalué de gauche à droite et s'arrête<br/>
dès que la première condition est fausse. Pour <code>[]</code>,<br/>
<code>len(notes) &gt; 0</code> vaut <code>False</code> et <code>notes[0]</code> n'est jamais lu : la<br/>
fonction renvoie <code>False</code> sans erreur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>len(notes) == 0 and notes[0] &gt;= 10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour <code>[]</code>, la première condition est vraie, donc Python<br/>
évalue <code>notes[0]</code> et provoque une <code>IndexError</code>. Pour <code>[12]</code>,<br/>
l'expression vaut <code>False</code> au lieu de <code>True</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>len(notes) &gt; 0 or notes[0] &gt;= 10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec <code>or</code>, la seconde condition est évaluée quand la<br/>
première est fausse, donc justement pour la liste vide :<br/>
<code>notes[0]</code> provoque une <code>IndexError</code>. Pour <code>[8]</code>, l'expression<br/>
vaut <code>True</code> à tort.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q11 : Comportement du OU avec deux entrées à $0$</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la valeur de l'expression $a + b$ lorsque $a = 0$ et $b = 0$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le OU inclusif vaut $0$ uniquement pour la combinaison $(0, 0)$.<br/>
Pour toutes les autres combinaisons, au moins une entrée vaut $1$<br/>
et la sortie vaut $1$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec une addition arithmétique. La logique<br/>
booléenne ne manipule que les valeurs $0$ et $1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le OU vaut $0$ uniquement quand toutes ses<br/>
entrées valent $0$. C'est le seul cas qui donne $0$ pour le<br/>
OU inclusif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion possible avec l'élément absorbant du OU<br/>
($a + 1 = 1$). Avec deux entrées à $0$, la sortie vaut $0$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle est indéterminée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la sortie d'une fonction logique est entièrement<br/>
déterminée par sa table de vérité.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q12 : Loi d'idempotence du ET</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>D'après la propriété d'idempotence, à quoi est égale l'expression<br/>
$a \cdot a$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'idempotence est valable pour les deux opérateurs :<br/>
$a \cdot a = a$ et $a + a = a$. C'est une particularité de<br/>
l'algèbre de Boole que l'on n'a pas en arithmétique classique.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est la loi d'idempotence du ET. Le ET d'un<br/>
booléen avec lui-même donne ce booléen.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est $a \cdot \overline{a}$ qui vaut $0$ (principe<br/>
de non-contradiction), pas $a \cdot a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $a^2$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec l'arithmétique. En algèbre de Boole,<br/>
$1 \cdot 1 = 1$ et $0 \cdot 0 = 0$, donc le résultat est<br/>
simplement $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $\overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a pas de complémentation dans l'expression.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q13 : Élément neutre du OU</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut systématiquement l'expression $a + 0$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Mémo : pour le OU, $0$ est neutre et $1$ est absorbant. Pour le<br/>
ET, c'est l'inverse : $1$ est neutre et $0$ est absorbant.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0$ est l'élément neutre du OU. Ajouter $0$<br/>
ne change pas la valeur de $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est $a + 1$ qui vaut $1$ (élément absorbant du OU).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec l'élément absorbant du ET ($a \cdot 0 = 0$).<br/>
Pour le OU, $0$ est l'élément neutre, pas absorbant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $\overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a pas de complémentation dans l'expression.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q14 : Évaluation de la fonction NOR</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>La fonction NOR (NON-OU) est définie par $\overline{a + b}$.<br/>
Quelle est sa valeur pour $a = 0$ et $b = 0$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La NOR ne vaut $1$ que pour $(0, 0)$ et vaut $0$ pour toutes les<br/>
autres combinaisons. Comme la NAND, elle est universelle :<br/>
tout circuit logique peut être réalisé avec uniquement des NOR.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle est indéterminée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la NOR a une table de vérité parfaitement définie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $\overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la NOR ne dépend pas que de $a$ ; elle dépend des<br/>
deux entrées.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle vaut $0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oubli de la négation finale. $a + b = 0$ pour $(0, 0)$,<br/>
donc $\overline{a + b} = \overline{0} = 1$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle vaut $1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $0 + 0 = 0$, et $\overline{0} = 1$. La NOR vaut<br/>
$1$ uniquement pour cette combinaison.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q15 : Comparaison et affectation en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel symbole utilise-t-on en Python pour tester l'égalité de deux<br/>
valeurs ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Python utilise <code>=</code> pour affecter et <code>==</code> pour comparer. Confondre<br/>
les deux est une source classique de bugs : <code>if a = 5:</code> produit<br/>
une erreur de syntaxe (à dessein, pour éviter les confusions<br/>
involontaires).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le symbole <code>===</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>===</code> n'existe pas en Python (on le rencontre en<br/>
JavaScript). Écrire <code>a === b</code> provoque une erreur de syntaxe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le symbole <code>=</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>=</code> est l'opérateur d'affectation, pas de comparaison.<br/>
C'est l'erreur classique en Python : <code>a = 5</code> affecte $5$ à $a$,<br/>
alors que <code>a == 5</code> teste si $a$ vaut $5$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le symbole <code>==</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>==</code> est le test d'égalité. Il renvoie un<br/>
booléen (<code>True</code> ou <code>False</code>).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le symbole <code>!=</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>!=</code> teste la différence (l'opposé de <code>==</code>).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q17 : Première loi de De Morgan</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la première loi de De Morgan, relative au complément<br/>
d'une somme ($\overline{a + b}$) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les deux lois de De Morgan permettent de transformer le complément<br/>
d'une opération binaire :<br/>
$\overline{a + b} = \overline{a} \cdot \overline{b}$ et<br/>
$\overline{a \cdot b} = \overline{a} + \overline{b}$.<br/>
Mémo : « on complémente chaque variable et on échange les<br/>
opérateurs ».</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a + b} = \overline{a} + \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a complémenté chaque variable, mais on a oublié de<br/>
changer l'opérateur. De Morgan transforme une somme en produit<br/>
(et inversement).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a + b} = a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune transformation appliquée. Le complément d'une<br/>
expression n'est pas l'expression elle-même.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$\overline{a + b} = \overline{a} \cdot \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : « ne pas (A ou B) » revient à « ne pas A ET<br/>
ne pas B ». On complémente chaque variable et on échange les<br/>
opérateurs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a + b} = a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a bien échangé l'opérateur ($+$ devient $\cdot$),<br/>
mais on a oublié de complémenter chaque variable.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q18 : Distributivité du ET sur le OU</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la forme développée de l'expression $a \cdot (b + c)$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>$a \cdot (b + c) = a \cdot b + a \cdot c$. L'algèbre de Boole<br/>
possède aussi la distributivité duale, sans équivalent en<br/>
arithmétique : $a + (b \cdot c) = (a + b) \cdot (a + c)$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot b \cdot c$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion entre distributivité et associativité. La<br/>
distributivité du ET sur le OU produit une somme de produits.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a \cdot b + a \cdot c$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : exactement comme la distributivité de la<br/>
multiplication sur l'addition en arithmétique, $a(b+c) = ab+ac$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$(a + b) \cdot (a + c)$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la forme donnée par la distributivité<br/>
<strong>duale</strong>, celle du OU sur le ET :<br/>
$a + (b \cdot c) = (a + b) \cdot (a + c)$. Ici l'opérateur<br/>
extérieur est un ET. Pour $a = 1$ et $b = c = 0$,<br/>
l'expression proposée vaut $1$ alors que $a \cdot (b + c)$<br/>
vaut $0$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot b + c$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oubli du facteur $a$ devant le second terme. La<br/>
distributivité s'applique à chaque terme entre parenthèses.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q19 : Principe de non-contradiction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut systématiquement l'expression $a \cdot \overline{a}$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le principe de non-contradiction $a \cdot \overline{a} = 0$ et le<br/>
tiers exclu $a + \overline{a} = 1$ sont les deux propriétés duales<br/>
de complémentarité en algèbre de Boole.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le produit $a \cdot \overline{a}$ vaut toujours $0$,<br/>
quelle que soit la valeur de $a$. Il ne peut donc pas valoir<br/>
$\overline{a}$, qui dépend de $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$0$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est le principe de non-contradiction. Une<br/>
variable et son complément ne peuvent jamais valoir $1$<br/>
simultanément, donc leur ET vaut toujours $0$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : si $a = 1$, alors $\overline{a} = 0$ et le produit<br/>
vaut $0$, pas $1$. Le résultat ne peut donc pas être $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion avec le tiers exclu, qui s'écrit<br/>
$a + \overline{a} = 1$ (avec un OU, pas un ET).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q20 : Expression algébrique du OU exclusif</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>À quelle expression algébrique correspond la fonction XOR<br/>
($a \oplus b$), exprimée à l'aide des opérateurs fondamentaux ET,<br/>
OU et NON ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'expression $\overline{a} \cdot b + a \cdot \overline{b}$ se lit<br/>
directement sur la table de vérité : on prend les lignes où le<br/>
résultat vaut $1$ (ici $(0, 1)$ et $(1, 0)$), on écrit chacune comme<br/>
un produit des variables ou de leurs compléments, puis on additionne<br/>
ces produits.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la définition du ET, qui ne vaut $1$ que pour<br/>
$(1, 1)$. Le XOR vaut justement $0$ dans ce cas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a} \cdot \overline{b} + a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression vaut $1$ quand les deux entrées sont<br/>
<strong>égales</strong>, $(0, 0)$ ou $(1, 1)$, alors que le XOR vaut $1$ quand<br/>
elles diffèrent. C'est le contraire du XOR.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a} \cdot b + a \cdot \overline{b} + a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est une écriture du OU <strong>inclusif</strong>, qui garde le terme<br/>
$a \cdot b$ (ligne $(1, 1)$ de la table). Le XOR vaut justement $0$<br/>
sur cette ligne : ce troisième terme est de trop.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$\overline{a} \cdot b + a \cdot \overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le XOR vaut $1$ quand exactement une entrée<br/>
vaut $1$ : soit « $a$ faux et $b$ vrai » ($\overline{a} \cdot b$),<br/>
soit « $a$ vrai et $b$ faux » ($a \cdot \overline{b}$).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q21 : Simplification d'une condition Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>D'après les lois de De Morgan, quelle est la forme <strong>la plus<br/>
simplifiée</strong> équivalente à l'expression <code>not (x &gt; 0 and y &gt; 0)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette équivalence est très utile pour rendre les conditions<br/>
Python plus lisibles : on évite ainsi les négations imbriquées<br/>
qui obligent à un effort mental supplémentaire à la lecture.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not x &gt; 0 or not y &gt; 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette écriture est bien équivalente, mais elle<br/>
n'est pas simplifiée. En Python, <code>not</code> est moins prioritaire<br/>
que la comparaison, donc <code>not x &gt; 0</code> signifie <code>not (x &gt; 0)</code>,<br/>
soit <code>x &lt;= 0</code> : il restait à effectuer cette simplification.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>x &gt; 0 or y &gt; 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a juste retiré le <code>not</code> et changé <code>and</code> en <code>or</code>,<br/>
sans complémenter les comparaisons. Pour appliquer De Morgan,<br/>
il faut <strong>complémenter chaque condition</strong>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>x &lt;= 0 and y &lt;= 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on a bien complémenté chaque comparaison, mais on a<br/>
oublié d'échanger <code>and</code> et <code>or</code>. De Morgan transforme un ET<br/>
en OU et inversement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>x &lt;= 0 or y &lt;= 0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par la 2ème loi de De Morgan,<br/>
$\overline{a \cdot b} = \overline{a} + \overline{b}$, donc<br/>
<code>not (A and B) = (not A) or (not B)</code>. La négation de <code>&gt; 0</code><br/>
est <code>&lt;= 0</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q22 : Loi d'absorption duale</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>D'après les lois d'absorption, à quoi est égale l'expression<br/>
$a \cdot (a + b)$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les deux lois d'absorption sont duales :<br/>
$a + a \cdot b = a$ et $a \cdot (a + b) = a$.<br/>
Dans les deux cas, la variable « extérieure » domine et absorbe<br/>
la sous-expression dans laquelle elle apparaît.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : si $a = 1$ et $b = 0$, l'expression vaut $1$ alors<br/>
que $a \cdot b = 0$. Donc l'égalité ne tient pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la variable $a$ ne peut pas disparaître. Si $a = 0$,<br/>
l'expression vaut $0$ quelle que soit la valeur de $b$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est la duale de $a + a \cdot b = a$. On peut<br/>
la prouver en développant : $a \cdot (a + b) = a \cdot a + a \cdot b = a + a \cdot b = a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oubli de la dominance de $a$. Si $a = 0$,<br/>
l'expression vaut $0$, ce qui n'est pas le cas de $a + b$<br/>
quand $b = 1$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q23 : Construction de la fonction NON avec des NAND</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On note $a \uparrow b = \overline{a \cdot b}$ la fonction NON-ET<br/>
(NAND). Quelle expression, utilisant uniquement cette fonction et la<br/>
variable $a$, permet d'obtenir $\overline{a}$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>On applique la définition : $a \uparrow a = \overline{a \cdot a}$, et<br/>
comme $a \cdot a = a$, on obtient $\overline{a}$. On le vérifie sur<br/>
la table : pour $a = 0$, $\overline{0 \cdot 0} = 1$ ; pour $a = 1$,<br/>
$\overline{1 \cdot 1} = 0$.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \uparrow \overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression suppose que l'on dispose déjà de<br/>
$\overline{a}$, qui est précisément ce que l'on cherche à<br/>
construire. C'est un raisonnement circulaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a + \overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression utilise les opérateurs OU et NON, pas<br/>
uniquement la fonction $\uparrow$. De plus, elle vaut toujours $1$,<br/>
quelle que soit la valeur de $a$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a \uparrow a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : $a \uparrow a = \overline{a \cdot a} = \overline{a}$,<br/>
car $a \cdot a = a$. En reliant les deux entrées d'une porte NON-ET,<br/>
on obtient une porte NON.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{a \uparrow a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on ajoute une négation supplémentaire, qui annule la<br/>
précédente. Cela donne $\overline{\overline{a}} = a$, et non<br/>
$\overline{a}$.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q24 : Synthèse à partir d'une table de vérité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une fonction logique $f(a, b)$ a la table de vérité suivante :<br/>
$f(0, 0) = 0$, $f(0, 1) = 1$, $f(1, 0) = 0$, $f(1, 1) = 1$.<br/>
Quelle est l'expression la plus simple de $f$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Lire systématiquement la table : ici $f$ vaut $0$ quand $b = 0$<br/>
et $f$ vaut $1$ quand $b = 1$, quelle que soit la valeur de $a$.<br/>
L'expression minimale est donc $f = b$. C'est un piège classique :<br/>
avant de chercher une combinaison complexe, vérifier si la sortie<br/>
ne dépend pas en réalité d'une seule entrée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$f = a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour $(0, 1)$, on a $a \cdot b = 0$ alors que $f = 1$.<br/>
La fonction ET ne convient pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$f = a \oplus b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour $(1, 1)$, on a $a \oplus b = 0$ alors que $f = 1$.<br/>
Le XOR ne convient pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$f = b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la sortie est égale à $b$ dans toutes les<br/>
combinaisons, indépendamment de $a$. La fonction est<br/>
dégénérée : elle ne dépend en réalité que de $b$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$f = a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour $(1, 0)$, on a $a + b = 1$ alors que $f = 0$.<br/>
La fonction OU ne convient pas.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q25 : Traduire un énoncé en expression booléenne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un capteur de sécurité doit déclencher une alarme uniquement<br/>
lorsque la porte est ouverte (variable $p$ valant $1$) <strong>et</strong><br/>
qu'aucun badge autorisé n'est détecté (variable $a$ valant $0$,<br/>
$a$ valant $1$ signifiant qu'un badge autorisé est présent).<br/>
Quelle expression booléenne décrit la sortie de l'alarme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Traduire un énoncé en logique demande deux étapes : isoler<br/>
les variables binaires (ici $p$ et $a$) et identifier<br/>
l'opérateur qui relie les conditions (ET, OU, négation).<br/>
Bien repérer les négations dans le langage naturel<br/>
(« aucun », « pas de », « sauf si ») évite la moitié des<br/>
erreurs classiques.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$p \cdot \overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'alarme se déclenche quand les deux<br/>
conditions sont réunies simultanément (porte ouverte<br/>
ET pas de badge), d'où le ET logique. La condition<br/>
« pas de badge » se traduit par $\overline{a}$<br/>
(négation de la présence d'un badge autorisé).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$p \cdot a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression déclenche l'alarme quand<br/>
la porte est ouverte <strong>et</strong> qu'un badge autorisé est<br/>
présent, c'est-à-dire dans une situation parfaitement<br/>
normale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$p + a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le OU ne convient pas. Avec cette<br/>
expression, l'alarme se déclenche dès que la porte<br/>
est ouverte, même si un badge autorisé est détecté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{p} \cdot \overline{a}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression vaut $1$ quand la porte est<br/>
fermée et qu'aucun badge n'est détecté, c'est-à-dire<br/>
en l'absence totale d'activité, ce qui est l'inverse<br/>
du comportement souhaité.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q26 : Simplifier une expression</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la forme la plus simple de l'expression<br/>
$a \cdot (a + b) + a \cdot \overline{b}$ ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La loi d'absorption ($a + a \cdot b = a$ et<br/>
$a \cdot (a + b) = a$) est l'une des plus efficaces<br/>
pour simplifier rapidement. Quand un résultat de<br/>
simplification surprend, la vérification par table de<br/>
vérité (quatre lignes pour deux variables) tranche<br/>
sans ambiguïté.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$a$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on développe et l'on simplifie.<br/>
$a \cdot (a + b) = a$ par absorption ; il reste<br/>
$a + a \cdot \overline{b}$, qui se simplifie à<br/>
son tour en $a$ par la même loi d'absorption.<br/>
L'expression vaut donc simplement $a$, quelle que<br/>
soit la valeur de $b$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a + b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression vaut $1$ pour $(0, 1)$,<br/>
alors que l'expression initiale vaut $0$. Une<br/>
simplification se vérifie toujours en testant les<br/>
$2^n$ combinaisons.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$a \cdot b$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression vaut $0$ pour $(1, 0)$,<br/>
alors que l'expression initiale vaut $1$ (car<br/>
$a \cdot \overline{b} = 1$).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$\overline{b}$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression ne dépend pas de $a$<br/>
alors que la valeur de l'expression initiale en<br/>
dépend (pour $a = 0$, elle vaut toujours $0$<br/>
quelle que soit la valeur de $b$).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q27 : Évaluer une expression avec et et non</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression <code>a and not b</code> lorsque <code>a</code> vaut <code>True</code> et <code>b</code><br/>
vaut <code>False</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>not</code> est évalué avant <code>and</code>, lui-même avant <code>or</code>. Des parenthèses<br/>
rendent l'ordre explicite quand on hésite.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>not b</code> vaut l'inverse de <code>False</code>, et <code>and</code> n'est<br/>
vrai que si ses deux opérandes le sont.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : évalue d'abord <code>not b</code>, puis combine avec <code>a</code> par un<br/>
<code>and</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True and False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une expression booléenne s'évalue en <code>True</code> ou<br/>
<code>False</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>not</code> ne pouvant suivre <code>and</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not</code> s'applique à <code>b</code> avant le <code>and</code>, l'écriture est<br/>
valide.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q28 : Une division évitée par le et</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>x != 0 and 10 / x &gt; 2</code> lorsque <code>x</code> vaut <code>0</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'évaluation paresseuse de <code>and</code> et <code>or</code> permet d'écrire une<br/>
condition de garde avant une opération risquée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False</code>, la seconde comparaison n'étant pas évaluée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>x != 0</code> est faux, donc le résultat du <code>and</code><br/>
est connu. Python n'évalue pas <code>10 / x</code>, et la division par<br/>
zéro n'a pas lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur de division par zéro, <code>10 / x</code> étant calculé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python évalue <code>and</code> de gauche à droite et s'arrête dès<br/>
que le résultat est certain.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code>, car <code>10 / 0</code> est considéré comme infini</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la division n'est jamais calculée, et <code>x != 0</code> est de<br/>
toute façon faux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>0</code>, le résultat de la première comparaison</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une expression avec <code>and</code> renvoie un booléen.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q29 : Un ou entre deux tests</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>n % 2 == 0 or n &gt; 10</code> lorsque <code>n</code> vaut <code>7</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les opérateurs arithmétiques et de comparaison sont évalués avant<br/>
les opérateurs booléens.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>or</code> est vrai dès qu'une des deux comparaisons<br/>
l'est. Pour 7, regarde la parité puis la comparaison à 10.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : évalue séparément <code>7 % 2 == 0</code> et <code>7 &gt; 10</code>, puis<br/>
applique la règle du <code>or</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le résultat d'un <code>or</code> entre comparaisons est un<br/>
booléen.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>%</code> ne pouvant être mêlé à <code>or</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les comparaisons sont évaluées d'abord, le <code>or</code><br/>
combine ensuite leurs résultats.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q30 : La priorité de not devant or</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut <code>not a or b</code> lorsque <code>a</code> et <code>b</code> valent tous deux <code>True</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Ordre de priorité : <code>not</code>, puis <code>and</code>, puis <code>or</code>. En cas de doute,<br/>
les parenthèses évitent toute ambiguïté.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True</code>, l'expression se lisant <code>(not a) or b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>not</code> est prioritaire sur <code>or</code>. <code>not a</code> vaut<br/>
<code>False</code>, puis <code>False or True</code> vaut <code>True</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False</code>, l'expression se lisant <code>not (a or b)</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : sans parenthèses, <code>not</code> ne porte que sur <code>a</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur de syntaxe, <code>not</code> ne pouvant précéder <code>or</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'expression est valide, seule sa lecture demande de<br/>
connaître les priorités.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a</code>, le <code>not</code> et le <code>or</code> s'annulant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'expression s'évalue en un booléen, ici <code>True</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q31 : Le type d'une comparaison</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie <code>type(3 &gt; 2)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>bool</code> est un type à deux valeurs. Toute condition d'un <code>if</code> ou<br/>
d'un <code>while</code> est de ce type.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>&lt;class 'bool'&gt;</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : une comparaison produit un booléen, <code>True</code> ou<br/>
<code>False</code>, du type <code>bool</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>&lt;class 'int'&gt;</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les opérandes sont des entiers, mais le résultat de la<br/>
comparaison ne l'est pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>&lt;class 'str'&gt;</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>True</code> sans guillemets n'est pas une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>type</code> ne s'appliquant pas à une comparaison</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>type</code> accepte toute valeur, y compris le résultat<br/>
d'une comparaison.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q32 : Le nombre de lignes d'une table</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Combien de lignes compte la table de vérité d'une expression à<br/>
trois variables booléennes ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une table de vérité énumère toutes les combinaisons des entrées :<br/>
$2^n$ lignes pour $n$ variables.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$8$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : chaque variable prend deux valeurs, et les<br/>
combinaisons se multiplient : $2^{3} = 8$.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$6$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les valeurs se combinent, elles ne s'additionnent pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$9$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le nombre de combinaisons est une puissance de deux,<br/>
pas un carré.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$3$</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : $3$ est le nombre de colonnes d'entrée, pas le nombre<br/>
de lignes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q33 : Retrouver l'expression d'une table</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une expression <code>e</code> de deux variables a la table suivante :<br/>
<code>a=0, b=0 → 0</code> ; <code>a=0, b=1 → 0</code> ; <code>a=1, b=0 → 1</code> ; <code>a=1, b=1 → 0</code>.<br/>
Quelle est cette expression ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour lire une table, on repère les lignes vraies : une seule ligne<br/>
vraie se traduit par un <code>and</code> des variables, niées quand elles<br/>
valent 0.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>a and not b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la seule ligne vraie est celle où <code>a</code> vaut 1 et<br/>
<code>b</code> vaut 0, ce que traduit <code>a and not b</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a or not b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression serait vraie aussi pour <code>a=0, b=0</code> et<br/>
<code>a=1, b=1</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not a and b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression est vraie pour <code>a=0, b=1</code>, pas pour<br/>
<code>a=1, b=0</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a and b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>a and b</code> n'est vrai que sur la dernière ligne.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q34 : Compter les lignes vraies</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Dans la table de vérité à deux variables <code>a</code> et <code>b</code>, sur combien<br/>
de lignes l'expression <code>a or b</code> vaut-elle 1 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>or</code> est vrai sur trois lignes sur quatre, <code>and</code> sur une seule,<br/>
<code>not a</code> sur les deux lignes où <code>a</code> vaut 0.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$3$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : parmi les quatre combinaisons de <code>a</code> et <code>b</code>,<br/>
<code>a or b</code> est vraie sur 3 d'entre elles.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$1$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : reprends les quatre combinaisons une par une et évalue<br/>
<code>a or b</code> sur chacune.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : compte seulement les lignes où <code>a or b</code> vaut 1.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$4$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune des expressions usuelles n'est vraie sur les<br/>
quatre lignes.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q35 : Deux expressions, une même table</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle expression a exactement la même table de vérité que<br/>
<code>not (a and b)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Deux expressions sont équivalentes si leurs tables coïncident sur<br/>
toutes les lignes. Les lois de De Morgan sont les équivalences les<br/>
plus utiles pour simplifier une négation.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>not a or not b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les deux expressions sont fausses uniquement<br/>
quand <code>a</code> et <code>b</code> valent toutes deux 1. C'est la seconde loi de<br/>
De Morgan.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not a and not b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette expression n'est vraie que si <code>a</code> et <code>b</code> valent<br/>
toutes deux 0, alors que <code>not (a and b)</code> est vraie sur trois<br/>
lignes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a or b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>a or b</code> est fausse pour <code>a=0, b=0</code>, là où<br/>
<code>not (a and b)</code> est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not a and b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour <code>a=1, b=0</code>, <code>not a and b</code> vaut 0 et<br/>
<code>not (a and b)</code> vaut 1.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q36 : Lignes vraies à trois variables</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Dans la table de vérité à trois variables <code>a</code>, <code>b</code> et <code>c</code>, qui<br/>
compte huit lignes, sur combien de lignes l'expression <code>a and (b or c)</code><br/>
vaut-elle 1 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec trois variables, fixer l'une d'elles ramène à deux tables de<br/>
quatre lignes, plus faciles à dénombrer.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>$3$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : en fixant d'abord la valeur de <code>a</code>, on compte<br/>
les combinaisons de <code>b</code> et <code>c</code> qui rendent <code>a and (b or c)</code> vraie, soit<br/>
3 lignes au total.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$5$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : reprends les huit combinaisons, en séparant les cas<br/>
<code>a=0</code> et <code>a=1</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$2$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : vérifie chaque combinaison de <code>b</code> et <code>c</code> pour la<br/>
valeur de <code>a</code> qui rend l'expression possible.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>$8$ lignes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une expression vraie sur les huit lignes serait une<br/>
tautologie, ce qui n'est pas le cas ici.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q37 : La loi d'absorption</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>À quoi se simplifie l'expression <code>a or (a and b)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Absorption : <code>a or (a and b)</code> vaut <code>a</code>, et de même<br/>
<code>a and (a or b)</code> vaut <code>a</code>. Une table de vérité le confirme en<br/>
quatre lignes.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>a</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si <code>a</code> est vrai, le <code>or</code> l'est ; si <code>a</code> est<br/>
faux, <code>a and b</code> l'est aussi. Le résultat ne dépend que de <code>a</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a and b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour <code>a=1, b=0</code>, l'expression vaut 1 alors que<br/>
<code>a and b</code> vaut 0.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>a or b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour <code>a=0, b=1</code>, l'expression vaut 0 alors que<br/>
<code>a or b</code> vaut 1.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>b</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la valeur de <code>b</code> n'influence jamais le résultat.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Logique booléenne et fonctions logiques — Q38 : La double négation</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>À quoi est équivalente l'expression <code>not (not a)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La double négation est la plus simple des règles de<br/>
simplification : <code>not not a</code> se réduit à <code>a</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>a</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : nier deux fois revient au point de départ,<br/>
comme « il n'est pas faux que » signifie « il est vrai que ».</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not a</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : deux négations s'annulent, il n'en reste aucune.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le résultat dépend de <code>a</code>, il n'est pas constant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour <code>a</code> faux, <code>not (not a)</code> vaut <code>False</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
