exercices/4e/4C32-2.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, combinaisonListes, choice, calcul, randint, texNombre, modalTexteCourt } from '../../modules/outils.js'
export const titre = 'Puissances de 10 et préfixes kilo, méga, giga, téra'

/**
 * Utiliser les puissances de 10 et les préfixes kilo, Méga, Giga, Téra
 * @author Rémi Angot
 * Référence 4C32-2
 * 2021-02-05
*/
export const uuid = 'fedae'
export const ref = '4C32-2'
export default function ConversionsPuissancesDe10 (numeroExercice) {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = 'Compléter :'
  this.nbQuestions = 10
  this.nbCols = 2 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 2 // Uniquement pour la sortie LaTeX
  // this.sup = 1; // Niveau de difficulté
  // this.tailleDiaporama = 3; // Pour les exercices chronométrés. 50 par défaut pour les exercices avec du texte
  this.video = '' // Id YouTube ou url
  this.correction_detaille_disponible = true
  this.correctionDetaillee = !!context.isHtml

  this.boutonAide = modalTexteCourt(numeroExercice,
    `Téra : mille-milliards $\\times10^{12}$<br>
Giga : milliard $\\times10^9$<br>
Méga : millions $\\times10^6$<br>
kilo : mille $\\times10^{3}$<br>
milli : millième $\\times10^{-3}$<br>
micro : millionième $\\times10^{-6}$<br>
nano : milliardième $\\times10^{-9}$<br>
`, 'Signification des préfixes'
  )
  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées

    const typesDeQuestionsDisponibles = ['m>km', 'u>M', 'u>G', 'g>t', 'M>G', 'M>T', 'G>T', 'm>mm', 'm>um', 'm>nm'] // On créé 3 types de questions
    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions) // Tous les types de questions sont posés mais l'ordre diffère à chaque "cycle"
    const listeDeSens = combinaisonListes(['div', 'fois'], this.nbQuestions)
    for (let i = 0, a, n, unite, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // Boucle principale où i+1 correspond au numéro de la question
      a = choice([calcul(randint(1, 9) + randint(1, 9) / 10), calcul(randint(11, 99) + randint(1, 9) / 10 + randint(1, 9) / 100), calcul(randint(11, 999) + randint(1, 9) / 10)], calcul(randint(10000, 99999) / 100))
      texte = ''
      texteCorr = ''
      switch (listeTypeDeQuestions[i]) { // Suivant le type de question, le contenu sera différent
        case 'm>km':
          n = randint(6, 12)
          if (listeDeSens[i] === 'div') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}~\\ldots\\ldots~\\text{km}$`
            if (this.correctionDetaillee) {
              texteCorr += "Il faut $1~000$ m pour 1 km, on va donc diviser par $1~000$, c'est-à-dire multiplier par $10^{-3}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}\\times10^{${n - 3}}~\\text{km}$`
          }
          if (listeDeSens[i] === 'fois') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{km} = ${texNombre(a)}~\\ldots\\ldots~\\text{m}$`
            if (this.correctionDetaillee) {
              texteCorr += "$1~\\text{km}=1~000~\\text{km}$, on va donc multiplier par $1~000$, c'est-à-dire multiplier par $10^{3}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{km} = ${texNombre(a)}\\times10^{${n + 3}}~\\text{m}$`
          }
          break
        case 'u>M':
          n = randint(11, 20)
          unite = choice([['W', 'watts'], ['Wh', 'watts-heure']])
          if (listeDeSens[i] === 'div') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{M${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Il faut 1 million de ${unite[1]} pour 1 M${unite[0]}, on va donc diviser par 1 million, c'est-à-dire multiplier par $10^{-6}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{${unite[0]}} = ${texNombre(a)}\\times10^{${n - 6}}~\\text{M${unite[0]}}$`
          }
          if (listeDeSens[i] === 'fois') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `1 M${unite[0]} c'est un million de ${unite[1]}, on va donc multiplier par 1 million, c'est-à-dire multiplier par $10^{6}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}\\times10^{${n + 6}}~\\text{${unite[0]}}$`
          }
          break
        case 'u>G':
          unite = choice([['W', 'watts'], ['Wh', 'watts-heure']])
          if (listeDeSens[i] === 'div') {
            n = randint(13, 20)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{G${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Il faut 1 milliard de ${unite[1]} pour 1 G${unite[0]}, on va donc diviser par 1 milliard, c'est-à-dire multiplier par $10^{-9}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{${unite[0]}} = ${texNombre(a)}\\times10^{${n - 9}}~\\text{G${unite[0]}}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(4, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `1 G${unite[0]} c'est un milliard de ${unite[1]}, on va donc multiplier par 1 milliard, c'est-à-dire multiplier par $10^{9}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}\\times10^{${n + 9}}~\\text{${unite[0]}}$`
          }
          break
        case 'g>t':
          if (listeDeSens[i] === 'div') {
            n = randint(13, 20)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{g} = ${texNombre(a)}~\\ldots\\ldots~\\text{t}$`
            if (this.correctionDetaillee) {
              texteCorr += 'Il faut 1 million de grammes pour 1 tonne, on va donc diviser par 1 million, c\'est-à-dire multiplier par $10^{-6}$.<br>'
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{g} = ${texNombre(a)}\\times10^{${n - 6}}~\\text{t}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(4, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{t} = ${texNombre(a)}~\\ldots\\ldots~\\text{g}$`
            if (this.correctionDetaillee) {
              texteCorr += 'Une tonne c\'est un million de grammes, on va donc multiplier par 1 million, c\'est-à-dire multiplier par $10^{6}$.<br>'
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{t} = ${texNombre(a)}\\times10^{${n + 6}}~\\text{g}$`
          }
          break
        case 'M>G':
          unite = choice([['W', 'watts'], ['Wh', 'watts-heure']])
          if (listeDeSens[i] === 'div') {
            n = randint(8, 12)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{G${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Il faut mille-millions de ${unite[1]} pour faire 1 milliard de ${unite[1]}, on va donc diviser par mille, c'est-à-dire multiplier par $10^{-3}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}\\times10^{${n - 3}}~\\text{G${unite[0]}}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(4, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{M${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Un milliard de ${unite[1]} c'est mille-millions de ${unite[1]}, on va donc multiplier par mille, c'est-à-dire multiplier par $10^{3}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}\\times10^{${n + 3}}~\\text{M${unite[0]}}$`
          }
          break
        case 'M>T':
          unite = choice([['W', 'watts'], ['Wh', 'watts-heure']])
          if (listeDeSens[i] === 'div') {
            n = randint(9, 15)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{T${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Il faut mille  méga-${unite[1]} pour faire un giga-${unite[1]} et mille giga-${unite[1]} pour faire un téra-${unite[1]}, on va donc diviser par un million, c'est-à-dire multiplier par $10^{-6}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{M${unite[0]}} = ${texNombre(a)}\\times10^{${n - 6}}~\\text{T${unite[0]}}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(4, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{T${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{M${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Un téra-${unite[1]} c'est mille giga-${unite[1]} donc un million de méga-${unite[1]}, on va donc multiplier par un million, c'est-à-dire multiplier par $10^{6}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{T${unite[0]}} = ${texNombre(a)}\\times10^{${n + 6}}~\\text{M${unite[0]}}$`
          }
          break
        case 'G>T':
          unite = choice([['W', 'watts'], ['Wh', 'watts-heure']])
          if (listeDeSens[i] === 'div') {
            n = randint(8, 12)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{T${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Il faut mille-milliards de ${unite[1]} pour faire 1 T${unite[0]}, on va donc diviser par mille, c'est-à-dire multiplier par $10^{-3}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{G${unite[0]}} = ${texNombre(a)}\\times10^{${n - 3}}~\\text{T${unite[0]}}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(4, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{T${unite[0]}} = ${texNombre(a)}~\\ldots\\ldots~\\text{G${unite[0]}}$`
            if (this.correctionDetaillee) {
              texteCorr += `Un téra-${unite[1]} c'est mille-milliards de ${unite[1]}, on va donc multiplier par mille, c'est-à-dire multiplier par $10^{3}$.<br>`
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{T${unite[0]}} = ${texNombre(a)}\\times10^{${n + 3}}~\\text{G${unite[0]}}$`
          }
          break
        case 'm>mm':
          n = randint(6, 12)
          if (listeDeSens[i] === 'div') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{mm} = ${texNombre(a)}~\\ldots\\ldots~\\text{m}$`
            if (this.correctionDetaillee) {
              texteCorr += "Il faut $1~000$ mm pour 1 m, on va donc diviser par $1~000$, c'est-à-dire multiplier par $10^{-3}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{mm} = ${texNombre(a)}\\times10^{${n - 3}}~\\text{m}$`
          }
          if (listeDeSens[i] === 'fois') {
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}~\\ldots\\ldots~\\text{mm}$`
            if (this.correctionDetaillee) {
              texteCorr += "$1~\\text{m}=1~000~\\text{mm}$, on va donc multiplier par $1~000$, c'est-à-dire multiplier par $10^{3}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}\\times10^{${n + 3}}~\\text{mm}$`
          }
          break
        case 'm>um':
          if (listeDeSens[i] === 'div') {
            n = randint(3, 10)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\mu\\text{m} = ${texNombre(a)}~\\ldots\\ldots~\\text{m}$`
            if (this.correctionDetaillee) {
              texteCorr += "Il faut un million de $\\mu\\text{m}$ pour 1 m, on va donc diviser par un million, c'est-à-dire multiplier par $10^{-6}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\mu\\text{m} = ${texNombre(a)}\\times10^{${n - 6}}~\\text{m}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(3, 10, [6]) * (-1)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}~\\ldots\\ldots~\\mu\\text{m}$`
            if (this.correctionDetaillee) {
              texteCorr += "Un mètre équivaut à un million de micro-mètres, on va donc multiplier par un million, c'est-à-dire multiplier par $10^{6}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}\\times10^{${n + 6}}~\\mu\\text{m}$`
          }
          break
        case 'm>nm':
          if (listeDeSens[i] === 'div') {
            n = randint(3, 8)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{nm} = ${texNombre(a)}~\\ldots\\ldots~\\text{m}$`
            if (this.correctionDetaillee) {
              texteCorr += "Il faut un milliard de nano-mètres pour 1 m, on va donc diviser par un milliard, c'est-à-dire multiplier par $10^{-9}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{nm} = ${texNombre(a)}\\times10^{${n - 9}}~\\text{m}$`
          }
          if (listeDeSens[i] === 'fois') {
            n = randint(3, 12, [9, 11]) * (-1)
            texte = `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}~\\ldots\\ldots~\\text{nm}$`
            if (this.correctionDetaillee) {
              texteCorr += "Un mètre équivaut à un milliard de nano-mètres, on va donc multiplier par un milliard, c'est-à-dire multiplier par $10^{9}$.<br>"
            }
            texteCorr += `$${texNombre(a)}\\times10^{${n}}~\\text{m} = ${texNombre(a)}\\times10^{${n + 9}}~\\text{nm}$`
          }
          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++
    }
    listeQuestionsToContenu(this)
  }
}