exercices/6e/6N43-2.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenuSansNumero, listeQuestionsToContenu, choice, combinaisonListes, texNombre2 } from '../../modules/outils.js'
import { propositionsQcm } from '../../modules/interactif/questionQcm.js'
export const amcReady = true
export const amcType = 'qcmMult' // type de question AMC
export const interactifReady = true
export const interactifType = 'qcm'

export const titre = 'Utiliser les critères de divisibilité (plusieurs possibles)'

/**
 * Un nombre est-il divisible par 2, 3, 5, 9 ?
 *
 *
 * @author Rémi Angot
 * 6N43-2
 */
export const uuid = 'fa2eb'
export const ref = '6N43-2'
export default function TableauCriteresDeDivisibilite () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.spacing = 1
  this.spacingCorr = 1
  this.nbQuestions = 5
  this.nbColsCorr = 1
  this.nbCols = 1
  this.sup = false

  this.nouvelleVersion = function () {
    this.modeQcm = this.interactif
    this.autoCorrection = []
    if (!this.modeQcm) {
      this.consigne =
        'Compléter le tableau en mettant oui ou non dans chaque case.'
    } else {
      this.consigne =
        'Mettre une croix dans la ou les cases qui conviennent.'
    }
    let espace = ''
    if (context.isHtml) {
      espace = ' '
    } else {
      espace = '\\qquad'
    }
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []

    const listeDesNombresPossibles = [
      'div2', // Divisible uniquement par 2
      'div3',
      'div39', // Divisible par 3 et 9
      'div5',
      'div25',
      'div23',
      'div239', // Divisible par 2, 3 et 9
      'div35',
      'div2359', // Divisible par 2, 3, 5 et 9
      'divrien' // Divisible ni par 2, ni par 3 ni par 5 ni par 9
    ]
    // divisible par 2, divisible par 3, divisible par 3 et 9...

    const listeDesTypesDeNombres = combinaisonListes(
      listeDesNombresPossibles,
      this.nbQuestions
    )
    const tableauDeNombres = []; let texte; let texteCorr
    const tableauDeNombresAvecCorrection = []
    const listeDeFacteurs = [
      7,
      13,
      17,
      19,
      23,
      29,
      37,
      43,
      47,
      53,
      59,
      67,
      73,
      79,
      83,
      89,
      97,
      103,
      107,
      109,
      113,
      127,
      137,
      139,
      149,
      157,
      163,
      167,
      173,
      179,
      193,
      197,
      199,
      223,
      227,
      229,
      233,
      239,
      257,
      263,
      269,
      277,
      281,
      283,
      293
    ]
    texteCorr = ''
    texte = ''
    for (let i = 0; i < this.nbQuestions; i++) {
      this.autoCorrection[i] = {}
      this.autoCorrection[i].options = {}
      switch (listeDesTypesDeNombres[i]) {
        case 'div2':
          tableauDeNombres[i] = 2 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\color{blue} \\text{oui} & \\text{non} & \\text{non} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '3',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 3."
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Le chiffre des unités est 0, 2, 4, 6 ou 8, il est donc divisible par 2.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`

          break
        case 'div3':
          tableauDeNombres[i] = 3 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\text{non} & \\color{blue} \\text{oui} & \\text{non} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0, ni 2, ni 4, ni 6, ni 8. Il n'est pas divisible par 2."
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est divisible par 3 car la somme de ses chiffres est divisible par 3.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div39':
          tableauDeNombres[i] = 9 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\text{non} & \\color{blue} \\text{oui} & \\text{non} & \\color{blue} \\text{oui} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0, ni 2, ni 4, ni 6, ni 8. Il n'est pas divisible par 2."
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est divisible par 9 et par 3 car la somme de ses chiffres est divisible par 9.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div5':
          tableauDeNombres[i] = 5 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\text{non} & \\text{non} & \\color{blue} \\text{oui} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0, ni 2, ni 4, ni 6, ni 8. Il n'est pas divisible par 2."
            },
            {
              texte: '3',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 3."
            },
            {
              texte: '5',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: `Ce nombre est divisible par 5 car son chiffre des unités est $${tableauDeNombres[i].toString().charAt(tableauDeNombres[i].toString().length - 1)}$.`
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div25':
          tableauDeNombres[i] = 10 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\color{blue} \\text{oui} & \\text{non} & \\color{blue} \\text{oui} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '3',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 3."
            },
            {
              texte: '5',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est un multiple de 10. Il est donc divisible par 2 et par 5.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div23':
          tableauDeNombres[i] = 6 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\color{blue} \\text{oui} & \\color{blue} \\text{oui} & \\text{non} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est un nombre pair. Il est donc divisible par 2.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div239':
          tableauDeNombres[i] = 18 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\color{blue} \\text{oui} & \\color{blue} \\text{oui} & \\text{non} & \\color{blue} \\text{oui} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est un nombre pair. Il est donc divisible par 2.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div35':
          tableauDeNombres[i] = 15 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\text{non} & \\color{blue} \\text{oui} & \\color{blue} \\text{oui} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0, ni 2, ni 4, ni 6, ni 8. Il n'est pas divisible par 2."
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est un nombre pair. Il est donc divisible par 2.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'div2359':
          tableauDeNombres[i] = 90 * (this.sup ? choice(listeDeFacteurs.slice(30)) : choice(listeDeFacteurs)) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\color{blue} \\text{oui} & \\text{oui} & \\text{oui} & \\text{oui} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '3',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '5',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: '9',
              statut: true,
              feedback: 'Correct !'
            },
            {
              texte: 'aucun',
              statut: false,
              feedback: 'Ce nombre est un nombre pair. Il est donc divisible par 2.'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
        case 'divrien':
          tableauDeNombres[i] = choice(listeDeFacteurs) * (this.sup ? choice(listeDeFacteurs.slice(30)) : 1)
          tableauDeNombresAvecCorrection[i] = `${texNombre2(
            tableauDeNombres[i]
          )} & \\text{non} & \\text{non} & \\text{non} & \\text{non} \\\\`
          this.autoCorrection[i].propositions = [
            {
              texte: '2',
              statut: false,
              feedback: "Ce nombre est un nombre impair. Il ,'est pas divisible par 2."
            },
            {
              texte: '3',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 3."
            },
            {
              texte: '5',
              statut: false,
              feedback: "Le chiffre des unités n'est ni 0 ni 5."
            },
            {
              texte: '9',
              statut: false,
              feedback: "La somme des chiffres n'est pas divisible par 9."
            },
            {
              texte: 'aucun',
              statut: true,
              feedback: 'Correct !'
            }
          ]
          this.autoCorrection[i].enonce = `$${texNombre2(tableauDeNombres[i])}$ est divisible par\n`
          break
      }
      this.autoCorrection[i].options = {
        ordered: true,
        lastChoice: 4
      }
      if (!context.isAmc && this.modeQcm) {
        texte += `$${texNombre2(tableauDeNombres[i])}$ est divisible par ${espace} `
        texte += propositionsQcm(this, i).texte
        texte += '<br>'
      }
    } // fin de boucle de préparation des question
    // mise en forme selon les cas de figures
    // l'enoncé
    if (context.isHtml && !this.modeQcm) {
      texte = '$\\def\\arraystretch{2.5}\\begin{array}{|l|c|c|c|c|}\n'
    }
    if (!context.isHtml && !this.modeQcm) {
      texte = '$\\begin{array}{|l|c|c|c|c|}\n'
    }
    if (!context.isAmc && !this.modeQcm) {
      texte += '\\hline\n'
      texte += '\\text{... est divisible} & \\text{par }2 & \\text{par }3 & \\text{par }5 & \\text{par }9\\\\\n'
      texte += '\\hline\n'
      for (let k = 0; k < this.nbQuestions; k++) {
        texte += `${texNombre2(tableauDeNombres[k])} & & & & \\\\\n`
        texte += '\\hline\n'
      }
      texte += '\\end{array}\n$'
    }

    // la correction
    if (context.isHtml) {
      texteCorr = '$\\def\\arraystretch{2.5}\\begin{array}{|l|c|c|c|c|}\n'
    }
    if (!context.isHtml && !context.isAmc) {
      texteCorr = '$\\begin{array}{|l|c|c|c|c|}\n'
    }

    if (!context.isAmc) {
      texteCorr += '\\hline\n'
      texteCorr += '\\text{... est divisible} & \\text{par }2 & \\text{par }3 & \\text{par }5 & \\text{par }9\\\\\n'
      texteCorr += '\\hline\n'
      for (let l = 0; l < this.nbQuestions; l++) {
        texteCorr += tableauDeNombresAvecCorrection[l]
        texteCorr += '\\hline\n'
      }
      texteCorr += '\\end{array}$\n'
    }
    this.listeQuestions.push(texte)
    this.listeCorrections.push(texteCorr)
    if (!context.isAmc) {
      if (this.interactif) {
        listeQuestionsToContenu(this)
      } else {
        listeQuestionsToContenuSansNumero(this)
      }
    }
  }
  this.besoinFormulaireCaseACocher = ['Gros nombres', false]
}