import Exercice from '../../Exercice.js'
import { mathalea2d } from '../../../modules/2dGeneralites.js'
import { fraction } from '../../../modules/fractions.js'
import {
point, polygoneAvecNom, codageAngleDroit, labelPoint, segment, milieu, texteParPosition, demiDroite, ellipse, codageSegment
} from '../../../modules/2d.js'
import { listeQuestionsToContenu, randint, texNombre, shuffle, printlatex, stringNombre, texFraction, miseEnEvidence, simplificationDeFractionAvecEtapes, choice, sp, arrondi } from '../../../modules/outils.js'
import { setReponse } from '../../../modules/gestionInteractif.js'
import { round, min } from 'mathjs'
import { ajouteChampTexteMathLive } from '../../../modules/interactif/questionMathLive.js'
export const titre = 'CAN 3ième sujet 2021'
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 = '30/03/2022' // 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
/**
* Description didactique de l'exercice
* Gilles Mora
* Référence
*/
function compareNombres (a, b) {
return a - b
}
export const uuid = 'afd9f'
export const ref = 'can3a-2021'
export default function SujetCAN20213ieme () {
Exercice.call(this) // Héritage de la classe Exercice()
this.titre = titre
this.interactifReady = interactifReady
this.interactifType = interactifType
this.nbQuestions = 30// 10,20,30
this.nbCols = 1
this.nbColsCorr = 1
this.comment = `Cet exercice fait partie des annales des Courses aux nombres.<br>
Il est composé de 30 questions réparties de la façon suivante :<br>
les 10 premières questions parfois communes à plusieurs niveaux font appels à des questions automatisées élémentaires et les 20 suivantes (qui ne sont pas rangées dans un ordre de difficulté) sont un peu plus « coûteuses » cognitivement.<br>
Par défaut, les questions sont rangées dans le même ordre que le sujet officiel avec des données aléatoires. Ainsi, en cliquant sur « Nouvelles données », on obtient une nouvelle course aux nombres avec des données différentes.
En choisissant un nombre de questions différents de 30, on fabrique une « mini » course aux nombres qui respecte la proportion de nombre de questions élémentaires par rapport aux autres.
Par exemple, en choisissant 20 questions, la course aux nombres sera composée de 7 questions automatisées élémentaires choisies aléatoirement dans les 10 premières questions du sujet officiel puis de 13 autres questions choisies aléatoirement parmi les 20 autres questions du sujet officiel.`
this.nouvelleVersion = function () {
this.listeQuestions = [] // Liste de questions
this.listeCorrections = [] // Liste de questions corrigées
const nbQ1 = min(round(this.nbQuestions * 8 / 30), 8) // Choisir d'un nb de questions de niveau 1 parmi les 8 possibles.
const nbQ2 = min(this.nbQuestions - nbQ1, 22)
const typeQuestionsDisponiblesNiv1 = shuffle([1, 2, 3, 4, 5, 6, 7, 8]).slice(-nbQ1).sort(compareNombres)
const typeQuestionsDisponiblesNiv2 = shuffle([9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30]).slice(-nbQ2).sort(compareNombres)
const typeQuestionsDisponibles = (typeQuestionsDisponiblesNiv1.concat(typeQuestionsDisponiblesNiv2))
const listeFractions18 = [[3, 2], [1, 2], [3, 4], [1, 4], [2, 5],
[3, 5], [4, 5]
]
const listeFractions22 = [[4, 15], [3, 11], [2, 9], [5, 11], [3, 13],
[10, 9], [4, 11], [7, 15], [2, 15], [5, 12]
]
for (let i = 0, index = 0, nbChamps, texte, texteCorr, reponse, resultat, fraction18 = [], fraction22 = [], triplet, sCote1, sCote2, s1, s2, s3, s4, s5, s6, prix, choix, truc, a, b, c, d, e, m, p, k, A, B, C, D, E, F, G, pol, code1, code2, code3, code4, code5, code6, xmin, xmax, ymin, ymax, objets, cpt = 0; i < this.nbQuestions && cpt < 50;) {
switch (typeQuestionsDisponibles[i]) {
case 1:
a = randint(4, 9)
b = randint(4, 9)
texte = `$${a} \\times ${b}=$ `
texteCorr = `$${a} \\times ${b}=${a * b}$`
reponse = a * b
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 2:
a = randint(6, 12) * 4
b = randint(6, 15) * 3
m = choice(['quart', 'tiers'])
if (m === 'quart') {
reponse = Math.round(a / 4)
texte = `Le quart de $${a}$ est : `
texteCorr = `Prendre le quart d'un nombre revient à le diviser par $4$.<br>
Ainsi le quart de $${a}$ est : $${a}\\div 4 =${reponse}$.`
} if (m === 'tiers') {
reponse = Math.round(b / 3)
texte = `Le tiers de $${b}$ est : `
texteCorr = `Prendre le tiers d'un nombre revient à le diviser par $3$.<br>
Ainsi le tiers de $${b}$ est : $${b}\\div 3 =${reponse}$.`
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 3:
a = randint(101, 121)
b = randint(21, 45)
reponse = a - b
texte = `$${a} - ${b}=$ `
texteCorr = `$${a}-${b}=${reponse}$`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 4:
a = randint(3, 9) + randint(1, 4) / 10
b = randint(1, 5) / 10 + randint(2, 9) / 100
reponse = arrondi(a + b, 2)
texte = `$${texNombre(a, 1)}+${texNombre(b, 2)}=$ `
texteCorr = `$${texNombre(a, 1)}+${texNombre(b, 2)}=${texNombre(reponse, 2)}$ `
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 5:
a = randint(11, 18)
b = randint(3, 5)
c = a * b
if (choice([true, false])) {
texte = `Complète : <br>$${a}\\times .... =${c}$`
texteCorr = `$${a}\\times ${miseEnEvidence(b)} =${c}$`
} else {
texte = `Complète :<br> $ .... \\times ${a}=${c}$`
texteCorr = `$ ${miseEnEvidence(b)} \\times ${a}=${c}$`
}
reponse = b
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 6:
a = arrondi(randint(1, 9) * 10 + randint(1, 9) + 0.9 + randint(1, 9) / 100, 2)
b = arrondi(randint(1, 9) * 10 + randint(1, 9) / 10 + 0.09 + randint(1, 9) / 1000, 3)
if (choice([true, false])) {
texte = `Quel nombre obtient-on si on ajoute un dixième à $${texNombre(a)}$ ?`
texteCorr = `$1$ dixième $=0,1$, d'où $${texNombre(a)}+0,1 =${texNombre(a + 0.1)}$`
reponse = arrondi(a + 0.1, 2)
} else {
texte = `Quel nombre obtient-on si on ajoute un centième à $${texNombre(b)}$ ?`
texteCorr = `$1$ centième $=0,01$, d'où $${texNombre(b)}+0,01 =${texNombre(b + 0.01)}$`
reponse = arrondi(b + 0.01, 3)
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 7:
a = randint(1, 9)
b = randint(1, 9, a)
k = a * 100 + b * 10
d = choice([0.1, 0.01, 0.001])
reponse = arrondi(k * d, 2)
if (d === 0.1) {
texte = `$${k}\\times ${texNombre(d)}=$`
texteCorr = `$${k}\\times ${texNombre(d)}=${reponse}$`
texteCorr += `<br>
Multiplier par $0,1$ revient à diviser par $10$. <br>
$${k}\\times ${texNombre(d)}=${k}\\div 10=${a}${b},\\underline{0}$.<br>
`
}
if (d === 0.01) {
texte = `$${k}\\times ${texNombre(d)}=$`
texteCorr = `$${k}\\times ${texNombre(d)}=${texNombre(reponse, 1)}$`
texteCorr += ` <br> Multiplier par $0,01$ revient à diviser par $100$. <br>
$${k}\\times ${texNombre(d)}=${k}\\div 100=${a},${b}\\underline{0}$.<br>
`
}
if (d === 0.001) {
texte = `$${k}\\times ${texNombre(d, 3)}=$`
texteCorr = `$${k}\\times ${texNombre(d)}=${texNombre(reponse, 2)}$`
texteCorr += `<br>
Multiplier par $0,001$ revient à diviser par $1000$. <br>
$${k}\\times ${texNombre(d)}=${k}\\div 1000=0,${a}${b}\\underline{0}$.<br>
`
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 8:
a = randint(2, 5)
b = randint(2, 9)
c = randint(2, 9)
if (choice([true, false])) {
reponse = a * 10000 + b * 100 + c * 10
texte = `$${texNombre(a)}\\times ${texNombre(10000)} + ${texNombre(b)}\\times 100 + ${texNombre(c)}\\times 10=$`
texteCorr = `$${texNombre(a)}\\times ${texNombre(10000)} + ${texNombre(b)}\\times 100 + ${texNombre(c)}\\times 10 =
${texNombre(a * 10000)} + ${texNombre(b * 100)} + ${texNombre(c * 10)}=${texNombre(reponse)}$`
} else {
reponse = c * 10000 + b * 1000 + a * 10
texte = `$ ${texNombre(c)}\\times ${texNombre(10000)}+ ${texNombre(b)}\\times ${texNombre(1000)} + ${texNombre(a)}\\times 10 =$`
texteCorr = `$ ${texNombre(c)}\\times ${texNombre(10000)}+ ${texNombre(b)}\\times ${texNombre(1000)} + ${texNombre(a)}\\times 10 =
${texNombre(c * 10000)}+ ${texNombre(b * 1000)} + ${texNombre(a * 10)} =${texNombre(reponse)}$`
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 9:
a = randint(2, 6)
prix = 2 + randint(1, 3) / 10 + 0.05
k = randint(2, 4)
reponse = arrondi(prix * k, 2)
texte = `$${a}$ stylos identiques coûtent $${texNombre(prix, 2, true)}$ €. <br>
Combien coûtent $${k * a}$ de ces mêmes stylos ?
`
texteCorr = `$${a}$ stylos identiques coûtent $${texNombre(prix, 2, true)}$ €, donc $${k * a}$
de ces mêmes stylos coûtent $${k}$ fois plus, soit $${k}\\times ${texNombre(prix, 2, true)}=${texNombre(k * prix, 2, true)}$ €.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + ' €' }
nbChamps = 1
break
case 10:
a = randint(11, 24, 20)
reponse = 101 * a
texte = `$${a}\\times 101=$`
texteCorr = `$${a}\\times 101 = ${101 * a}$<br>`
texteCorr += `$${a}\\times 101 = ${a}\\times (100+1)=${a}\\times 100+${a}\\times 1=${texNombre(a * 100, 0)}+${a}=${texNombre(101 * a, 0)}$`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 11:
a = choice([15, 35, 42, 10, 14, 21, 22, 26, 29, 33])
texte = `Donne la liste des diviseurs de $${a}$.<br>`
if (a === 15) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $3$, $5$ et $15$. `
reponse = '1;3;5;15'
}
if (a === 35) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $5$, $7$ et $35$. `
reponse = '1;5;7;35'
}
if (a === 42) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $3$, $7$ et $42$. `
reponse = '1;2;3;7;42'
}
if (a === 10) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $5$ et $10$. `
reponse = '1;2;5;10'
}
if (a === 14) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $7$, et $14$. `
reponse = '1;2;7;14'
}
if (a === 21) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $3$, $7$ et $21$. `
reponse = '1;3;7;21'
}
if (a === 22) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $11$ et $22$. `
reponse = '1;2;11;22'
}
if (a === 26) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $2$, $13$ et $26$. `
reponse = '1;2;13;26'
}
if (a === 29) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$ et $29$. `
reponse = '1;29'
}
if (a === 33) {
texteCorr = `Les diviseurs de $${a}$ sont : $1$, $3$, $11$ et $33$. `
reponse = '1;3;11;33'
}
setReponse(this, index, reponse, { formatInteractif: 'texte' })
if (this.interactif) {
texte += 'Écrire les diviseurs dans l’ordre croissant, séparés par un point virgule'
texte += ajouteChampTexteMathLive(this, index, 'inline largeur17')
}
nbChamps = 1
break
case 12:
a = randint(1, 9)// longueur BE
k = randint(2, 4)
b = k * a // longueur DC
c = a + 1// longueur AE
d = k * c// longueur AD
A = point(0, 0, 'A', 'below')
B = point(2, -0.4, 'B', 'below')
C = point(5, -1, 'C', 'below')
D = point(4, 2, 'D', 'above')
E = point(1.6, 0.8, 'E', 'above')
xmin = -1
ymin = -2
xmax = 6
ymax = 4.5
sCote1 = segment(point(A.x - 0.3, A.y + 0.5), point(E.x - 0.2, E.y + 0.5))
sCote2 = segment(point(A.x - 0.8, A.y + 1.3), point(D.x - 0.8, D.y + 1.3))
sCote1.styleExtremites = '<->'
sCote2.styleExtremites = '<->'
objets = []
objets.push(
texteParPosition(`${stringNombre(a)} `, milieu(B, E).x + 0.4, milieu(B, E).y),
texteParPosition('?', milieu(A, E).x - 0.4, milieu(A, E).y + 0.7, 'milieu', 'black', 1, 'middle', true),
texteParPosition(`${stringNombre(b)} `, milieu(D, C).x + 0.5, milieu(D, C).y),
texteParPosition(`${stringNombre(d)} `, milieu(A, D).x - 1, milieu(A, D).y + 1.5),
demiDroite(A, C), demiDroite(A, D), labelPoint(A, B, C, D, E), segment(A, D), segment(A, C), segment(B, E), segment(D, C), sCote1, sCote2)
reponse = c
texte = '$(BE)//(DC)$. Détermine la longueur $AE$.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 30, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `Le triangle $ADC$ est un agrandissement du triangle $ABE$. Le coefficient d'agrandissement est donné par : $\\dfrac{${b}}{${a}}=${texNombre(b / a)}$.<br>
On obtient donc la longueur $AE$ en divisant par $${k}$ la longueur $AD$.<br>
$AE=\\dfrac{${d}}{${k}}=${c}$.<br>`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) {
texte += '<br>$AE=$'
texte += ajouteChampTexteMathLive(this, index, 'inline largeur15')
}
nbChamps = 1
break
case 13:
a = randint(-9, -4)
b = randint(2, 8)
c = randint(2, 5)
texte = `$f(x)=${a}x+${b}$<br>
$f(${c})= $ `
reponse = a * c + b
texteCorr = `$f(${c})=${a}\\times ${c}+${b}=${a * c}+${b}=${reponse}$. `
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 14:
a = randint(1, 5)
b = choice([0.25, 0.5, 0.75])
d = Math.round(b * 60)
if (!this.interactif) {
texte = `$${texNombre(a + b)}$ h $=$ ..... h ..... min`
texteCorr = `$${texNombre(a + b)}$h$ = ${a}$ h $ + ${texNombre(b)} \\times 60 = ${a}$ h $${d}$ min`
} else {
texte = `$${texNombre(a + b, 2)}$ h $=$`
texte += ajouteChampTexteMathLive(this, index, 'largeur10 inline', { texteApres: sp(5) + 'h' })
setReponse(this, index, a)
texte += ajouteChampTexteMathLive(this, index + 1, 'largeur10 inline', { texteApres: sp(5) + 'min' })
texteCorr = `$${texNombre(a + b)}$h$ = ${a}$ h $ + ${texNombre(b)} \\times 60$ min $ = ${a}$ h $${d}$ min`
setReponse(this, index + 1, d)
nbChamps = 2
}
break
case 15:
a = randint(1, 5) * 10
p = randint(2, 9, 5) * 10
reponse = Math.round(a * p / 100)
texte = `$${p}\\%$ de $${a}= $`
texteCorr = ` Prendre $${p}\\%$ de $${a}$ revient à prendre $${p / 10}\\times 10\\%$ de $${a}$.<br>
Comme $10\\%$ de $${a}$ vaut $${a / 10}$ (pour prendre $10\\%$ d'une quantité, on la divise par $10$), alors
$${p}\\%$ de $${a}=${p / 10}\\times ${a / 10}=${reponse}$.
`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 16:
b = randint(8, 15) // longueur hauteur
A = point(0, 0, 'A', 'below')
B = point(-2, 0, 'B', 'below')
C = point(2, 0, 'C', 'below')
D = point(0, -4, 'D', 'above')
c = ellipse(A, 2, 0.5)
s1 = segment(D, A)
s1.pointilles = 5
s2 = segment(A, C)
s2.pointilles = 5
xmin = -3
ymin = -5
xmax = 3
ymax = 1.5
objets = []
objets.push(
texteParPosition(`${stringNombre(3)} cm`, milieu(A, C).x, milieu(A, C).y + 0.2),
texteParPosition(`${stringNombre(b)} cm`, milieu(A, D).x + 0.5, milieu(A, D).y),
segment(B, D), segment(D, C), s1, s2, c)
reponse = 3 * b
texte = 'Donne le volume exact de ce cône.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 30, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `Le volume du cône est : $\\dfrac{1}{3}\\times \\text{(Aire de la base)}\\times \\text{Hauteur}$.<br>
Soit : $\\dfrac{1}{3}\\times \\pi \\times 3^2\\times ${b}=${reponse}\\pi$ cm$^3$. `
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + '$\\pi$cm$^3$' }
nbChamps = 1
break
case 17:
a = randint(21, 39)
b = randint(121, 149, [130, 140])
c = randint(61, 98, [70, 80, 90])
d = randint(2, 5)
e = choice([[b, 200 - b], [c, 100 - c], [d, 10 - d]])
reponse = a * e[0] + a * e[1]
texte = `$${a}\\times ${e[0]}+${a}\\times ${e[1]}= $ `
texteCorr = `$${a}\\times ${e[0]}+${a}\\times ${e[1]}=${a}\\times( ${e[0]}+ ${e[1]})=${a}\\times ${e[0] + e[1]}=${texNombre(reponse, 0)}$.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$' }
nbChamps = 1
break
case 18:
fraction18 = choice(listeFractions18)
a = fraction(fraction18[0], fraction18[1])
k = randint(3, 9)
reponse = arrondi(fraction18[0] / fraction18[1], 2)
texte = `Ecriture décimale de $\\dfrac{${fraction18[0] * k}}{${fraction18[1] * k}}$.`
texteCorr = `En simplifiant, on obtient : $\\dfrac{${fraction18[0] * k}}{${fraction18[1] * k}}=\\dfrac{${fraction18[0]}}{${fraction18[1]}}=${texNombre(reponse, 2)}$`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 19:
triplet = [[3, 4, 5], [6, 8, 10]]
a = choice(triplet)
C = point(0, 0, 'C', 'below')
A = point(2, 0, 'A', 'below')
B = point(2, 3, 'B', 'above')
xmin = -1
ymin = -0.5
xmax = 3.5
ymax = 3.5
pol = polygoneAvecNom(A, B, C)
objets = []
choix = choice(['a', 'b', 'c'])
if (choix === 'a') {
objets.push(pol[0])
objets.push(
texteParPosition(`${stringNombre(a[0])} dm`, milieu(A, C).x, milieu(A, C).y - 0.3)
, texteParPosition(`${stringNombre(a[2])} dm`, milieu(B, C).x - 0.6, milieu(B, C).y)
, labelPoint(A, B, C), codageAngleDroit(B, A, C))
reponse = a[1]
texte = 'Calcule la longueur $AB$. <br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1.2, style: 'margin: auto' }, objets)
texte += '<br>$AB=$'
texteCorr = `On utilise le théorème de Pythagore dans le triangle rectangle $ABC$ :<br>
On a $AB^2=BC^2-AC^2$, soit $AB^2=${a[2]}^2-${a[0]}^2=${a[2] ** 2 - a[0] ** 2}$.<br>
Par conséquent, $AB=${a[1]}$.`
}
if (choix === 'b') {
objets.push(pol[0])
objets.push(
texteParPosition(`${stringNombre(a[1])} dm`, milieu(A, B).x + 0.5, milieu(A, B).y)
, texteParPosition(`${stringNombre(a[2])} dm`, milieu(B, C).x - 0.6, milieu(B, C).y)
, labelPoint(A, B, C), codageAngleDroit(B, A, C))
reponse = a[0]
texte = 'Calcule la longueur $AC$. <br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texte += '<br>$AC=$'
texteCorr = `On utilise le théorème de Pythagore dans le triangle rectangle $ABC$ :<br>
On a $AC^2=BC^2-AB^2$, soit $AC^2=${a[2]}^2-${a[1]}^2=${a[2] ** 2 - a[1] ** 2}$.<br>
Par conséquent, $AC=${a[0]}$.`
}
if (choix === 'c') {
objets.push(pol[0])
objets.push(
texteParPosition(`${stringNombre(a[1])} dm`, milieu(A, B).x + 0.5, milieu(A, B).y)
, texteParPosition(`${stringNombre(a[0])} dm`, milieu(A, C).x, milieu(A, C).y - 0.3)
, labelPoint(A, B, C), codageAngleDroit(B, A, C))
reponse = a[2]
texte = 'Calcule la longueur $BC$. <br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texte += '<br>$BC=$'
texteCorr = `On utilise le théorème de Pythagore dans le triangle rectangle $ABC$ :<br>
On a $BC^2=AB^2+AC^2$, soit $BC^2=${a[0]}^2+${a[1]}^2=${a[0] ** 2 + a[1] ** 2}$.<br>
Par conséquent, $BC=${a[2]}$.`
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'dm' } else { texte += ' $\\ldots$ dm ' }
nbChamps = 1
break
case 20:
a = choice([5, 10, 20, 30, 40])
b = randint(1, 3)
reponse = a * 60 * b + 30 * a
texte = `Un véhicule se déplace à une vitesse de $${a}$ m/s.<br>
Quelle distance parcourt-il en $${b}$ min $30$ s ? `
texteCorr = `En $1$ minute, il parcourt $60\\times ${a}=${60 * a}$ m et en $30$ s, $${60 * a}\\div 2=${30 * a}$.<br>
En $${b}$ min $30$ s, il aura parcouru : $${b}\\times ${60 * a}+${30 * a}=${texNombre(a * (60 * b + 30), 0)}$ m.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'm' } else { texte += '(en m)' }
nbChamps = 1
break
case 21:
a = choice([randint(1, 9) * 100 + randint(1, 9) * 10 + randint(1, 9), randint(1, 9) * 10 + randint(1, 9)])
reponse = arrondi(a / 1000, 3)
texte = `Complète.<br>
$${a}$ cm$^3 = $ `
texteCorr = `$1$ cm$^3 = 0,001 $dm$^3$ et $1$ dm$^3 = 1$ L.<br>
$${a}$ cm$^3 = ${a}\\times 0,001=${texNombre(reponse, 3)}$ L.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + 'L' } else { texte += '$\\ldots$ L ' }
nbChamps = 1
break
case 22:
k = randint(2, 5) * 10
fraction22 = choice(listeFractions22)
a = fraction(fraction22[0] * k, fraction22[1] * k)
b = fraction(fraction22[0], fraction22[1])
texte = `Donne la fraction irréductible égale à : $${a.texFraction}$.<br>
`
texteCorr = ` $${a.texFraction}=\\dfrac{${fraction22[0]}\\times 10\\times ${k / 10}}{${fraction22[1]}\\times 10\\times ${k / 10}}=${b.texFraction}$.
<br>
`
reponse = b.simplifie()
setReponse(this, index, reponse, { formatInteractif: 'fraction' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 23:
choix = choice(['a', 'b', 'c', 'd'])
if (choix === 'a') {
b = randint(7, 12)
a = randint(2, 5)
A = point(0.13, 0.5)
B = point(1, 1)
C = point(2, 1)
D = point(3, 2)
E = point(3, -1)
F = point(2, 0)
G = point(1, 0)
s1 = segment(A, B)
code1 = codageSegment(A, B, '||')
s2 = segment(B, C)
code2 = codageSegment(B, C, '||')
s3 = segment(A, G)
code3 = codageSegment(A, G, '||')
s4 = segment(G, F)
code4 = codageSegment(G, F, '||')
s5 = segment(C, D)
code5 = codageSegment(C, D, '|')
s6 = segment(E, F)
code6 = codageSegment(E, F, '|')
xmin = -1
ymin = -2
xmax = 4
ymax = 2.5
objets = []
objets.push(
texteParPosition('x', milieu(B, C).x, milieu(B, C).y + 0.3, 'milieu', 'black', 1, 'middle', true),
texteParPosition(`${stringNombre(b)} `, milieu(D, E).x + 0.3, milieu(D, E).y),
texteParPosition(`${stringNombre(a)} `, milieu(D, C).x, milieu(D, C).y + 0.3),
s1, s2, s3, s4, s5, s6, code1, code2, code3, code4, code5, code6, segment(D, E))
reponse = printlatex(`4x+${2 * a + b}`)
texte = 'Exprime en fonction de $x$, le périmètre de cette figure.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `La figure est composée de $4$ segments de longueur $x$, de $2$ segments de longueur $${a}$ et d'un segment de longueur $${b}$.<br>
Le périmètre de cette figure est donc : $4\\times x+2\\times ${a}+${b}=4x+${2 * a + b}$. `
}
if (choix === 'b') {
b = randint(7, 12)
a = randint(2, 5)
A = point(0.13, 0.5)
B = point(1, 1)
C = point(2, 1)
D = point(3, 2)
E = point(3, -1)
F = point(2, 0)
G = point(1, 0)
s1 = segment(A, B)
code1 = codageSegment(A, B, '||')
s2 = segment(B, C)
code2 = codageSegment(B, C, '||')
s3 = segment(A, G)
code3 = codageSegment(A, G, '||')
s4 = segment(G, F)
code4 = codageSegment(G, F, '||')
s5 = segment(C, D)
code5 = codageSegment(C, D, '|')
s6 = segment(E, F)
code6 = codageSegment(E, F, '|')
xmin = -1
ymin = -2
xmax = 4
ymax = 2.5
objets = []
objets.push(
texteParPosition(`${stringNombre(a)}`, milieu(B, C).x, milieu(B, C).y + 0.3),
texteParPosition(`${stringNombre(b)}`, milieu(D, E).x + 0.3, milieu(D, E).y),
texteParPosition('x', milieu(D, C).x, milieu(D, C).y + 0.3, 'milieu', 'black', 1, 'middle', true),
s1, s2, s3, s4, s5, s6, code1, code2, code3, code4, code5, code6, segment(D, E))
reponse = printlatex(`2x+${4 * a + b}`)
texte = 'Exprime en fonction de $x$, le périmètre de cette figure.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `La figure est composée de $2$ segments de longueur $x$, de $4$ segments de longueur $${a}$ et d'un segment de longueur $${b}$.<br>
Le périmètre de cette figure est donc : $2\\times x+4\\times ${a}+${b}=2x+${4 * a + b}$. `
}
if (choix === 'c') {
b = randint(7, 12)
a = randint(2, 5)
B = point(1, 1)
C = point(2, 1)
D = point(3, 2)
E = point(3, -1)
F = point(2, 0)
G = point(1, 0)
s1 = segment(B, G)
code1 = codageSegment(B, G, '||')
s2 = segment(B, C)
code2 = codageSegment(B, C, '||')
s4 = segment(G, F)
code4 = codageSegment(G, F, '||')
s5 = segment(C, D)
code5 = codageSegment(C, D, '|')
s6 = segment(E, F)
code6 = codageSegment(E, F, '|')
xmin = -1
ymin = -2
xmax = 4
ymax = 2.5
objets = []
objets.push(
texteParPosition(`${stringNombre(a)}`, milieu(B, C).x, milieu(B, C).y + 0.3),
texteParPosition(`${stringNombre(b)}`, milieu(D, E).x + 0.3, milieu(D, E).y),
texteParPosition('x', milieu(D, C).x, milieu(D, C).y + 0.3, 'milieu', 'black', 1, 'middle', true),
s1, s2, s4, s5, s6, code1, code2, code4, code5, code6, segment(D, E))
reponse = printlatex(`2x+${3 * a + b}`)
texte = 'Exprime en fonction de $x$, le périmètre de cette figure.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `La figure est composée de $2$ segments de longueur $x$, de $3$ segments de longueur $${a}$ et d'un segment de longueur $${b}$.<br>
Le périmètre de cette figure est donc : $2\\times x+3\\times ${a}+${b}=2x+${3 * a + b}$. `
}
if (choix === 'd') {
b = randint(7, 12)
a = randint(2, 5)
B = point(1, 1)
C = point(2, 1)
D = point(3, 2)
E = point(3, -1)
F = point(2, 0)
G = point(1, 0)
s1 = segment(B, G)
code1 = codageSegment(B, G, '||')
s2 = segment(B, C)
code2 = codageSegment(B, C, '||')
s4 = segment(G, F)
code4 = codageSegment(G, F, '||')
s5 = segment(C, D)
code5 = codageSegment(C, D, '|')
s6 = segment(E, F)
code6 = codageSegment(E, F, '|')
xmin = -1
ymin = -2
xmax = 4
ymax = 2.5
objets = []
objets.push(
texteParPosition('x', milieu(B, C).x, milieu(B, C).y + 0.3, 'milieu', 'black', 1, 'middle', true),
texteParPosition(`${stringNombre(b)}`, milieu(D, E).x + 0.3, milieu(D, E).y),
texteParPosition(`${stringNombre(a)}`, milieu(D, C).x, milieu(D, C).y + 0.3),
s1, s2, s4, s5, s6, code1, code2, code4, code5, code6, segment(D, E))
reponse = printlatex(`3x+${2 * a + b}`)
texte = 'Exprime en fonction de $x$, le périmètre de cette figure.<br>'
texte += mathalea2d({ xmin, ymin, xmax, ymax, pixelsParCm: 40, mainlevee: false, amplitude: 0.5, scale: 1, style: 'margin: auto' }, objets)
texteCorr = `La figure est composée de $3$ segments de longueur $x$, de $2$ segments de longueur $${a}$ et d'un segment de longueur $${b}$.<br>
Le périmètre de cette figure est donc : $3\\times x+2\\times ${a}+${b}=3x+${2 * a + b}$. `
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 24:
a = randint(-30, -11)
b = randint(25, 49)
reponse = a - b
texte = `Donne la solution de l'équation :<br>
$${a}-x=${b}$`
texteCorr = `En ajoutant $${-a}$ dans chacun des deux membres, on obtient, $-x=${b - a}$, d'où $x=${a - b}$. `
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 25:
a = randint(2, 10) * 1000
b = randint(2, 5)
reponse = Math.round(a * (1 + b / 100))
texte = ` Un capital de $${texNombre(a)}$ € rapporte $${texNombre(b)} \\%$ par an.<br>
Quelle est la valeur du capital au bout d'un an ?`
texteCorr = `Le capital est augmenté de $${b}\\%$ de $${texNombre(a)}$, soit de $${texNombre(b / 100)}\\times ${texNombre(a)}=${texNombre(a * b / 100)}$.<br>
Le capital au bout d'un an sera donc de : $${texNombre(a, 0)}+ ${texNombre(a * b / 100, 0)}=${texNombre(a + a * b / 100, 0)}$.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + '€' }
nbChamps = 1
break
case 26:
a = randint(8, 22)
b = 4
texte = `Une urne contient $${a}$ boules numérotées de $1$ à $${a}$. <br>
On choisit une boule au hasard. Quelle est la probabilité d'obtenir un nombre premier ? `
if (a < 11) {
texteCorr = `Les nombres premiers inférieurs à $${a}$ sont : $2$, $3$, $5$, $7$.<br>
Il y a donc $4$ nombres premiers inférieurs à $${a}$. <br>
On en déduit que la probabilité d'obtenir un nombre premier est : $${texFraction(b, a)}${simplificationDeFractionAvecEtapes(b, a)}$.`
reponse = [fraction(b, a), fraction(b, a).simplifie()]
}
if ((a > 10) && (a < 13)) {
texteCorr = `Les nombres premiers inférieurs à $${a}$ sont : $2$, $3$, $5$, $7$, $11$.<br>
Il y a donc $5$ nombres premiers inférieurs à $${a}$. <br>
On en déduit que la probabilité d'obtenir un nombre premier est : $${texFraction(b + 1, a)}${simplificationDeFractionAvecEtapes(b + 1, a)}$.`
reponse = [fraction(b + 1, a), fraction(b + 1, a).simplifie()]
}
if ((a > 12) && (a < 17)) {
texteCorr = `Les nombres premiers inférieurs à $${a}$ sont : $2$, $3$, $5$, $7$, $11$, $13$.<br>
Il y a donc $6$ nombres premiers inférieurs à $${a}$. <br>
On en déduit que la probabilité d'obtenir un nombre premier est : $${texFraction(b + 2, a)}${simplificationDeFractionAvecEtapes(b + 2, a)}$.`
reponse = [fraction(b + 2, a), fraction(b + 2, a).simplifie()]
}
if ((a > 16) && (a < 19)) {
texteCorr = `Les nombres premiers inférieurs à $${a}$ sont : $2$, $3$, $5$, $7$, $11$, $13$, $17$.<br>
Il y a donc $7$ nombres premiers inférieurs à $${a}$. <br>
On en déduit que la probabilité d'obtenir un nombre premier est : $${texFraction(b + 3, a)}${simplificationDeFractionAvecEtapes(b + 3, a)}$.`
reponse = [fraction(b + 3, a), fraction(b + 3, a).simplifie()]
}
if ((a > 18) && (a < 23)) {
texteCorr = `Les nombres premiers inférieurs à $${a}$ sont : $2$, $3$, $5$, $7$, $11$, $13$, $17$, $19$.<br>
Il y a donc $8$ nombres premiers inférieurs à $${a}$. <br>
On en déduit que la probabilité d'obtenir un nombre premier est : $${texFraction(b + 4, a)}${simplificationDeFractionAvecEtapes(b + 4, a)}$.`
reponse = [fraction(b + 4, a), fraction(b + 4, a).simplifie()]
}
setReponse(this, index, reponse, { formatInteractif: 'fraction' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 27:
a = randint(2, 6) * 3
b = randint(4, 9) * 3
c = arrondi(a + b / 100, 2)
reponse = arrondi(c / 3, 2)
texte = `$${texNombre(c, 2)}\\div 3= $`
texteCorr = `$${texNombre(c, 2)}\\div 3=(${texNombre(a)}+${texNombre(b / 100, 2)})\\div 3=${texNombre(a)}\\div 3+${texNombre(b / 100, 2)}\\div 3=${texNombre(a / 3, 0)}+${texNombre(b / 300, 2)}=${texNombre(reponse, 2)}$
`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') } else { texte += '$\\ldots$ ' }
nbChamps = 1
break
case 28:
choix = choice(['a', 'b', 'c'])//
if (choix === 'a') {
a = arrondi(randint(11, 39, [10, 20, 30]) / 1000, 3)
truc = arrondi(a * 100, 1)
reponse = `${stringNombre(truc, 1)}\\times 10^{-2}`
texte = `Ecriture scientifique de $${texNombre(a, 3)}$.`
texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
Ici : $${texNombre(a, 3)}=\\underbrace{${texNombre(truc, 1)}}_{1\\leqslant ${texNombre(truc, 1)} <10}\\times 10^{-2}$. `
}
if (choix === 'b') {
a = arrondi(randint(111, 399, [200, 300]) / 100000, 5)
truc = arrondi(a * 1000, 2)
reponse = `${stringNombre(truc, 2)}\\times 10^{-3}`
texte = `Ecriture scientifique de $${texNombre(a, 5)}$.`
texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
Ici : $${texNombre(a, 5)}=\\underbrace{${texNombre(truc, 2)}}_{1\\leqslant ${texNombre(truc, 2)} <10}\\times 10^{-3}$. `
}
if (choix === 'c') {
a = arrondi(randint(111, 399, [200, 300]) / 1000000, 6)
truc = arrondi(a * 10000, 2)
reponse = `${stringNombre(truc, 2)}\\times 10^{-4}`
texte = `Ecriture scientifique de $${texNombre(a, 6)}$.`
texteCorr = `L'écriture scientifique est de la forme $a\\times 10^{n}$ avec $1\\leqslant a <10$ et $n$ un entier relatif.<br>
Ici : $${texNombre(a, 6)}=\\underbrace{${texNombre(truc, 2)}}_{1\\leqslant ${texNombre(truc, 2)} <10}\\times 10^{-4}$. `
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 29:
a = randint(4, 9)
b = randint(2, 6)
truc = randint(4, 8)
resultat = (truc + a) * b
reponse = truc
texte = `Je pense à un nombre, je lui ajoute $${a}$ et je multiplie le résultat par $${b}$.<br>
J'obtiens $${resultat}$. Quel est ce nombre ?`
texteCorr = `On remonte le programme de calcul en commençant par diviser le nombre obtenu par $${b}$.<br>
On obtient $${resultat}\\div ${b}=${resultat / b}$<br>
On retranche ensuite $${a}$.<br>
On obtient $${resultat / b} -${a}=${truc}$.`
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') }
nbChamps = 1
break
case 30:
choix = choice(['a', 'b'])
if (choix === 'a') {
a = randint(2, 9) * 4
texte = `Un article à $${a}$ € est soldé à $${texNombre(a * 0.75, 2, true)}$ €.<br>
Quel est le pourcentage de réduction ?`
texteCorr = `La réduction est de $${a}-${texNombre(a * 0.75, 2, true)}=${texNombre(0.25 * a, 2, true)}$.<br>
Le prix de départ était de $${a}$ €. Le pourcentage de réduction est donné par : $\\dfrac{${texNombre(0.25 * a, 2, true)}}{${a}}=0,25=25\\%$. `
reponse = 25
}
if (choix === 'b') {
a = randint(2, 7) * 10
b = randint(1, 4) * 10
c = arrondi(1 - b / 100, 2)
texte = `Un article à $${a}$ € est soldé à $${texNombre(a * c, 2, true)}$ €.<br>
Quel est le pourcentage de réduction ?`
texteCorr = `La réduction est de $${a}-${texNombre(a * c, 2, true)}=${texNombre(a - a * c, 2, true)}$.<br>
Le prix de départ était de $${a}$ €. Le pourcentage de réduction est donné par : $\\dfrac{${texNombre(a - a * c, 2, true)}}{${a}}=${texNombre(b / 100, 2)}=${b}\\%$. `
reponse = b
}
setReponse(this, index, reponse, { formatInteractif: 'calcul' })
if (this.interactif) { texte += ajouteChampTexteMathLive(this, index, 'inline largeur15') + '%' }
nbChamps = 1
break
}
if (this.listeQuestions.indexOf(texte) === -1) { // Si la question n'a jamais été posée, on en créé une autre
this.listeQuestions.push(texte)
this.listeCorrections.push(texteCorr)
i++
index += nbChamps
}
cpt++
}
listeQuestionsToContenu(this)
}
}