exercices/can/2e/can2a-2021.js

import Exercice from '../../Exercice.js'
import { mathalea2d } from '../../../modules/2dGeneralites.js'
import { fraction } from '../../../modules/fractions.js'
import {
  point, repere, courbe, labelPoint, segment, milieu, texteParPosition, codageSegment
} from '../../../modules/2d.js'
import { round, min } from 'mathjs'
import { listeQuestionsToContenu, stringNombre, randint, ecritureAlgebrique, texNombre, texFractionReduite, printlatex, shuffle, simplificationDeFractionAvecEtapes, choice, calcul, sp } from '../../../modules/outils.js'
import { setReponse } from '../../../modules/gestionInteractif.js'

import { ajouteChampTexteMathLive } from '../../../modules/interactif/questionMathLive.js'
export const titre = 'CAN Seconde sujet 2021'
export const interactifReady = true
export const interactifType = 'mathLive'
// Les exports suivants sont optionnels mais au moins la date de publication semble essentielle
export const dateDePublication = '05/04/2022' // La date de publication initiale au format 'jj/mm/aaaa' pour affichage temporaire d'un tag
// export const dateDeModifImportante = '24/10/2021' // Une date de modification importante au format 'jj/mm/aaaa' pour affichage temporaire d'un tag

/**
 * Description didactique de l'exercice
 * Gilles Mora
 * Référence
*/

