exercices/5e/5L10-2.js

import { propositionsQcm } from '../../modules/interactif/questionQcm.js'
import { ecritureParentheseSiNegatif, listeQuestionsToContenu, randint, combinaisonListes, itemize } from '../../modules/outils.js'
import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
export const amcReady = true
export const amcType = 'qcmMono' // type de question AMC
export const interactifReady = true
export const interactifType = 'qcm'

export const titre = 'Traduire un programme de calcul par une expression littérale'

export const dateDeModifImportante = '15/10/2022' // Ajout du programme équivalent dans la correction

/**
* Traduire un programme de calcul par une expression littérale de la forme ax+b après simplification
* @author Rémi Angot
* 5L10-2
* Ajout de la possibilité d'afficher un résultat qui n'est pas développé par Guillaume Valmont le 11/05/2022
*/
export const uuid = '12bb6'
export const ref = '5L10-2'
export default function TraduireUnProgrammeDeCalcul () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 2
  this.nbCols = 1
  this.nbColsCorr = 1
  this.spacingCorr = 1
  this.spacing = 1
  this.interactif = false
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.amcType = amcType
  this.amcReady = amcReady

  this.besoinFormulaireCaseACocher = ['Résultat développé']
  this.sup = true

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

    const typeDeQuestionsDisponibles = [1, 2, 3, 4, 5, 6]
    const listeTypeDeQuestions = combinaisonListes(typeDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posées mais l'ordre diffère à chaque "cycle"

    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const a = randint(4, 11)
      const b = randint(2, 11)
      const c = randint(2, 11)
      const d = randint(2, 5)
      // Le programme équivalent est de la forme Ax + B
      let A
      let B
      switch (listeTypeDeQuestions[i]) {
        case 1: // (x+a)*b+c
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Ajoute ${a}`, `Multiplie par ${b}`, `Ajoute ${c}`])
          texte += 'Si on note $x$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$x\\xrightarrow{+${a}} x+${a}\\xrightarrow{\\times  ${b}}(x+${a})\\times  ${b}`
          if (this.sup) texteCorr += `=${b}x+${a * b}`
          texteCorr += `\\xrightarrow{+${c}}`
          this.sup ? texteCorr += `${b}x+${a * b + c}` : texteCorr += `(x+${a})\\times  ${b} + ${c}`
          texteCorr += '$<br>'
          texteCorr += 'Le résultat du programme est donc '
          this.sup ? texteCorr += `$${b}x+${a * b + c}$.` : texteCorr += `$(x+${a})\\times  ${b} + ${c}$.`
          if (this.sup) [A, B] = [b, a * b + c]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: this.sup ? `$${b}x+${a * b + c}$` : `$(x+${a})\\times  ${b} + ${c}$`,
              statut: true
            },
            {
              texte: `$${b}x+${a + c}$`,
              statut: false
            },
            {
              texte: this.sup ? `$${b}x+${a * c}$` : `$(x+${a})\\times  ${b + c}$`,
              statut: false
            },
            {
              texte: `$${b * a}x+${c}$`,
              statut: false
            }
          ]
          break
        case 2: // (ax+b)*c
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Multiplie par ${a}`, `Ajoute ${b}`, `Multiplie par ${c}`])
          texte += 'Si on note $y$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$y\\xrightarrow{\\times  ${a}} ${a}y\\xrightarrow{+${b}}${a}y+${b} \\xrightarrow{\\times  ${c}}(${a}y+${b})\\times ${c}`
          if (this.sup) texteCorr += `=${a * c}y+${b * c}`
          texteCorr += '$<br>'
          texteCorr += 'Le résultat du programme est donc '
          this.sup ? texteCorr += `$${a * c}y+${b * c}$.` : texteCorr += `$(${a}y+${b})\\times ${c}$.`
          if (this.sup) [A, B] = [a * c, b * c]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: this.sup ? `$${a * c}y+${b * c}$` : `$(${a}y+${b})\\times ${c}$`,
              statut: true
            },
            {
              texte: `$${a}y+${b * c}$`,
              statut: false
            },
            {
              texte: this.sup ? `$${b * a}y+${c}$` : `$(${c}y + ${b}) \\times ${a}$`,
              statut: false
            },
            {
              texte: `$${b}y+${a * c}$`,
              statut: false
            }
          ]
          break
        case 3: // ax+b-2x
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Multiplie par ${a}`, `Ajoute ${b}`, 'Enlève le double du nombre de départ'])
          texte += 'Si on note $a$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$a\\xrightarrow{\\times  ${a}} ${a}a\\xrightarrow{+${b}}${a}a+${b} \\xrightarrow{-2a}${a}a+${b}-2a=${a - 2}a+${b}$`
          texteCorr += '<br>'
          texteCorr += `Le résultat du programme est donc $${a - 2}a+${b}$.`
          if (this.sup) [A, B] = [a - 2, b]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: `$${a - 2}a+${b}$`,
              statut: true
            },
            {
              texte: this.sup ? `$${a + b - 2}a$` : `$(${a}a + ${b}) \\times 2$`,
              statut: false
            },
            {
              texte: `$${a}a+${b - 2}$`,
              statut: false
            },
            {
              texte: this.sup ? `$${a + b}-2a$` : `$(2a + ${b}) \\times ${a}$`,
              statut: false
            }
          ]
          break
        case 4: // ax+b+3x
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Multiplie par ${a}`, `Ajoute ${b}`, 'Ajoute le triple du nombre de départ'])
          texte += 'Si on note $t$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$t\\xrightarrow{\\times  ${a}} ${a}t\\xrightarrow{+${b}}${a}t+${b} \\xrightarrow{+3t}${a}t+${b}+3t=${a + 3}t+${b}$`
          texteCorr += '<br>'
          texteCorr += `Le résultat du programme est donc $${a + 3}t+${b}$.`
          if (this.sup) [A, B] = [a + 3, b]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: `$${a + 3}t+${b}$`,
              statut: true
            },
            {
              texte: `$${a + b + 3}t$`,
              statut: false
            },
            {
              texte: this.sup ? `$${a + b}t+3t$` : `$(${a}t + ${b}) \\times 3$`,
              statut: false
            },
            {
              texte: this.sup ? `$${a + b}t-3t$` : `$(3t + ${b}) \\times ${a}$`,
              statut: false
            }
          ]
          break
        case 5: // (ax+b)*c-d
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Multiplie par ${a}`, `Ajoute ${b}`, `Multiplie par ${c}`, `Enlève ${d}`])
          texte += 'Si on note $x$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$x\\xrightarrow{\\times  ${a}} ${a}x\\xrightarrow{+${b}}${a}x+${b} \\xrightarrow{\\times  ${c}}(${a}x+${b})\\times  ${c}`
          if (this.sup) texteCorr += `=${a * c}x+${b * c}`
          texteCorr += `\\xrightarrow{-${d}}`
          this.sup ? texteCorr += `${a * c}x+${b * c - d}` : texteCorr += `(${a}x+${b})\\times  ${c} - ${d}`
          texteCorr += '$<br>'
          texteCorr += 'Le résultat du programme est donc '
          this.sup ? texteCorr += `$${a * c}x+${b * c - d}$.` : texteCorr += `$(${a}x+${b})\\times  ${c} - ${d}$.`
          if (this.sup) [A, B] = [a * c, b * c - d]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: this.sup ? `$${a * c}x+${b * c - d}$` : `$(${a}x+${b})\\times  ${c} - ${d}$`,
              statut: true
            },
            {
              texte: `$${a}x+${ecritureParentheseSiNegatif(b * c - d)}$`,
              statut: false
            },
            {
              texte: `$${a + b}x+${ecritureParentheseSiNegatif(c - d)}$`,
              statut: false
            },
            {
              texte: this.sup ? `$${a + b * c}x-${d}$` : `$(${a + b}x - ${d}) \\times ${c}$`,
              statut: false
            }
          ]
          break
        case 6: // (ax+b)*c+x
          texte = 'Voici un programme de calcul : \n'
          texte += itemize([`Multiplie par ${a}`, `Ajoute ${b}`, `Multiplie par ${c}`, 'Ajoute le nombre de départ'])
          texte += 'Si on note $y$ le nombre de départ, quel est le résultat du programme de calcul ?'
          texteCorr = `$y\\xrightarrow{\\times  ${a}} ${a}y\\xrightarrow{+${b}}${a}y+${b} \\xrightarrow{\\times  ${c}}(${a}y+${b})\\times  ${c}`
          if (this.sup) texteCorr += `=${a * c}y+${b * c}`
          texteCorr += '\\xrightarrow{+y}'
          this.sup ? texteCorr += `${a * c}y+${b * c}+y=${a * c + 1}y+${b * c}` : texteCorr += `(${a}y+${b})\\times  ${c} + y`
          texteCorr += '$<br>'
          texteCorr += 'Le résultat du programme est donc '
          this.sup ? texteCorr += `$${a * c + 1}y+${b * c}$.` : texteCorr += `$(${a}y+${b})\\times  ${c} + y$.`
          if (this.sup) [A, B] = [a * c + 1, b * c]
          this.autoCorrection[i] = {}
          this.autoCorrection[i].enonce = `${texte}\n`
          this.autoCorrection[i].propositions = [
            {
              texte: this.sup ? `$${a * c + 1}y+${b * c}$` : `$(${a}y+${b})\\times  ${c} + y$`,
              statut: true
            },
            {
              texte: `$${a + 1}y+${b * c}$`,
              statut: false
            },
            {
              texte: this.sup ? `$${a}y+${c}$` : `$(${a}y+${b})\\times  ${c}$`,
              statut: false
            },
            {
              texte: `$${a + b + c + 1}y$`,
              statut: false
            }
          ]
          break
      }
      if (this.interactif) {
        texte += propositionsQcm(this, i).texte
      }

      if (this.sup) {
        texteCorr += '<br><br>Le programme de calcul est équivalent à :'
        texteCorr += itemize([`Multiplier par $${A}$`, `${(B > 0) ? 'Ajouter' : 'Enlever'} $${Math.abs(B)}$`])
      }

      if (this.listeQuestions.indexOf(texte) === -1) { // Si la question n'a jamais été posée, on en créé une autre
        if (context.vue === 'diap') {
          texte = texte.replace(', quel est le résultat du programme de calcul ?', ',<br> quel est le résultat de ce programme ?')
        }
        if (!context.isHtml && i === 0) { texte = '\\setlength\\itemsep{1em}' + texte }; // espacement entre les questions
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}