exercices/5e/5R10-1.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, shuffle, texNombrec, obtenirListeFacteursPremiers, choice, combinaisonListes } from '../../modules/outils.js'

export const titre = 'Deviner un nombre relatif'

/**
 * Additions à trou dans les relatifs
 *
 *  @author Jean-Claude Lhote à partir de CM000 de Rémi Angot
 * Référence 5R10
 */
export const uuid = '76343'
export const ref = '5R10-1'
export default function DevinerNombreRelatif () {
  'use strict'
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.spacing = 2
  this.nbQuestions = 3
  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    const typesDeQuestionsDisponibles = [1, 2, 3]
    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    let dixieme; let signe; let centieme; let unite; let somme; let produit; let facteurs; const type = ['négatif', 'nul', 'positif']
    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions & cpt < 50;) {
      signe = choice([-1, 1])
      switch (listeTypeDeQuestions[i]) {
        case 1:
          unite = randint(1, 9)
          somme = randint(unite + 1, unite + 9)
          dixieme = somme - unite
          centieme = 0
          texte = `Je suis un nombre ${type[signe + 1]} dont la distance à zéro est comprise entre ${unite} et ${unite + 1}.<br>`
          texte += `On m'écrit avec deux chiffres dont la somme est ${somme}.<br>Qui suis-je ?`
          break

        case 2:
          unite = randint(1, 9)
          somme = randint(unite + 1, unite + 9)
          dixieme = somme - unite
          centieme = 0
          texte = 'Je suis un nombre dont l\'opposé est compris entre '
          if (signe < 0) {
            texte += `$${unite}$ et $${unite + 1}$.<br>`
          } else {
            texte += `$${-unite - 1}$ et $${-unite}$.<br>`
          }
          texte += `La somme de mes deux chiffres est $${somme}$.<br>Qui suis-je ?`
          break

        case 3:
          produit = choice([6, 10, 15])
          facteurs = obtenirListeFacteursPremiers(produit)
          facteurs.push(1)
          facteurs = shuffle(facteurs)
          unite = facteurs[0]
          dixieme = facteurs[1]
          centieme = facteurs[2]
          texte = `Je suis un nombre ${type[signe + 1]} dont la distance à zéro est comprise entre ${unite} et ${unite + 1}.<br>`
          texte += `Le produit de mes trois chiffres vaut ${produit}.<br>`
          if (dixieme < centieme) {
            texte += 'Mon chiffre des centièmes est supérieur à mon chiffre des dixièmes.'
          } else {
            texte += 'Mon chiffre des centièmes est inférieur à mon chiffre des dixièmes.'
          }
          texte += ' Qui suis-je ?'
          break

        case 4:
          break
      }
      texteCorr = `Je suis $${texNombrec(signe * (unite + dixieme / 10 + centieme / 100))}$.`

      if (this.listeQuestions.indexOf(texte) === -1) { // 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)
  }
//  this.besoinFormulaireNumerique = ["Niveau de difficulté",2,"1 : Nombres entiers\n2 : Nombres décimaux"];
//  this.besoinFormulaire2Numerique = ["Valeur maximale", 9999]
//  this.besoinFormulaire3Numerique = ["Type d'égalité",2,"1 : Égalité à trou\n2 : Équation"];
}