exercices/2e/2F20-1.js

import Exercice from '../Exercice.js'
import { fraction, obtenirListeFractionsIrreductibles, obtenirListeFractionsIrreductiblesFaciles } from '../../modules/fractions.js'
import {
  listeQuestionsToContenu, reduireAxPlusB, simplificationDeFractionAvecEtapes, reduirePolynomeDegre3, rienSi1, randint, texteCentre, combinaisonListes, ecritureAlgebrique, choice,
  ecritureParentheseSiNegatif, pgcd
} from '../../modules/outils.js'
export const titre = 'Montrer qu\'un point appartient ou non à une courbe'

/**
* Répondre à des questions sur les fonctions.
* 11/ 2021
* @author Gilles Mora
* 3F10-1
*/
export const uuid = '36795'
export const ref = '2F20-1'
export default function PointSurCourbe () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.sup = 1
  this.sup2 = 1
  this.consigne = ''
  this.correctionDetailleeDisponible = true
  this.correctionDetaillee = false
  this.spacing = 1
  this.nbQuestions = 2
  this.nbQuestionsModifiable = true
  this.nouvelleVersion = function () {
    this.autoCorrection = []
    this.sup = parseInt(this.sup)
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    let typesDeQuestionsDisponibles
    switch (this.sup) {
      case 1:
        typesDeQuestionsDisponibles = ['affine']
        break
      case 2:
        typesDeQuestionsDisponibles = ['polynôme']
        break
      case 3:
        typesDeQuestionsDisponibles = ['a/x+b']
        break
      case 4:
        typesDeQuestionsDisponibles = ['affine', 'polynôme', 'a/x+b']
        break

       //
    }
    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
    let sousChoix
    if (parseInt(this.sup2) === 1) {
      sousChoix = combinaisonListes([0], this.nbQuestions) // pour choisir aléatoirement des questions dans chaque catégorie
    } else if (parseInt(this.sup2) === 2) {
      sousChoix = combinaisonListes([1], this.nbQuestions)
    } else {
      sousChoix = combinaisonListes([0, 1], this.nbQuestions)
    }
    for (let i = 0, texte, texteCorr, x, y, a, b, c, abs, f, ord, fc, f1, f2, fa, fb, fractionb, fractionb2, fractionc, enonce, correction, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      // on ne choisit que des nombres compris entre 1 et 20
      x = randint(-9, 9, [0, 1, -1])
      y = randint(-9, 9, [x, 0])

      switch (listeTypeDeQuestions[i]) {
        case 'affine':
          switch (sousChoix[i]) { //
            case 0:
              a = randint(-9, 9, [0, 1])
              b = randint(-9, 9, 0)
              abs = randint(-9, 9)
              ord = choice([a * abs + b, a * (abs + 1) + b])
              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}$ par :
              ${texteCentre(`$f(x)=${reduireAxPlusB(a, b)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A(${abs}; ${ord})$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>
               `
              }
              if (ord === a * abs + b) {
                correction += `$${abs}$ est bien dans l'ensemble de définition de $f$ et :<br>
                   $f(x_A)=f(${abs})=${a}\\times ${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(b)}=${ord}=y_A$.<br>
                L'image de $${abs}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
              } else {
                correction += `$${abs}$ est bien dans l'ensemble de définition de $f$ et :<br> 
                  $f(x_A)=f(${abs})=${a}\\times ${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(b)}=${a * abs + b}\\neq${ord}$.<br>
                L'image de $${abs}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$.`
              }

              break
            case 1:
              a = randint(-9, 9, [0, 1])
              b = randint(-9, 9, 0)
              f = choice(obtenirListeFractionsIrreductibles())
              f1 = fraction(a * f.n + b * f.d, f.d)// ordonnée de A
              f2 = fraction(a * f.n + b * f.d + 1, f.d)// une autre ordonnée
              fc = choice([f1, f2])
              fractionb = fraction(b * f1.d, f1.d)
              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}$ par :
              ${texteCentre(`$f(x)=${reduireAxPlusB(a, b)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A\\left(${f.texFraction}; ${fc.texFractionSimplifiee}\\right)$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>
               `
              }
              if (fc === f1) {
                correction += `$${f.texFraction}$ est bien dans l'ensemble de définition de $f$ et  : <br>
                $f(x_A)=f\\left(${f.texFraction}\\right)=$`
                if (a === -1) {
                  correction += `$${rienSi1(a)}${f.texFraction}${ecritureAlgebrique(b)}=
                  ${rienSi1(a)}${f.texFraction}${fractionb.ecritureAlgebrique} =
                  \\dfrac{${rienSi1(a)}${f.n}${ecritureAlgebrique(b * f.d)}}{${f.d}}=
               ${f1.texFraction}${simplificationDeFractionAvecEtapes(a * f.n + b * f.d, f.d)}=y_A$.<br>
               L'image de $${f.texFraction}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                } else {
                  correction += `$${a}\\times ${f.texFraction}${ecritureAlgebrique(b)}=
                  ${a}\\times${f.texFraction}${fractionb.ecritureAlgebrique} =
                  \\dfrac{${a}\\times${f.n}${ecritureAlgebrique(b * f.d)}}{${f.d}}=
               ${f1.texFraction}${simplificationDeFractionAvecEtapes(a * f.n + b * f.d, f.d)}=y_A$.<br>
               L'image de $${f.texFraction}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                }
              } else {
                correction += `$${f.texFraction}$ est bien dans l'ensemble de définition de $f$ et  : <br>
              $f(x_A)=f\\left(${f.texFraction}\\right)=$`
                if (a === -1) {
                  correction += `$${rienSi1(a)}${f.texFraction}${ecritureAlgebrique(b)}=
                ${rienSi1(a)}${f.texFraction}${fractionb.ecritureAlgebrique} =
                \\dfrac{${rienSi1(a)}${f.n}${ecritureAlgebrique(b * f.d)}}{${f.d}}=
             ${f.texFraction}${simplificationDeFractionAvecEtapes(a * f.n + b * f.d, f.d)}\\neq${f2.texFractionSimplifiee}$.<br>
             L'image de $${f.texFraction}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$.`
                } else {
                  correction += `$${a}\\times ${f.texFraction}${ecritureAlgebrique(b)}=
                ${a}\\times${f.texFraction}${fractionb.ecritureAlgebrique} =
                \\dfrac{${a}\\times${f.n}${ecritureAlgebrique(b * f1.d)}}{${f1.d}}=
             ${f1.texFraction}${simplificationDeFractionAvecEtapes(a * f.n + b * f.d, f.d)}\\neq${f2.texFractionSimplifiee}$.<br>
             L'image de $${f.texFraction}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$.`
                }
              }
              break
          }
          break
        case 'polynôme':
          switch (sousChoix[i]) { // ax^2+bx+c
            case 0:
              a = randint(-9, 9, 0)
              b = randint(-9, 9, 0)
              c = randint(-9, 9)
              abs = randint(-9, 9)
              ord = choice([a * abs ** 2 + b * abs + c, a * abs ** 2 + b * abs + c - 1])
              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}$ par :
              ${texteCentre(`$f(x)=${reduirePolynomeDegre3(0, a, b, c)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A(${abs}; ${ord})$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>
               `
              }
              if (ord === a * abs ** 2 + b * abs + c) {
                correction += `$${abs}$ est bien dans l'ensemble de définition de $f$ et :<br> `
                if (a !== 1) {
                  correction += `$f(x_A)=f(${abs})=${a}\\times ${ecritureParentheseSiNegatif(abs)}^2${ecritureAlgebrique(b)}\\times${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(c)} 
                =${a * abs ** 2}${ecritureAlgebrique(b * abs)}${ecritureAlgebrique(c)}=${ord}=y_A$.<br>
                L'image de $${abs}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                } else {
                  correction += `$f(x_A)=f(${abs})= ${ecritureParentheseSiNegatif(abs)}^2${ecritureAlgebrique(b)}\\times${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(c)} 
                =${a * abs ** 2}${ecritureAlgebrique(b * abs)}${ecritureAlgebrique(c)}=${ord}=y_A$.<br>
                L'image de $${abs}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                }
              } else {
                correction += `$${abs}$ est bien dans l'ensemble de définition de $f$ et :<br> `
                if (a !== 1) {
                  correction += ` 
                $f(x_A)=f(${abs})=${a}\\times ${ecritureParentheseSiNegatif(abs)}^2${ecritureAlgebrique(b)}\\times${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(c)} 
                =${a * abs ** 2}${ecritureAlgebrique(b * abs)}${ecritureAlgebrique(c)}=${a * abs ** 2 + b * abs + c}\\neq${ord}$.<br>
                L'image de $${abs}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
                } else {
                  correction += ` $f(x_A)=f(${abs})= ${ecritureParentheseSiNegatif(abs)}^2${ecritureAlgebrique(b)}\\times${ecritureParentheseSiNegatif(abs)}${ecritureAlgebrique(c)} 
                =${a * abs ** 2}${ecritureAlgebrique(b * abs)}${ecritureAlgebrique(c)}=${a * abs ** 2 + b * abs + c}\\neq${ord}$.<br>
                L'image de $${abs}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
                }
              }
              break

            case 1:// ax^2+bx+c
              a = randint(-2, 2, 0)
              b = randint(-4, 4)
              c = randint(-4, 4, 0)
              f = choice(obtenirListeFractionsIrreductiblesFaciles())
              f1 = fraction(a * f.n ** 2 + b * f.n * f.d + c * f.d ** 2, f.d ** 2)// ordonnée de A
              f2 = fraction(a * f.n ** 2 + b * f.n * f.d + c * f.d ** 2 - 1, f.d ** 2)
              fc = choice([f1, f2])
              fractionb = fraction(b * f.n, f.d)
              fractionb2 = fraction(b * f.n * f.d, f.d ** 2)
              fractionc = fraction(c * f.d ** 2, f.d ** 2)
              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}$ par :
              ${texteCentre(`$f(x)=${reduirePolynomeDegre3(0, a, b, c)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A\\left(${f.texFraction}; ${fc.texFractionSimplifiee}\\right)$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>`
              }
              if (a !== 1) {
                correction += `$${f.texFraction}$ est bien dans l'ensemble de définition de $f$ et :<br> 
                $f(x_A)=f\\left(${f.texFraction}\\right)=${a}\\times \\left(${f.texFraction}\\right)^2$`
                if (b === 0) {
                  correction += `$${ecritureAlgebrique(c)} 
                =\\dfrac{${a}\\times ${f.n ** 2}}{${f.d ** 2}}${ecritureAlgebrique(c)}
                =\\dfrac{${a * f.n ** 2}}{${f.d ** 2}}${fractionc.ecritureAlgebrique}=\\dfrac{${a * f.n ** 2 + fractionc.n}}{${f.d ** 2}}
                ${simplificationDeFractionAvecEtapes(a * f.n ** 2 + fractionb2.n + fractionc.n, f.d ** 2)}$`
                } else {
                  correction += `$${ecritureAlgebrique(b)}\\times${f.texFraction}${ecritureAlgebrique(c)} 
                  =\\dfrac{${a}\\times ${f.n ** 2}}{${f.d ** 2}}${fractionb.ecritureAlgebrique}${ecritureAlgebrique(c)}
                  =\\dfrac{${a * f.n ** 2}}{${f.d ** 2}}${fractionb2.ecritureAlgebrique}${fractionc.ecritureAlgebrique}=\\dfrac{${a * f.n ** 2 + fractionb2.n + fractionc.n}}{${f.d ** 2}}
                ${simplificationDeFractionAvecEtapes(a * f.n ** 2 + fractionb2.n + fractionc.n, f.d ** 2)}$`
                }
                if (fc === f1) {
                  correction += `$=y_A$.<br>
                  L'image de $${f.texFraction}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                } else {
                  correction += `$\\neq${fc.texFractionSimplifiee}$.<br>
                                 L'image de $${f.texFraction}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
                }
              } else {
                correction += `$${f.texFraction}$ est bien dans l'ensemble de définition de $f$ et :<br> 
                $f(x_A)=f\\left(${f.texFraction}\\right)=\\left(${f.texFraction}\\right)^2$`
                if (b === 0) {
                  correction += `$${ecritureAlgebrique(c)} 
                =\\dfrac{${f.n ** 2}}{${f.d ** 2}}${ecritureAlgebrique(c)}
                =\\dfrac{${f.n ** 2}}{${f.d ** 2}}${fractionc.ecritureAlgebrique}=\\dfrac{${a * f.n ** 2 + fractionc.n}}{${f.d ** 2}}
                ${simplificationDeFractionAvecEtapes(a * f.n ** 2 + fractionb2.n + fractionc.n, f.d ** 2)}$`
                } else {
                  correction += `           
               $${ecritureAlgebrique(b)}\\times${f.texFraction}${ecritureAlgebrique(c)}
                =\\dfrac{ ${f.n ** 2}}{${f.d ** 2}}${fractionb.ecritureAlgebrique}${ecritureAlgebrique(c)}
                =\\dfrac{${a * f.n ** 2}}{${f.d ** 2}}${fractionb2.ecritureAlgebrique}${fractionc.ecritureAlgebrique}
                =\\dfrac{${a * f.n ** 2 + fractionb2.n + fractionc.n}}{${f.d ** 2}}
                ${simplificationDeFractionAvecEtapes(a * f.n ** 2 + fractionb2.n + fractionc.n, f.d ** 2)}$
                  `
                }
                if (fc === f1) {
                  correction += `$=y_A$.<br>
                  L'image de $${f.texFraction}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
                } else {
                  correction += `$\\neq${fc.texFractionSimplifiee}$.<br>
                                 L'image de $${f.texFraction}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
                }
              }

              break
          }
          break
        case 'a/x+b':

          switch (sousChoix[i]) { // sousChoix[i] = randint(0, 5)
            case 0:
              a = randint(-9, 9, 0)
              b = randint(-9, 9, 0)
              abs = randint(-9, 9, [0, 1, -1])
              while (pgcd(a, abs) !== 1) { a = randint(-9, 9, 0) }
              f1 = fraction(a + b * abs, abs)// ordonnée de A
              f2 = fraction(a + b * abs + 1, abs)
              fa = fraction(a, abs)
              fb = fraction(b * abs, abs)
              fc = choice([f1, f2])

              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}^*$ par :
              ${texteCentre(`$f(x)=\\dfrac{${a}}{x}${ecritureAlgebrique(b)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A\\left(${abs}; ${fc.texFractionSimplifiee}\\right)$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>`
              }
              correction += `$${abs}$ est bien dans l'ensemble de définition de $f$ et : <br> 
                              $f(x_A)=f(${abs})=\\dfrac{${a}}{${abs}}${ecritureAlgebrique(b)}
              =${fa.texFractionSimplifiee}${ecritureAlgebrique(b)}
              =${fa.texFractionSimplifiee}${fb.ecritureAlgebrique}=${f1.texFractionSimplifiee}
              $`
              if (fc === f1) {
                correction += `$=y_A$.<br>
                L'image de $${abs}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
              } else {
                correction += `$\\neq${fc.texFractionSimplifiee}$.<br>
                               L'image de $${abs}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
              }

              break

            case 1:
              a = randint(-9, 9, 0)
              b = randint(-9, 9, 0)
              abs = choice(obtenirListeFractionsIrreductiblesFaciles())

              f1 = fraction(a * abs.d + b * abs.n, abs.n)// ordonnée de A
              f2 = fraction(a * abs.d + b * abs.n - 1, abs.n)
              fa = fraction(a * abs.d, abs.n)
              fb = fraction(b * abs.n, abs.n)
              fc = choice([f1, f2])

              enonce = `Soit $f$ la fonction définie sur $\\mathbb{R}^*$ par :
              ${texteCentre(`$f(x)=\\dfrac{${a}}{x}${ecritureAlgebrique(b)}$`)}  
              On note $\\mathscr{C}_f$ la courbe représentative de la fonction $f$ dans un repère.<br>
              Le point $A\\left(${abs.texFractionSimplifiee}; ${fc.texFractionSimplifiee}\\right)$ appartient-il à $\\mathscr{C}_f$ ? Justifier.`
              correction = ''
              if (this.correctionDetaillee) {
                correction += `Un point de coordonnées $(x;y)$ est sur la courbe représentative d'une fonction $f$ si et seulement si :<br>
              $\\bullet$  $x$ appartient à l'ensemble de définition de $f$ <br>
              et <br>
              $\\bullet$ l'ordonnée $y$ du point est l'image de son abscisse, c'est à dire $y=f(x)$.<br>`
              }
              correction += `$${abs.texFractionSimplifiee}$ est bien dans l'ensemble de définition de $f$ et :<br> 
              $f(x_A)=f\\left(${abs.texFractionSimplifiee}\\right)
              =\\dfrac{${a}}{${abs.texFractionSimplifiee}}${ecritureAlgebrique(b)}
              =${a}\\times \\dfrac{${abs.d}}{${abs.n}}${ecritureAlgebrique(b)}=
              ${fa.texFractionSimplifiee}${ecritureAlgebrique(b)}
              =${f1.texFractionSimplifiee}
              $`
              if (fc === f1) {
                correction += `$=y_A$.<br>
                L'image de $${abs.texFractionSimplifiee}$ est bien l'ordonnée du point $A$, donc le point $A$ est sur $\\mathscr{C}_f$.`
              } else {
                correction += `$\\neq${fc.texFractionSimplifiee}$.<br>
                               L'image de $${abs.texFractionSimplifiee}$ n'est pas l'ordonnée du point $A$, donc le point $A$ n'est pas sur $\\mathscr{C}_f$`
              }
              break
          }
          break
      }

      texte = enonce
      texteCorr = correction

      if (this.questionJamaisPosee(i, listeTypeDeQuestions[i], x, y, sousChoix[i])) {
        // Si la question n'a jamais été posée, on en créé une autre
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
  this.besoinFormulaireNumerique = [
    'Choix des questions',
    4,
    '1 : Fonction affine\n2 : Polynome de degré 2 \n3 : Fonction a/x+b \n4 : Mélange'
  ]
  this.besoinFormulaire2Numerique = ['Choix des questions', 3, '1 : Abscisse du point A entière\n2 : Abscisse du point A fractionnaire\n3 : Mélange']
}