exercices/6e/6N31-6.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, combinaisonListes, calcul, texNombre, miseEnEvidence } from '../../modules/outils.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import { setReponse } from '../../modules/gestionInteractif.js'

export const dateDePublication = '28/09/22'
export const titre = 'Trouver une valeur approchée ou un arrondi d\'un décimal'
export const interactifReady = true
export const interactifType = 'mathLive'
/**
 * * Arrondir_un_decimal_selon_une_precision_donnée
 * * 6N31-6
 * @author Mickael Guironnet
 */
export const ref = '6N31-6'
export const uuid = 'd2b82'
export default function ArrondirUnDecimal () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.sup = '1-2-3-4-5-6' // Type de question
  this.nbQuestions = 6

  this.nbCols = 1
  this.nbColsCorr = 1
  context.isHtml ? this.spacing = 1.2 : this.spacing = 1.5
  context.isHtml ? this.spacingCorr = 1.2 : this.spacingCorr = 1.5

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

    let listeTypeDeQuestions = []
    if (!this.sup) { // Si aucune liste n'est saisie ou mélange demandé
      listeTypeDeQuestions = combinaisonListes(['1', '2', '3', '4', '5', '6'], this.nbQuestions)
    } else {
      const quests = this.sup.split('-')// Sinon on créé un tableau à partir des valeurs séparées par des -
      for (let i = 0; i < quests.length; i++) { // on a un tableau avec des strings : ['1', '1', '2']
        const type = quests[i].split(',')
        const choix = parseInt(type[0])
        if (choix >= 1 && choix <= 6) {
          listeTypeDeQuestions.push(quests[i])
        }
      }
      if (listeTypeDeQuestions.length === 0) { listeTypeDeQuestions = ['1', '2', '3', '4', '5', '6'] }
      listeTypeDeQuestions = combinaisonListes(listeTypeDeQuestions, this.nbQuestions)
    }

    for (let i = 0, indexQ = 0, texte, typesDeQuestions, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50; cpt++) {
      const type = listeTypeDeQuestions[i].split(',')
      typesDeQuestions = parseInt(type[0])
      const valeurdegaucheoudroite = ((type.length > 1 ? parseInt(type[1]) : randint(1, 2)))

      const m = randint(1, 9)
      const c = randint(1, 9)
      const d = randint(1, 9)
      const u = randint(1, 9)
      const di = randint(1, 9)
      const ci = randint(1, 9)
      const mi = randint(1, 9)

      if (!this.questionJamaisPosee(i, m, c, u, di, ci, mi)) {
        continue
      }

      switch (typesDeQuestions) {
        case 6: { // arrondi au centième
          texte = `Donner un arrondi au centième de 
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + 0 * 0.01 + 0 * 0.001), 3, true).replace('0', miseEnEvidence(ci, 'blue')).replace('0', miseEnEvidence(mi))
          if (mi < 5) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01))
            texteCorr = `Un arrondi au centième de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01))}$.`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + (ci + 1) * 0.01))
            texteCorr = `Un arrondi au centième de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + (ci + 1) * 0.01))}$.`
          }
          indexQ++
          break
        }
        case 5: { // arrondi au dixième
          texte = `Donner un arrondi au dixième de 
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(0 * 0.1 + 0 * 0.01 + mi * 0.001)).replace('0', miseEnEvidence(di, 'blue')).replace('0', miseEnEvidence(ci))
          if (ci < 5) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1))
            texteCorr = `Un arrondi au dixième de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1))}$.`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul((di + 1) * 0.1))
            texteCorr = `Un arrondi au dixième de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul((di + 1) * 0.1))}$.`
          }
          indexQ++
          break
        }
        case 4: { // arrondi à l'unité
          texte = `Donner un arrondi à l'unité de 
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 0 + calcul(di * 0 + ci * 0.01 + mi * 0.001), 3, true).replace('0', miseEnEvidence(u, 'blue')).replace('0', miseEnEvidence(di))
          if (di < 5) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1)
            texteCorr = `Un arrondi à l'unité de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1)}$.`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + (u + 1) * 1)
            texteCorr = `Un arrondi à l'unité de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + (u + 1) * 1)}$.`
          }
          indexQ++
          break
        }
        case 3: { // valeur approchée au centième
          texte = `${(valeurdegaucheoudroite === 1 ? 'Donner une valeur par défaut au centième de ' : 'Donner une valeur par excès au centième de ')}
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + 0 * 0.01 + mi * 0.001), 3, true).replace('0', miseEnEvidence(ci, 'blue'))
          if (valeurdegaucheoudroite === 1) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01))
            texteCorr = `Une valeur approchée au centième par défaut de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01))}$`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + (ci + 1) * 0.01))
            texteCorr = `Une valeur approchée au centième par excès de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + (ci + 1) * 0.01))}$.`
          }
          indexQ++
          break
        }
        case 2: { // valeur approchée au dixième
          texte = `${(valeurdegaucheoudroite === 1 ? 'Donner une valeur par défaut au dixième de ' : 'Donner une valeur par excès au dixième de ')}
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(0 * 0.1 + ci * 0.01 + mi * 0.001), 3, true).replace('0', miseEnEvidence(di, 'blue'))
          if (valeurdegaucheoudroite === 1) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1))
            texteCorr = `Une valeur approchée au dixième par défaut de de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1))}$.`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1 + calcul((di + 1) * 0.1))
            texteCorr = `Une valeur approchée au dixième par excès de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul((di + 1) * 0.1))}$`
          }
          indexQ++
          break
        }
        case 1: { // encadrement à l'unité
          texte = `${(valeurdegaucheoudroite === 1 ? 'Donner une valeur par défaut à l\'unité de ' : 'Donner une valeur défaut à l\'unité de ')}
                    $${texNombre(m * 1000 + c * 100 + d * 10 + u * 1 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001))}$ : `
          if (this.interactif) {
            texte += ajouteChampTexteMathLive(this, indexQ, 'largeur25 inline')
          } else {
            texte += '$\\ldots\\ldots\\ldots $'
          }
          const nombreStr = texNombre(m * 1000 + c * 100 + d * 10 + u * 0 + calcul(di * 0.1 + ci * 0.01 + mi * 0.001), 3, true).replace('0', miseEnEvidence(u, 'blue'))
          if (valeurdegaucheoudroite === 1) {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + u * 1)
            texteCorr = `Une valeur approchée à l'unité par défaut de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + u * 1)}$.`
          } else {
            setReponse(this, indexQ, m * 1000 + c * 100 + d * 10 + (u + 1) * 1)
            texteCorr = `Une valeur approchée à l'unité par excès de $${nombreStr}$ est $ ${texNombre(m * 1000 + c * 100 + d * 10 + (u + 1) * 1)}$.`
          }
          indexQ++
          break
        }
      }

      this.listeQuestions.push(texte)
      this.listeCorrections.push(texteCorr)
      i++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireTexte = [
    'Type de question', [
      'Choix séparés par des tirets',
      '0 : mélange',
      '1 : Valeur approchée à l\'unité',
      '2 : Valeur approchée au dixième',
      '3 : Valeur approchée au centième',
      '4 : Arrondi à l\'unité',
      '5 : Arrondi au dixième',
      '6 : Arrondi au centième'
    ].join('\n')
  ]
}