exercices/4e/4C35.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, combinaisonListes, choice, randint, puissanceEnProduit } from '../../modules/outils.js'
import FractionX from '../../modules/FractionEtendue.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const titre = 'Puissances : écriture décimale ou fractionnaire'

export const dateDePublication = '14/06/2022'
export const interactifReady = true
export const interactifType = 'mathLive'

/**
 * @author Rémi Angot
 * Référence 4C35
*/
export const uuid = '125bd'
export const ref = '4C35'
export default function PuissanceDecimaleOuFractionnaire () {
  Exercice.call(this)
  this.titre = titre
  this.consigne = 'Calculer de tête l\'écriture décimale ou fractionnaire des nombres suivants.'
  this.nbQuestions = 8
  this.nbCols = 2
  this.nbColsCorr = 2
  this.video = ''
  this.sup = false
  this.besoinFormulaireCaseACocher = ['Avec des nombres négatifs']

  this.nouvelleVersion = () => {
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []

    const typeQuestionsDisponibles = ['puissancePos', 'puissanceNeg', 'negPuissancePaire', 'negPuissanceImpaire', 'negParenthesePuissancePaire', 'negParenthesePuissanceImpaire', 'puissance0', 'puissance1', 'negParenthesePuissancePaireNeg', 'negParenthesePuissanceImpaireNeg'] // On créé 3 types de questions
    const typesDeQuestions = (this.sup) ? typeQuestionsDisponibles : ['puissance0', 'puissance1', 'puissancePos', 'puissanceNeg', 'puissancePos', 'puissanceNeg', 'puissancePos', 'puissanceNeg', 'puissancePos', 'puissanceNeg']
    const listeTypeQuestions = combinaisonListes(typesDeQuestions, this.nbQuestions)
    let texte/** string */, texteCorr /** string */
    let a /** number */, n /** number */, reponse/** any */
    for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      switch (listeTypeQuestions[i]) {
        case 'puissancePos':
          a = choice([2, 3, randint(4, 9)])
          n = (a === 2) ? randint(2, 8) : (a < 4) ? randint(2, 3) : 2
          texte = `$${a}^{${n}} = $`
          texteCorr = `$${a}^{${n}} = ${puissanceEnProduit(a, n)} = ${a ** n}$`
          reponse = new FractionX(a ** n)
          break
        case 'puissanceNeg':
          a = choice([2, 3, randint(4, 9)])
          n = (a === 2) ? randint(2, 8) : (a < 4) ? randint(2, 3) : 2
          texte = `$${a}^{${-n}} = $`
          texteCorr = `$${a}^{${-n}} =  \\dfrac{1}{${a}^{${n}}} = ${puissanceEnProduit(a, -n)} = \\dfrac{1}{${a ** n}}$`
          reponse = new FractionX(1, a ** n)
          break
        case 'negPuissancePaire':
          a = choice([2, 3, randint(4, 9)])
          n = (a === 2) ? choice([2, 4, 6, 8]) : 2
          texte = `$${-a}^{${n}} = $`
          texteCorr = `$${-a}^{${n}} = - (${puissanceEnProduit(a, n)}) = - ${a ** n}$`
          reponse = new FractionX(-(a ** n))
          break
        case 'negPuissanceImpaire':
          a = 2
          n = choice([3, 5, 7])
          texte = `$${-a}^{${n}} = $`
          texteCorr = `$${-a}^{${n}} = -(${puissanceEnProduit(a, n)}) = - ${a ** n}$`
          reponse = new FractionX(-(a ** n))
          break
        case 'negParenthesePuissancePaire':
          a = choice([2, 3, randint(4, 9)])
          n = (a === 2) ? choice([2, 4, 6, 8]) : 2
          texte = `$(${-a})^{${n}} = $`
          texteCorr = `$(${-a})^{${n}} = ${puissanceEnProduit(-a, n)} = ${a ** n}$`
          reponse = new FractionX(a ** n)
          break
        case 'negParenthesePuissanceImpaire':
          a = choice([2, 3, randint(4, 5)])
          n = (a === 2) ? choice([3, 5, 7, 9]) : 3
          texte = `$(${-a})^{${n}} = $`
          texteCorr = `$(${-a})^{${n}} = ${puissanceEnProduit(-a, n)} = -${a ** n}$`
          reponse = new FractionX(-(a ** n))
          break
        case 'puissance0':
          a = randint(11, 40)
          if (this.sup) a *= choice([-1, 1])
          n = 0
          texte = `$${a}^{${n}} = $`
          texteCorr = `$${a}^{${n}} = 1$`
          reponse = new FractionX(1)
          break
        case 'puissance1':
          a = randint(11, 40)
          if (this.sup) a *= choice([-1, 1])
          n = 1
          texte = `$${a}^{${n}} = $`
          texteCorr = `$${a}^{${n}} = ${a}$`
          reponse = new FractionX(a)
          break
        case 'negParenthesePuissancePaireNeg':
          a = choice([2, 3, randint(4, 9)])
          n = (a === 2) ? choice([2, 4, 6, 8]) : 2
          texte = `$(${-a})^{${-n}} = $`
          texteCorr = `$(${-a})^{${-n}} = ${puissanceEnProduit(-a, -n)} = \\dfrac{1}{${a ** n}}$`
          reponse = new FractionX(1, a ** n)
          break
        case 'negParenthesePuissanceImpaireNeg':
          a = choice([2, 3, randint(4, 5)])
          n = (a === 2) ? choice([3, 5, 7, 9]) : 3
          texte = `$(${-a})^{${-n}} = $`
          texteCorr = `$(${-a})^{${-n}} = ${puissanceEnProduit(-a, -n)} = \\dfrac{-1}{${a ** n}}$`
          reponse = new FractionX(-1, a ** n)
          break
        default :
          texte = 'Cas non traité'
          texteCorr = 'Cas non traité'
      }
      setReponse(this, i, reponse, { formatInteractif: 'fractionEgale' })
      texte += ajouteChampTexteMathLive(this, i)
      if (this.questionJamaisPosee(i, a, n, listeTypeQuestions[i])) {
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this) // On envoie l'exercice à la fonction de mise en page
  }
}