exercices/5e/5R10-0.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, combinaisonListesSansChangerOrdre, texNombre, miseEnEvidence, texteEnCouleur, tableauColonneLigne, combinaisonListes } from '../../modules/outils.js'
export const titre = 'Trouver l\'opposé d\'un nombre relatif'
export const dateDeModifImportante = '26/11/2021'

/**
* * Remplir un tableau en utilisant la notion d'opposé
* * 5R10-0
* @author Sébastien Lozano
* Ajout d'un paramètre pour afficher quelques fois le signe des nombres positif par Guillaume Valmont le 26/11/2021
*/

export const uuid = 'cab80'
export const ref = '5R10-0'
export default function TrouverOppose () {
  'use strict'
  Exercice.call(this) // Héritage de la classe Exercice()
  this.debug = false
  this.besoinFormulaireCaseACocher = ['Afficher quelques fois le signe des nombres positifs']
  this.sup = true
  if (this.debug) {
    this.nbQuestions = 1
  } else {
    this.nbQuestions = 1
  };

  this.titre = titre
  this.consigne = 'Compléter le tableau suivant.'

  this.nbCols = 1
  this.nbColsCorr = 1

  let typesDeQuestionsDisponibles

  this.nouvelleVersion = function () {
    if (this.debug) {
      typesDeQuestionsDisponibles = [1]
    } else {
      typesDeQuestionsDisponibles = [1]
    };

    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []

    const listeTypeDeQuestions = combinaisonListesSansChangerOrdre(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posées --> à remettre comme ci dessus
    const listeSignesPositifs = combinaisonListes(['+', ''], 6 * this.nbQuestions)
    const listeSignes = combinaisonListes(['+', '-'], 6 * this.nbQuestions)

    for (let i = 0, texte, texteCorr, signePositif, indice = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      let sup
      parseInt(this.sup) === 1 ? sup = false : sup = this.sup // Pour rester compatible avec l'ancien paramètre this.sup = 1 par défaut (et inutilisé)
      // une fonction pour générer un relatif et son opposé
      function nbRelatifEtSonOppose () {
        sup ? signePositif = listeSignesPositifs[indice] : signePositif = ''
        const nbNum = randint(0, 9) + randint(0, 9) / 10
        if (listeSignes[indice] === '+') {
          indice++
          return {
            nb: signePositif + texNombre(nbNum),
            opp: texNombre(-nbNum)
          }
        } else {
          indice++
          return {
            nb: texNombre(-nbNum),
            opp: signePositif + texNombre(nbNum)
          }
        }
      }
      const nbLigneNombres = ['\\text{Nombre}']
      const nbLigneNombresCorr = ['\\text{Nombre}']
      const nbLigneNombresOpp = []
      const nbLigneNombresOppCorr = []
      let nb
      for (let k = 0; k < 6; k++) {
        nb = nbRelatifEtSonOppose()
        if (randint(0, 1) === 1) {
          nbLigneNombres[k + 1] = ''
          nbLigneNombresCorr[k + 1] = miseEnEvidence(nb.nb)
          nbLigneNombresOpp.push(nb.opp)
          nbLigneNombresOppCorr.push(nb.opp)
        } else {
          nbLigneNombres.push(nb.nb)
          nbLigneNombresCorr.push(nb.nb)
          nbLigneNombresOpp[k] = ''
          nbLigneNombresOppCorr[k] = miseEnEvidence(nb.opp)
        }
      };

      const enonces = []
      enonces.push({
        enonce: `${tableauColonneLigne(nbLigneNombres, ['\\text{Opposé du nombre}'], nbLigneNombresOpp)}`,
        question: '',
        correction: `${tableauColonneLigne(nbLigneNombresCorr, ['\\text{Opposé du nombre}'], nbLigneNombresOppCorr)}`
      })
      enonces.push({
        enonce: 'énoncé type 2',
        question: '',
        correction: `${texteEnCouleur('correction type2')}`
      })

      switch (listeTypeDeQuestions[i]) {
        case 1:
          texte = `${enonces[0].enonce}`
          if (this.debug) {
            texte += '<br>'
            texte += `<br> =====CORRECTION======<br>${enonces[0].correction}`
            texteCorr = ''
          } else {
            texteCorr = `${enonces[0].correction}`
          };
          break
        case 2:
          texte = `${enonces[1].enonce}`
          if (this.debug) {
            texte += '<br>'
            texte += `<br> =====CORRECTION======<br>${enonces[1].correction}`
            texteCorr = ''
          } else {
            texteCorr = `${enonces[1].correction}`
          };
          break
      }

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