import Exercice from '../../Exercice.js'
import { mathalea2d } from '../../../modules/2dGeneralites.js'
import { randint, listeQuestionsToContenuSansNumero, sp, choice } from '../../../modules/outils.js'
import { ajouteChampTexteMathLive } from '../../../modules/interactif/questionMathLive.js'
import { setReponse } from '../../../modules/gestionInteractif.js'
import { tableauDeVariation } from '../../../modules/TableauDeVariation.js'
export const titre = 'Encadrer en utilisant un tableau de variations'
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 = '22/12/2021' // La date de publication initiale au format 'jj/mm/aaaa' pour affichage temporaire d'un tag
export const dateDeModifImportante = '24/10/2021' // Une date de modification importante 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
*/
export const uuid = 'e0405'
export const ref = 'can2F08'
export default function EncadrerTableau () {
Exercice.call(this) // Héritage de la classe Exercice()
this.nbQuestions = 1
this.formatChampTexte = 'largeur15 inline'
this.tailleDiaporama = 2
this.listePackages = ['tkz-tab']
// Dans un exercice simple, ne pas mettre de this.listeQuestions = [] ni de this.consigne
this.nouvelleVersion = function () {
this.listeQuestions = [] // Liste de questions
this.listeCorrections = [] // Liste de questions corrigées
let question1, correction1, ligne1
const x1 = randint(-20, 10)
const x2 = randint(x1 + 1, 15)
const x3 = randint(x2 + 1, 20)
const x4 = randint(x3 + 1, 25)
const y1 = randint(-10, 10)
const y2 = randint(y1 - 10, y1 - 1)
const y3 = randint(y2 + 1, y2 + 10, y1)
const y4 = randint(y3 - 10, y3 - 1, y2)
const M = Math.max(y1, y3)
const m = Math.min(y2, y4)
const choix = randint(1, 2)
if (choix === 1) {
ligne1 = ['Var', 10, `+/$${y1}$`, 10, `-/$${y2}$`, 10, `+/$${y3}$`, 10, `-/$${y4}$`, 10]
} else {
ligne1 = ['Var', 10, `-/$${-y1}$`, 10, `+/$${-y2}$`, 10, `-/$${-y3}$`, 10, `+/$${-y4}$`, 10]
}
// xmin détermine la marge à gauche, ymin la hauteur réservée pour le tableau, xmax la largeur réservée pour le tableau et ymax la marge au dessus du tableau
question1 = `Voici le tableau de variations d'une fonction $f$ définie sur $[${x1};${x4}]$ :<br>`
this.canEnonce = `Voici le tableau de variations d'une fonction $f$ définie sur $[${x1};${x4}]$ :<br>
` + mathalea2d({ xmin: -0.5, ymin: -6.1, xmax: 30, ymax: 0.1, scale: 0.4 }, 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$', 2, 10], ['$f(x)$', 4, 30]
],
// 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
[`$${x1}$`, 10, `$${x2}$`, 10, `$${x3}$`, 10, `$${x4}$`, 10]
],
// tabLines ci-dessous contient les autres lignes du tableau.
tabLines: [ligne1],
colorBackground: '',
espcl: 3, // taille en cm entre deux antécédents
deltacl: 1, // distance entre la bordure et les premiers et derniers antécédents
lgt: 3, // taille de la première colonne en cm
hauteurLignes: [15, 15]
}))
question1 += mathalea2d({ xmin: -0.5, ymin: -6.1, xmax: 30, ymax: 0.1, scale: 0.6 }, 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$', 2, 10], ['$f(x)$', 4, 30]
],
// 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
[`$${x1}$`, 10, `$${x2}$`, 10, `$${x3}$`, 10, `$${x4}$`, 10]
],
// tabLines ci-dessous contient les autres lignes du tableau.
tabLines: [ligne1],
colorBackground: '',
espcl: 3, // taille en cm entre deux antécédents
deltacl: 1, // distance entre la bordure et les premiers et derniers antécédents
lgt: 3, // taille de la première colonne en cm
hauteurLignes: [15, 15]
}))
if (choice([true, false])) {
question1 += ` <br>
Encadrer le plus précisément possible $f(x)$ lorsque
$x\\in[${x1};${x3}]$ :<br>$m=$ `
if (!this.interactif) {
question1 += '.... '
}
question1 += ` ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur15 inline') + sp(0) : sp(0)} `
question1 += '<br>$M=$ '
if (!this.interactif) {
question1 += '.... '
}
question1 += ` ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur15 inline') + sp(0) : sp(0)}`
this.canEnonce += ` <br>
Encadrer le plus précisément possible $f(x)$ lorsque
$x\\in[${x1};${x3}]$.`
this.canReponseACompleter = '$\\ldots \\leqslant f(x)\\leqslant \\ldots$'
if (choix === 1) {
if (M === y1) {
correction1 = `Sur $[${x1};${x3}]$, le minimum de $f$ est $${y2}$ et le maximum est
$${y1}$. <br>
Ainsi, pour $x\\in[${x1};${x3}]$, ${sp(3)} $${y2}\\leqslant f(x)\\leqslant ${y1}$.<br>`
setReponse(this, 0, y2)
setReponse(this, 1, y1)
} else {
correction1 = `Sur $[${x1};${x3}]$, le minimum de $f$ est $${y2}$ et le maximum est
$${y3}$. <br>
Ainsi, pour $x\\in[${x1};${x3}]$, ${sp(3)} $${y2}\\leqslant f(x)\\leqslant ${y3}$.<br>`
setReponse(this, 0, y2)
setReponse(this, 1, y3)
}
} else {
if (M === y1) {
correction1 = `Sur $[${x1};${x3}]$, le minimum de $f$ est $${-y1}$ et le maximum est
$${-y2}$. <br>
Ainsi, pour $x\\in[${x1};${x3}]$, ${sp(3)} $${-y1}\\leqslant f(x)\\leqslant ${-y2}$. `
setReponse(this, 0, -y1)
setReponse(this, 1, -y2)
} else {
correction1 = `Sur $[${x1};${x3}]$, le minimum de $f$ est $${-y3}$ et le maximum est
$${-y2}$. <br>
Ainsi, pour $x\\in[${x1};${x3}]$, ${sp(3)} $${-y3}\\leqslant f(x)\\leqslant ${-y2}$. `
setReponse(this, 0, -y3)
setReponse(this, 1, -y2)
}
}
} else {
question1 += ` <br>Encadrer le plus précisément possible $f(x)$ (en déterminant les valeurs de $m$ et de $M$ telles que $m\\leqslant f(x)\\leqslant M$) lorsque
$x\\in[${x2};${x4}]$ :<br>$m=$ `
if (!this.interactif) {
question1 += '.... '
}
question1 += ` ${this.interactif ? ajouteChampTexteMathLive(this, 0, 'largeur15 inline') + sp(0) : sp(0)} `
question1 += '<br>$M=$ '
if (!this.interactif) {
question1 += '.... '
}
question1 += ` ${this.interactif ? ajouteChampTexteMathLive(this, 1, 'largeur15 inline') + sp(0) : sp(0)}`
this.canEnonce += ` <br>Encadrer le plus précisément possible $f(x)$ (en déterminant les valeurs de $m$ et de $M$ telles que $m\\leqslant f(x)\\leqslant M$) lorsque
$x\\in[${x2};${x4}]$.`
this.canReponseACompleter = '$\\ldots \\leqslant f(x)\\leqslant \\ldots$'
if (choix === 1) {
if (m === y2) {
correction1 = `<br>Sur $[${x2};${x4}]$, le minimum de $f$ est $${y2}$ et le maximum est
$${y3}$. <br>
Ainsi, pour $x\\in[${x2};${x4}]$, ${sp(3)} $${y2}\\leqslant f(x)\\leqslant ${y3}$.`
setReponse(this, 0, y2)
setReponse(this, 1, y3)
} else {
correction1 = `<br>Sur $[${x2};${x4}]$, le minimum de $f$ est $${y4}$ et le maximum est
$${y3}$. <br>
Ainsi, pour $x\\in[${x2};${x4}]$, ${sp(3)} $${y4}\\leqslant f(x)\\leqslant ${y3}$. `
setReponse(this, 0, y4)
setReponse(this, 1, y3)
}
} else {
if (m === y2) {
correction1 = `Sur $[${x2};${x4}]$, le minimum de $f$ est $${-y3}$ et le maximum est
$${-y2}$. <br>
Ainsi, pour $x\\in[${x2};${x4}]$, ${sp(3)} $${-y3}\\leqslant f(x)\\leqslant ${-y2}$. `
setReponse(this, 0, -y3)
setReponse(this, 1, -y2)
} else {
correction1 = `<br>Sur $[${x2};${x4}]$, le minimum de $f$ est $${-y3}$ et le maximum est
$${-y4}$. <br>
Ainsi, pour $x\\in[${x2};${x4}]$, ${sp(3)} $${-y3}\\leqslant f(x)\\leqslant ${-y4}$. `
setReponse(this, 0, -y3)
setReponse(this, 1, -y4)
}
}
}
this.listeQuestions.push(question1)
this.listeCorrections.push(correction1)
listeQuestionsToContenuSansNumero(this)
}
}