exercices/Ex/ExC100.js

import { listeQuestionsToContenu, randint, fractionSimplifiee, abs, texFraction, miseEnEvidence } from '../../modules/outils.js'

import Exercice from '../Exercice.js'
import { complex, multiply } from 'mathjs'
export const titre = 'Equation du premier degré dans C'
export const dateDePublication = '30/10/2021'

/**
 * Description didactique de l'exercice
 * @author Eric Schrafstetter
 * Référence ExC100
*/
export const uuid = '8e72e'
export const ref = 'ExC100'
export default function EquationDuPremierDegreDansC () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.consigne = 'Résoudre dans $\\mathbb{C}$ les équations ci-dessous. On écrira les solutions sous forme algébrique.'
  this.nbQuestions = 2
  this.nbCols = 1 // Uniquement pour la sortie LaTeX
  this.nbColsCorr = 1 // 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.spacingCorr = 2
  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées

    for (let i = 0, texte, texteCorr, z2, z1, z1m, z2m, z2n, z1c, fr, fi, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // Boucle principale où i+1 correspond au numéro de la question

      z1 = complex(randint(-20, 20, 0), randint(-20, 20, 0)) // L'énoncé est du type z1 * z + z2 = 0
      z2 = complex(randint(-20, 20, 0), randint(-20, 20, 0))
      z2n = z2.neg() // - z2
      z1c = z1.conjugate() // conjugué de z1
      // zsol = multiply(z2.neg(), z1.inverse()) // la solution est - z2 / z1
      z1m = multiply(z1c, z1)
      z2m = multiply(z1c, z2n)
      fr = fractionSimplifiee(z2m.re, z1m.re) // partie réelle de la solution sous forme de fraction simplifiée
      fi = fractionSimplifiee(z2m.im, z1m.re) // partie imaginaire

      // Enoncé
      texte = `$(${z1})z${'+'.repeat(z2.re > 0)}${z2}=0$` // ajout d'un signe + si partie réelle positive
      // Corrigé
      texteCorr = 'Passons le terme constant du côté droit de l\'équation :'
      texteCorr += `<br>$(${z1})z=${z2n}$`
      texteCorr += `<br>Ce qui donne : $z = \\dfrac{${z2n}}{${z1}}$`
      texteCorr += `<br>Pour faire disparaître le $i$ du dénominateur, utilisons le conjugué $\\overline{${z1}}=${z1c}$ du dénominateur :`
      texteCorr += `<br>$z = ${texFraction(z2n, z1)}\\times ${miseEnEvidence(texFraction(z1c, z1c))}$`
      texteCorr += `<br>Or $(${z1})(${z1c})=${z1m}$ `
      texteCorr += `et $(${z2n})(${z1c})=${z2m}$`
      texteCorr += '<br>On en déduit que :'
      texteCorr += `<br>$z = ${texFraction(z2m, z1m)} = ${texFraction(fr[0], fr[1])}${'-+'[+(fi[0] > 0)]}${texFraction(abs(fi[0]), fi[1])}\\times i$`

      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)
  }
  // this.besoinFormulaireNumerique = ['Niveau de difficulté', 3]
}

// python3 list-to-js.py pour faire apparaître l'exercice dans le menu