exercices/5e/5L14.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, choice, range1, combinaisonListes } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'

export const titre = 'Calculer la valeur d\'une expression littérale'
export const interactifReady = true
export const interactifType = 'mathLive'

/**
* Calculer la valeur d'une expression littérale
*
* * ax+b
* * a(x+b)
* * x^2+y^2
* * x^2-y^2
* * ax^2+b(x-1)+cy^3
* * ax^2+bx+c
* * ax^2+bx-c
* * ax^2-bx+c
* * axy+x+y
* * (ax+b)(cy-d)
* @author Rémi Angot
* 5L14
*/
export const uuid = '17e39'
export const ref = '5L14'
export default function CalculerLaValeurDUneExpressionLitterale () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.consigne = ''
  this.nbQuestions = 5
  this.nbCols = 1
  this.nbColsCorr = 1

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []

    // let typesDeQuestionsDisponibles = range1(10)
    let typesDeQuestionsDisponibles

    if (this.version === '5L13-5') {
      typesDeQuestionsDisponibles = range1(2)
    } else {
      typesDeQuestionsDisponibles = range1(10)
    };

    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posées mais l'ordre diffère à chaque "cycle"

    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      let a, b, c, d, x, y
      switch (listeTypeDeQuestions[i]) {
        case 1: // ax+b
          a = randint(2, 10)
          x = randint(2, 10, a)
          b = randint(1, 10, [a, x])
          texte = `Calculer $${a}x+${b}$ pour $x=${x}$.`
          texteCorr = `Pour $x=${x}$ : <br>`
          texteCorr += `$${a}x+${b}=${a}\\times ${x}+${b}=${a * x}+${b}=${a * x + b}$`
          setReponse(this, i, a * x + b)
          break
        case 2: // a(x+b)
          a = randint(2, 10)
          x = randint(2, 10, a)
          b = randint(1, 10, [a, x])
          texte = `Calculer $${a}(x+${b})$ pour $x=${x}$.`
          texteCorr = `Pour $x=${x}$ : <br>`
          texteCorr += `$${a}(x+${b})=${a}\\times (${x}+${b})=${a}\\times ${x + b}=${a * (x + b)}$`
          setReponse(this, i, a * (x + b))
          break
        case 3: // x^2+y^2
          x = randint(2, 10)
          y = randint(2, 10)
          texte = `Calculer $x^2+y^2$ pour $x=${x}$ et $y=${y}$.`
          texteCorr = `Pour $x=${x}$ et $y=${y}$ : <br>`
          texteCorr += `$x^2+y^2=${x}^2+${y}^2=${x ** 2}+${y ** 2}=${x ** 2 + y ** 2}$`
          setReponse(this, i, x ** 2 + y ** 2)
          break
        case 4: // x^2-y^2
          x = randint(2, 10)
          y = randint(1, x - 1)
          texte = `Calculer $x^2-y^2$ pour $x=${x}$ et $y=${y}$.`
          texteCorr = `Pour $x=${x}$ et $y=${y}$ : <br>`
          texteCorr += `$x^2-y^2=${x}^2-${y}^2=${x ** 2}-${y ** 2}=${x ** 2 - y ** 2}$`
          setReponse(this, i, x ** 2 - y ** 2)
          break
        case 5: // ax^2+b(x-1)+cy^3
          a = randint(2, 5)
          b = randint(2, 6)
          c = randint(2, 6)
          x = randint(3, 6)
          y = choice([1, 2, 3, 5, 10])
          texte = `Calculer $${a}x^2+${b}(x-1)+${c}y^3$ pour $x=${x}$ et $y=${y}$.`
          texteCorr = `Pour $x=${x}$ et $y=${y}$ : <br>`
          texteCorr += `$${a}x^2+${b}(x-1)+${c}y^3=${a}\\times ${x}^2+${b}(${x}-1)+${c}\\times ${y}^3=${a}\\times ${x ** 2}+${b}\\times ${x - 1}+${c}\\times ${y ** 3}=${a * x ** 2 + b * (x - 1) + c * y ** 3}$.`
          setReponse(this, i, a * x ** 2 + b * (x - 1) + c * y ** 3)
          break
        case 6: // ax^2+bx+c
          a = randint(2, 5)
          b = randint(2, 6)
          c = randint(2, 6)
          x = randint(3, 6)
          texte = `Calculer $${a}x^2+${b}x+${c}$ pour $x=${x}$.`
          texteCorr = `Pour $x=${x}$ : <br>`
          texteCorr += `$${a}x^2+${b}x+${c}=${a}\\times ${x}^2+${b}\\times ${x}+${c}=${a}\\times ${x ** 2}+${b * x}+${c}=${a * x ** 2 + b * x + c}$`
          setReponse(this, i, a * x ** 2 + b * x + c)
          break
        case 7: // ax^2+bx-c
          a = randint(2, 5)
          b = randint(2, 6)
          c = randint(2, 6)
          x = randint(3, 6)
          texte = `Calculer $${a}x^2+${b}x-${c}$ pour $x=${x}$.`
          texteCorr = `Pour $x=${x}$ : <br>`
          texteCorr += `$${a}x^2+${b}x-${c}=${a}\\times ${x}^2+${b}\\times ${x}-${c}=${a}\\times ${x ** 2}+${b * x}-${c}=${a * x ** 2 + b * x - c}$`
          setReponse(this, i, a * x ** 2 + b * x - c)
          break
        case 8: // ax^2-bx+c
          a = randint(2, 5)
          b = randint(2, a)
          c = randint(2, 6)
          x = randint(3, 6)
          texte = `Calculer $${a}x^2-${b}x+${c}$ pour $x=${x}$.`
          texteCorr = `Pour $x=${x}$ : <br>`
          texteCorr += `$${a}x^2-${b}x+${c}=${a}\\times ${x}^2-${b}\\times ${x}+${c}=${a}\\times ${x ** 2}-${b * x}+${c}=${a * x ** 2 - b * x + c}$`
          setReponse(this, i, a * x ** 2 - b * x + c)
          break

        case 9: // axy+x+y
          a = randint(2, 10)
          x = randint(2, 10)
          y = randint(2, 10, x)
          texte = `Calculer $${a}xy+x+y$ pour $x=${x}$ et $y=${y}$.`
          texteCorr = `Pour $x=${x}$ et $y=${y}$ : <br>`
          texteCorr += `$${a}xy+x+y=${a}\\times ${x}\\times ${y}+${x}+${y}=${a * x * y}+${x}+${y}=${a * x * y + x + y}$`
          setReponse(this, i, a * x * y + x + y)
          break
        case 10: // (ax+b)(cy-d)
          a = randint(2, 10)
          x = randint(2, 10)
          b = randint(1, 10)
          y = randint(2, 10, x)
          c = randint(2, 10)
          d = randint(1, Math.min(10, c * y))
          texte = `Calculer $(${a}x+${b})(${c}y-${d})$ pour $x=${x}$ et $y=${y}$.`
          texteCorr = `Pour $x=${x}$ et $y=${y}$ : <br>`
          texteCorr += `$(${a}x+${b})(${c}y-${d})=(${a}\\times ${x}+${b})(${c}\\times ${y}-${d})=${a * x + b}\\times ${c * y - d}=${(a * x + b) * (c * y - d)}$`
          setReponse(this, i, (a * x + b) * (c * y - d))
          break
      }
      texte += ajouteChampTexteMathLive(this, i)

      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++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  // this.besoinFormulaireCaseACocher = true;
}