exercices/can/3e/can3F09.js

import Exercice from '../../Exercice.js'
import { randint, listeQuestionsToContenuSansNumero, choice, sp, calcul, texFraction, rienSi1, ecritureAlgebrique, pgcd, ecritureParentheseSiNegatif } from '../../../modules/outils.js'
import { ajouteChampTexteMathLive } from '../../../modules/interactif/questionMathLive.js'
import { setReponse } from '../../../modules/gestionInteractif.js'
export const titre = 'Reconnaître une fonction affine'
export const interactifReady = true
export const interactifType = 'mathLive'

// Les exports suivants sont optionnels mais au moins la date de publication semble essentielle
export const dateDePublication = '25/10/2021' // La date de publication initiale au format 'jj/mm/aaaa' pour affichage temporaire d'un tag

/**
 * Modèle d'exercice très simple pour la course aux nombres
 * @author Gilles Mora
 * Référence can3F09
*/
export const uuid = 'b60f4'
export const ref = 'can3F09'
export default function ReconnaitreFonctionAffine () {
  Exercice.call(this) // Héritage de la classe Exercice()
  // Dans un exercice simple, ne pas mettre de this.listeQuestions = [] ni de this.consigne
  this.formatChampTexte = 'largeur15 inline'
  this.formatInteractif = 'calcul'
  this.nbQuestions = 1
  this.tailleDiaporama = 2
  this.nouvelleVersion = function () {
    this.listeCorrections = []
    this.listeQuestions = []
    let a, b, c
    switch (choice([1, 2, 3])) { //, 2, 3
      case 1 :// b+ax
        a = randint(1, 5)
        b = randint(-9, 9)
        if (a === 1) {
          if (b === 0) {
            this.listeQuestions.push(`Soit $f(x)=x$.<br>
          La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>  
          Les valeurs de $a$ et de $b$ sont  :<br> $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
            ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
            this.canEnonce = `Soit $f(x)=x$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
            this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
            this.listeCorrections.push(`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$ (attention, $x=1x$) et la valeur de $b$ est la constante. <br>
            $f(x)=\\underbrace{${a}}_{a}x$`)
          } else {
            this.listeQuestions.push(`Soit $f(x)=${b}+x$.<br>

        La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>   
        
        Les valeurs de $a$ et de $b$ sont  :<br> $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
          ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
            this.canEnonce = `Soit $f(x)=${b}+x$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
            this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
            this.listeCorrections.push(`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$ (attention, $x=1x$) et la valeur de $b$ est la constante. <br>
          $f(x)=${b}+${a}x=\\underbrace{${a}}_{a}x+\\underbrace{${ecritureParentheseSiNegatif(b)}}_{b}$`)
          }
        } else {
          if (b === 0) {
            this.listeQuestions.push(`Soit $f(x)=x$.<br>
                La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>          
                Les valeurs de $a$ et de $b$ sont  :<br>       $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
                  ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
            this.canEnonce = `Soit $f(x)=${b}+x$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=x$.`
            this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
            this.listeCorrections.push(`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$ (attention, $x=1x$) et la valeur de $b$ est la constante. <br>
                  $f(x)=\\underbrace{${a}}_{a}x$`)
          } else {
            this.listeQuestions.push(`Soit $f(x)=${b}+${a}x$.<br>
            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>  
            Les valeurs de $a$ et de $b$ sont  :<br>
       $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
         ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
            this.canEnonce = `Soit $f(x)=${b}+${a}x$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
            this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
            this.listeCorrections.push(`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$ (attention, $x=1x$) et la valeur de $b$ est la constante. <br>
        $f(x)=${b}+${a}x=\\underbrace{${a}}_{a}x+\\underbrace{${ecritureParentheseSiNegatif(b)}}_{b}$`)
          }
        }
        setReponse(this, 0, a)
        setReponse(this, 1, b)

        break
      case 2 :// a/bx +c
        a = randint(-9, 9, 0)
        b = randint(2, 10)
        c = randint(-9, 9, 0)
        while (pgcd(a, b) !== 1) { a = randint(-5, 5, 0) }
        if (a === -1) {
          this.listeQuestions.push(`Soit $f(x)=\\dfrac{-x}{${b}}${ecritureAlgebrique(c)}$.<br>

        La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>   Les valeurs de $a$ et de $b$ sont  :<br>  $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
          ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
          this.canEnonce = `Soit $f(x)=\\dfrac{-x}{${b}}${ecritureAlgebrique(c)}$.<br>
            
            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
          this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
        } else {
          this.listeQuestions.push(`Soit $f(x)=\\dfrac{${rienSi1(a)}x}{${b}}${ecritureAlgebrique(c)}$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>Les valeurs de $a$ et de $b$ sont  :<br>   $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
         ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
          this.canEnonce = `Soit $f(x)=\\dfrac{${rienSi1(a)}x}{${b}}${ecritureAlgebrique(c)}$.<br>
            
         La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
          this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
        }
        setReponse(this, 0, [`${texFraction(a, b)}`, `${texFraction(-a, -b)}`, calcul(a / b), calcul(-a / (-b))])
        setReponse(this, 1, c)
        this.listeCorrections.push(`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$ (attention, $\\dfrac{ax}{b}=\\dfrac{a}{b}x$) et la valeur de $b$ est la constante.<br>
        $f(x)=\\dfrac{${rienSi1(a)}x}{${b}}=\\underbrace{\\dfrac{${a}}{${b}}}_{a}x+\\underbrace{${ecritureParentheseSiNegatif(c)}}_{b}$`)
        break

      case 3 :// (ax+c)/b)
        a = randint(-9, 9, 0)
        b = randint(2, 10)
        c = randint(-9, 9, 0)
        while (pgcd(a, b) !== 1 | pgcd(c, b) !== 1) {
          a = randint(-9, 9, 0)
          c = randint(-9, 9, 0)
          b = randint(2, 10)
        }
        if (a === -1) {
          this.listeQuestions.push(`Soit $f(x)=\\dfrac{-x${ecritureAlgebrique(c)}}{${b}}$.<br>

        La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>   Les valeurs de $a$ et de $b$ sont  :<br>  $a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
          ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
          this.canEnonce = `Soit $f(x)=\\dfrac{-x${ecritureAlgebrique(c)}}{${b}}$.<br>
            
          La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
          this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
        } else {
          this.listeQuestions.push(`Soit $f(x)=\\dfrac{${rienSi1(a)}x${ecritureAlgebrique(c)}}{${b}}$.<br>

            La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.<br>      Les valeurs de $a$ et de $b$ sont  :<br>$a=$ ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur10 inline') + sp(2) : sp(3)} ${sp(3)} et${sp(3)} $b=$
         ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur10 inline') + sp(2) : sp(2)} `)
          this.canEnonce = `Soit $f(x)=\\dfrac{${rienSi1(a)}x${ecritureAlgebrique(c)}}{${b}}$.<br>
            
         La fonction $f$ est une fonction affine de la forme $f(x)=ax+b$.`
          this.canReponseACompleter = '$a=\\ldots $ et $b=\\ldots$'
        }
        setReponse(this, 0, [`${texFraction(a, b)}`, `${texFraction(-a, -b)}`, calcul(a / b), calcul(-a / (-b))])
        setReponse(this, 1, [`${texFraction(c, b)}`, `${texFraction(-c, -b)}`, calcul(c / b), calcul(-c / (-b))])

        this.listeCorrections = [`On identifie les valeurs de $a$ et de $b$ : la valeur de $a$ est le coefficient devant $x$  et la valeur de $b$ est la constante.<br>
        $f(x)=\\dfrac{${rienSi1(a)}x${ecritureAlgebrique(c)}}{${b}}=\\underbrace{\\dfrac{${a}}{${b}}}_{a}x+\\underbrace{\\dfrac{${c}}{${b}}}_{b}$`]
        break
    }
    listeQuestionsToContenuSansNumero(this)
  }
}