exercices/2e/2S12-2.js

import Exercice from '../Exercice.js'
import Decimal from 'decimal.js'
import { listeQuestionsToContenu, randint, combinaisonListes, texNombre } 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 global'
export const interactifReady = true
export const interactifType = 'mathLive'
export const dateDePublication = '06/01/2022'

/**
* Problèmes d'évolutions successives'
*
* * Situations variées : prix, habitants, adhérents  ##
*
* * Déterminer un taux d'évolution global
* * Mélange des 3 types de problèmes
* @author Florence Tapiero
* 2S12-1
*/

export const uuid = '018f3'
export const ref = '2S12-2'
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, CM1, CM2, CM, p1, p2, p, verbe1, nom1, verbe2, nom2, nom, taux, t1, t2, t
    for (let i = 0, texte, texteCorr, taux1, taux2, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      typesDeQuestions = listeTypeDeQuestions[i]
      switch (typesDeQuestions) {
        case 1 :
          taux1 = randint(-80, 80, 0)
          taux2 = randint(-80, 80, 0)
          if (taux1 > 0) {
            verbe1 = 'Augmenter'
            nom1 = 'hausse'
          }
          if (taux2 > 0) {
            verbe2 = 'Augmenter'
            nom2 = 'hausse'
          }
          if (taux1 < 0) {
            verbe1 = 'Diminuer'
            nom1 = 'baisse'
          }
          if (taux2 < 0) {
            verbe2 = 'Diminuer'
            nom2 = 'baisse'
          }
          p1 = new Decimal(taux1).div(100)
          p2 = new Decimal(taux2).div(100)
          t1 = Math.abs(taux1)
          t2 = Math.abs(taux2)
          CM1 = p1.plus(1)
          CM2 = p2.plus(1)
          CM = CM1.mul(CM2)
          p = CM.sub(1)
          taux = p.mul(100)
          t = taux.abs()
          if (taux.isPos()) {
            nom = 'hausse'
          }
          if (taux.isNeg()) {
            nom = 'baisse'
          }
          texte = `Le prix d'un article subit une ${nom1} de $${t1}~\\%$ puis une ${nom2} de $${t2}~\\%$.<br>Déterminer le taux d'évolution global du prix de cet article.`
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution global, on commence par calculer le coefficient multiplicateur global.'
          texteCorr += '<br>Si une grandeur subit des évolutions successives, le coefficient multiplicateur global est le produit des coefficients multiplicateurs de chaque évolution :'
          texteCorr += `<br><br>Première évolution : ${verbe1} de $${t1}~\\%$ revient à multiplier par `
          if (taux1 > 0) {
            texteCorr += `$CM_1 = 1 + \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          if (taux1 < 0) {
            texteCorr += `$CM_1 = 1 - \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          texteCorr += `<br><br>Deuxième évolution : ${verbe2} de $${t2}~\\%$ revient à multiplier par `
          if (taux2 > 0) {
            texteCorr += `$CM_2 = 1 + \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          if (taux2 < 0) {
            texteCorr += `$CM_2 = 1 - \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          texteCorr += `<br><br>Le coefficient multiplicateur global est égal à $CM = CM_1 \\times CM_2 = ${texNombre(CM1, 2)} \\times ${texNombre(CM2, 2)} =${texNombre(CM, 4)}$.`
          if (CM > 1) {
            texteCorr += `<br><br>Or $CM =${texNombre(CM, 4)} = 1 + ${texNombre(Math.abs(p), 4)} = 1 + \\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(t, 2)}~\\%$.`
          }
          if (CM < 1) {
            texteCorr += `<br><br>Or $CM = ${texNombre(CM, 4)} = 1 - ${texNombre(Math.abs(p), 4)} = 1-\\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(t, 2)}~\\%$.`
          }
          texteCorr += `<br>Le prix de l'article a subi une ${nom} globale de $${texNombre(taux.abs(), 2)}~\\%$.`
          break
        case 2 :
          taux1 = randint(-20, 20, 0)
          taux2 = randint(-20, 20, 0)
          if (taux1 > 0) {
            verbe1 = 'Augmenter'
            nom1 = 'augmenté'
          }
          if (taux2 > 0) {
            verbe2 = 'Augmenter'
            nom2 = 'augmenté'
          }
          if (taux1 < 0) {
            verbe1 = 'Diminuer'
            nom1 = 'diminué'
          }
          if (taux2 < 0) {
            verbe2 = 'Diminuer'
            nom2 = 'diminué'
          }
          p1 = new Decimal(taux1).div(100)
          p2 = new Decimal(taux2).div(100)
          t1 = Math.abs(taux1)
          t2 = Math.abs(taux2)
          CM1 = p1.plus(1)
          CM2 = p2.plus(1)
          CM = CM1.mul(CM2)
          p = CM.sub(1)
          taux = p.mul(100)
          t = taux.abs()
          if (taux.isPos()) {
            nom = 'augmenté'
          }
          if (taux.isNeg()) {
            nom = 'diminué'
          }
          texte = `La population d'une ville a ${nom1} de $${t1}~\\%$ en $2020$ puis a ${nom2} de $${t2}~\\%$ en $2021$.<br>Quel est le taux d'évolution global ?`
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution global, on commence par calculer le coefficient multiplicateur global.'
          texteCorr += '<br>Si une grandeur subit des évolutions successives, le coefficient multiplicateur global est le produit des coefficients multiplicateurs de chaque évolution :'
          texteCorr += `<br><br>Première évolution : ${verbe1} de $${t1}~\\%$ revient à multiplier par `
          if (taux1 > 0) {
            texteCorr += `$CM_1 = 1 + \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          if (taux1 < 0) {
            texteCorr += `$CM_1 = 1 - \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          texteCorr += `<br><br>Deuxième évolution : ${verbe2} de $${t2}~\\%$ revient à multiplier par `
          if (taux2 > 0) {
            texteCorr += `$CM_2 = 1 + \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          if (taux2 < 0) {
            texteCorr += `$CM_2 = 1 - \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          texteCorr += `<br><br>Le coefficient multiplicateur global est égal à $CM = CM_1 \\times CM_2 = ${texNombre(CM1, 2)} \\times ${texNombre(CM2, 2)} =${texNombre(CM, 4)}$.`
          if (CM > 1) {
            texteCorr += `<br><br>Or $CM =${texNombre(CM, 4)} = 1 + ${texNombre(Math.abs(p), 4)} = 1 + \\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(t, 2)}~\\%$.`
          }
          if (CM < 1) {
            texteCorr += `<br><br>Or $CM = ${texNombre(CM, 4)} = 1 - ${texNombre(Math.abs(p), 4)} = 1-\\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(t, 2)}~\\%$.`
          }
          texteCorr += `<br>Le nombre d'habitants de cette ville a ${nom} de $${texNombre(taux.abs(), 2)}~\\%$ entre $2020$ et $2022$.`
          break
        case 3 :
          taux1 = randint(-40, 40, 0)
          taux2 = randint(-40, 40, 0)
          if (taux1 > 0) {
            verbe1 = 'Augmenter'
            nom1 = 'augmenté'
          }
          if (taux2 > 0) {
            verbe2 = 'Augmenter'
            nom2 = 'augmenté'
          }
          if (taux1 < 0) {
            verbe1 = 'Diminuer'
            nom1 = 'diminué'
          }
          if (taux2 < 0) {
            verbe2 = 'Diminuer'
            nom2 = 'diminué'
          }
          p1 = new Decimal(taux1).div(100)
          p2 = new Decimal(taux2).div(100)
          t1 = Math.abs(taux1)
          t2 = Math.abs(taux2)
          CM1 = p1.plus(1)
          CM2 = p2.plus(1)
          CM = CM1.mul(CM2)
          p = CM.sub(1)
          taux = p.mul(100)
          t = taux.abs()
          if (taux.isPos()) {
            nom = 'augmenté'
          }
          if (taux.isNeg()) {
            nom = 'diminué'
          }
          texte = `Le nombre d'adhérents d'une association a ${nom1} de $${t1}~\\%$ entre $2019$ et $2020$ puis a ${nom2} de $${t2}~\\%$ entre $2020$ et $2021$.<br>Quel est le taux d'évolution global du nombre d'adhérents ?`
          texte += ajouteChampTexteMathLive(this, i, 'largeur15 inline', { texteApres: '%' })
          texteCorr = 'Pour déterminer le taux d\'évolution global, on commence par calculer le coefficient multiplicateur global.'
          texteCorr += '<br>Si une grandeur subit des évolutions successives, le coefficient multiplicateur global est le produit des coefficients multiplicateurs de chaque évolution :'
          texteCorr += `<br><br>Première évolution : ${verbe1} de $${t1}~\\%$ revient à multiplier par `
          if (taux1 > 0) {
            texteCorr += `$CM_1 = 1 + \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          if (taux1 < 0) {
            texteCorr += `$CM_1 = 1 - \\dfrac{${t1}}{100} = ${texNombre(CM1, 2)}$.`
          }
          texteCorr += `<br><br>Deuxième évolution : ${verbe2} de $${t2}~\\%$ revient à multiplier par `
          if (taux2 > 0) {
            texteCorr += `$CM_2 = 1 + \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          if (taux2 < 0) {
            texteCorr += `$CM_2 = 1 - \\dfrac{${t2}}{100} = ${texNombre(CM2, 2)}$.`
          }
          texteCorr += `<br><br>Le coefficient multiplicateur global est égal à $CM = CM_1 \\times CM_2 = ${texNombre(CM1, 2)} \\times ${texNombre(CM2, 2)} =${texNombre(CM, 4)}$.`
          if (CM > 1) {
            texteCorr += `<br><br>Or $CM =${texNombre(CM, 4)} = 1 + ${texNombre(Math.abs(p), 4)} = 1 + \\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une hausse de $${texNombre(t, 2)}~\\%$.`
          }
          if (CM < 1) {
            texteCorr += `<br><br>Or $CM = ${texNombre(CM, 4)} = 1 - ${texNombre(Math.abs(p), 4)} = 1-\\dfrac{${texNombre(t, 2)}}{100}$ ce qui correspond à une baisse de $${texNombre(t, 2)}~\\%$.`
          }
          texteCorr += `<br>Le nombre d'adhérents de cette association a ${nom} de $${texNombre(taux.abs(), 2)}~\\%$ entre $2019$ et $2021$.`
          break
      }
      setReponse(this, i, taux)
      if (this.questionJamaisPosee(i, taux1, taux2)) {
        // 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)
  }
}