exercices/2e/2F10-7.js

import Exercice from '../Exercice.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { combinaisonListes, listeQuestionsToContenu, randint, choice, numAlpha, texNombre, ecritureAlgebrique } from '../../modules/outils.js'
import Decimal from 'decimal.js'
import { tableauDeVariation } from '../../modules/TableauDeVariation.js'
export const dateDePublication = '01/10/2022'
export const titre = 'Dresser et utiliser le tableau de signes d\'une fonction affine en lien avec son sens de variation'

/**
* @author Gilles Mora
* 2F10-7
*/

export const uuid = '46bec'
export const ref = '2F10-7'
export default function SignefonctionaffineVariation () {
  Exercice.call(this)
  this.titre = titre
  this.consigne = ''
  this.nbQuestions = 2 // On complète le nb de questions
  this.nbCols = 1
  this.nbColsCorr = 1
  this.video = ''
  this.spacing = 1.75
  this.spacingCorr = 1.75
  this.sup = 1
  this.listePackages = ['tkz-tab']
  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.listeQuestions = []
    this.listeCorrections = []
    this.sup = parseInt(this.sup)
    let typeDeQuestionsDisponibles
    if (this.sup === 1) {
      typeDeQuestionsDisponibles = ['Signes1']
    } else if (this.sup === 2) {
      typeDeQuestionsDisponibles = ['Signes2']
    } else if (this.sup === 3) {
      typeDeQuestionsDisponibles = ['Signes1', 'Signes2']
    }
    const nomF = [
      ['f'], ['g'], ['h'], ['u'],
      ['v'], ['w']
    ]
    const listeTypeQuestions = combinaisonListes(typeDeQuestionsDisponibles, this.nbQuestions)
    for (let i = 0, a, b, nom, sol, ligne1, choix, x, y, x1, x2, texte, texteCorr, cpt = 0;
      i < this.nbQuestions && cpt < 50;) { // on rajoute les variables dont on a besoin
      switch (listeTypeQuestions[i]) {
        case 'Signes1':
          choix = choice([0, 1])
          if (choix === 0) {
            nom = choice(nomF)
            a = choice([1, 2, 5, 10]) * choice([-1, 1])// coefficient a de la fonction affine
            b = randint(1, 15) * choice([-1, 1])// coefficient b de la fonction affine
            sol = new Decimal(-b).div(a)

            texte = `Une fonction affine $${nom}$  définie sur $\\mathbb R$ est strictement ${a > 0 ? 'croissante' : 'décroissante'}. De plus $${nom}(${texNombre(sol, 1)})=0$.<br>
        ${numAlpha(0)} Dresser son tableau de signes sur $\\mathbb R$.<br>
        ${numAlpha(1)} Donner une fonction $${nom}$ vérifiant les conditions précédentes.`
            texteCorr = `${numAlpha(0)} $${nom}$ est une fonction affine. Elle s'écrit donc sous la forme $${nom}(x)=ax+b$. <br>
        Puisque $${nom}$ est strictement ${a > 0 ? 'croissante' : 'décroissante'} sur $\\mathbb R$, les images sont ${a > 0 ? 'd\'abord négatives, puis positives' : 'd\'abord positives, puis négatives'}.<br>
        Sachant que $${nom}$ s'annule en $${texNombre(sol, 1)}$, le changement de signe intervient donc en $x=${texNombre(sol, 1)}$. <br>
        On obtient ainsi le tableau de signes suivant : <br>
         `
            if (a > 0) {
              ligne1 = ['Line', 10, '', 0, '-', 20, 'z', 20, '+']
            } else {
              ligne1 = ['Line', 10, '', 0, '+', 20, 'z', 20, '-']
            }

            texteCorr += mathalea2d({ xmin: -0.5, ymin: -5.1, xmax: 30, ymax: 0.1, scale: 0.5 }, tableauDeVariation({
              tabInit: [
                [
                // Première colonne du tableau avec le format [chaine d'entête, hauteur de ligne, nombre de pixels de largeur estimée du texte pour le centrage]
                  ['$x$', 1.5, 10], [`$${nom}(x)$`, 2, 50]
                ],
                // Première ligne du tableau avec chaque antécédent suivi de son nombre de pixels de largeur estimée du texte pour le centrage
                ['$-\\infty$', 20, `$${texNombre(sol, 1)}$`, 20, '$+\\infty$', 30]
              ],
              // tabLines ci-dessous contient les autres lignes du tableau.
              tabLines: [ligne1],
              colorBackground: '',
              espcl: 3.5, // taille en cm entre deux antécédents
              deltacl: 0.8, // distance entre la bordure et les premiers et derniers antécédents
              lgt: 5, // taille de la première colonne en cm
              hauteurLignes: [15, 15]
            }))

            texteCorr += `<br> ${numAlpha(1)} La fonction doit vérifier les trois conditions : <br>
        $\\bullet$ être une fonction affine ; <br>
        $\\bullet$ être strictement ${a > 0 ? 'croissante' : 'décroissante'} ;<br>
        $\\bullet$ s'annuler en $${texNombre(sol, 1)}$.<br>
       Comme $${nom}$ est une fonction ${a > 0 ? 'croissante' : 'décroissante'}, on doit choisir un coefficient directeur 
       $a$ ${a > 0 ? 'positif' : 'négatif'}.<br>
       Prenons ${a > 0 ? '$a=1$' : '$a=-1$'}.<br>
       $${nom}$ est alors de la forme : $${nom}(x)=${a > 0 ? '' : '-'}x + b$.<br>
       On cherche maintenant $b$ : <br>
       Comme on sait que : $${nom}(${texNombre(sol, 1)})=0$, on en déduit :
        $${nom}(${texNombre(sol, 1)})=${a > 0 ? `${texNombre(sol, 1)}` : `${texNombre(-sol, 1)}`}   + b=0$.<br>
       d'où $b=${a > 0 ? `${texNombre(-sol, 1)}` : `${texNombre(sol, 1)}`}$.<br>
       On obtient la fonction $${nom}$ définie par $${nom}(x)=${a > 0 ? '' : '-'}x${a > 0 ? `${ecritureAlgebrique(-sol, 1)}` : `${ecritureAlgebrique(sol, 1)}`}$.<br>
       En partant d'une autre valeur pour $a$, on aurait obtenu une autre expression pour $${nom}$.<br>
       Il existe une infinité de fonctions qui possèdent ces trois propriétés. <br>
       Toutes les fonctions de la forme $${nom}(x)= k\\times\\left( ${a > 0 ? '' : '-'}x${a > 0 ? `${ecritureAlgebrique(-sol, 1)}` : `${ecritureAlgebrique(sol, 1)}`}\\right)$ avec $k$ un réel non-nul est solution de l'exercice.
       
       `
          }
          if (choix === 1) {
            nom = choice(nomF)
            a = randint(-5, 5, 0)// coefficient b de la fonction affine
            b = a * randint(-9, 9, 0)// coefficient a de la fonction affine
            sol = -b / a
            x = randint(-10, 10, sol)
            y = a * x + b

            texte = `Une fonction affine $${nom}$  définie sur $\\mathbb R$ vérifie $${nom}(${texNombre(sol, 1)})=0$ et $${nom}(${x})=${y}$.<br>
           Dresser son tableau de signes sur $\\mathbb R$. Justifier.
         `
            if (x > sol) {
              texteCorr = ` $${nom}$ est une fonction affine (non constante, puisque $${nom}(${x})\\neq ${nom}(${texNombre(sol, 1)})$), elle 
          est donc soit strictement croissante, soit strictement décroissante.<br>
         On observe que $${sol}<${x}$ implique ${a > 0 ? `$${nom}(${sol}) < ${nom}(${x})$` : `$${nom}(${sol}) > ${nom}(${x})$`}.<br>
          Les images et les antécédents sont donc rangés ${a > 0 ? 'dans le même ordre' : 'dans l\'ordre inverse'}.<br>
          On en déduit que la fonction $${nom}$ est${a > 0 ? 'croissante' : 'décroissante'} sur $\\mathbb R$.<br>
          Les images sont donc ${a > 0 ? 'd\'abord négatives, puis positives' : 'd\'abord positives, puis négatives'}.<br>
          Sachant que $${nom}$ s'annule en $${texNombre(sol, 1)}$, le changement de signe intervient donc en $x=${texNombre(sol, 1)}$. <br>
          On obtient ainsi le tableau de signes suivant : <br>
           `
            } else {
              texteCorr = ` $${nom}$ est une fonction affine (non constante, puisque $${nom}(${x})\\neq ${nom}(${texNombre(sol, 1)})$), elle 
           est donc soit strictement croissante, soit strictement décroissante.<br>
           On observe que $${x}<${sol}$ implique ${a > 0 ? `$${nom}(${x}) < ${nom}(${sol})$` : `$${nom}(${x}) > ${nom}(${sol})$`}.<br>
          Les images et les antécédents sont donc rangés ${a > 0 ? 'dans le même ordre' : 'dans l\'ordre inverse'}.<br>
          On en déduit que la fonction $${nom}$ est${a > 0 ? 'croissante' : 'décroissante'} sur $\\mathbb R$.<br>
                  
           Les images sont ${a > 0 ? 'd\'abord négatives, puis positives' : 'd\'abord positives, puis négatives'}.<br>
           Sachant que $${nom}$ s'annule en $${texNombre(sol, 1)}$, le changement de signe intervient donc en $x=${texNombre(sol, 1)}$. <br>
           On obtient ainsi le tableau de signes suivant : <br>
            `
            }
            if (a > 0) {
              ligne1 = ['Line', 10, '', 0, '-', 20, 'z', 20, '+']
            } else {
              ligne1 = ['Line', 10, '', 0, '+', 20, 'z', 20, '-']
            }

            texteCorr += mathalea2d({ xmin: -0.5, ymin: -5.1, xmax: 30, ymax: 0.1, scale: 0.5 }, tableauDeVariation({
              tabInit: [
                [
                // Première colonne du tableau avec le format [chaine d'entête, hauteur de ligne, nombre de pixels de largeur estimée du texte pour le centrage]
                  ['$x$', 1.5, 10], [`$${nom}(x)$`, 2, 50]
                ],
                // Première ligne du tableau avec chaque antécédent suivi de son nombre de pixels de largeur estimée du texte pour le centrage
                ['$-\\infty$', 20, `$${texNombre(sol, 1)}$`, 20, '$+\\infty$', 30]
              ],
              // tabLines ci-dessous contient les autres lignes du tableau.
              tabLines: [ligne1],
              colorBackground: '',
              espcl: 3.5, // taille en cm entre deux antécédents
              deltacl: 0.8, // distance entre la bordure et les premiers et derniers antécédents
              lgt: 5, // taille de la première colonne en cm
              hauteurLignes: [15, 15]
            }))
          }
          break
        case 'Signes2':

          a = randint(-5, 5, 0)// coefficient b de la fonction affine
          b = a * randint(-6, 6, 0)// coefficient a de la fonction affine
          sol = -b / a
          nom = choice(nomF)
          if (choice([true, false])) {
            x1 = randint(sol + 1, 10)
            x2 = randint(sol + 1, 10, x1)
          } else {
            x1 = randint(-10, sol - 1)
            x2 = randint(-10, sol - 1, x1)
          }
          texte = `On donne le tableau de signes d'une fonction affine  $${nom}$  définie sur $\\mathbb R$ :<br>`
          if (a > 0) {
            ligne1 = ['Line', 10, '', 0, '-', 20, 'z', 20, '+']
          } else {
            ligne1 = ['Line', 10, '', 0, '+', 20, 'z', 20, '-']
          }

          texte += mathalea2d({ xmin: -0.5, ymin: -5.1, xmax: 30, ymax: 0.1, scale: 0.5 }, tableauDeVariation({
            tabInit: [
              [
              // Première colonne du tableau avec le format [chaine d'entête, hauteur de ligne, nombre de pixels de largeur estimée du texte pour le centrage]
                ['$x$', 1.5, 10], [`$${nom}(x)$`, 2, 50]
              ],
              // Première ligne du tableau avec chaque antécédent suivi de son nombre de pixels de largeur estimée du texte pour le centrage
              ['$-\\infty$', 20, `$${texNombre(sol, 1)}$`, 20, '$+\\infty$', 30]
            ],
            // tabLines ci-dessous contient les autres lignes du tableau.
            tabLines: [ligne1],
            colorBackground: '',
            espcl: 3.5, // taille en cm entre deux antécédents
            deltacl: 0.8, // distance entre la bordure et les premiers et derniers antécédents
            lgt: 5, // taille de la première colonne en cm
            hauteurLignes: [15, 15]
          }))
          texte += `<br> ${numAlpha(0)} Donner le sens de varitions de $${nom}$ sur $\\mathbb R$.<br>
        ${numAlpha(1)} Comparer $${nom}(${x1})$ et $${nom}(${x2})$.`
          texteCorr = `${numAlpha(0)} D'après le tableau de signes, les images sont  ${a > 0 ? 'd\'abord négatives, puis positives' : 'd\'abord positives, puis négatives'}.<br>
        On en déduit que la fonction $${nom}$ est ${a > 0 ? 'strictement croissante' : 'strictement décroissante'} sur $\\mathbb R$.<br>`
          texteCorr += `${numAlpha(1)} Comme $${nom}$ est une fonction affine ${a > 0 ? 'strictement croissante' : 'strictement décroissante'}, 
          les antécédents et les images sont rangées ${a > 0 ? 'dans le même ordre' : 'dans l\'ordre inverse'}. <br>
         `
          if (x2 > x1) {
            texteCorr += ` Comme $${x1} < ${x2}$, alors  ${a > 0 ? `$${nom}(${x1}) < ${nom}(${x2})$` : `$${nom}(${x1}) > ${nom}(${x2})$`}
         `
          } else {
            texteCorr += ` Comme $${x2} < ${x1}$, alors  ${a > 0 ? `$${nom}(${x2}) < ${nom}(${x1})$` : `$${nom}(${x2}) > ${nom}(${x1})$`}
          `
          }
          break
      }
      if (this.questionJamaisPosee(i, this.sup, a, b)) {
        // 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 = ['Types de question ', 3, '1 : Donner le tableau de signes.\n2 : Utiliser le tableau de signes.\n3 : Mélange.']
}