exercices/2e/2N60-4.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, choice, combinaisonListes, rienSi1, ecritureAlgebrique, ecritureParentheseSiNegatif, signe, abs, pgcd, texFractionReduite, miseEnEvidence, texFraction, texSymbole } from '../../modules/outils.js'

export const titre = 'Inéquation du premier degré'

/**
 * Inéquation du premier degré
 * * Type 1 : x+a≤b ou ax≤b
 * * Type 2 : ax+b≤c
 * * Type 3 : ax+b≤cx+d
 * * Tous les types
 * @author Remi Angot et Guillaume Valmont
 * 2N60-4, ex 2L13
 */
export const uuid = 'bc1e4'
export const ref = '2N60-4'
export default function ExerciceInequation1 () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.spacing = 2
  context.isHtml ? (this.spacingCorr = 3) : (this.spacingCorr = 2)
  this.correctionDetailleeDisponible = true
  if (!context.isHtml) {
    this.correctionDetaillee = false
  }
  this.sup = true // Avec des nombres relatifs
  this.sup2 = 4 // Choix du type d'inéquation
  this.nbQuestions = 6

  this.nouvelleVersion = function () {
    this.consigne = 'Résoudre ' + (this.nbQuestions !== 1 ? 'les inéquations suivantes' : 'l\'inéquation suivante') + '.'
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    let listeTypeDeQuestions
    switch (this.sup2.toString()) {
      case '1':
        listeTypeDeQuestions = ['ax≤b', 'x+b≤c']
        break
      case '2':
        listeTypeDeQuestions = ['ax+b≤c']
        break
      case '3':
        listeTypeDeQuestions = ['ax+b≤cx+d']
        break
      default:
        listeTypeDeQuestions = [
          'ax+b≤0',
          'ax+b≤c',
          'ax≤b',
          'x+b≤c',
          'ax+b≤cx+d'
        ]
        break
    }
    listeTypeDeQuestions = combinaisonListes(
      listeTypeDeQuestions,
      this.nbQuestions
    )
    for (let i = 0, a, b, c, d, symboleInegalite, symboleInegaliteOppose, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // On limite le nombre d'essais pour chercher des valeurs nouvelles
      a = randint(2, 13)
      b = randint(1, 13)
      c = randint(1, 13)
      d = randint(1, 13)
      switch (randint(1, 4)) {
        case 1:
          symboleInegalite = '<'
          symboleInegaliteOppose = '>'
          break
        case 2:
          symboleInegalite = '≤'
          symboleInegaliteOppose = '≥'
          break
        case 3:
          symboleInegalite = '>'
          symboleInegaliteOppose = '<'
          break
        case 4:
          symboleInegalite = '≥'
          symboleInegaliteOppose = '≤'
          break
      }
      if (this.sup) {
        a *= choice([-1, 1])
        b *= choice([-1, 1])
        c *= choice([-1, 1])
        d *= choice([-1, 1])
      }
      if (listeTypeDeQuestions[i] === 'ax+b≤0' ||
        listeTypeDeQuestions[i] === 'ax+b≤c') {
        if (listeTypeDeQuestions[i] === 'ax+b≤0') {
          c = 0
        }
        if (!this.sup && c < b) {
          b = randint(1, 9)
          c = randint(b, 15) // c sera plus grand que b pour que c-b>0
        }
        texte = `$${a}x${ecritureAlgebrique(b)}${texSymbole(symboleInegalite)}${c}$`
        texteCorr = texte + '<br>'
        if (this.correctionDetaillee) {
          if (b > 0) {
            texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
          } else {
            texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
          }
        }
        texteCorr += `$${a}x${ecritureAlgebrique(b)}${miseEnEvidence(ecritureAlgebrique(-1 * b))}
          ${texSymbole(symboleInegalite)}${c}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
        texteCorr += `$${a}x${texSymbole(symboleInegalite)}${c - b}$<br>`
        if (this.correctionDetaillee) {
          texteCorr += `On divise les deux membres par $${a}$.<br>`
          if (a < 0) {
            texteCorr += `Comme $${a}$ est négatif, l'inégalité change de sens.<br>`
          }
        }
        if (a < 0) {
          texteCorr += `$${a}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a) +
            texSymbole(symboleInegaliteOppose))}${c - b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegaliteOppose)}${texFraction(c - b, a)}$`
          texteCorr += `<br>$x${texSymbole(symboleInegaliteOppose)}${texFractionReduite(c - b, a)}$`
        } else {
          texteCorr += `$${a}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}
            ${texSymbole(symboleInegalite)}${c - b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegalite)}${texFraction(c - b, a)}$`
          if (pgcd(abs(a), abs(c - b)) > 1) {
            texteCorr += `<br>$x${texSymbole(symboleInegalite)}${texFractionReduite(c - b, a)}$`
          }
        }
        if ((symboleInegalite === '<' && a >= 0) || (symboleInegalite === '>' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(c - b, a)} \\right[ $.`
        } else if ((symboleInegalite === '≤' && a >= 0) || (symboleInegalite === '≥' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(c - b, a)} \\right] $.`
        } else if ((symboleInegalite === '>' && a >= 0) || (symboleInegalite === '<' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] ${texFractionReduite(c - b, a)} , +\\infty \\right[ $.`
        } else if ((symboleInegalite === '≥' && a >= 0) || (symboleInegalite === '≤' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left[ ${texFractionReduite(c - b, a)} , +\\infty \\right[ $.`
        }
      }
      if (listeTypeDeQuestions[i] === 'x+b≤c') {
        a = 1
        if (!this.sup && c < b) {
          b = randint(-9, 9, [0]) // b peut être négatif, ça sera une inéquation du type x-b=c
          c = abs(randint(b, 15)) // c sera plus grand que b pour que c-b>0
        }
        texte = `$x${ecritureAlgebrique(b)}${texSymbole(symboleInegalite)}${c}$`
        texteCorr = texte + '<br>'
        if (this.correctionDetaillee) {
          if (b > 0) {
            texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
          } else {
            texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
          }
        }
        texteCorr += `$x${ecritureAlgebrique(b)}${miseEnEvidence(ecritureAlgebrique(-1 * b))}
          ${texSymbole(symboleInegalite)}${c}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
        texteCorr += `$x${texSymbole(symboleInegalite)}${c - b}$`
        if ((symboleInegalite === '<' && a >= 0) || (symboleInegalite === '>' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${c - b} \\right[ $.`
        } else if ((symboleInegalite === '≤' && a >= 0) || (symboleInegalite === '≥' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${c - b} \\right] $.`
        } else if ((symboleInegalite === '>' && a >= 0) || (symboleInegalite === '<' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] ${c - b} , +\\infty \\right[ $.`
        } else if ((symboleInegalite === '≥' && a >= 0) || (symboleInegalite === '≤' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left[ ${c - b} , +\\infty \\right[ $.`
        }
      }
      if (listeTypeDeQuestions[i] === 'ax≤b') {
        texte = `$${a}x${texSymbole(symboleInegalite)}${b}$`
        texteCorr = texte + '<br>'
        if (this.correctionDetaillee) {
          texteCorr += `On divise les deux membres par $${a}$.<br>`
          if (a < 0) {
            texteCorr += `Comme $${a}$ est négatif, l'inégalité change de sens.<br>`
          }
        }
        if (a < 0) {
          texteCorr += `$${a}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a) +
            texSymbole(symboleInegaliteOppose))}${b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegaliteOppose)}${texFraction(b, a)}$`
          texteCorr += `<br>$x${texSymbole(symboleInegaliteOppose)}${texFractionReduite(b, a)}$`
        } else {
          texteCorr += `$${a}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}
            ${texSymbole(symboleInegalite)}${b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegalite)}${texFraction(b, a)}$`
          if (pgcd(abs(a), abs(b)) > 1 || a < 0) {
            texteCorr += `<br>$x${texSymbole(symboleInegalite)}${texFractionReduite(b, a)}$`
          }
        }
        if ((symboleInegalite === '<' && a >= 0) || (symboleInegalite === '>' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(b, a)} \\right[ $.`
        } else if ((symboleInegalite === '≤' && a >= 0) || (symboleInegalite === '≥' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(b, a)} \\right] $.`
        } else if ((symboleInegalite === '>' && a >= 0) || (symboleInegalite === '<' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] ${texFractionReduite(b, a)} , +\\infty \\right[ $.`
        } else if ((symboleInegalite === '≥' && a >= 0) || (symboleInegalite === '≤' && a < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left[ ${texFractionReduite(b, a)} , +\\infty \\right[ $.`
        }
      }
      if (listeTypeDeQuestions[i] === 'ax+b≤cx+d') {
        if (c === a) {
          c = randint(1, 13, [a])
        } // sinon on arrive à une division par 0
        if (!this.sup && a < c) {
          c = randint(1, 9)
          a = randint(c + 1, 15) // a sera plus grand que c pour que a-c>0
        }
        if (!this.sup && d < b) {
          b = randint(1, 9)
          d = randint(b + 1, 15) // d sera plus grand que b pour que d-b>0
        }
        texte = `$${rienSi1(a)}x${ecritureAlgebrique(b)}${texSymbole(symboleInegalite)} ${rienSi1(c)}x${ecritureAlgebrique(d)}$`
        texteCorr = texte + '<br>'
        if (this.correctionDetaillee) {
          if (c > 0) {
            texteCorr += `On soustrait $${rienSi1(c)}x$ aux deux membres.<br>`
          } else {
            texteCorr += `On ajoute $${rienSi1(-1 * c)}x$ aux deux membres.<br>`
          }
        }
        texteCorr += `$${rienSi1(a)}x${ecritureAlgebrique(b)}${miseEnEvidence(signe(-1 * c) + rienSi1(abs(c)) + 'x')}
          ${texSymbole(symboleInegalite)}${c}x${ecritureAlgebrique(d)}${miseEnEvidence(signe(-1 * c) + rienSi1(abs(c)) + 'x')}$<br>`
        texteCorr += `$${rienSi1(a - c)}x${ecritureAlgebrique(b)}${texSymbole(symboleInegalite)}${d}$<br>`
        if (this.correctionDetaillee) {
          if (b > 0) {
            texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
          } else {
            texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
          }
        }
        texteCorr += `$${rienSi1(a - c)}x${ecritureAlgebrique(b)}${miseEnEvidence(ecritureAlgebrique(-1 * b))}
          ${texSymbole(symboleInegalite)}${d}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
        texteCorr += `$${rienSi1(a - c)}x${texSymbole(symboleInegalite)}${d - b}$<br>`

        if (this.correctionDetaillee) {
          texteCorr += `On divise les deux membres par $${a - c}$.<br>`
          if (a - c < 0) {
            texteCorr += `Comme $${a - c}$ est négatif, l'inégalité change de sens.<br>`
          }
        }
        if (a - c < 0) {
          texteCorr += `$${rienSi1(a - c)}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a - c) +
            texSymbole(symboleInegaliteOppose))}${d - b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a - c))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegaliteOppose)}${texFraction(d - b, a - c)}$`
          texteCorr += `<br>$x${texSymbole(symboleInegaliteOppose)}${texFractionReduite(d - b, a - c)}$`
        } else {
          texteCorr += `$${rienSi1(a - c)}x${miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a - c))}
            ${texSymbole(symboleInegalite)}${d - b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a - c))}$<br>`
          texteCorr += `$x${texSymbole(symboleInegalite)}${texFraction(d - b, a - c)}$`
          if (pgcd(abs(d - b), abs(a - c)) > 1 || a - c < 0) {
            texteCorr += `<br>$x${texSymbole(symboleInegalite)}${texFractionReduite(d - b, a - c)}$`
          }
        }
        if ((symboleInegalite === '<' && a - c >= 0) || (symboleInegalite === '>' && a - c < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(d - b, a - c)} \\right[ $.`
        } else if ((symboleInegalite === '≤' && a - c >= 0) || (symboleInegalite === '≥' && a - c < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] -\\infty , ${texFractionReduite(d - b, a - c)} \\right] $.`
        } else if ((symboleInegalite === '>' && a - c >= 0) || (symboleInegalite === '<' && a - c < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left] ${texFractionReduite(d - b, a - c)} , +\\infty \\right[ $.`
        } else if ((symboleInegalite === '≥' && a - c >= 0) || (symboleInegalite === '≤' && a - c < 0)) {
          texteCorr += `<br> L'ensemble de solutions de l'inéquation est $S = \\left[ ${texFractionReduite(d - b, a - c)} , +\\infty \\right[ $.`
        }
      }

      if (this.listeQuestions.indexOf(texte) === -1) {
        // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte) // replace(/1x/g,'x')); //remplace 1x par x
        this.listeCorrections.push(texteCorr) // .replace(/1x/g,'x')); //remplace 1x par x
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireCaseACocher = ['Avec des nombres relatifs']
  this.besoinFormulaire2Numerique = [
    "Type d'inéquations",
    4,
    '1 : ax≤b ou x+a≤b ou x-a≤b\n2 : ax+b≤c\n3 : ax+b≤cx+d\n4 : Les 2 types précédents'
  ]
}