exercices/6e/6N33-2.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { listeQuestionsToContenu, randint, combinaisonListes, sp } from '../../modules/outils.js'
import { point, pointSurSegment, rotation, codageAngle, texteParPoint } 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 calcul de pourcentage par complément à 100%'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcType = 'AMCNum'
export const amcReady = true

/**
 * Déduire un pourcentage par complément à 100%
 * @author Jean-Claude Lhote
 * Référence 6N33-2
 */
export const uuid = 'db772'
export const ref = '6N33-2'
export default function CalculerUnPourcentage () {
  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 () {
    const typesDeQuestionsDisponibles = [1, 2, 3]
    const listeChoix = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    const listeMoyens = ['en bus', 'en deux-roues', 'à  pieds', 'en voiture']
    const listeSports = ['le foot', 'la natation', 'le basket', 'le ping-pong', 'le volley', 'la gym']
    const listeHobbies = ['la couture', 'le cinéma', 'la musique', 'le sport', 'la programmation', 'le jardinage', 'la cuisine']
    let p1, p2, p3, moy1, moy2, moy3
    let objets; const centre = point(5, 5); const depart = point(10, 5)
    for (
      let i = 0, texte, texteCorr, cpt = 0;
      i < this.nbQuestions && cpt < 50;
    ) {
      objets = []
      p1 = randint(6, 9) * 5
      p2 = randint(6, 9) * 5
      p3 = 100 - p1 - p2
      switch (listeChoix[i]) {
        case 1: // Les moyens de déplacement maison collège
          [moy1, moy2, moy3] = combinaisonListes(listeMoyens, 3)
          texte = `Dans un collège, $${p1}${sp(1)}\\%$ des élèves se déplacent ${moy1}, $${p2}${sp(1)}\\%$ ${moy2} et les autres ${moy3}.<br>
          
          `
          texte += `Quel est le pourcentage des élèves qui se déplacent ${moy3} ?`
          texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texteApres: ' %' })
          texteCorr = `Les élèves qui ${moy1} ou qui ${moy2} représentent $${p1}${sp(1)}\\%$ + $${p2}${sp(1)}\\% = ${p1 + p2}${sp(1)}\\%$.<br>`
          texteCorr += `Donc on calcule : $100 - ${p1 + p2}${sp(1)}\\% = ${p3}${sp(1)}\\%$.<br>`
          texteCorr += `$${p3}${sp(1)}\\%$ des élèves ${moy3}.<br>`
          if (!context.isHtml) {
            this.canEnonce = texte
            this.correction = this.listeCorrections[0]
            this.canReponseACompleter = `$\\ldots ${sp(1)}\\%$`
          }
          break
        case 2: // Les sports pratiqués par les ados
          [moy1, moy2, moy3] = combinaisonListes(listeSports, 3)
          texte = `Dans une association sportive, $${p1}${sp(1)}\\%$ des ados pratiquent ${moy1}, $${p2}${sp(1)}\\%$ ${moy2} et les autres ${moy3}.<br>
          
          `
          texte += `Quel est le pourcentage des ados qui pratiquent ${moy3} ?`
          texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texteApres: ' %' })
          texteCorr = `Les ados qui pratiquent ${moy1} ou ${moy2} représentent $${p1}${sp(1)}\\% + ${p2}${sp(1)}\\% = ${p1 + p2}${sp(1)}\\%$.<br>`
          texteCorr += `Donc on calcule : $100${sp(1)}\\% - ${p1 + p2}${sp(1)}\\% = ${p3}${sp(1)}\\%$.<br>`
          texteCorr += `$${p3}${sp(1)}\\%$ des ados de cette association sportive pratiquent ${moy3}.<br>`
          if (!context.isHtml) {
            this.canEnonce = texte
            this.correction = this.listeCorrections[0]
            this.canReponseACompleter = `$\\ldots ${sp(1)}\\%$`
          }
          break
        case 3: // Les sports pratiqués par les ados
          [moy1, moy2, moy3] = combinaisonListes(listeHobbies, 3)
          texte = `Dans une association culturelle, $${p1}${sp(1)}\\%$ des membres ont comme passe-temps favori ${moy1}, pour $${p2}${sp(1)}\\%$ c'est ${moy2} et pour les autres ${moy3}.<br>
          
          `
          texte += `Quel est le pourcentage des membres qui préfèrent ${moy3} ?`
          texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texteApres: ' %' })
          texteCorr = `Les membres qui préfère ${moy1} ou ${moy2} représentent $${p1}${sp(1)}\\% + ${p2}${sp(1)}\\% = ${p1 + p2}${sp(1)}\\%$.<br>`
          texteCorr += `Donc on calcule : $100${sp(1)}\\% - ${p1 + p2}${sp(1)}\\% = ${p3}${sp(1)}\\%$.<br>`
          texteCorr += `$${p3}${sp(1)}\\%$ des membres de cette association culturelle préfèrent ${moy3}.<br>`
          if (!context.isHtml) {
            this.canEnonce = texte
            this.correction = this.listeCorrections[0]
            this.canReponseACompleter = `$\\ldots ${sp(1)}\\%$`
          }
          break
      }
      objets.push(codageAngle(depart, centre, p1 * 3.6, 4.9, '', 'black', 2, 1, 'red', 0.4), texteParPoint(`${moy1.substring(3)}`, pointSurSegment(centre, rotation(depart, centre, p1 * 1.8), 3), 0))
      objets.push(codageAngle(rotation(depart, centre, p1 * 3.6), centre, p2 * 3.6, 4.9, '', 'black', 2, 1, 'blue', 0.4), texteParPoint(`${moy2.substring(3)}`, pointSurSegment(centre, rotation(depart, centre, p1 * 3.6 + p2 * 1.8), 3), 0))
      objets.push(codageAngle(depart, centre, -p3 * 3.6, 4.9, '', 'black', 2, 1, 'yellow', 0.4), texteParPoint(`${moy3.substring(3)}`, pointSurSegment(centre, rotation(depart, centre, -p3 * 1.8), 3), 0))
      texteCorr += mathalea2d({ xmin: 0, ymin: 0, xmax: 10, ymax: 10, pixelsParCm: 20, scale: 0.5, mainlevee: false, amplitude: 1 }, ...objets)
      setReponse(this, i, p3, { formatInteractif: 'calcul', digits: 5, decimals: 2, signe: false })

      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)
  }
}