exercices/2e/2S12-3.js

import Exercice from '../Exercice.js'
import Decimal from 'decimal.js'
import { listeQuestionsToContenu, randint, choice, combinaisonListes, texteEnCouleur, texNombre, egalOuApprox } from '../../modules/outils.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import { setReponse } from '../../modules/gestionInteractif.js'
export const titre = 'Déterminer un taux d\'évolution réciproque'
export const interactifReady = true
export const interactifType = 'mathLive'
export const dateDePublication = '16/01/2022'

/**
* Problèmes d'évolution réciproque'
*
* * Situations variées : prix , tarif horaire, nombre d'employés
* * Déterminer un taux d'évolution réciproque
* * Mélange des 3 types de problèmes
* @author Florence Tapiero
* 2S12-3
*/
export const uuid = '509db'
export const ref = '2S12-3'
export default function EvolutionsSuccesives () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.consigne = ''
  this.nbQuestions = 3
  this.nbCols = 1
  this.nbColsCorr = 1
  this.sup = 4 // type de questions
  this.spacing = 1
  this.spacingCorr = 1

  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = [] // Cette ligne doit être ajoutée afin de vider les précédentes valeurs pour AMC
    const typesDeQuestionsDisponibles = [1, 2, 3]
    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posées mais l'ordre diffère à chaque "cycle"
    let typesDeQuestions, CM, CMr, CMra, p, pr, nom, nomr, t, tr, metier
    for (let i = 0, texte, texteCorr, taux, tauxr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      typesDeQuestions = listeTypeDeQuestions[i]
      switch (typesDeQuestions) {
        case 1 :
          taux = randint(-50, 50, 0)
          if (taux > 0) {
            nom = 'hausse'
          }
          if (taux < 0) {
            nom = 'baisse'
          }
          p = new Decimal(taux).div(100)
          t = Math.abs(taux)
          CM = p.plus(1)
          CMr = CM.pow(-1)
          CMra = CMr.toDP(4)
          pr = CMra.sub(1)
          tauxr = pr.mul(100)
          tr = tauxr.abs()
          if (tauxr.isPos()) {
            nomr = 'hausse'
          }
          if (tauxr.isNeg()) {
            nomr = 'baisse'
          }
          texte = `Le prix d'un article subit une ${nom} de $${t}~\\%$.<br>Quelle évolution devra-t-il subir pour revenir à son prix initial ?`
          texte += '<br>On donnera le taux d\'évolution en pourcentage, éventuellement arrondi à 0,01% près.'
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution réciproque, on commence par calculer le coefficient multiplicateur associé :'
          if (taux > 0) {
            texteCorr += `<br>Augmenter de $${t}~\\%$ revient à multiplier par $ 1 + \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          if (taux < 0) {
            texteCorr += `<br>Diminuer de $${t}~\\%$ revient à multiplier par $ 1 - \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          texteCorr += `<br><br>Le coefficient multiplicateur réciproque est donc : $\\dfrac{1}{${texNombre(CM, 2)}} ${egalOuApprox(CMr, 4)} ${texNombre(CMra, 4)}$.`
          if (CMr - CMra !== 0) {
            texteCorr += texteEnCouleur('<br>Remarque : Il faut arrondir les valeurs à $10^{-4}$ pour avoir un arrondi en pourcentage à $10^{-2}$.')
          }
          if (CMr > 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 + ${texNombre(pr, 4)} = 1 + \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr < 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 - ${texNombre(pr.abs(), 4)} = 1 - \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr - CMra === 0) {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} de $${texNombre(tr, 2)}~\\%$ pour revenir au prix initial.`
          } else {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} d'environ $${texNombre(tr, 2)}~\\%$ pour revenir au prix initial.`
          }
          break
        case 2 :
          taux = randint(-50, 50, 0)
          if (taux > 0) {
            nom = 'd\'augmenter'
          }
          if (taux < 0) {
            nom = 'de diminuer'
          }
          p = new Decimal(taux).div(100)
          t = Math.abs(taux)
          CM = p.plus(1)
          CMr = CM.pow(-1)
          CMra = CMr.toDP(4)
          pr = CMra.sub(1)
          tauxr = pr.mul(100)
          tr = tauxr.abs()

          if (tauxr > 0) {
            nomr = 'hausse'
          }
          if (tauxr < 0) {
            nomr = 'baisse'
          }
          metier = choice(['Un artisan', 'Un ouvrier', 'Un coiffeur', 'Une informaticienne', 'Une cordonnière', 'Une luthière'])
          texte = `${metier} a décidé ${nom} son tarif horaire de $${t}~\\%$.<br>Quelle évolution devra-t-il subir pour revenir à son niveau de départ ?`
          texte += '<br>On donnera le taux d\'évolution en pourcentage, éventuellement arrondi à 0,01% près.'
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution réciproque, on commence par calculer le coefficient multiplicateur associé :'
          if (taux > 0) {
            texteCorr += `<br>Augmenter de $${t}~\\%$ revient à multiplier par $ 1 + \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          if (taux < 0) {
            texteCorr += `<br>Diminuer de $${t}~\\%$ revient à multiplier par $ 1 - \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          texteCorr += `<br><br>Le coefficient multiplicateur réciproque est donc : $\\dfrac{1}{${texNombre(CM, 2)}} ${egalOuApprox(CMr, 4)} ${texNombre(CMr, 4)}$.`
          if (CMr - CMra !== 0) {
            texteCorr += texteEnCouleur('<br>Remarque : Il faut arrondir les valeurs à $10^{-4}$ pour avoir un arrondi en pourcentage à $10^{-2}$.')
          }
          if (CMr > 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 + ${texNombre(pr, 4)} = 1 + \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr < 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 - ${texNombre(pr.abs(), 4)} = 1 - \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr - CMra === 0) {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} de $${texNombre(tr, 2)}~\\%$ pour revenir au niveau de départ.`
          } else {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} d'environ $${texNombre(tr, 2)}~\\%$ pour revenir au niveau de départ.`
          }
          break
        case 3 :
          taux = randint(-50, 50, 0)
          if (taux > 0) {
            nom = 'augmenté'
          }
          if (taux < 0) {
            nom = 'baissé'
          }
          p = new Decimal(taux).div(100)
          t = Math.abs(taux)
          CM = p.plus(1)
          CMr = CM.pow(-1)
          CMra = CMr.toDP(4)
          pr = CMra.sub(1)
          tauxr = pr.mul(100)
          tr = tauxr.abs()
          if (tauxr > 0) {
            nomr = 'hausse'
          }
          if (tauxr < 0) {
            nomr = 'baisse'
          }
          metier = choice(['d\'employés', 'de commerciaux', 'de stagiaires', 'de jeunes diplomés'])
          texte = `Le nombre ${metier} d'une entreprise a ${nom} de $${t}~\\%$.<br>Quelle évolution permettrait de retrouver le nombre de départ ?`
          texte += '<br>On donnera le taux d\'évolution en pourcentage, éventuellement arrondi à 0,1% près.'
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution réciproque, on commence par calculer le coefficient multiplicateur associé :'
          if (taux > 0) {
            texteCorr += `<br>Augmenter de $${t}~\\%$ revient à multiplier par $ 1 + \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          if (taux < 0) {
            texteCorr += `<br>Diminuer de $${t}~\\%$ revient à multiplier par $ 1 - \\dfrac{${t}}{100} = ${texNombre(CM, 2)}$ `
          }
          texteCorr += `<br><br>Le coefficient multiplicateur réciproque est donc : $\\dfrac{1}{${texNombre(CM, 2)}} ${egalOuApprox(CMr, 3)} ${texNombre(CMr, 4)}$.`
          if (CMr - CMra !== 0) {
            texteCorr += texteEnCouleur('<br>Remarque : Il faut arrondir les valeurs à $10^{-3}$ pour avoir un arrondi en pourcentage à $10^{-1}$.')
          }
          if (CMr > 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 + ${texNombre(pr, 4)} = 1 + \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr < 1) {
            texteCorr += `<br><br>Or $${texNombre(CMra, 4)} = 1 - ${texNombre(pr.abs(), 4)} = 1 - \\dfrac{${texNombre(tr, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(tr, 2)}~\\%$.`
          }
          if (CMr - CMra === 0) {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} de $${texNombre(tr, 2)}~\\%$ pour revenir au niveau de départ.`
          } else {
            texteCorr += `<br><br>Il faut donc appliquer une ${nomr} d'environ $${texNombre(tr, 2)}~\\%$ pour revenir au niveau de départ.`
          }
          break
      }
      setReponse(this, i, taux)
      if (this.questionJamaisPosee(i, taux)) {
      // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}