exercices/6e/6P11-2.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, combinaisonListes, choice, randint, prenom, texPrix, texNombre, texNombrec, miseEnEvidence, texMasse, stringNombre } from '../../modules/outils.js'
import { tableau } from '../../modules/2d.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const titre = 'Résoudre des problèmes de proportionnalité dans un tableau avec la linéarité'
export const interactifReady = true
export const interactifType = 'mathLive'

/**
 * Résoudre un problème de proportionnalité avec linéarité via tableau
 * @Mireille Gain, 30 mai 2021
 * Référence 6P11-2
*/export const uuid = '65288'
export const ref = '6P11-2'
export default function ProportionnaliteParLineariteTableau () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.consigne = 'On considère que les situations suivantes, sauf cas flagrant, sont des situations de proportionnalité. <br>On demande de les résoudre à l\'aide d\'un tableau.'
  this.nbQuestions = 5
  this.nbCols = 1 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 1 // Uniquement pour la sortie LaTeX
  this.sup = 4 // Niveau de difficulté
  this.tailleDiaporama = 3 // Pour les exercices chronométrés. 50 par défaut pour les exercices avec du texte
  this.video = '' // Id YouTube ou url

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

    let typeDeQuestionsDisponibles
    if (this.sup === 1) {
      typeDeQuestionsDisponibles = [1, 1, 1, 1, 4]
    } else if (this.sup === 2) {
      typeDeQuestionsDisponibles = [2, 2, 2, 2, 4]
    } else if (this.sup === 3) {
      typeDeQuestionsDisponibles = [3, 3, 3, 3, 4]
    } else if (this.sup === 4) {
      typeDeQuestionsDisponibles = [1, 2, 3, 2, 4]
    }

    const listeTypeQuestions = combinaisonListes(typeDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"

    let np, cm, ng, o, pp, pg, pu, tp, index, a
    const fruits = [
      ['pêches', 0.24],
      ['noix', 0.29],
      ['cerises', 0.31],
      ['pommes', 0.12],
      ['framboises', 0.75],
      ['fraises', 0.37],
      ['citrons', 0.08],
      ['bananes', 0.09]
    ]

    const objets = [
      ['billes', 0.1],
      ['bonbons', 0.1],
      ['bougies', 1.2],
      ['crayons', 0.5],
      ['gâteaux', 1.3],
      ['gommes', 0.4],
      ['stickers', 0.2],
      ['cahiers', 1.4]
    ]

    for (let i = 0, texte, texteCorr, monTableau, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      a = choice([1, 2, 3])
      // Boucle principale où i+1 correspond au numéro de la question
      listeTypeQuestions[i] = 4
      switch (listeTypeQuestions[i]) { // Suivant le type de question, le contenu sera différent
        case 1: // multiplication
          if (a === 1) {
            index = randint(0, 7)
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * randint(8, 9) * ([objets[index][1]]) / 10
            pg = cm * pp
            o = choice([objets[index][0]])
            texte = `${prenom()} achète $${np}$ ${np === 1 ? o.slice(0, -1) : o} pour $${texPrix(pp)}$ €. Combien faudrait-il payer pour en acheter $${ng}$ ? `
            monTableau = tableau({
              ligne1: [`\\text{Nombre de ${o}}`, np, ng],
              ligne2: ['\\text{Prix (en euros)}', `${texPrix(pp)}`, `${miseEnEvidence(texPrix(pg))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\times' + cm)}`]]
            })
            setReponse(this, i, pg)
          } else if (a === 2) {
            index = randint(0, 7)
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * fruits[index][1]
            pg = cm * pp
            o = choice([fruits[index][0]])
            texte = `${prenom()} achète $${texMasse(pp)}$ kg de ${o} pour $${texPrix(np)}$ €. Quelle masse de ${o} pourrait être achetée avec $${ng}$ € ? `
            monTableau = tableau({
              largeurTitre: 10,
              ligne1: [`\\text{Prix des ${o} (en euros)}`, np, ng],
              ligne2: [`\\text{Masse des ${o} (en kg)}`, `${texMasse(pp)}`, `${miseEnEvidence(texMasse(pg))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\times' + cm)}`]]
            })
            setReponse(this, i, pg)
          } else {
            index = randint(0, 7)
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * randint(11, 48) / 10
            pg = cm * pp
            texte = `$${np}$ objets occupent un volume de ${stringNombre(pp)} cm³. Quel volume serait occupé par $${ng}$ de ces objets ? `
            monTableau = tableau({
              largeurTitre: 10,
              ligne1: ['\\text{Nombre d\'objets}', np, ng],
              ligne2: ['\\text{Volume des objets (en cm³)}', `${texNombre(pp)}`, `${miseEnEvidence(texNombrec(pg))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\times' + cm)}`]]
            })
            setReponse(this, i, pg)
          }
          texteCorr = mathalea2d({ xmin: -1, xmax: 16, ymin: 0, ymax: 7.5, scale: 0.7, style: 'display: block' }, monTableau)
          break

        case 2: // division
          if (a === 1) {
            index = randint(0, 7)
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * randint(8, 9) / 10
            pg = cm * pp
            o = choice([objets[index][0]])
            texte = `${prenom()} achète $${ng}$ ${ng === 1 ? o.slice(0, -1) : o} pour $${texPrix(pg)}$ €. Combien faudrait-il payer pour en acheter $${np}$ ? `
            monTableau = tableau({
              ligne1: [`\\text{Nombre de ${o}}`, ng, np],
              ligne2: ['\\text{Prix (en euros)}', `${texPrix(pg)}`, `${miseEnEvidence(texPrix(pp))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + cm)}`]]
            })
            setReponse(this, i, pp)
          } else if (a === 2) {
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * randint(40, 60)
            pg = cm * pp
            texte = `${prenom()} peint une surface de $${texNombre(pg)}$ m² en $${ng}$ jours. Quelle surface serait peinte en $${np}$ ${np === 1 ? 'jour' : 'jours'} ? `
            monTableau = tableau({
              ligne1: ['\\text{Durée (en jours)}', ng, np],
              ligne2: ['\\text{Surface peinte (en m²)}', `${texNombre(pg)}`, `${miseEnEvidence(texNombre(pp))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + cm)}`]]
            })
            setReponse(this, i, pp)
          } else {
            index = randint(0, 7)
            np = randint(1, 10)
            cm = randint(2, 7)
            ng = np * cm
            pp = np * fruits[index][1]
            pg = cm * pp
            o = choice([fruits[index][0]])
            texte = `${prenom()} achète ${texMasse(pg)} kg de ${o} pour $${texPrix(ng)}$ €. Quelle masse pourrait être achetée avec $${np}$ € ? `
            monTableau = tableau({
              largeurTitre: 10,

              ligne1: [`\\text{Prix des ${o} (en euros)}`, ng, np],
              ligne2: [`\\text{Masse des ${o} (en kg)}`, `${texMasse(pg)}`, `${miseEnEvidence(texMasse(pp))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + cm)}`]]
            })
            setReponse(this, i, pp)
          }
          texteCorr = mathalea2d({ xmin: -1, xmax: 16, ymin: 0, ymax: 7.5, scale: 0.7, style: 'display: block' }, monTableau)
          break

        case 3: // passage par l'unité
          if (a === 1) {
            index = randint(0, 7)
            pu = randint(1, 19) * ([objets[index][1]]) / 10
            np = randint(2, 10)
            pp = pu * np
            ng = randint(2, 10, np)
            pg = pu * ng
            o = choice([objets[index][0]])
            texte = `${prenom()} achète $${np}$ ${np === 1 ? o.slice(0, -1) : o} pour $${texPrix(pp)}$ €. Combien faudrait-il payer pour en acheter $${ng}$ ? `
            monTableau = tableau({

              ligne1: [`\\text{Nombre de ${o}}`, np, 1, ng],
              ligne2: ['\\text{Prix (en euros)}', `${texPrix(pp)}`, `${miseEnEvidence(texPrix(pu))}`, `${miseEnEvidence(texPrix(pg))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + np)}`], [2, 3, `${miseEnEvidence('\\times' + ng)}`]]
            })
            setReponse(this, i, pg)
          } else if (a === 2) {
            pu = randint(40, 60)
            np = randint(2, 10)
            pp = pu * np
            ng = randint(2, 10, np)
            pg = pu * ng
            texte = `${prenom()} peint une surface de $${texNombre(pp)}$ m² en $${np}$ jours. Quelle surface serait peinte en $${ng}$ jours ? `
            monTableau = tableau({

              ligne1: ['\\text{Durée (en jours)}', np, 1, ng],
              ligne2: ['\\text{Surface peinte (en m²)}', `${pp}`, `${miseEnEvidence(pu)}`, `${miseEnEvidence(pg)}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + np)}`], [2, 3, `${miseEnEvidence('\\times' + ng)}`]]
            })
            setReponse(this, i, pg)
          } else {
            index = randint(0, 7)
            pu = randint(8, 12) * fruits[index][1] / 10
            np = randint(2, 10)
            pp = pu * np
            ng = randint(2, 10, np)
            pg = pu * ng
            o = choice([fruits[index][0]])
            texte = `${prenom()} achète ${texMasse(pp)} kg de ${o} pour ${texPrix(np)} €. Quelle masse pourrait être achetée avec $${ng}$ € ? `
            monTableau = tableau({
              largeurTitre: 10,

              ligne1: [`\\text{Prix des ${o} (en euros)}`, np, 1, ng],
              ligne2: [`\\text{Masse des ${o} (en kg)}`, `${texMasse(pp)}`, `${miseEnEvidence(texMasse(pu))}`, `${miseEnEvidence(texMasse(pg))}`],
              flecheHaut: [[1, 2, `${miseEnEvidence('\\div' + np)}`], [2, 3, `${miseEnEvidence('\\times' + ng)}`]]
            })
            setReponse(this, i, pg)
          }
          texteCorr = mathalea2d({ xmin: -1, xmax: 19, ymin: 0, ymax: 7.5, scale: 0.7, style: 'display: block' }, monTableau)

          break

        case 4: // Non proportionnalité
          if (a === 1) {
            tp = randint(120, 165) / 100
            np = randint(10, 14)
            cm = randint(2, 4)
            ng = np * cm
            texte = `${prenom()} mesure $${texNombre(tp)}$ m à $${np}$ ans. Quelle sera sa taille à $${ng}$ ans ?`
            texteCorr = 'On ne peut pas savoir car la taille n\'est pas proportionnelle à l\'âge.'
          } else if (a === 2) {
            tp = randint(30, 45)
            np = randint(10, 13)
            cm = randint(2, 5)
            ng = np * cm
            texte = `${prenom()} pèse $${texNombre(tp)}$ kg à $${np}$ ans. Quelle sera son poids à $${ng}$ ans ?`
            texteCorr = 'On ne peut pas savoir car le poids (plus précisément la masse) n\'est pas proportionnel à l\'âge.'
          } else if (a === 3) {
            tp = randint(35, 39)
            np = randint(10, 13)
            cm = randint(2, 5)
            ng = np * cm
            texte = `${prenom()} chausse du $${tp}$ à $${np}$ ans. Quelle sera sa pointure à $${ng}$ ans ?`
            texteCorr = 'On ne peut pas savoir car la pointure n\'est pas proportionnelle à l\'âge.'
          }

          setReponse(this, i, 'non')
      }
      this.consigne = 'On considère que les situations suivantes, sauf cas flagrant, sont des situations de proportionnalité. <br>'
      if (!this.interactif) {
        this.consigne += 'On demande de les résoudre à l\'aide d\'un tableau.'
      } else {
        this.consigne += 'Si ce n\'est pas une situation de proportionnalité, écrire : non proportionnel.'
      }
      texte += ajouteChampTexteMathLive(this, i)
      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)
  }
  this.besoinFormulaireNumerique = ['Niveau de difficulté', 4, '1 : Multiplication\n2 : Division\n3 : Passage par l\'unité\n4 : Mélange']
}