exercices/3e/3L10.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { randint, combinaisonListes, lettreDepuisChiffre, printlatex, listeQuestionsToContenuSansNumero, rangeMinMax, contraindreValeur, choice, reduirePolynomeDegre3 } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'

export const titre = 'Supprimer les parenthèses puis réduire l\'expression'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcType = 'AMCHybride'
export const amcReady = true

/**
 * Donner l'opposé d'une expression.
 *
 * Ajout des différents cas de 4 à 10 par Mickael Guironnet
 * @author Rémi Angot (AMC par Eric Elter)
 */
export const uuid = '603a8'
export const ref = '3L10'
export default function OpposeExpression () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.spacing = context.isHtml ? 3 : 2
  this.spacing = context.isHtml ? 3 : 2
  this.nbQuestions = 6
  this.sup = '1-2-3-4'
  this.tailleDiaporama = 3
  this.nouvelleVersion = function () {
    this.consigne = this.nbQuestions > 1 ? 'Supprimer les parenthèses et réduire les expressions suivantes.' : 'Supprimer les parenthèses et réduire l\'expression suivante.'
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées

    let listeTypeDeQuestions = []
    const lettresPossibles = ['a', 'b', 'c', 'x', 'y', 'z']
    if (!this.sup || (typeof (this.sup) === 'number' && this.sup === 0) || this.sup === '0') { // Si aucune liste n'est saisie
      listeTypeDeQuestions = rangeMinMax(1, 10)
    } else {
      if (typeof (this.sup) === 'number') { // Si c'est un nombre c'est que le nombre a été saisi dans la barre d'adresses
        listeTypeDeQuestions[0] = contraindreValeur(1, 10, this.sup, 1)
      } else {
        listeTypeDeQuestions = this.sup.split('-')// Sinon on créé un tableau à partir des valeurs séparées par des -
        for (let i = 0; i < listeTypeDeQuestions.length; i++) { // on a un tableau avec des strings : ['1', '1', '2']
          listeTypeDeQuestions[i] = contraindreValeur(1, 10, parseInt(listeTypeDeQuestions[i]), 2) // parseInt en fait un tableau d'entiers
        }
      }
    }
    listeTypeDeQuestions = combinaisonListes(listeTypeDeQuestions, this.nbQuestions)
    for (let i = 0, texte, texteCorr, a, b, c, d, e, f, choixLettre, reponse, reponse1, reponse2, reponse3, cpt = 0; i < this.nbQuestions && cpt < 50; cpt++) {
      a = randint(-9, 9, 0)
      b = randint(-9, 9, 0)
      c = randint(-11, 11, 0)
      d = randint(-11, 11, 0)
      e = randint(-11, 11, 0)
      f = randint(-11, 11, 0)
      choixLettre = choice(lettresPossibles)

      switch (listeTypeDeQuestions[i]) {
        case 1 : // '-(ax+b)':
          texte = `$${lettreDepuisChiffre(i + 1)}=-(${printlatex(
            `${a}${choixLettre}+(${b})`
          )})$`
          texteCorr = texte
          // texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}=${printlatex(`${-a}*${choixLettre}+(${-b})`)}$`
          reponse1 = 0
          reponse2 = -a
          reponse3 = -b
          break
        case 2 : // '(ax+b)':
          texte = `$${lettreDepuisChiffre(i + 1)}=(${printlatex(
            `${a}${choixLettre}+(${b})`
          )})$`
          texteCorr = texte
          // texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}=${printlatex(`${a}*${choixLettre}+(${b})`)}$`
          reponse1 = 0
          reponse2 = a
          reponse3 = b
          break
        case 3 : // '-(ax2+bx+c)':
          texte = `$${lettreDepuisChiffre(i + 1)}=-(${printlatex(
            `${a}${choixLettre}^2+(${b})${choixLettre}+(${c})`
          )})$`
          texteCorr = texte
          // texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}=${printlatex(`${-a}${choixLettre}^2+(${-b})${choixLettre}+(${-c})`)}$`
          reponse1 = -a
          reponse2 = -b
          reponse3 = -c
          break
        case 4 : // '(ax2+bx+c)':
          texte = `$${lettreDepuisChiffre(i + 1)}=(${printlatex(
            `${a}${choixLettre}^2+(${b})${choixLettre}+(${c})`
          )})$`
          texteCorr = texte
          // texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}=${printlatex(`${a}${choixLettre}^2+(${b})${choixLettre}+(${c})`)}$`
          reponse1 = a
          reponse2 = b
          reponse3 = c
          break
        case 5 : // '(ax+b)-(cx+d)':
          texte = `$${lettreDepuisChiffre(i + 1)}= (${printlatex(`${a}${choixLettre}+(${b})`)}) - (${printlatex(`${c}${choixLettre}+(${d})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${a}${choixLettre}+(${b})`)} ${-c < 0 ? '' : '+'} ${printlatex(`${-c}${choixLettre}+(${-d})`)}$`
          reponse1 = 0
          reponse2 = a - c
          reponse3 = b - d
          break
        case 6 : // '-(ax+b)+(cx+d)':
          texte = `$${lettreDepuisChiffre(i + 1)}= -(${printlatex(`${a}${choixLettre}+(${b})`)}) + (${printlatex(`${c}${choixLettre}+(${d})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${-a}${choixLettre}+(${-b})`)} ${c < 0 ? '' : '+'} ${printlatex(`${c}${choixLettre}+(${d})`)}$`
          reponse1 = 0
          reponse2 = c - a
          reponse3 = d - b
          break
        case 7 : // '(ax+b)-(cx2+dx+e)':
          texte = `$${lettreDepuisChiffre(i + 1)}= (${printlatex(`${a}${choixLettre}+(${b})`)}) - (${printlatex(`${c}${choixLettre}^2+(${d}${choixLettre})+(${e})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${a}${choixLettre}+(${b})`)} ${-c < 0 ? '' : '+'} ${printlatex(`${-c}${choixLettre}^2+(${-d}${choixLettre})+(${-e})`)}$`
          reponse1 = -c
          reponse2 = a - d
          reponse3 = b - e
          break
        case 8 : // '-(ax+b)+(cx2+dx+e)':
          texte = `$${lettreDepuisChiffre(i + 1)}= -(${printlatex(`${a}${choixLettre}+(${b})`)}) + (${printlatex(`${c}${choixLettre}^2+(${d})${choixLettre}+(${e})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${-a}${choixLettre}+(${-b})`)} ${c < 0 ? '' : '+'} ${printlatex(`${c}${choixLettre}^2+(${d})${choixLettre}+(${e})`)}$`
          reponse1 = c
          reponse2 = -a + d
          reponse3 = -b + e
          break
        case 9 : // '(ax2+bx+c)-(dx2+ex+f)'
          texte = `$${lettreDepuisChiffre(i + 1)}= (${printlatex(`${a}${choixLettre}^2+(${b}${choixLettre})+(${c})`)}) - (${printlatex(`${d}${choixLettre}^2+(${e}${choixLettre})+(${f})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${a}${choixLettre}^2+(${b}${choixLettre})+(${c})`)} ${-d < 0 ? '' : '+'} ${printlatex(`${-d}${choixLettre}^2+(${-e}${choixLettre})+(${-f})`)}$`
          reponse1 = a - d
          reponse2 = b - e
          reponse3 = c - f
          break
        case 10 : // '-(ax2+bx+c)+(dx2+ex+f)'
          texte = `$${lettreDepuisChiffre(i + 1)}= -(${printlatex(`${a}${choixLettre}^2+(${b}${choixLettre})+(${c})`)}) + (${printlatex(`${d}${choixLettre}^2+(${e}${choixLettre})+(${f})`)})$`
          texteCorr = texte
          texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}= ${printlatex(`${-a}${choixLettre}^2+(${-b}${choixLettre})+(${-c})`)} ${d < 0 ? '' : '+'} ${printlatex(`${d}${choixLettre}^2+(${e}${choixLettre})+(${f})`)}$`
          reponse1 = -a + d
          reponse2 = -b + e
          reponse3 = -c + f
          break
      }
      texteCorr += `<br>$${lettreDepuisChiffre(i + 1)}=${reduirePolynomeDegre3(0, reponse1, reponse2, reponse3, choixLettre)}$`
      reponse = `${reduirePolynomeDegre3(0, reponse1, reponse2, reponse3, choixLettre)}`

      // texte += '<br>' + listeTypeDeQuestions[i]
      if (!context.isAmc && this.interactif) {
        setReponse(this, i, reponse)
        texte += this.interactif ? (`<br>$${lettreDepuisChiffre(i + 1)} = $` + ajouteChampTexteMathLive(this, i, 'largeur75 inline nospacebefore')) : ''
      } else {
        this.autoCorrection[i] = {
          enonce: '',
          enonceAvant: false,
          options: { multicols: true, barreseparation: true },
          propositions: [
            {
              type: 'AMCOpen',
              propositions: [{
                texte: texteCorr,
                enonce: texte + '<br>',
                statut: 4
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                reponse: {
                  texte: 'valeur de $a$ dans $ax^2+bx+c$',
                  valeur: reponse1,
                  param: {
                    digits: 2,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                reponse: {
                  texte: 'valeur de $b$ dans $ax^2+bx+c$',
                  valeur: reponse2,
                  param: {
                    digits: 2,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            },
            {
              type: 'AMCNum',
              propositions: [{
                texte: '',
                statut: '',
                reponse: {
                  texte: 'valeur de $c$ dans $ax^2+bx+c$',
                  valeur: reponse3,
                  param: {
                    digits: 2,
                    decimals: 0,
                    signe: true,
                    approx: 0
                  }
                }
              }]
            }
          ]
        }
      }
      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++
      }
    }
    listeQuestionsToContenuSansNumero(this)
  }
  this.besoinFormulaireTexte = ['Types de questions',
  `Nombres séparés par des tirets
0 : Mélange
1 : '-(ax+b)'
2 : '(ax+b)'
3 : '-(ax2+bx+c)'
4 : '(ax2+bx+c)'
5 : '(ax+b)-(cx+d)'
6 : '-(ax+b)+(cx+d)'
7 : '(ax+b)-(cx2+dx+e)'
8 : '-(ax+b)+(cx2+dx+e)'
9 : '(ax2+bx+c)-(dx2+ex+f)'
10 : '-(ax2+bx+c)+(dx2+ex+f)'`
  ]
}