exercices/CM/CM000.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, combinaisonListes, miseEnEvidence, nombreDeChiffresDansLaPartieEntiere } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
// on importait amcReady de 5L10 cf commit cf25dab mais mieux vaut le déclarer explicitement

export const titre = 'Additions et de soustractions'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCNum'

/**
 * Additions et/ou soustractions classique et/ou à trou.
 *
 * Par défaut c'est un mélange d'additions, soustractions avec et sans trou avec des nombres jusqu'à 20.
 * @author Rémi Angot
 * Référence CM000
 */
export const uuid = '6d698'
export const ref = 'CM000'
export default function TablesAdditionsSoustractions () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.sup = 20
  this.sup2 = 6 // additions|additions à trous|soustractions|soustractions à trous|mélange sans trou|mélange avec trou
  this.consigne = 'Calculer.'
  this.spacing = 2
  this.tailleDiaporama = 3
  this.nouvelleVersion = function () {
    this.autoCorrection = []
    this.sup = parseInt(this.sup)
    this.sup2 = parseInt(this.sup2)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    let listeTypeDeQuestions = []
    if (this.sup2 === 1) {
      listeTypeDeQuestions = combinaisonListes(
        ['addition'],
        this.nbQuestions
      )
    }
    if (this.sup2 === 2) {
      listeTypeDeQuestions = combinaisonListes(
        ['addition_a_trou'],
        this.nbQuestions
      )
    }
    if (this.sup2 === 3) {
      listeTypeDeQuestions = combinaisonListes(
        ['soustraction'],
        this.nbQuestions
      )
    }
    if (this.sup2 === 4) {
      listeTypeDeQuestions = combinaisonListes(
        ['soustraction_a_trou'],
        this.nbQuestions
      )
    }
    if (this.sup2 === 5) {
      listeTypeDeQuestions = combinaisonListes(
        ['addition', 'soustraction'],
        this.nbQuestions
      )
    }
    if (this.sup2 === 6) {
      listeTypeDeQuestions = combinaisonListes(
        ['addition', 'addition_a_trou', 'soustraction', 'soustraction_a_trou'],
        this.nbQuestions
      )
    }
    for (let i = 0, a, b, texte, texteCorr; i < this.nbQuestions; i++) {
      a = randint(2, this.sup)
      b = randint(2, this.sup)
      this.autoCorrection[i] = {}
      switch (listeTypeDeQuestions[i]) {
        case 'addition':
          texte = `$${a} + ${b} =$`
          if (this.interactif && context.isHtml) {
            texte = ajouteChampTexteMathLive(this, i, 'largeur10 inline', {
              texte: `$${a} + ${b} = $`
            })
          }
          texteCorr = `$${a} + ${b} = ${a + b}$`
          setReponse(this, i, a + b, { formatInteractif: 'calcul' })
          break
        case 'addition_a_trou':
          texte = `$${a} + \\ldots\\ldots = ${a + b}$`
          if (this.interactif && context.isHtml) {
            texte = ajouteChampTexteMathLive(this, i, 'largeur10 inline', {
              texte: `$${a}~+ $`,
              texteApres: `$= ${a + b}$`
            })
          }
          texteCorr = `$${a} + ${miseEnEvidence(b)} = ${a + b}$`
          setReponse(this, i, b, { formatInteractif: 'calcul' })
          break
        case 'soustraction':
          if (a === b) {
            a = randint(2, this.sup, b)
          }
          if (a < b) {
            b = [a, (a = b)][0] // échange les variables a et b
          }
          texte = `$${a} - ${b} =$`
          if (this.interactif && context.isHtml) {
            texte = ajouteChampTexteMathLive(this, i, 'largeur10 inline', {
              texte: `$${a} - ${b} = $`
            })
          }
          texteCorr = `$${a} - ${b} = ${a - b}$`
          setReponse(this, i, a - b, { formatInteractif: 'calcul' })
          break
        case 'soustraction_a_trou':
          if (a === b) {
            a = randint(2, this.sup, b)
          }
          if (a < b) {
            b = [a, (a = b)][0] // échange les variables a et b
          }
          texte = `$${a} - \\ldots\\ldots = ${a - b}$`
          if (this.interactif && context.isHtml) {
            texte = ajouteChampTexteMathLive(this, i, 'largeur10 inline', {
              texte: `$${a}~- $`,
              texteApres: `$= ${a - b}$`
            })
          }
          texteCorr = `$${a} - ${miseEnEvidence(b)} = ${a - b}$`
          setReponse(this, i, b, { formatInteractif: 'calcul' })
          break
      }

      this.autoCorrection[i].reponse.param = { digits: nombreDeChiffresDansLaPartieEntiere(this.autoCorrection[i].reponse.valeur[0]), decimals: 0, signe: false, exposantNbChiffres: 0, exposantSigne: false, approx: 0, formatInteractif: 'calcul' }
      this.autoCorrection[i].enonce = texte
      this.listeQuestions.push(texte)
      this.listeCorrections.push(texteCorr)
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = ['Valeur maximale', 9999] // Texte, tooltip
  this.besoinFormulaire2Numerique = [
    'Style de questions',
    6,
    '1 : Additions\n2: Additions à trous\n3: Soustractions\n4 : Soustractions à trous\n5 : Additions et soustractions \n6 : Additions et soustractions avec ou sans trous'
  ]
}