import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, combinaisonListes, rienSi1, ecritureAlgebrique, ecritureParentheseSiNegatif, signe, abs, miseEnEvidence, texFraction, sp } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCNum'
export const titre = 'Résoudre une equation du premier degré à solutions entières'
/**
* Équation du premier degré
* * Type 1 : x+a=b ou ax=b
* * Type 2 : ax+b=c
* * Type 3 : ax+b=cx+d
* * Tous les types
* @author Rémi Angot
* Modifications de 4L20 pour n'avoir que des solutions entières : Jean-Claude Lhote
* 4L20-0
*/
export const uuid = '515b0'
export const ref = '4L20-0'
export default function ExerciceEquationASolutionEntiere () {
Exercice.call(this) // Héritage de la classe Exercice()
this.titre = titre
this.consigne = 'Résoudre les équations suivantes.'
this.spacing = 2
context.isHtml ? (this.spacingCorr = 3) : (this.spacingCorr = 2)
this.correctionDetailleeDisponible = true
if (!context.isHtml) {
this.correctionDetaillee = false
} else {
this.correctionDetaillee = true
}
this.sup = true // Avec des nombres relatifs
this.sup2 = 4 // Choix du type d'équation
this.nbQuestions = 6
this.nouvelleVersion = function () {
this.listeQuestions = [] // Liste de questions
this.listeCorrections = [] // Liste de questions corrigées
this.autoCorrection = []
let listeTypeDeQuestions
switch (this.sup2.toString()) {
case '1':
listeTypeDeQuestions = ['ax=b', 'x+b=c']
break
case '2':
listeTypeDeQuestions = ['ax+b=c']
break
case '3':
listeTypeDeQuestions = ['ax+b=cx+d']
break
default:
listeTypeDeQuestions = [
'ax+b=0',
'ax+b=c',
'ax=b',
'x+b=c',
'ax+b=cx+d'
]
break
}
listeTypeDeQuestions = combinaisonListes(
listeTypeDeQuestions,
this.nbQuestions
)
for (let i = 0, a, b, c, d, reponse, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
// On limite le nombre d'essais pour chercher des valeurs nouvelles
switch (listeTypeDeQuestions[i]) {
case 'ax+b=0':
case 'ax+b=c':
if (listeTypeDeQuestions[i] === 'ax+b=0') {
c = 0
} else {
c = randint(-9, 9, [0])
}
reponse = randint(-5, 5, [0, -1, 1])
a = randint(-5, 5, [-1, 0, 1])
if (!this.sup) {
reponse = Math.abs(reponse)
a = Math.abs(a)
c = Math.abs(c)
}
b = c - a * reponse // b peut être négatif, ça sera une équation du type x-b=c
texte = `$${a}x${ecritureAlgebrique(b)}=${c}$`
texteCorr = texte + '<br>'
if (this.correctionDetaillee) {
if (b > 0) {
texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
} else {
texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
}
}
texteCorr += `$${a}x${ecritureAlgebrique(b)}${miseEnEvidence(
ecritureAlgebrique(-1 * b)
)}=${c}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
texteCorr += `$${a}x=${c - b}$<br>`
if (this.correctionDetaillee) {
texteCorr += `On divise les deux membres par $${a}$.<br>`
}
texteCorr += `$${a}x${miseEnEvidence(
'\\div' + ecritureParentheseSiNegatif(a)
)}=${c - b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
texteCorr += `$x=${texFraction(c - b, a)}=${reponse}$`
texteCorr += `<br> La solution est $${reponse}$.`
break
case 'x+b=c':
b = randint(-9, 9, [0]) // b peut être négatif, ça sera une équation du type x-b=c
c = randint(-16, 15, 0)
if (!this.sup) {
c = Math.abs(c)
}
reponse = c - b
texte = `$x${ecritureAlgebrique(b)}=${c}$`
texteCorr = texte + '<br>'
if (this.correctionDetaillee) {
if (b > 0) {
texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
} else {
texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
}
}
texteCorr += `$x${ecritureAlgebrique(b)}${miseEnEvidence(
ecritureAlgebrique(-1 * b)
)}=${c}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
texteCorr += `$x=${reponse}$`
texteCorr += `<br> La solution est $${reponse}$.`
break
case 'ax=b':
if (this.sup) {
a = randint(-9, 9, [0, -1, 1]) // b peut être négatif, ça sera une équation du type x-b=c
reponse = randint(-9, 9, [-1, 0, 1])
} else {
a = randint(2, 15)
reponse = randint(2, 9)
}
b = a * reponse
texte = `$${a}x=${b}$`
texteCorr = texte + '<br>'
if (this.correctionDetaillee) {
texteCorr += `On divise les deux membres par $${a}$.<br>`
}
texteCorr += `$${a}x${miseEnEvidence(
'\\div' + ecritureParentheseSiNegatif(a)
)}=${b + miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a))}$<br>`
texteCorr += `$x=${texFraction(b, a)}=${reponse}$`
texteCorr += `<br> La solution est $${reponse}$.`
break
case 'ax+b=cx+d':
reponse = randint(-9, 9, [0, -1, 1])
d = randint(-15, 15, 0)
c = randint(-5, 5, [-1, 0, 1])
if (!this.sup) {
reponse = Math.abs(reponse)
c = Math.abs(c)
a = randint(2, 5) + c
} else {
a = randint(-5, 5, [-c, -c + 1, -c - 1, 0]) + c
}
b = (c - a) * reponse + d
texte = `$${rienSi1(a)}x${ecritureAlgebrique(b)}=${rienSi1(
c
)}x${ecritureAlgebrique(d)}$`
texteCorr = texte + '<br>'
if (this.correctionDetaillee) {
if (c > 0) {
texteCorr += `On soustrait $${rienSi1(
c
)}x$ aux deux membres.<br>`
} else {
texteCorr += `On ajoute $${rienSi1(
-1 * c
)}x$ aux deux membres.<br>`
}
}
texteCorr += `$${rienSi1(a)}x${ecritureAlgebrique(
b
)}${miseEnEvidence(
signe(-1 * c) + rienSi1(abs(c)) + 'x'
)}=${c}x${ecritureAlgebrique(d)}${miseEnEvidence(
signe(-1 * c) + rienSi1(abs(c)) + 'x'
)}$<br>`
texteCorr += `$${rienSi1(a - c)}x${ecritureAlgebrique(
b
)}=${d}$<br>`
if (this.correctionDetaillee) {
if (b > 0) {
texteCorr += `On soustrait $${b}$ aux deux membres.<br>`
} else {
texteCorr += `On ajoute $${-1 * b}$ aux deux membres.<br>`
}
}
texteCorr += `$${rienSi1(a - c)}x${ecritureAlgebrique(
b
)}${miseEnEvidence(
ecritureAlgebrique(-1 * b)
)}=${d}${miseEnEvidence(ecritureAlgebrique(-1 * b))}$<br>`
texteCorr += `$${rienSi1(a - c)}x=${d - b}$<br>`
if (this.correctionDetaillee) {
texteCorr += `On divise les deux membres par $${a - c}$.<br>`
}
texteCorr += `$${rienSi1(a - c)}x${miseEnEvidence(
'\\div' + ecritureParentheseSiNegatif(a - c)
)}=${d -
b +
miseEnEvidence('\\div' + ecritureParentheseSiNegatif(a - c))}$<br>`
texteCorr += `$x=${texFraction(d - b, a - c)}=${reponse}$`
texteCorr += `<br> La solution est $${reponse}$.`
break
}
texte += ajouteChampTexteMathLive(this, i, 'largeur10 inline', { texte: sp(10) + 'La solution est : $x=$' })
this.sup ? setReponse(this, i, reponse, { signe: true }) : setReponse(this, i, reponse, { signe: false })
if (this.questionJamaisPosee(i, a, b, c)) {
// Si la question n'a jamais été posée, on en créé une autre
this.listeQuestions.push(texte) // replace(/1x/g,'x')); //remplace 1x par x
this.listeCorrections.push(texteCorr) // .replace(/1x/g,'x')); //remplace 1x par x
i++
}
cpt++
}
listeQuestionsToContenu(this)
if (!context.isHtml) {
this.canEnonce = 'Résoudre l\'équation ' + this.listeQuestions[0] + '.'
this.correction = this.listeCorrections[0]
this.canReponseACompleter = ''
}
}
this.besoinFormulaireCaseACocher = ['Avec des nombres relatifs']
this.besoinFormulaire2Numerique = [
"Type d'équations",
4,
'1 : ax=b ou x+a=b ou x-a=b\n2: ax+b=c\n3: ax+b=cx+d\n4: Mélange'
]
}