exercices/3e/3F13.js

/* eslint-disable no-sequences */
import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import Decimal from 'decimal.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenuSansNumero, randint, resolutionSystemeLineaire2x2 } from '../../modules/outils.js'
import { courbe, repere } from '../../modules/2d.js'
export const titre = 'Lire les antécédents d\'un nombre à partir d\'un graphique'

/**
* Un graphique étant tracé, déterminer les antécédents de nombres donnés.
* La fonction est un polynôme de degré 1, 2 ou 3 et les nombres des questions ne sont que des entiers.
*
* @author Rémi Angot
* 3F13
*/
export const uuid = '8117d'
export const ref = '3F13'
export default function AntecedentGraphique () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.sup = 2
  this.spacing = 1
  context.isHtml ? this.spacingCorr = 3 : this.spacingCorr = 1
  this.nbQuestions = 1
  this.nbQuestionsModifiable = false
  this.nbCols = 1

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.contenu = '' // Liste de questions
    this.contenuCorrection = '' // Liste de questions corrigées
    let a, b, c, x1, x2, x3, fx1, fx2, fx3, numa, dena, numb, denb, texte, texteCorr, f
    this.sup = Number(this.sup)

    function initialiseVariables () {
      if (context.isHtml) { // repère -10 || 10
        x1 = randint(-6, -3)
        x2 = randint(x1 + 3, 2)
        x3 = randint(1, 8)
        fx1 = randint(-5, 5)
        fx2 = randint(-6, 6, fx1)
        fx3 = randint(-5, 5)
        c = randint(-5, 5)
      } else { // repère -5 || 5
        x1 = randint(-4, -2)
        x2 = randint(-1, 2, [0])
        x3 = randint(1, 4)
        fx1 = randint(-4, 4)
        fx2 = randint(-4, 4, fx1)
        fx3 = randint(-4, 4)
        c = randint(-3, 3)
      }
    };

    initialiseVariables()

    texte = 'On a tracé ci-dessous la courbe représentative de la fonction $f$.<br>'

    if (this.sup === 1) {
      a = new Decimal(fx2 - fx1).div(x2 - x1)
      b = a.mul(x1).sub(fx1)
      f = x => a * x - b
      if (fx2 !== fx1) {
        texte += `Déterminer par lecture graphique les antécédents de $${fx1}$ et de $${fx2}$ par cette fonction $f$.<br><br>`
        texteCorr = `L'antécédent de $${fx1}$ est $${x1}$, on note $f(${x1})=${fx1}$.<br>`
        texteCorr += `L'antécédent de $${fx2}$ est $${x2}$, on note $f(${x2})=${fx2}$.`
      } else {
        texte += `Déterminer par lecture graphique les antécédents de $${fx1}$ par cette fonction $f$.<br><br>`
        texteCorr = `$${fx1}$ possède une infinité d'antécédents : on note $f(x)=${fx1}$ quel que soit $x$.<br>`
      }
    }

    if (this.sup === 2) {
      if (randint(1, 4) < 2) { // une fois sur 4 il n'y a qu'un seul antécédent
        const x0 = randint(-2, 2)
        let fx0 = randint(-4, 4)
        if (!context.isHtml) {
          fx0 = randint(-2, 2)
        }
        a = randint(-3, 3, 0)
        texte += `Déterminer par lecture graphique le (ou les) antécédent(s) de $${fx0}$ par cette fonction $f$.<br><br>`
        texteCorr = `$${fx0}$ a un unique antécédent $${x0}$, on note $f(${x0})=${fx0}$.<br>`
        f = x => a * (x - x0) ** 2 + fx0
      } else {
        fx3 = fx1;
        [[numa, dena], [numb, denb]] = resolutionSystemeLineaire2x2(x1, x3, fx1, fx3, c)
        while (dena === 0 || denb === 0 || numa === 0) {
          x1 = randint(-4, -1)
          x3 = randint(1, 4)
          fx1 = randint(-7, 7)
          fx3 = fx1
          c = randint(-6, 6);
          [[numa, dena], [numb, denb]] = resolutionSystemeLineaire2x2(x1, x3, fx1, fx3, c)
        }
        a = new Decimal(numa).div(dena)
        b = new Decimal(numb).div(denb)
        x2 = 0
        fx2 = c
        f = x => a * x ** 2 + b * x + c
        texte += `Déterminer par lecture graphique le (ou les) antécédent(s) de $${fx1}$ par cette fonction $f$.<br><br>`
        texteCorr = `$${fx1}$ a deux antécédents $${x1}$ et $${x3}$, on note $f(${x1})=f(${x3})=${fx1}$.<br>`
      }
    }
    const r = repere({ xMin: -10, xMax: 10, yMin: -10, yMax: 10 })
    const Cf = courbe(f, { repere: r, step: 0.2, color: 'purple' })
    texte += mathalea2d({ xmin: -10, xmax: 10, ymin: -10, ymax: 10, scale: 0.5 }, r, Cf)
    this.listeQuestions.push(texte)
    this.listeCorrections.push(texteCorr)
    listeQuestionsToContenuSansNumero(this)
  }

  this.besoinFormulaireNumerique = ['Type de fonctions', 2, '1 : Affine\n2 : Polynôme du 2nd degré']
}