import Exercice from '../../Exercice.js'
import { mathalea2d } from '../../../modules/2dGeneralites.js'
import { randint, choice, listeQuestionsToContenu } from '../../../modules/outils.js'
import { ajouteChampTexteMathLive } from '../../../modules/interactif/questionMathLive.js'
import { setReponse } from '../../../modules/gestionInteractif.js'
import { context } from '../../../modules/context.js'
import { tableauDeVariation } from '../../../modules/TableauDeVariation.js'
export const titre = 'Lire les extremums dans un tableau de variations'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCHybride'
// Les exports suivants sont optionnels mais au moins la date de publication semble essentielle
export const dateDePublication = '21/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 = 'd5b6c'
export const ref = 'can2F07'
export default function ExtremumsTableau () {
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 texte, texteCorr, ligne1
for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {
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, y2, y3, y4)
const m = Math.min(y1, y2, y3, 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]
}
texte = `Voici le tableau de variations d'une fonction $f$ définie sur $[${x1};${x4}]$ :<br>
`
texte += mathalea2d({ xmin: -0.5, ymin: -7.5, xmax: 30, ymax: 0.1, scale: 0.39 }, 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$', 3, 8], ['$f(x)$', 4, 20]
],
// 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]
})) + '<br>'
this.canEnonce = texte
if (choice([true, false])) {
texte += ' Le maximum de $f$ est : '
texte += ajouteChampTexteMathLive(this, 2 * i, 'largeur15 inline')
texte += '<br> Il est atteint en $x=$ '
texte += ajouteChampTexteMathLive(this, 2 * i + 1, 'largeur15 inline')
this.canEnonce += `<br>
Déterminer le maximum de $f$ et la valeur en laquelle il est atteint.`
this.canReponseACompleter = 'Max $=\\ldots$ atteint en $x=\\ldots$'
if (choix === 1) {
if (M === y1) {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\leqslant ${y1}$, c'est-à-dire $f(x)\\leqslant f(${x1})$.<br>
Ainsi, le maximum de $f$ est $${y1}$. Il est atteint en $x=${x1}$.`
if (!context.isAmc) {
setReponse(this, 2 * i, y1)
setReponse(this, 2 * i + 1, x1)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Maximum',
valeur: [y1],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x1],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
} else {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\leqslant ${y3}$, c'est-à-dire $f(x)\\leqslant f(${x3})$.<br>
Ainsi, le maximum de $f$ est $${y3}$. Il est atteint en $x=${x3}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, y3)
setReponse(this, 2 * i + 1, x3)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Maximum',
valeur: [y3],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x3],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
}
} else {
if (m === y2) {
texteCorr = `<br>Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\leqslant ${-y2}$, c'est-à-dire $f(x)\\leqslant f(${x2})$.<br>
Ainsi, le maximum de $f$ est $${-y2}$. Il est atteint en $x=${x2}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, -y2)
setReponse(this, 2 * i + 1, x2)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Maximum',
valeur: [-y2],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x2],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
} else {
texteCorr = `<br>Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\leqslant ${-y4}$, c'est-à-dire $f(x)\\leqslant f(${x4})$.<br>
Ainsi, le maximum de $f$ est $${-y4}$. Il est atteint en $x=${x4}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, -y4)
setReponse(this, 2 * i + 1, x4)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Maximum',
valeur: [-y4],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x4],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
}
}
} else {
texte += ' Le minimum de $f$ est : '
this.canEnonce += `<br>
Déterminer le minimum de $f$ et la valeur en laquelle il est atteint.`
this.canReponseACompleter = 'Min $=\\ldots$ atteint en $x=\\ldots$'
texte += ajouteChampTexteMathLive(this, 2 * i, 'largeur15 inline')
texte += '<br> Il est atteint en $x=$ '
texte += ajouteChampTexteMathLive(this, 2 * i + 1, 'largeur15 inline')
if (choix === 1) {
if (m === y2) {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\geqslant ${y2}$, c'est-à-dire $f(x)\\geqslant f(${x2})$.<br>
Ainsi, le minimum de $f$ est $${y2}$. Il est atteint en $x=${x2}$.`
if (!context.isAmc) {
setReponse(this, 2 * i, y2)
setReponse(this, 2 * i + 1, x2)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Minimum',
valeur: [y2],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x2],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
} else {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\geqslant ${y4}$, c'est-à-dire $f(x)\\geqslant f(${x4})$.<br>
Ainsi, le minimum de $f$ est $${y4}$. Il est atteint en $x=${x4}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, y4)
setReponse(this, 2 * i + 1, x4)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Minimum',
valeur: [y4],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x4],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
}
} else {
if (M === y1) {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\geqslant ${-y1}$, c'est-à-dire $f(x)\\geqslant f(${x1})$.<br>
Ainsi, le minimum de $f$ est $${-y1}$. Il est atteint en $x=${x1}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, -y1)
setReponse(this, 2 * i + 1, x1)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Minimum',
valeur: [-y1],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x1],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
} else {
texteCorr = `Pour tout réel $x$ de $[${x1};${x4}]$, on a $f(x)\\geqslant ${-y3}$, c'est-à-dire $f(x)\\geqslant f(${x3})$.<br>
Ainsi, le minimum de $f$ est $${-y3}$. Il est atteint en $x=${x3}$. `
if (!context.isAmc) {
setReponse(this, 2 * i, -y3)
setReponse(this, 2 * i + 1, x3)
} else {
this.autoCorrection[i] = {
enonce: texte,
propositions: [
{
type: 'AMCNum',
propositions: [
{
texte: texteCorr,
reponse: {
texte: 'Minimum',
valeur: [-y3],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
},
{
type: 'AMCNum',
propositions: [
{
texte: '',
reponse: {
texte: 'Antécédent',
valeur: [x3],
param: {
digits: 2,
signe: true,
decimals: 0
}
}
}
]
}
]
}
}
}
}
}
if (this.questionJamaisPosee(i, x1, x2, x3, x4)) {
this.listeQuestions.push(texte)
this.listeCorrections.push(texteCorr)
i++
}
cpt++
}
listeQuestionsToContenu(this)
}
}