exercices/6e/6N33-3.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, choice, combinaisonListes, calcul, texNombre, texPrix, texFraction, sp } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcType = 'AMCNum'
export const amcReady = true
export const titre = 'Résoudre des problèmes avec des calculs de pourcentages'

/**
 * Calculer le montant d'une réduction donnée en pourcentage d'un prix initial
 * @author Jean-Claude Lhote
 * Référence 6N33-3
 */
export const uuid = 'd67e9'
export const ref = '6N33-3'
export default function AppliquerUnPourcentage () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.nbQuestions = 1
  this.consigne = 'Calculer.'
  this.spacing = 2
  this.spacingCorr = 2
  this.nbCols = 1
  this.nbColsCorr = 1

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    const typesDeQuestionsDisponibles = [1, 2]
    const choix = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    const listePourcentages = [10, 20, 30, 40, 50]
    const article = [['Un pull', 20, 40], ['Une chemise', 15, 35], ['Un pantalon', 30, 60], ['Un T-shirt', 15, 25], ['Une jupe', 20, 40]]
    const legume = [['Une aubergine', 100, 200], ['Un melon', 200, 300], ['Une tomate', 50, 100], ['Une betterave', 75, 100], ['Une carotte', 30, 50]]
    const listeIndex = [0, 1, 2, 3, 4]
    const prix = []; const pourcent = []; const masse = []
    const index = combinaisonListes(listeIndex, this.nbQuestions)
    for (
      let i = 0, texte, texteCorr, montant, cpt = 0;
      i < this.nbQuestions && cpt < 50;

    ) {
      pourcent[i] = choice(listePourcentages)
      switch (choix[i]) {
        case 1:
          prix[i] = randint(article[index[i]][1], article[index[i]][2])
          montant = calcul((pourcent[i] * prix[i]) / 100)
          texte = `${article[index[i]][0]} coûtant $${prix[i]}$${sp()}€ bénéficie d'une réduction de $${pourcent[i]} ${sp()}${sp()}\\%$.<br>`
          texte += 'Quel est le montant en euro de cette réduction ?'
          texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texteApres: ' €' })
          texteCorr = `On doit calculer $${pourcent[i]}${sp()}\\%$ de $${prix[i]}$${sp()}€ :<br>`
          texteCorr += `$${pourcent[i]}${sp()}\\%\\text{ de }${prix[i]}=${texFraction(pourcent[i], 100)}\\times${prix[i]}=(${pourcent[i]}\\times${prix[i]})\\div100=${texNombre(pourcent[i] * prix[i])}\\div100=${texNombre(montant)}$<br>`
          texteCorr += `Le montant de la réduction est de $${texPrix(montant)}$${sp()}€.`
          setReponse(this, i, montant, { formatInteractif: 'calcul', digits: 5, decimals: 2, signe: false })
          break
        case 2:
          masse[i] = randint(legume[index[i]][1], article[index[i]][2])
          montant = calcul(masse[i] * pourcent[i] / 100)
          texte = `${legume[index[i]][0]} pesant $${masse[i]}$ grammes a eu une croissance de $${pourcent[i]} ${sp()}\\%$.<br>`
          texte += 'Quelle est la masse supplémentaire en grammes correspondant à cette croissance ?'
          texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texteApres: ' g' })
          texteCorr = `On doit calculer $${pourcent[i]}${sp()}\\%$ de $${masse[i]}$ grammes :<br>`
          texteCorr += `$${pourcent[i]}${sp()}\\%\\text{ de }${masse[i]}=${texFraction(pourcent[i], 100)}\\times${masse[i]}=(${pourcent[i]}\\times${masse[i]})\\div100=${texNombre(pourcent[i] * masse[i])}\\div100=${texNombre(montant)}$<br>`
          texteCorr += `La masse a augmenté de $${texNombre(montant)}$ g.`
          setReponse(this, i, montant, { formatInteractif: 'calcul', digits: 4, decimals: 2, signe: false })
          break
      }
      if (this.listeQuestions.indexOf(texte) === -1) {
        // Si la question n'a jamais été posée, on en crée une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}