import Exercice from '../Exercice.js'
import { combinaisonListes, ecritureAlgebrique, ecritureAlgebriqueSauf1, listeQuestionsToContenu, randint, rienSi1 } from '../../modules/outils.js'
import Trinome from '../../modules/Trinome.js'
import FractionX from '../../modules/FractionEtendue.js'
import { mathalea2d } from '../../modules/2dGeneralites.js'
import { context } from '../../modules/context.js'
import { tableauDeVariation } from '../../modules/TableauDeVariation.js'
export const titre = 'Équations et inéquations du second degré'
export const interactifReady = false
export const dateDePublication = '28/10/2022'
/**
* Bilan sur les différentes formes d'équations et d'inéquations
* @author Rémi Angot
*/
export const uuid = 'b9252'
export const ref = '1E18'
export default class EquationsEtInequations extends Exercice {
constructor () {
super()
this.nbQuestions = 4
}
nouvelleVersion () {
this.listeQuestions = []
this.listeCorrections = []
this.tailleDiaporama = 3
if (context.vue === 'diap' || this.nbQuestions === 1) {
this.introduction = 'Résoudre dans $\\R$ :'
} else this.introduction = 'Résoudre dans $\\R$ les équations et inéquations suivantes.'
let typesDeQuestionsDisponibles = ['inequationFormeFactorisee', 'inequationFormeDevelopeeSansRacine', 'inequationFormeDevelopeeAvecRacines', 'inequationFormeDevelopeeSansRacineBis', 'inequationFormeDevelopeeAvecRacinesBis', 'ax2=bx']
if (this.nbQuestions === 4) {
typesDeQuestionsDisponibles = ['inequationFormeFactorisee', 'ax2=bx']
if (randint(1, 2) > 1) typesDeQuestionsDisponibles.push('inequationFormeDevelopeeSansRacine', 'inequationFormeDevelopeeAvecRacinesBis')
else typesDeQuestionsDisponibles.push('inequationFormeDevelopeeAvecRacines', 'inequationFormeDevelopeeSansRacineBis')
}
const listeTypeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
const listeTypeInequation = combinaisonListes(['<', '\\leq', '>', '\\geq'], this.nbQuestions)
for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {
let texte = ''
let texteCorr = ''
const typeInequation = listeTypeInequation[i]
if (listeTypeQuestions[i] === 'inequationFormeFactorisee') {
const a = randint(-5, 5, 0)
const b = randint(-5, 5, 0)
const c = randint(-5, 5, [0, a])
const d = randint(-5, 5, [0, b])
texte += `$(${b}${ecritureAlgebriqueSauf1(a)}x)(${rienSi1(c)}x${ecritureAlgebrique(d)}) ${typeInequation} 0$`
let x1 = new FractionX(-b, a)
let x2 = new FractionX(-d, c)
texteCorr += 'On cherche l\'ensemble des $x$ tels que : ' + texte + '.'
texteCorr += `<br><br>$${b}${ecritureAlgebriqueSauf1(a)}x = 0 \\iff x= ${x1.simplifie().texFraction}`
texteCorr += ` \\qquad \\text{et} \\qquad ${rienSi1(c)}x${ecritureAlgebrique(d)} = 0 \\iff x= ${x2.simplifie().texFraction}$`
// t pour la ligne pointillée, z pour la ligne pointillée et le zéro
let ligne1 = a > 0 ? ['Line', 30, '', 0, '-', 20, 'z', 20, '+', 20, 't', 20, '+', 20] : ['Line', 30, '', 0, '+', 20, 'z', 20, '-', 20, 't', 20, '-', 20]
let ligne2 = c > 0 ? ['Line', 30, '', 0, '-', 20, 't', 20, '-', 20, 'z', 20, '+', 20] : ['Line', 30, '', 0, '+', 20, 't', 20, '+', 20, 'z', 20, '-', 20]
if (x1.valeurDecimale > x2.valeurDecimale) {
[x1, x2] = [x2, x1]
;[ligne1, ligne2] = [ligne2, ligne1]
}
const ligne3 = a * c > 0 ? ['Line', 30, '', 0, '+', 20, 'z', 20, '-', 20, 'z', 20, '+', 20] : ['Line', 30, '', 0, '-', 20, 'z', 20, '+', 20, 'z', 20, '-', 20]
texteCorr += '<br><br>On en déduit le signe du polynôme dans un tableau de signes :'
texteCorr += mathalea2d({ xmin: -0.5, ymin: -9, xmax: 30, ymax: 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$', 2, 30], [`$${b}${ecritureAlgebriqueSauf1(a)}x$`, 2, 50], [`$${rienSi1(c)}x${ecritureAlgebrique(d)}$`, 2, 50], [`$(${b}${ecritureAlgebriqueSauf1(a)}x)(${rienSi1(c)}x${ecritureAlgebrique(d)})$`, 2, 100]],
// 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$', 30, `$${x1.simplifie().texFraction}$`, 20, `$${x2.simplifie().texFraction}$`, 20, '$+\\infty$', 30]
],
// tabLines ci-dessous contient les autres lignes du tableau.
tabLines: [ligne1, ligne2, ligne3],
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: 8, // taille de la première colonne en cm
hauteurLignes: [20, 15, 15, 15]
}))
texteCorr += '<br> Finalement '
if ((typeInequation === '>' && a * c > 0) || (typeInequation === '<' && a * c < 0)) {
texteCorr += `$S=\\left]-\\infty;${x1.simplifie().texFraction}\\right[\\cup\\left]${x2.simplifie().texFraction};+\\infty\\right[$.`
} else if ((typeInequation === '<' && a * c > 0) || (typeInequation === '>' && a * c < 0)) {
texteCorr += `$S=\\left]${x1.simplifie().texFraction};${x2.simplifie().texFraction}\\right[$.`
} else if ((typeInequation === '\\geq' && a * c > 0) || (typeInequation === '\\leq' && a * c < 0)) {
texteCorr += `$S=\\left]-\\infty;${x1.simplifie().texFraction}\\right]\\cup\\left[${x2.simplifie().texFraction};+\\infty\\right[$.`
} else {
texteCorr += `$S=\\left[${x1.simplifie().texFraction};${x2.simplifie().texFraction}\\right]$.`
}
} else if (listeTypeQuestions[i] === 'inequationFormeDevelopeeSansRacine' || listeTypeQuestions[i] === 'inequationFormeDevelopeeSansRacineBis') {
const p = new Trinome()
const a = randint(-3, 3, 0)
const alpha = randint(-5, 5, 0)
const beta = a > 0 ? randint(1, 3) : randint(-3, -1)
p.defFormeCanonique(a, alpha, beta)
if (listeTypeQuestions[i] === 'inequationFormeDevelopeeSansRacine') {
texte += `$${p.tex} ${typeInequation} 0$`
} else {
texte += `$${rienSi1(p.a.valeurDecimale)}x^2 ${ecritureAlgebriqueSauf1(p.b.valeurDecimale)} x ${typeInequation} ${-p.c.valeurDecimale}$`
}
texteCorr += 'On cherche l\'ensemble des $x$ tels que : ' + texte + '.<br><br>'
if (listeTypeQuestions[i] === 'inequationFormeDevelopeeSansRacineBis') {
texteCorr = `$${rienSi1(p.a.valeurDecimale)}x^2 ${ecritureAlgebriqueSauf1(p.b.valeurDecimale)} x ${typeInequation} ${-p.c.valeurDecimale} \\iff ${p.tex} ${typeInequation} 0$<br><br>`
}
texteCorr += 'Calculons le discriminant de ce polynôme du second degré : '
texteCorr += `$\\Delta = ${p.texCalculDiscriminant}$.`
texteCorr += `<br><br>Le discriminant est strictement négatif, donc le polynôme est toujours du signe de $a$ donc ici toujours ${p.a.s === 1 ? 'positif' : 'négatif'}.`
texteCorr += '<br><br>Finalement $S='
if ((p.a.valeurDecimale > 0 && (typeInequation === '>' || typeInequation === '\\geq'))) texteCorr += '\\R'
else if ((p.a.valeurDecimale < 0 && (typeInequation === '<' || typeInequation === '\\leq'))) texteCorr += '\\R'
else texteCorr += '\\empty'
texteCorr += '$.'
} else if (listeTypeQuestions[i] === 'inequationFormeDevelopeeAvecRacines' || listeTypeQuestions[i] === 'inequationFormeDevelopeeAvecRacinesBis') {
const p = new Trinome()
const a = randint(-3, 3, 0)
const alpha = randint(-5, 5, 0)
let beta = randint(1, 3)
if (a > 0) beta *= -1
p.defFormeCanonique(a, alpha, beta)
if (listeTypeQuestions[i] === 'inequationFormeDevelopeeAvecRacines') {
texte += `$${p.tex} ${typeInequation} 0$`
} else {
texte += `$${rienSi1(p.a.valeurDecimale)}x^2 ${ecritureAlgebriqueSauf1(p.b.valeurDecimale)} x ${typeInequation} ${-p.c.valeurDecimale}$`
}
texteCorr += 'On cherche l\'ensemble des $x$ tels que : ' + texte + '.<br><br>'
if (listeTypeQuestions[i] === 'inequationFormeDevelopeeAvecRacinesBis') {
texteCorr = `$${rienSi1(p.a.valeurDecimale)}x^2 ${ecritureAlgebriqueSauf1(p.b.valeurDecimale)} x ${typeInequation} ${p.c.valeurDecimale} \\iff ${p.tex} ${typeInequation} 0$` + '<br></br>'
}
texteCorr += 'Calculons le discriminant de ce polynôme du second degré : '
texteCorr += `$\\Delta = ${p.texCalculDiscriminant}$.`
texteCorr += '<br><br>Le discriminant est strictement positif, donc le polynôme a deux racines.'
texteCorr += `<br><br>$${p.texCalculRacine1}$`
texteCorr += `<br><br>$${p.texCalculRacine2}$`
texteCorr += '<br><br>'
if ((typeInequation === '>' && a > 0) || (typeInequation === '<' && a < 0)) {
texteCorr += 'On sait que le polynôme est du signe de $a$ à l\'extérieur de ses racines donc '
texteCorr += `$S=\\left]-\\infty;${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX1 : p.texX2}\\right[\\cup\\left]${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX2 : p.texX1};+\\infty\\right[$.`
} else if ((typeInequation === '<' && a > 0) || (typeInequation === '>' && a < 0)) {
texteCorr += 'On sait que le polynôme est du signe de $-a$ entre ses racines donc '
texteCorr += `$S=\\left]${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX1 : p.texX2};${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX2 : p.texX1}\\right[$.`
} else if ((typeInequation === '\\geq' && a > 0) || (typeInequation === '\\leq' && a < 0)) {
texteCorr += 'On sait que le polynôme est du signe de $a$ à l\'extérieur de ses racines donc '
texteCorr += `$S=\\left]-\\infty;${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX1 : p.texX2}\\right]\\cup\\left[${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX2 : p.texX1};+\\infty\\right[$.`
} else {
texteCorr += 'On sait que le polynôme est du signe de $-a$ entre ses racines donc '
texteCorr += `$S=\\left[${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX1 : p.texX2};${p.x1.valeurDecimale < p.x2.valeurDecimale ? p.texX2 : p.texX1}\\right]$.`
}
} else if (listeTypeQuestions[i] === 'ax2=bx') {
const a = randint(-5, 5, 0)
const b = randint(-5, 5, 0)
texte += `$${rienSi1(a)}x^2 = ${rienSi1(-b)}x$`
texteCorr += 'On cherche l\'ensemble des $x$ tels que : ' + texte + '.'
texteCorr += `<br><br>$${rienSi1(a)}x^2 = ${rienSi1(-b)}x \\iff ${rienSi1(a)}x^2 ${ecritureAlgebriqueSauf1(b)}x = 0$`
texteCorr += `<br><br>$\\phantom{${rienSi1(a)}x^2 = ${rienSi1(-b)}x} \\iff x(${rienSi1(a)}x ${ecritureAlgebrique(b)})=0$`
texteCorr += `<br><br>$\\phantom{${rienSi1(a)}x^2 = ${rienSi1(-b)}x} \\iff x = 0 \\text{ \\qquad ou \\qquad }${rienSi1(a)}x ${ecritureAlgebrique(b)}=0$`
const x = new FractionX(-b, a)
texteCorr += `<br><br>Finalement $S=\\left\\{ 0 \\,;\\, ${x.simplifie().texFraction} \\right\\}$.`
}
if (this.questionJamaisPosee(i, texte)) {
this.listeQuestions.push(texte)
this.listeCorrections.push(texteCorr)
i++
}
cpt++
}
listeQuestionsToContenu(this)
}
}