exercices/6e/6C13-1.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenuSansNumero, randint, combinaisonListes, numAlpha, rangeMinMax, contraindreValeur, sp } from '../../modules/outils.js'
export const titre = 'Vocabulaires liés aux 4 opérations'

/**
 * Exercice sur le vocabulaire : somme, différence, produit, quotient...
 * @author Mickael Guironnet
 */
export const uuid = '32e02'
export const ref = '6C13-1'
export default function VocabulaireSur4Operations () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 5
  this.nbCols = 2
  this.nbColsCorr = 2
  this.sup = 0
  this.spacing = 2

  this.nouvelleVersion = function () {
    let typesDeQuestionsDisponibles = []
    if (!this.sup || this.sup === '0') { // Si aucune liste n'est saisie
      typesDeQuestionsDisponibles = rangeMinMax(1, 14)
    } else {
      if (typeof (this.sup) === 'number') { // Si c'est un nombre, c'est que le nombre a été saisi dans la barre d'adresses
        this.sup === 0 ? typesDeQuestionsDisponibles = rangeMinMax(1, 14) : typesDeQuestionsDisponibles = contraindreValeur(1, 14, this.sup, 4)
      } else {
        typesDeQuestionsDisponibles = this.sup.split('-')// Sinon on créé un tableau à partir des valeurs séparées par des -
        for (let i = 0; i < typesDeQuestionsDisponibles.length; i++) { // on a un tableau avec des strings : ['1', '5', '2','toto','45']
          typesDeQuestionsDisponibles[i] = contraindreValeur(1, 14, parseInt(typesDeQuestionsDisponibles[i]), randint(1, 14)) // parseInt en fait un tableau d'entiers
        }
      }
    }

    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées

    for (let i = 0, texte, a, b, reste, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      a = randint(2, 10)
      b = randint(2, 10, [a])
      if (a < b) { [a, b] = [b, a] }
      texte = ''
      texteCorr = ''
      switch (listeTypeDeQuestions[i]) {
        case 1:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} + ${b}$${sp()}», comment s'appellent les nombres $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} + ${b}$${sp()}», $${a}$ et $${b}$ s'appellent des termes.`
          break
        case 2:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} + ${b} = ${a + b}$ ${sp()}», comment s'appelle le nombre $${a + b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} + ${b} = ${a + b}$${sp()}», $${a + b}$ s'appelle la somme de $${a}$ et $${b}$.`
          break
        case 3:
          texte +=
            numAlpha(i) +
            `Quelle est la somme de $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `La somme de $${a}$ et $${b}$ est $${a + b}$.`
          break
        case 4:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} - ${b}$${sp()}», comment s'appellent les nombres $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} - ${b}$${sp()}», $${a}$ et $${b}$ s'appellent des termes.`
          break
        case 5:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} - ${b} = ${a - b}$${sp()}», comment s'appelle le nombre $${a - b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} - ${b} = ${a - b}$${sp()}», $${a - b}$ s'appelle la différence entre $${a}$ et $${b}$.`
          break
        case 6:
          texte +=
            numAlpha(i) +
            `Quelle est la différence entre $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `La différence entre $${a}$ et $${b}$ est $${a - b}$.`
          break
        case 7:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} \\times ${b}$${sp()}», comment s'appellent les nombres $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} \\times ${b}$${sp()}», $${a}$ et $${b}$ s'appellent des facteurs.`
          break
        case 8:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a} \\times ${b} = ${a * b}$${sp()}», comment s'appelle le nombre $${a * b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a} \\times ${b} = ${a * b}$${sp()}», $${a * b}$ s'appelle le produit de $${a}$ et $${b}$.`
          break
        case 9:
          texte +=
            numAlpha(i) +
            `Quel est le produit de $${a}$ et $${b}$ ?`
          texteCorr += numAlpha(i) + `Le produit de $${a}$ et $${b}$ est $${a * b}$.`
          break
        case 10:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a * b} \\div ${b}$${sp()}», comment s'appelle le nombre $${a * b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a * b} \\div ${b}$${sp()}», $${a * b}$ s'appelle le dividende.`
          break
        case 11:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a * b} \\div ${b}$${sp()}», comment s'appelle le nombre $${b}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a * b} \\div ${b}$${sp()}», $${b}$ s'appelle le diviseur.`
          break
        case 12:
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a * b} \\div ${b} = ${a}$${sp()}», comment s'appelle le nombre $${a}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a * b} \\div ${b} = ${a}$${sp()}», $${a}$ s'appelle le quotient de  $${a * b}$ par $${b}$.`
          break
        case 13:
          reste = randint(1, b, [b])
          texte +=
            numAlpha(i) +
            `Dans l'expression «${sp()}$${a * b + reste} = ${b} \\times ${a} + ${reste} $${sp()}», comment s'appelle le nombre $${reste}$ ?`
          texteCorr += numAlpha(i) + `Dans l'expression «${sp()}$${a * b + reste} = ${b} \\times ${a} + ${reste} $${sp()}», $${reste}$ s'appelle le reste du quotient de  $${a * b}$ par $${b}$.`
          break
        case 14:
          texte +=
            numAlpha(i) +
            `Quel est le quotient de $${a * b}$ par $${b}$ ?`
          texteCorr += numAlpha(i) + `Le quotient de $${a * b}$ par $${b}$ est $${a}$.`
          break
      }
      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++
    }
    listeQuestionsToContenuSansNumero(this)
  }
  this.besoinFormulaireTexte = ['Type de question',
    `0 : Mélange
     1 : Addition (terme)
     2 : Addition (somme)
     3 : Addition (calcul)
     4 : Soustraction (terme)
     5 : Soustraction (différence)
     6 : Soustraction (calcul)
     7 : Multiplication (facteur)
     8 : Multiplication (produit)
     9 : Multiplication (calcul)
     10 : Division (dividende)
     11 : Division (diviseur)
     12 : Division (quotient)
     13 : Division (reste)
     14 : Division (calcul)`
  ]
}