exercices/1e/1N11.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, randint, choice, combinaisonListes, ecritureAlgebrique, ecritureParentheseSiNegatif, signe, texNombre, miseEnEvidence, arcenciel } from '../../modules/outils.js'

export const titre = 'Déterminer les termes d\'une suite définie par récurrence'

/**
 * 1N11
 * @author Gaelle Morvan
 */
export const uuid = 'b8c14'
export const ref = '1N11'
export default function TermeDUneSuiteDefinieParRecurrence () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = 'Une suite étant donnée, calculer le terme demandé.'
  this.nbQuestions = 4

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Vide la liste de questions
    this.listeCorrections = [] // Vide la liste de questions corrigées

    const typesDeQuestionsDisponibles = [1, 2, 3, 4]
    const listeTypeDeQuestions = combinaisonListes(
      typesDeQuestionsDisponibles,
      this.nbQuestions
    ) // Tous les types de questions sont posées mais l'ordre diffère à chaque "cycle"

    for (let i = 0, texte, texteCorr, cpt = 0, u, a, b, k; i < this.nbQuestions && cpt < 50;) {
      switch (listeTypeDeQuestions[i]) {
        case 1: // suite arithmétique
          a = randint(1, 10) * choice([-1, 1])
          u = randint(0, 10) * choice([-1, 1])
          k = randint(2, 10)

          texte = `Soit $(u_n)$ une suite définie par $u_0=${u}$ et pour tout entier $n\\in\\mathbb{N}$ par $u_{n+1} = u_n ${ecritureAlgebrique(a)}$.`

          texte += `<br>Calculer $u_{${k}}$.`

          texteCorr = `On calcule successivent les termes jusqu'à obtenir $u_{${k}}$ :`
          for (let indice = 0; indice < k; indice++) {
            texteCorr += `<br> $u_{${indice + 1}} = ${miseEnEvidence('u_{' + indice + '}', arcenciel(indice, true))} ${ecritureAlgebrique(a)} = 
              ${miseEnEvidence(u, arcenciel(indice, true))} ${ecritureAlgebrique(a)} = ${miseEnEvidence(u + a, arcenciel(indice + 1, true))}$`
            u = u + a
          }
          break

        case 2: // suite géométrique
          a = randint(2, 5) * choice([-1, 1])
          u = randint(1, 9) * choice([-1, 1])
          k = randint(2, 6)

          texte = `Soit $(u_n)$ une suite définie par $u_0=${u}$ et pour tout entier $n\\in\\mathbb{N}$ par $u_{n+1} = u_n \\times ${ecritureParentheseSiNegatif(a)}$.`

          texte += `<br>Calculer $u_{${k}}$.`

          texteCorr = `On calcule successivent les termes jusqu'à obtenir $u_${k}$ :`
          for (let indice = 0; indice < k; indice++) {
            texteCorr += `<br> $u_{${indice + 1}} = ${miseEnEvidence('u_{' + indice + '}', arcenciel(indice, true))} \\times ${ecritureParentheseSiNegatif(a)} = 
              ${miseEnEvidence(u, arcenciel(indice, true))} \\times ${ecritureParentheseSiNegatif(a)} = ${miseEnEvidence(u * a, arcenciel(indice + 1, true))}$`
            u = u * a
          }
          break

        case 3: // suite arithmético-géométrique
          a = randint(2, 5) * choice([-1, 1])
          b = randint(1, 5) * choice([-1, 1])
          u = randint(1, 5) * choice([-1, 1])
          k = randint(2, 6)

          texte = `Soit $(u_n)$ une suite définie par $u_0=${u}$ et pour tout entier $n\\in\\mathbb{N}$ par $u_{n+1} = ${a} u_n ${ecritureAlgebrique(b)}$.`

          texte += `<br>Calculer $u_{${k}}$.`

          texteCorr = `On calcule successivent les termes jusqu'à obtenir $u_${k}$ :`
          for (let indice = 0; indice < k; indice++) {
            texteCorr += `<br> $u_{${indice + 1}} = ${a}\\times ${miseEnEvidence('u_{' + indice + '}', arcenciel(indice, true))} ${ecritureAlgebrique(b)}=`
            texteCorr += `${a} \\times ${miseEnEvidence(ecritureParentheseSiNegatif(u), arcenciel(indice, true))} ${ecritureAlgebrique(b)} = 
            ${miseEnEvidence(a * u + b, arcenciel(indice + 1, true))}$`
            u = u * a + b
          }
          break

        case 4: // suite de la forme u(n+1) = a +- u(n)^2
          a = randint(1, 5) * choice([-1, 1])
          b = choice([-1, 1])
          u = randint(1, 5) * choice([-1, 1])
          k = randint(2, 3)

          texte = `Soit $(u_n)$ une suite définie par $u_0=${u}$ et pour tout entier $n\\in\\mathbb{N}$ par $u_{n+1} = ${a} ${signe(b)} u_n^2$.`

          texte += `<br>Calculer $u_{${k}}$.`

          texteCorr = `On calcule successivent les termes jusqu'à obtenir $u_${k}$ :`
          for (let indice = 0; indice < k; indice++) {
            texteCorr += `<br> $u_{${indice + 1}} = ${a} ${signe(b)} (${miseEnEvidence('u_{' + indice + '}', arcenciel(indice, true))})^2=`
            texteCorr += `${a} ${signe(b)} ${miseEnEvidence(ecritureParentheseSiNegatif(u), arcenciel(indice, true))}^2 = 
              ${miseEnEvidence(texNombre(a + b * u * u), arcenciel(indice + 1, true))}$`
            u = a + b * u * u
          }
          break
      }

      if (this.questionJamaisPosee(i, a, u, k)) { // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte) // Sinon on enregistre la question dans listeQuestions
        this.listeCorrections.push(texteCorr) // On fait pareil pour la correction
        i++ // On passe à la question suivante
      }
      cpt++ // Sinon on incrémente le compteur d'essai pour avoir une question nouvelle
    }
    listeQuestionsToContenu(this) // La liste de question et la liste de la correction
  }
}