exercices/3e/3L14.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, combinaisonListes, texFractionReduite, texFraction } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import FractionX from '../../modules/FractionEtendue.js'
export const titre = 'Résoudre une équation produit nul'
export const interactifReady = true
export const interactifType = 'mathLive'

export const dateDeModifImportante = '18/03/2022'

/**
 * Résolution d'équations de type (ax+b)(cx+d)=0
 * @author Jean-Claude Lhote
 * Tout est dans le nom de la fonction.
 * Référence 3L14
 * Rendu interactif par Guillaume Valmont le 18/03/2022
 */
export const uuid = 'ecf62'
export const ref = '3L14'
export default function ResoudreUneEquationProduitNul () {
  'use strict'
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.nbQuestions = 5
  this.nbCols = 1
  this.nbColsCorr = 1
  this.sup = 1
  context.isHtml ? this.spacingCorr = 2 : this.spacingCorr = 1.5
  this.spacing = 1
  this.tailleDiaporama = 3

  this.nouvelleVersion = function () {
    this.consigne = 'Résoudre ' + (this.nbQuestions !== 1 ? 'les équations suivantes' : 'l\'équation suivante') + '.'
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    let listeTypeDeQuestions = []
    switch (parseInt(this.sup)) {
      case 1: listeTypeDeQuestions = combinaisonListes([1, 2], this.nbQuestions)
        break
      case 2: listeTypeDeQuestions = combinaisonListes([3, 4], this.nbQuestions)
        break
      case 3: listeTypeDeQuestions = combinaisonListes([5, 6], this.nbQuestions)
        break
      case 4: listeTypeDeQuestions = combinaisonListes([1, 2, 3, 4, 5, 6], this.nbQuestions)
    }
    for (let i = 0, a, b, c, d, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      switch (listeTypeDeQuestions[i]) {
        case 1: b = randint(1, 20) // (x+a)(x+b)=0 avec a et b entiers
          d = randint(1, 20, [b])
          texte = `$(x+${b})(x+${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(x+${b})(x+${d})=0$`
          texteCorr += '<br> Soit ' + `$x+${b}=0$` + ' ou ' + `$x+${d}=0$`
          texteCorr += '<br> Donc ' + `$x=${0 - b}$` + ' ou ' + `$x=${0 - d}$`
          setReponse(this, i, [`${0 - b};${0 - d}`, `${0 - d};${0 - b}`])
          break
        case 2: b = randint(1, 20) // (x-a)(x+b)=0 avec a et b entiers
          d = randint(1, 20, [b])
          texte = `$(x-${b})(x+${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(x-${b})(x+${d})=0$`
          texteCorr += '<br> Soit ' + `$x-${b}=0$` + ' ou  ' + `$x+${d}=0$`
          texteCorr += '<br> Donc ' + `$x=${b}$` + ' ou ' + `$x=${0 - d}$`
          setReponse(this, i, [`${b};${0 - d}`, `${0 - d};${b}`])
          break

        case 3: a = randint(2, 6) // (ax+b)(cx+d)=0  avec b/a et d/c entiers.
          b = Math.round(randint(1, 5) * a)
          c = randint(2, 6, [a])
          d = Math.round(randint(1, 5) * c)
          texte = `$(${a}x+${b})(${c}x+${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(${a}x+${b})(${c}x+${d})=0$`
          texteCorr += '<br> Soit ' + `$${a}x+${b}=0$` + ' ou ' + `$${c}x+${d}=0$`
          texteCorr += '<br> Donc ' + `$${a}x=${0 - b}$` + ' ou ' + `$${c}x=${0 - d}$`
          texteCorr += '<br> Donc ' + `$x=-${texFraction(b, a)}$` + ' ou ' + `$x=-${texFraction(d, c)}$`
          texteCorr += '<br> Donc ' + `$x=${0 - b / a}$` + ' ou ' + `$x=${0 - d / c}$`
          setReponse(this, i, [`${0 - b / a};${0 - d / c}`, `${0 - d / c};${0 - b / a}`])
          break
        case 4: a = randint(2, 6) // (ax+b)(cx-d)=0  avec b/a et d/c entiers.
          b = Math.round(randint(1, 5) * a)
          c = randint(2, 6, [a])
          d = Math.round(randint(1, 5) * c)
          texte = `$(${a}x+${b})(${c}x-${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(${a}x+${b})(${c}x-${d})=0$`
          texteCorr += '<br> Soit ' + `$${a}x+${b}=0$` + ' ou ' + `$${c}x-${d}=0$`
          texteCorr += '<br> Donc ' + `$${a}x=${0 - b}$` + ' ou ' + `$${c}x=${d}$`
          texteCorr += '<br> Donc ' + `$x=-${texFraction(b, a)}$` + ' ou ' + `$x=${texFraction(d, c)}$`
          texteCorr += '<br> Donc ' + `$x=${0 - b / a}$` + ' ou ' + `$x=${d / c}$`
          setReponse(this, i, [`${0 - b / a};${d / c}`, `${d / c};${0 - b / a}`])
          break
        case 5:
          a = randint(2, 9) // (ax+b)(cx+d)=0 avec b/a et d/c quelconques.
          b = randint(1, 20, [a])
          c = randint(2, 9, [a])
          d = randint(1, 20, [b, c])
          texte = `$(${a}x+${b})(${c}x+${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(${a}x+${b})(${c}x+${d})=0$`
          texteCorr += '<br> Soit ' + `$${a}x+${b}=0$` + ' ou ' + `$${c}x+${d}=0$`
          texteCorr += '<br> Donc ' + `$${a}x=${0 - b}$` + ' ou ' + `$${c}x=${0 - d}$`
          texteCorr += '<br> Donc ' + `$x=-${texFraction(b, a)}$`
          if (texFraction(b, a) !== texFractionReduite(b, a)) { texteCorr += `$=-${texFractionReduite(b, a)}$` }
          texteCorr += ' ou ' + `$x=-${texFraction(d, c)}$`
          if (texFraction(d, c) !== texFractionReduite(d, c)) { texteCorr += `$=-${texFractionReduite(d, c)}$` }
          setReponse(this, i, FractionX.texArrayReponsesCoupleDeFractionsEgalesEtSimplifiees(-b, a, -d, c))
          break
        case 6:
          a = randint(2, 9) // (ax+b)(cx-d)=0 avec b/a et d/c quelconques.
          b = randint(1, 20, [a])
          c = randint(2, 9, [a])
          d = randint(1, 20, [b, c])
          texte = `$(${a}x+${b})(${c}x-${d})=0$`
          texteCorr = 'Un produit est nul si l\'un au moins de ses facteurs est nul.'
          texteCorr += '<br>' + `$(${a}x+${b})(${c}x-${d})=0$`
          texteCorr += '<br> Soit ' + `$${a}x+${b}=0$` + ' ou ' + `$${c}x-${d}=0$`
          texteCorr += '<br> Donc ' + `$${a}x=${0 - b}$` + ' ou ' + `$${c}x=${d}$`
          texteCorr += '<br> Donc ' + `$x=-${texFraction(b, a)}$`
          if (texFraction(b, a) !== texFractionReduite(b, a)) { texteCorr += `$=-${texFractionReduite(b, a)}$` }
          texteCorr += ' ou ' + `$x=${texFraction(d, c)}$`
          if (texFraction(d, c) !== texFractionReduite(d, c)) { texteCorr += `$=${texFractionReduite(d, c)}$` }
          setReponse(this, i, FractionX.texArrayReponsesCoupleDeFractionsEgalesEtSimplifiees(-b, a, d, c))
          break
      }
      if (this.interactif) {
        texte += ajouteChampTexteMathLive(this, i, 'inline largeur25')
      }
      this.introduction = (this.interactif && context.isHtml) ? "<em>S'il y a plusieurs réponses, les séparer par un point-virgule. Si c'est une fraction, elle doit être irréductible.</em>" : ''
      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)
        // alert(this.listeQuestions)
        // alert(this.listeCorrections)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = ['Niveau de difficulté', 4, ' 1 : Coefficient de x = 1\n 2 : Coefficient de x>1 et solutions entières\n 3 : Solutions rationnelles\n 4 : Mélange']
}