function compareNombres (a, b) {
  return a - b
}
export const uuid = '1f0cd'
export const ref = 'can2a-2021'
export default function SujetCAN2021Seconde () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.nbQuestions = 30
  this.nbCols = 1
  this.nbColsCorr = 1
  this.comment = `Cet exercice fait partie des annales des Courses aux nombres.<br>
  Il est composé de 30 questions réparties de la façon suivante :<br>
  les 10 premières questions parfois communes à plusieurs niveaux font appels à des questions automatisées élémentaires et les 20 suivantes (qui ne sont pas rangées dans un ordre de difficulté) sont un peu plus « coûteuses » cognitivement.<br>
  Par défaut, les questions sont rangées dans le même ordre que le sujet officiel avec des données aléatoires. Ainsi, en cliquant sur « Nouvelles données », on obtient une nouvelle course aux nombres avec des données différentes.
  En choisissant un nombre de questions différents de 30, on fabrique une « mini » course aux nombres qui respecte la proportion de nombre de questions élémentaires par rapport aux autres.
  Par exemple, en choisissant 20 questions, la course aux nombres sera composée de 7 questions automatisées élémentaires choisies aléatoirement dans les 10 premières questions du sujet officiel puis de 13 autres questions choisies aléatoirement parmi les 20 autres questions du sujet officiel.`
  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    const nbQ1 = min(round(this.nbQuestions * 8 / 30), 8) // Choisir d'un nb de questions de niveau 1 parmi les 8 possibles.
    const nbQ2 = min(this.nbQuestions - nbQ1, 22)
    const typeQuestionsDisponiblesNiv1 = shuffle([1, 2, 3, 4, 5, 6, 8, 9]).slice(-nbQ1).sort(compareNombres)
    const typeQuestionsDisponiblesNiv2 = shuffle([7, 10,
      11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
      21, 22, 23, 24, 25, 26, 27, 28, 29, 30]).slice(-nbQ2).sort(compareNombres)
    const typeQuestionsDisponibles = (typeQuestionsDisponiblesNiv1.concat(typeQuestionsDisponiblesNiv2))

    const listeFractions3 = [[1, 3, 1, 5], [1, 7, 1, 2], [1, 4, 1, 3], [1, 2, 1, 5], [1, 9, 1, 2], [1, 7, 1, 4],
      [1, 11, 1, 2], [1, 5, 1, 6], [1, 10, 1, 3], [1, 3, 1, 8], [1, 9, 1, 4], [1, 5, 1, 9], [1, 7, 1, 10], [1, 6, 1, 7]
    ]
    const listeFractions7 = [[1, 5, 3, 2], [2, 5, 1, 3], [1, 5, 2, 3], [1, 3, 5, 2], [1, 3, 5, 4]
    ]

    const listeFractions15 = [[5, 3], [7, 9], [3, 7], [5, 7], [9, 7], [2, 9], [4, 7], [11, 5], [11, 3]
    ]

    for (let i = 0, index = 0, nbChamps, texte, texteCorr, reponse, k1, k2, r, f, listeFacteurs16 = [], code1, code2, code3, code4, choix, truc, a, b, c, d, p, k, A, B, C, D, E, xmin, xmax, ymin, ymax, objets, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      switch (typeQuestionsDisponibles[i]) {
        case 1:
          a = randint(2, 9)

          texte = `$${a} \\times 99=$ `
          texteCorr = `$${a} \\times 99=${a}\\times 100-${a}=${a * 99}$`
          reponse = a * 99
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1

          break

        case 2:

          a = randint(1, 9) * 10
          p = randint(2, 9, 5) * 10
          reponse = calcul(a * p / 100)
          texte = `$${p}\\%$ de $${a}= $`

          texteCorr = `          Prendre $${p}\\%$  de $${a}$ revient à prendre $${p / 10}\\times 10\\%$  de $${a}$.<br>
            Comme $10\\%$  de $${a}$ vaut $${a / 10}$ (pour prendre $10\\%$  d'une quantité, on la divise par $10$), alors
            $${p}\\%$ de $${a}=${p / 10}\\times ${a / 10}=${reponse}$.
           `

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break

        case 3:
          a = choice(listeFractions3)
          b = fraction(a[0], a[1])
          c = fraction(a[2], a[3])

          texte = `$${b.texFraction} + ${c.texFraction}=$
             `
          texteCorr = `Pour additionner des fractions, on les met au même dénominateur.<br>
  
             Ainsi, $${b.texFraction} + ${c.texFraction}
             =\\dfrac{${b.n}\\times${c.d}}{${b.d}\\times${c.d}}+ \\dfrac{${c.n}\\times${b.d}}{${b.d}\\times${c.d}}
             =\\dfrac{${b.n * c.d}+${c.n * b.d}}{${c.d * b.d}}=\\dfrac{${b.n * c.d + c.n * b.d}}{${b.d * c.d}}$.`

          reponse = fraction(b.n * c.d + c.n * b.d, b.d * c.d)
          setReponse(this, index, reponse, { formatInteractif: 'fractionEgale' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break
        case 4:
          a = randint(1, 10)
          b = a * a

          texte = `$\\sqrt{${b}}=$
               `
          texteCorr = `$\\sqrt{${b}}$ est le nombre positif dont le carré vaut $${b}$. Comme  $${a}^2=${b}$, alors $\\sqrt{${b}}=${a}$.`

          reponse = a
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break
        case 5:
          a = randint(3, 15)
          b = choice([15, 30])

          texte = `Si l'on parcourt $${a}$ km en $${b}$ min, la vitesse moyenne est de 
             `
          if (b === 15) {
            texteCorr = `$15$ min est le quart d'une heure. Donc la vitesse moyenne est $${a}\\times 4=${4 * a}$ km/h.`

            reponse = a * 4
          } else {
            texteCorr = `$30$ min est la moitié d'une heure. Donc la vitesse moyenne est $${a}\\times 2=${2 * a}$ km/h.`

            reponse = a * 2
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'km/h' } else { texte += '$\\ldots$ km/h' }
          nbChamps = 1
          break

        case 6:
          a = randint(-9, -1)
          b = randint(2, 9)
          reponse = a ** 2 + b

          texte = `Calculer $x^2+${b}$ pour $x=${a}$. 
               `
          texteCorr = `Pour $x=${a}$, $x^2+${b}=(${a})^2+${b}=${a ** 2}+${b}=${reponse}$.`

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 7:
          a = choice(listeFractions7)
          b = fraction(a[0], a[1])
          c = fraction(a[2], a[3])
          k1 = 3
          k2 = 7
          texte = `$\\dfrac{${b.n * k2}}{${b.d * k1}}\\times \\dfrac{${c.n * k1}}{${c.d * k2}}=$
             `
          reponse = fraction(b.n * c.n, b.d * c.d)
          texteCorr = `$\\dfrac{${b.n * k2}}{${b.d * k1}}\\times \\dfrac{${c.n * k1}}{${c.d * k2}}=
          \\dfrac{${b.n}\\times ${k2}}{${b.d}\\times${k1}}\\times \\dfrac{${c.n}\\times ${k1}}{${c.d}\\times ${k2}}=\\dfrac{${b.n}\\times ${k2}\\times ${c.n}\\times ${k1}}{${b.d}\\times${k1}\\times ${c.d}\\times ${k2}}=${texFractionReduite(b.n * c.n, b.d * c.d)}$`

          reponse = fraction(b.n * c.n, b.d * c.d)
          setReponse(this, index, reponse, { formatInteractif: 'fractionEgale' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break

        case 8:
          a = randint(2, 5)
          reponse = randint(2, 9)
          c = randint(1, 9)
          b = c - a * reponse
          texte = `Résoudre : <br>$${a}x${ecritureAlgebrique(b)}=${c}$`
          texteCorr = `
             $\\begin{aligned}
             ${a}x${ecritureAlgebrique(b)}&=${c}\\\\
            ${a}x&=${c}${ecritureAlgebrique(-b)}\\\\
                                 x&=${reponse}
            \\end{aligned}$<br>
                      `
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 9:
          if (choice([true, false])) {
            a = randint(2, 9)
            b = choice([-1, -2])
            texte = `Ecriture décimale de : <br>
                        $10^3+${a}\\times 10^2+10^{${b}}$`
            texteCorr = `$10^3+${a}\\times 10^2+10^{${b}}=1000+${a * 100}+${texNombre(10 ** b, 2)}=${texNombre(1000 + a * 100 + 10 ** b, 2)}$`
            reponse = 1000 + a * 100 + 10 ** b
          } else {
            a = randint(2, 9)
            b = choice([-1, -2])
            texte = `Ecriture décimale de : <br>
                         $${a}\\times 10^3+ 10^2+10^{${b}}$`
            texteCorr = `$${a}\\times10^3+ 10^2+10^{${b}}=${a * 1000}+100+${texNombre(10 ** b, 2)}=${texNombre(a * 1000 + 100 + 10 ** b, 2)}$`
            reponse = a * 1000 + 100 + 10 ** b
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 10:
          a = randint(3, 11)
          b = randint(5, 12, a)

          reponse = 30 - a - b
          texte = `La moyenne de $${a}$ ; $${b}$ et $n$ vaut $10$.<br>
         $n=$`
          texteCorr = `
        Pour avoir une moyenne de $10$, la somme des $3$ nombres doit être égale à $30$. <br>Par conséquent $n=30-${a}-${b}=${30 - a - b}$.
                   `
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break

        case 11:
          choix = choice(['a', 'b', 'c'])//
          if (choix === 'a') {
            a = randint(11, 39, [10, 20, 30]) / 1000
            truc = a * 100
            reponse = `${stringNombre(truc)}\\times 10^{-2}`
            texte = `Ecriture  scientifique de $${texNombre(a, 3)}$`

            texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
            Ici : $${texNombre(a, 3)}=\\underbrace{${texNombre(truc, 3)}}_{1\\leqslant ${texNombre(truc, 3)} <10}\\times 10^{-2}$. `
          }
          if (choix === 'b') {
            a = randint(111, 399, [200, 300]) / 100000
            truc = a * 1000
            reponse = `${stringNombre(truc)}\\times 10^{-3}`
            texte = `Ecriture  scientifique de $${texNombre(a, 5)}$`

            texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
              Ici : $${texNombre(a, 5)}=\\underbrace{${texNombre(truc, 5)}}_{1\\leqslant ${texNombre(truc, 5)} <10}\\times 10^{-3}$. `
          }
          if (choix === 'c') {
            a = randint(111, 399, [200, 300]) / 1000000
            truc = a * 10000
            reponse = `${stringNombre(truc)}\\times 10^{-4}`
            texte = `Ecriture  scientifique de $${texNombre(a, 6)}$`

            texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
                Ici : $${texNombre(a, 6)}=\\underbrace{${texNombre(truc, 6)}}_{1\\leqslant ${texNombre(truc, 6)} <10}\\times 10^{-4}$. `
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 12:
          a = randint(3, 99, [4, 9, 16, 25, 36, 49, 64, 81])
          reponse = Math.floor(Math.sqrt(a))
          texte = `Encadrer $\\sqrt{${a}}$  par deux entiers consécutifs :<br>
      `
          texteCorr = ` On cherche le carré parfait le plus proche de $${a}$ inférieur à $${a}$.<br>
       Comme $${Math.floor(Math.sqrt(a)) ** 2}=${Math.floor(Math.sqrt(a))}^2$, alors :
     $${Math.floor(Math.sqrt(a))}< \\sqrt{${a}} < ${Math.floor(Math.sqrt(a)) + 1}$.`

          if (this.interactif) {
            setReponse(this, index, reponse, { formatInteractif: 'calcul' })
            texte += ajouteChampTexteMathLive(this, index, 'largeur12 inline', { texteApres: sp(5) + ` $< \\sqrt{${a}} <$` })
            setReponse(this, index + 1, reponse + 1, { formatInteractif: 'calcul' })
            texte += ajouteChampTexteMathLive(this, index + 1, 'largeur12 inline')
          } else { texte += `$\\ldots < \\sqrt{${a}} < \\ldots$` }
          nbChamps = 2
          break

        case 13:

          a = randint(1, 5)
          b = randint(2, 5)
          if (choice([true, false])) {
            texte = `Développer $(${b}x+${a})^2$`
            texteCorr = `On utilise l'égalité remarquable $(a+b)^2=a^2+2ab+b^2$ avec $a=${b}x$ et $b=${a}$.<br>
              $(${b}x+${a})^2=(${b}x)^2+2 \\times ${b}x \\times ${a} + ${a}^2=${b * b}x^2+${2 * b * a}x+${a * a}$`
            reponse = [`${b * b}x^2+${2 * b * a}x+${a * a}`]
          } else {
            texte = `Développer $(${b}x-${a})^2$`
            texteCorr = `On utilise l'égalité remarquable $(a+b)^2=a^2-2ab+b^2$ avec $a=${b}x$ et $b=${a}$.<br>
              $(${b}x-${a})^2=(${b}x)^2-2 \\times ${b}x \\times ${a} + ${a}^2=${b * b}x^2-${2 * b * a}x+${a * a}$`
            reponse = [`${b * b}x^2-${2 * b * a}x+${a * a}`]
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1

          break

        case 14:
          choix = choice(['a', 'b'])//, 'b', 'c'
          if (choix === 'a') {
            a = randint(11, 39, [10, 20, 30]) + randint(1, 9) / 10

            reponse = a * 1000
            texte = `$${texNombre(a, 1)}$ m$^3=$`

            texteCorr = `$1$ m$^3 = 1000$ L, donc  $${texNombre(a, 1)}$ m$^3=${texNombre(a, 1)}\\times 1000$ L$=${texNombre(a * 1000, 1)}$ L`
          }
          if (choix === 'b') {
            a = randint(11, 39, [10, 20, 30]) + randint(11, 99, [10, 20, 30, 40, 50, 60, 70, 80, 90]) / 100

            reponse = a * 1000
            texte = `$${texNombre(a, 2)}$ m$^3=$`

            texteCorr = `$1$ m$^3 = 1000$ L, donc  $${texNombre(a, 2)}$ m$^3=${texNombre(a, 2)}\\times 1000$ L$=${texNombre(a * 1000, 2)}$ L`
          }

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'L' } else { texte += '$\\ldots$ L' }
          nbChamps = 1
          break

        case 15:
          a = choice(listeFractions15)
          b = fraction(a[0], a[1])
          k1 = choice([3, 5, 7, 9])

          texte = `Écrire $\\dfrac{${b.n * k1}}{${b.d * k1}}$ sous forme d'une fraction irréductible.
             `

          texteCorr = `$\\dfrac{${b.n * k1}}{${b.d * k1}}=\\dfrac{${b.n}\\times ${k1}}{${b.d}\\times ${k1}}=\\dfrac{${b.n}}{${b.d}}$.`

          reponse = fraction(b.n, b.d).simplifie()
          setReponse(this, index, reponse, { formatInteractif: 'fraction' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 16:

          choix = choice(['a', 'b'])
          if (choix === 'a') {
            listeFacteurs16 = [2, 3, 5, 7]
            listeFacteurs16 = shuffle(listeFacteurs16)

            reponse = [`${listeFacteurs16[0]}\\times${listeFacteurs16[1]}\\times ${listeFacteurs16[2]}`]
            texte = `Décomposer $${listeFacteurs16[0] * listeFacteurs16[1] * listeFacteurs16[2]}$ en produits de facteurs premiers.`

            texteCorr = `$${listeFacteurs16[0] * listeFacteurs16[1] * listeFacteurs16[2]}=${listeFacteurs16[0]}\\times ${listeFacteurs16[1]}\\times ${listeFacteurs16[2]}$`
          }
          if (choix === 'b') {
            listeFacteurs16 = [2, 3, 5]
            listeFacteurs16 = shuffle(listeFacteurs16)

            reponse = [`${listeFacteurs16[0]}\\times${listeFacteurs16[0]}\\times ${listeFacteurs16[1]}`,
                `${listeFacteurs16[0]}^2\\times ${listeFacteurs16[1]}`]
            texte = `Décomposer $${listeFacteurs16[0] * listeFacteurs16[0] * listeFacteurs16[1]}$ en produits de facteurs premiers.`

            texteCorr = `$${listeFacteurs16[0] * listeFacteurs16[0] * listeFacteurs16[1]}=${listeFacteurs16[0]}\\times ${listeFacteurs16[0]}\\times ${listeFacteurs16[2]}=${listeFacteurs16[0]}^2\\times ${listeFacteurs16[1]}$`
          }

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 17:
          a = randint(5, 99) / 10
          b = randint(2, 9) * 5
          c = 100 - b
          texte = `$${b}\\times${texNombre(a, 1)} + ${texNombre(a, 1)}\\times${c}=$ 
      `
          texteCorr = ` On factorise : <br>     $\\begin{aligned}
      ${b}\\times${texNombre(a, 1)} + ${texNombre(a, 1)}\\times${c}&=${texNombre(a, 1)}\\times \\underbrace{(${b}+${c})}_{=100}\\\\
      &=${texNombre(a, 1)}\\times 100\\\\
      &=${100 * a}
      \\end{aligned}$`
          reponse = 100 * a
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
          nbChamps = 1
          break

        case 18:

          a = randint(1, 6)
          b = randint(3, 5)
          c = randint(2, 9)
          d = randint(1, 10)
          texte = `Dans un repère du plan, on donne $A(${a};${c})$ et $B(${b};${d})$.<br>
        Déterminer les coordonnées du milieu du segment  $[AB]$.`
          texteCorr = `Les coordonnées du milieu sont  données par : 
        $\\left(\\dfrac{${a}+${b}}{2};\\dfrac{${c}+${d}}{2}\\right)=
        \\left(\\dfrac{${a + b}}{2};\\dfrac{${c + d}}{2}\\right)=
        (${texNombre((a + b) / 2, 1)};${texNombre((c + d) / 2, 1)})$.`
          if (this.interactif) {
            setReponse(this, index, fraction(a + b, 2), { formatInteractif: 'fractionEgale' })
            texte += '<br>$\\Bigg($'
            texte += ajouteChampTexteMathLive(this, index, 'largeur12 inline', { texteApres: sp(3) + ';' })
            setReponse(this, index + 1, fraction(c + d, 2), { formatInteractif: 'fractionEgale' })
            texte += ajouteChampTexteMathLive(this, index + 1, 'largeur12 inline')
            texte += '$\\Bigg)$'
          }
          nbChamps = 2

          break

        case 19:
          a = randint(3, 9)// CB
          k = randint(2, 5)// coeff
          b = k * a// AC
          c = randint(1, a - 1)// EB
          d = k * c// AD
          A = point(0, 4, 'A', 'above')
          D = point(3.75, 4, 'D', 'above')
          E = point(4, -1, 'E', 'below')
          B = point(6, -1, 'B', 'below')
          C = point(3.91, 0.74, 'C', 'left')
          xmin = -1
          ymin = -2.5
          xmax = 7
          ymax = 5
          objets = []
          objets.push(
            texteParPosition(`${stringNombre(d)} cm`, milieu(A, D).x, milieu(A, D).y + 0.3),
            texteParPosition(' ?', milieu(B, E).x, milieu(B, E).y - 0.3),
            texteParPosition(`${stringNombre(b)} cm`, milieu(A, C).x - 0.6, milieu(A, C).y),
            texteParPosition(`${stringNombre(a)} cm`, milieu(C, B).x + 0.5, milieu(C, B).y + 0.2),
            labelPoint(A, B, C, D, E), segment(B, E), segment(D, E), segment(A, D), segment(A, B))
          reponse = c
          texte = `$(AD)//(EB)$.<br>
           $A$, $C$ et $B$ sont alignés <br>
           $D$, $C$ et $E$ sont alignés.<br>
           <br>`
          texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 30, mainlevee: false, amplitude: 0.5, scale: 0.8, style: 'margin: auto' }, objets)
          texteCorr = `Le triangle $ACD$ est un agrandissement du triangle $EBC$. Le coefficient d'agrandissement est donné par : $\\dfrac{${b}}{${a}}=${k}$.<br>
          On obtient donc la longueur $EB$ en divisant par $${k}$ la longueur $AD$.<br>
          $EB=\\dfrac{${d}}{${k}}=${c}$ cm.<br>`
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) {
            texte += '<br>$EB=$'
            texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'cm'
          } else { texte += ' $EB=\\ldots$ cm' }

          nbChamps = 1
          break

        case 20:
          choix = choice(['a', 'b'])
          if (choix === 'a') {
            a = randint(18, 25) * 10
            b = choice([20, 25])
            reponse = a * 100 / b
            texte = `$${b} \\%$ des élèves d'un lycée sont externes. <br>
          Il y a $${a}$ externes. Combien y a-t-il d'élèves dans ce lycée ? 
      `
            texteCorr = ` Comme $100 \\%$ est égal à $${100 / b}$ fois $${b} \\%$, alors le nombre d'élèves dans ce lycée est : $${a}\\times ${100 / b}=${reponse}$.`
          }
          if (choix === 'b') {
            a = randint(8, 15) * 10
            b = 10
            reponse = a * 10
            texte = `$${b} \\%$ des élèves d'un lycée sont externes. <br>
            Il y a $${a}$ externes. Combien y a-t-il d'élèves dans ce lycée ? 
        `
            texteCorr = ` Comme $100 \\%$ est égal à $${100 / b}$ fois $${b} \\%$, alors le nombre d'élèves dans ce lycée est : $${a}\\times ${100 / b}=${reponse}$.`
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 21:
          choix = choice(['a', 'b'])
          if (choix === 'a') {
            a = randint(2, 10)
            b = randint(2, 10)
            reponse = [printlatex(`(${a}*x-${b})*(${a}*x+${b})`), printlatex(`(${a}*x+${b})*(${a}*x-${b})`)]

            texte = `Factoriser $${a ** 2}x^2-${b ** 2}$.
      `
            texteCorr = ` On reconnaît une différence de deux carrés : $a^2-b^2$ avec $a=${a}x$ et $b=${b}$.<br>
            Comme $a^2-b^2=(a-b)(a+b)$, alors $${a ** 2}x^2-${b ** 2}=(${a}x-${b})(${a}x+${b})$.`
          }
          if (choix === 'b') {
            a = randint(2, 10)
            b = randint(2, 10)
            reponse = [printlatex(`(${b}-${a}*x)*(${b}+${a}*x)`), printlatex(`(${b}+${a}*x)*(${b}-${a}*x)`)]

            texte = `Factoriser $${b ** 2}-${a ** 2}x^2$.
      `
            texteCorr = ` On reconnaît une différence de deux carrés : $a^2-b^2$ avec $a=${b}$ et $b=${a}x$.<br>
            Comme $a^2-b^2=(a-b)(a+b)$, alors  $${b ** 2}-${a ** 2}x^2=(${b}-${a}x)(${b}+${a}x)$.`
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 22:
          a = randint(5, 6)
          b = randint(6, 10)
          if (choice([true, false])) {
            texte = 'Soit le script Python suivant :<br>$\\begin{array}{|l|}\n'
            texte += '\\hline\n'
            texte += '\\\n \\texttt{def calcul(a,b) :}  \\\n '
            texte += `\\\\\n ${sp(6)} \\texttt{if a!=6 or b>8 :}\\\n `
            texte += `\\\\\n ${sp(12)} \\texttt{b = a+b}\\\n `
            texte += `\\\\\n ${sp(6)} \\texttt{else :}\\\n `
            texte += `\\\\\n ${sp(12)} \\texttt{b = a-b}\\\n `
            texte += `\\\\\n ${sp(6)} \\texttt{return b}\\\\\n `
            texte += '\\hline\n'
            texte += '\\end{array}\n$'
            texte += `<br> Que renvoie l'instruction $\\texttt{calcul(${a},${b})}$ ?`
            if (a !== 6 || b > 8) {
              texteCorr = `Si $a$ est différent de $6$ ou $b>8$, le script renvoie la somme de $a$ et de $b$, sinon il renvoie la différence.<br>
          Dans ce cas, il renvoie la somme : $${a}+${b}=${a + b}$.`
              reponse = a + b
            } else {
              texteCorr = `Si $a$ est différent de $6$ ou $b>8$, le script renvoie la somme de $a$ et de $b$, sinon il renvoie la différence.<br>
              Dans ce cas, il renvoie la différence : $${a}-${b}=${a - b}$.`
              reponse = a - b
            }
          } else {
            texte = 'Soit le script Python suivant :<br>$\\begin{array}{|l|}\n'
            texte += '\\hline\n'
            texte += '\\\n \\texttt{def calcul(a,b) :}  \\\n '
            texte += `\\\\\n ${sp(6)} \\texttt{if a!=6 or b<8 :}\\\n `
            texte += `\\\\\n ${sp(12)} \\texttt{b = a+b}\\\n `
            texte += `\\\\\n ${sp(6)} \\texttt{else :}\\\n `
            texte += `\\\\\n ${sp(12)} \\texttt{b = a-b}\\\n `
            texte += `\\\\\n ${sp(6)} \\texttt{return b}\\\\\n `
            texte += '\\hline\n'
            texte += '\\end{array}\n$'
            texte += `<br> Que renvoie l'instruction $\\texttt{calcul(${a},${b})}$ ?`
            if (a !== 6 || b < 8) {
              texteCorr = `Si $a$ est différent de $6$ ou $b<8$, le script renvoie la somme de $a$ et de $b$, sinon il renvoie la différence.<br>
              Dans ce cas, il renvoie la somme : $${a}+${b}=${a + b}$.`
              reponse = a + b
            } else {
              texteCorr = `Si $a$ est différent de $6$ ou $b<8$, le script renvoie la somme de $a$ et de $b$, sinon il renvoie la différence.<br>
                  Dans ce cas, il renvoie la différence : $${a}-${b}=${a - b}$.`
              reponse = a - b
            }
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 23:
          a = randint(1, 9)
          b = randint(1, 9)
          k = randint(1, 4)
          c = a + k
          d = b + randint(2, 4) * k
          texte = `Dans un repère du plan, on considère les points $A(${a};${b})$ et $B(${c};${d})$.<br>
          Calculer le coefficient directeur de $(AB)$. 
      `
          texteCorr = ` Le coefficient directeur de la droite $(AB)$ est donné par :<br>
           $\\dfrac{y_B-y_A}{x_B-x_A}=\\dfrac{${d}-${b}}{${c}-${a}}=${(d - b) / (c - a)}$.
          `
          reponse = fraction(d - b, c - a)
          setReponse(this, index, reponse, { formatInteractif: 'fractionEgale' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 24:
          a = randint(2, 10)

          reponse = 4 * a
          texte = `Déterminer le périmètre d'un carré d'aire $${a ** 2}$ cm$^2$. 
      `
          texteCorr = `Si l'aire du carré est $${a ** 2}$ cm$^2$, la longueur de son côté est $\\sqrt{${a ** 2}}=${a}$ cm. <br>
          On en déduit que le périmètre du carré est $4\\times ${a}=${4 * a}$ cm. `

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'cm' }
          nbChamps = 1
          break

        case 25:
          a = randint(2, 10)
          b = randint(2, 10)
          reponse = fraction(a, a + b)
          texte = `On tire une boule dans une urne contenant $${a}$ boules rouges et $${b}$ boules vertes.<br>
          Quelle est la probabilité de tirer une boule rouge ? 
      `
          texteCorr = `Il y a $${b}$ boules rouges sur un total de $${a + b}$ boules. <br>
          La probabilité de tirer une boule rouge est donc : $\\dfrac{${a}}{${a + b}}${simplificationDeFractionAvecEtapes(a, a + b)}$`

          setReponse(this, index, reponse, { formatInteractif: 'fractionEgale' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 26:
          choix = choice(['a', 'b', 'c'])
          if (choix === 'a') {
            a = choice([40, 60, 80, 100, 120])
            reponse = a / 4
            texte = `Une voiture roule à la vitesse moyenne de $${a}$ km/h.<br>
            Combien de kilomètres a-t-elle parcourus en $15$ minutes ?
        `
            texteCorr = `Dans une heure, il y a $4\\times 15$ minutes. <br>Ainsi en $15$ minutes, la voiture aura parcouru $${a}\\div 4=${a / 4}$ km.<br>
            `
          }

          if (choix === 'b') {
            a = choice([60, 90, 120])
            reponse = a / 6
            texte = `Une voiture roule à la vitesse moyenne de $${a}$ km/h.<br>
                          Combien de kilomètres a-t-elle parcourus en $10$ minutes ?
                      `
            texteCorr = `Dans une heure, il y a $6\\times 10$ minutes. <br>Ainsi en $10$ minutes, la voiture aura parcouru $${a}\\div 6=${a / 6}$ km.
                          `
          }

          if (choix === 'c') {
            a = choice([30, 60, 90, 120])
            reponse = a / 3
            texte = `Une voiture roule à la vitesse moyenne de $${a}$ km/h.<br>
                                        Combien de kilomètres a-t-elle parcourus en $20$ minutes ?
                                    `
            texteCorr = `Dans une heure, il y a $3\\times 20$ minutes. <br>Ainsi en $20$ minutes, la voiture aura parcouru $${a}\\div 3=${a / 3}$ km.
                                        `
          }
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'km' }
          nbChamps = 1
          break
        case 27:
          a = randint(1, 10)

          A = point(0, 0, 'A', 'below')
          B = point(4, 0, 'B', 'below')
          C = point(4, 4, 'C', 'above')
          D = point(0, 4, 'D', 'above')
          code1 = codageSegment(A, B, '|')
          code2 = codageSegment(B, C, '|')
          code3 = codageSegment(C, D, '|')
          code4 = codageSegment(A, D, '|')
          xmin = -1
          ymin = -1
          xmax = 5
          ymax = 5
          objets = []
          objets.push(
            texteParPosition(`${stringNombre(a)} cm`, milieu(A, B).x, milieu(A, B).y - 0.4),
            texteParPosition('?', milieu(D, B).x + 0.2, milieu(D, B).y + 0.1),
            labelPoint(A, B, C, D), segment(A, B), segment(B, C), segment(C, D), segment(D, A), segment(B, D), code1, code2, code3, code4)
          reponse = [`\\sqrt{${2 * a ** 2}}`, `${Math.sqrt(2 * a ** 2)}`, `${a}\\sqrt{2}`]
          texte = `Compléter : <br>
            `
          texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 30, mainlevee: false, amplitude: 0.5, scale: 0.8, style: 'margin: auto' }, objets)
          texteCorr = `Le théorème de Pythagore dans le triangle rectangle $ADB$ donne : <br>
            $DB^2=AD^2+AB^2$ soit $DB^2=${a}^2+${a}^2=2\\times ${a}^2=${2 * a ** 2}$.<br>
            Ainsi, $DB=\\sqrt{${2 * a ** 2}}$ ou encore $DB=${a}\\sqrt{2}$.`
          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) {
            texte += '<br>$DB=$'
            texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'cm'
          } else { texte += ' $DB=\\ldots$ cm' }

          nbChamps = 1
          break

        case 28:
          a = choice([1, 2, 3, 4, 10])
          reponse = a ** 3 / 100
          texte = `La masse volumique d'un solide  est de $10$ g/cm$^3$.<br>
          Combien pèse (en kg) ce solide qui a la forme d'un cube  d'arête $${a}$ cm  ? 
      `
          texteCorr = `Le volume du cube est $${a}^3=${a ** 3}$ cm$^3$.<br>
          Sa masse  est donc donnée par $${a ** 3}\\times 10=${10 * a ** 3}$ g soit $${texNombre(a ** 3 / 100, 2)}$ kg.

          `

          setReponse(this, index, reponse, { formatInteractif: 'calcul' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'kg' }
          nbChamps = 1
          break

        case 29:
          a = randint(-1, 6)
          b = randint(1, 4) + randint(1, 9) / 10

          r = repere({ xMin: -4, xMax: 4, yMin: -3, yMax: 8, xUnite: 2, yUnite: 1 })
          // courbe(x => a * x + b, { repere: r, color: 'blue' })
          f = x => 0.5 * x ** 3 + b
          C = courbe(f, { repere: r, color: 'red' })

          reponse = [Math.cbrt(2 * (a - b)) - 0.1, Math.cbrt(2 * (a - b)) + 0.1]
          texte = `Voici la courbe d'une fonction $f$. <br>
Donner une valeur approchée de l'antécédent de $${a}$ par $f$ ?<br>`
          texte += mathalea2d({ xmin: -8, xmax: 8.2, ymin: -3, ymax: 8, scale: 0.5 }, r, C)
          texteCorr = `L'antécédent de $${a}$ par $f$ est l'abscisse du point de la courbe d'ordonnée $${a}$ : $${texNombre(Math.cbrt(2 * (a - b)), 1)}$ en est une valeur approchée. `

          setReponse(this, index, reponse, { formatInteractif: 'intervalle' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break

        case 30:
          c = choice([2, 3, 11, 12])
          p = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
          choix = choice(['a', 'b', 'b'])
          if (choix === 'a') {
            texte = "On lance deux fois de suite un dé cubique équilibré.<br>Quelle est la probabilité d’obtenir deux fois le même nombre ?<br>Donner le résultat sous la forme d'une fraction irréductible."
            texteCorr = "Sur $36$ cas possibles équiprobables, il y en a $6$ qui sont des doubles. Donc la probabilité d'obtenir deux fois le même nombre est $\\dfrac{6}{36}=\\dfrac{1}{6}$."
            reponse = fraction(1, 6)
          }
          if (choix === 'b') {
            texte = `On lance deux dés cubiques équilibrés.<br>Quelle est la probabilité d’obtenir un total de $${c}$ ?<br>Donner le résultat sous la forme d'une fraction irréductible.`
            texteCorr = `Sur $36$ cas possibles équiprobables, il y en a $${p[c - 2]}$ qui donnent une somme de $${c}$. Donc la probabilité d'obtenir un total de $${c}$ est $\\dfrac{${p[c - 2]}}{36}${simplificationDeFractionAvecEtapes(p[c - 2], 36)}$.`
            reponse = fraction(p[c - 2], 36).simplifie()
          }
          setReponse(this, index, reponse, { formatInteractif: 'fraction' })
          if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
          nbChamps = 1
          break
      }

      if (this.listeQuestions.indexOf(texte) === -1) { // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
        index += nbChamps
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}