exercices/6e/6C30-6.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { calcul, listeQuestionsToContenu, combinaisonListes, choice, range, rangeMinMax, texNombre3, texteEnCouleurEtGras, enleveElement, numAlpha, abs, randint, lampeMessage } from '../../modules/outils.js'
import { propositionsQcm } from '../../modules/interactif/questionQcm.js'
import { min } from 'mathjs'
import { context } from '../../modules/context.js'
import { glisseNombre } from '../../modules/2d.js'
export const amcReady = true
export const amcType = 'qcmMono'
export const interactifReady = true
export const interactifType = 'qcm'
export const titre = 'Par combien multiplier un nombre pour que le chiffre des unités devienne le chiffre des ... ?'

// Gestion de la date de publication initiale
export const dateDePublication = '04/11/2021'

/**
 * Presentation didactique : Par combien multiplier un nombre pour que le chiffre des unités devienne le chiffre des ...
 * @author Eric Elter (inspiré par Aude Duvold)
 * Référence 6C30-6
 */
export const uuid = '18559'
export const ref = '6C30-6'
export default function MultiplierUnNombreParPuissanceDeDix () {
  'use strict'
  Exercice.call(this)
  this.nbQuestions = 5 // Ici le nombre de questions
  this.consigne = ''
  this.sup = false
  this.sup2 = true
  this.sup3 = 3
  this.listePackages = 'bclogo'

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // tableau contenant la liste des questions
    this.listeCorrections = []
    this.autoCorrection = []
    const choixUnites = ['millièmes', 'centièmes', 'dixièmes', '', 'dizaines', 'centaines', 'milliers']
    let listeChoixAlea = range(6, [3])
    if (!this.sup2 || this.interactif || context.isAmc) { this.nbQuestions = min(this.nbQuestions, 6) }
    if (parseInt(this.sup3) === 1) {
      listeChoixAlea = rangeMinMax(4, 6)
      if (!this.sup2 || this.interactif || context.isAmc) { this.nbQuestions = min(this.nbQuestions, 3) }
    } else if (parseInt(this.sup3) === 2) {
      listeChoixAlea = range(2)
      if (!this.sup2 || this.interactif || context.isAmc) { this.nbQuestions = min(this.nbQuestions, 3) }
    }
    if (this.interactif) {
      this.introduction = lampeMessage({
        titre: 'Aucun raisonnement écrit ne vous est demandé.',
        texte: ' Vous pouvez, tout de même, le faire au brouillon sur un exemple avant de choisir une réponse en ligne.',
        couleur: 'nombres'
      })
    } else {
      this.introduction = lampeMessage({
        titre: 'Bien lire les consignes.',
        texte: '',
        couleur: 'nombres'
      })
    }
    listeChoixAlea = combinaisonListes(listeChoixAlea, this.nbQuestions)
    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const choixAlea = listeChoixAlea[0]
      listeChoixAlea.splice(0, 1)
      const centaine = randint(0, 1) === 0 ? choice(rangeMinMax(0, 9)) : 0
      const dizaine = choice(rangeMinMax(0, 9), [centaine])
      const unite = choice(rangeMinMax(0, 9), [centaine, dizaine])
      const dixieme = (this.sup) ? 0 : choice(rangeMinMax(0, 9), [centaine, dizaine, unite])
      const centieme = ((randint(0, 1) !== 0) || (this.sup)) ? 0 : choice(rangeMinMax(0, 9), [centaine, dizaine, unite, dixieme])
      const exemple = calcul(centaine * 100 + dizaine * 10 + unite + dixieme / 10 + centieme / 100)
      if (this.sup2 & !this.interactif & !context.isAmc) {
        texte = `Voici un nombre : $${texNombre3(exemple)}$.<br>`
        texte += `${numAlpha(0)} Entourer le chiffre des unités de ce nombre.<br>`
        texte += `${numAlpha(1)} Compléter les phrases suivantes.<br>`
        texte += `Multiplier $${texNombre3(exemple)}$ par $${texNombre3(calcul(10 ** (choixAlea - 3)))}$, c'est trouver le nombre $\\ldots\\ldots\\ldots$ fois plus $\\ldots\\ldots\\ldots$ que $${texNombre3(exemple)}$.<br>`
        texte += `Le chiffre des unités de $${texNombre3(exemple)}$ devient, alors, le chiffre des $\\ldots\\ldots\\ldots\\ldots\\ldots$ et donc $${texNombre3(exemple)} \\times ${texNombre3(calcul(10 ** (choixAlea - 3)))} =\\ldots\\ldots\\ldots\\ldots$<br>`

        texteCorr = `${numAlpha(0)} $${unite}$ est le chiffre des unités de $${texNombre3(exemple)}$.<br>`
        texteCorr += `${numAlpha(1)} Multiplier $${texNombre3(exemple)}$ par $${texNombre3(calcul(10 ** (choixAlea - 3)))}$, c'est trouver le nombre ${texteEnCouleurEtGras(texNombre3(calcul(10 ** abs(choixAlea - 3))))} fois plus `
        texteCorr += choixAlea - 3 > 0 ? `${texteEnCouleurEtGras('grand')} ` : `${texteEnCouleurEtGras('petit')} `
        texteCorr += `que $${texNombre3(exemple)}$.<br>`
        texteCorr += `Le chiffre des unités de $${texNombre3(exemple)}$ devient, alors, le chiffre des ${texteEnCouleurEtGras(choixUnites[choixAlea])} et donc $${texNombre3(exemple)} \\times ${texNombre3(calcul(10 ** (choixAlea - 3)))} =$ ${texteEnCouleurEtGras(texNombre3(exemple * calcul(10 ** (choixAlea - 3))))}.<br>`
      } else {
        texte = `Par combien multiplier un nombre pour que tous ses chiffres changent de position et que le chiffre des unités devienne le chiffre des ${choixUnites[choixAlea]} ?`

        texteCorr = `Prenons un exemple : ${texNombre3(exemple)}.<br>`
        texteCorr += `$${texNombre3(exemple)} \\times ${texNombre3(calcul(10 ** (choixAlea - 3)))} = ${texNombre3(exemple * calcul(10 ** (choixAlea - 3)))}$<br>`
        texteCorr += `Si on veut que son chiffre des ${texteEnCouleurEtGras('unités')} devienne le chiffre des ${texteEnCouleurEtGras(choixUnites[choixAlea])}, on doit multiplier le nombre par ${texteEnCouleurEtGras(texNombre3(calcul(10 ** (choixAlea - 3))))}.`

        const aleaFaux = range(6, [3, choixAlea])
        enleveElement(aleaFaux)
        const choixAleaFaux = []
        for (let kk = 0; kk < 6; kk++) {
          choixAleaFaux.push(texNombre3(calcul(10 ** (aleaFaux[kk] - 3))))
        }
        this.autoCorrection[i] = {}
        this.autoCorrection[i].enonce = `${texte}\n`
        this.autoCorrection[i].propositions = [
          {
            texte: `$${texNombre3(calcul(10 ** (choixAlea - 3)))}$`,
            statut: true
          },
          {
            texte: `$${choixAleaFaux[0]}$`,
            statut: false
          },
          {
            texte: `$${choixAleaFaux[1]}$`,
            statut: false
          },
          {
            texte: `$${choixAleaFaux[2]}$`,
            statut: false
          },
          {
            texte: `$${choixAleaFaux[3]}$`,
            statut: false
          },
          {
            texte: `$${choixAleaFaux[4]}$`,
            statut: false
          }
        ]
        this.autoCorrection[i].options = {
          ordered: false,
          lastChoice: 7
        }
      }
      if (this.interactif) {
        texte += '<br>' + propositionsQcm(this, i).texte
      }
      if (context.isHtml) texteCorr += mathalea2d({ xmin: 2.5, xmax: 27.5, ymin: -5, ymax: 5.5 }, glisseNombre(exemple, choixAlea - 3))

      if (this.listeQuestions.indexOf(texte) === -1) {
        // Si la question n'a jamais été posée, on la stocke dans la liste des questions
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireCaseACocher = ['Les nombres-exemples sont entiers', false]
  this.besoinFormulaire2CaseACocher = ['Exercice avec un raisonnement associé', true]
  this.besoinFormulaire3Numerique = ['Type de questions', 3, ' 1 : Dizaines, centaines, milliers\n 2 : Dixièmes, centièmes, millièmes\n 3 : Mélange']
}