exercices/3e/3F10-1.js

  1. import Exercice from '../Exercice.js'
  2. import { mathalea2d } from '../../modules/2dGeneralites.js'
  3. import { context } from '../../modules/context.js'
  4. import { listeQuestionsToContenu, randint, combinaisonListes, rangeMinMax } from '../../modules/outils.js'
  5. import { propositionsQcm } from '../../modules/interactif/questionQcm.js'
  6. import { droiteParPointEtPente, point, repere, tracePoint } from '../../modules/2d.js'
  7. export const interactifReady = true
  8. export const interactifType = 'qcm'
  9. export const amcReady = true
  10. export const amcType = 'qcmMult'
  11. export const titre = 'Vocabulaire et notations des fonctions (généralités)'
  12. /**
  13. * Répndre à des questions sur les fonctions.
  14. *
  15. * @author Jean-Claude Lhote
  16. * 3F10-1
  17. */
  18. export const uuid = '0eecd'
  19. export const ref = '3F10-1'
  20. export default function VocabulaireNotationsFonctions () {
  21. Exercice.call(this) // Héritage de la classe Exercice()
  22. this.sup = 2
  23. this.consigne = ''
  24. this.correctionDetailleeDisponible = true
  25. this.correctionDetaillee = false
  26. this.spacing = 2
  27. this.nbQuestions = 3
  28. this.nbQuestionsModifiable = true
  29. this.nouvelleVersion = function () {
  30. this.autoCorrection = []
  31. this.sup = parseInt(this.sup)
  32. this.listeQuestions = [] // Liste de questions
  33. this.listeCorrections = [] // Liste de questions corrigées
  34. this.autoCorrection = []
  35. this.consigne = 'Cocher toutes les réponses correctes.'
  36. let typesDeQuestionsDisponibles
  37. const r = repere({ xMin: -10, xMax: 10, yMin: -10, yMax: 10 })
  38. switch (this.sup) {
  39. case 1: // vocabulaire
  40. typesDeQuestionsDisponibles = ['vocabulaire']
  41. break
  42. case 2: // notations
  43. typesDeQuestionsDisponibles = ['notations']
  44. break
  45. case 3: // mélange vocabulaire et notations
  46. typesDeQuestionsDisponibles = ['vocabulaire', 'notations']
  47. break
  48. }
  49. const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
  50. const sousChoix = combinaisonListes(rangeMinMax(0, 4), this.nbQuestions) // pour choisir aléatoirement des questions dans chaque catégorie
  51. for (let i = 0, texte, texteCorr, x, y, m, d, A, enonce, reponses = [], monQcm, cpt = 0; i < this.nbQuestions && cpt < 50;) {
  52. this.autoCorrection[i] = {}
  53. // on ne choisit que des nombres compris entre 1 et 20
  54. x = randint(-9, 9, [0, 1, -1])
  55. y = randint(-9, 9, x)
  56. switch (listeTypeDeQuestions[i]) {
  57. case 'vocabulaire':
  58. switch (sousChoix[i]) {
  59. case 0:
  60. enonce = `$f$ est la fonction qui à $${x}$ associe $${y}$, alors pour la fonction $f$ :`
  61. break
  62. case 1:
  63. enonce = `$${x}$ a pour image $${y}$ par la fonction $f$, alors pour la fonction $f$ :`
  64. break
  65. case 2:
  66. enonce = `$${y}$ a pour antécédent $${x}$ par la fonction $f$, alors pour la fonction $f$ :`
  67. break
  68. case 3:
  69. enonce = `L'image de $${x}$ par la fonction $f$ est $${y}$, alors pour la fonction $f$ :`
  70. break
  71. case 4:
  72. enonce = `$${y}$ est l'image de $${x}$ par la fonction $f$, alors pour la fonction $f$ :`
  73. break
  74. }
  75. reponses[i] = [[`$${x}$ est un antécédent de $${y}$`, true], [`$${x}$ est l'image de $${y}$`, false], [`$${y}$ est un antécédent de $${x}$`, false], [`$${y}$ est l'image de $${x}$`, true]]
  76. break
  77. case 'notations':
  78. switch (sousChoix[i]) {
  79. case 0:
  80. enonce = `On sait que $f(${x})=${y}$, alors pour la fonction $f$ :`
  81. reponses[i] = [[`$${x}$ est un antécédent de $${y}$.`, true], [`$${x}$ est l'image de $${y}$.`, false], [`$${y}$ est un antécédent de $${x}$.`, false], [`$${y}$ est l'image de $${x}$.`, true]]
  82. break
  83. case 1:
  84. enonce = `$f : ${x} \\longmapsto ${y}$, alors pour la fonction $f$ :`
  85. reponses[i] = [[`$${x}$ est un antécédent de $${y}$.`, true], [`$${x}$ est l'image de $${y}$.`, false], [`$${y}$ est un antécédent de $${x}$.`, false], [`$${y}$ est l'image de $${x}$.`, true]]
  86. break
  87. case 2:
  88. enonce = `Pour $x=${x}$, $f(x)=${y}$, alors pour la fonction $f$ :`
  89. reponses[i] = [[`$${x}$ est un antécédent de $${y}$.`, true], [`$${x}$ est l'image de $${y}$.`, false], [`$${y}$ est un antécédent de $${x}$.`, false], [`$${y}$ est l'image de $${x}$.`, true]]
  90. break
  91. case 3:
  92. A = point(x, y)
  93. d = droiteParPointEtPente(A, randint(-4, 4, 0) / 2, '', 'red')
  94. enonce = 'La fonction $f$ est représentée par la droite rouge ci-dessous.<br>'
  95. enonce += mathalea2d({ xmin: -10, ymin: -10, xmax: 10, ymax: 10, pixelsParCm: 15, scale: 0.5 }, r, d, tracePoint(A)) + '<br>Alors pour la fonction $f$ :'
  96. reponses[i] = [[`$${x}$ est un antécédent de $${y}$.`, true], [`$${x}$ est l'image de $${y}$.`, false], [`$${y}$ est un antécédent de $${x}$.`, false], [`$${y}$ est l'image de $${x}$.`, true]]
  97. break
  98. case 4:
  99. m = randint(-9, 9, [x, y])
  100. enonce = `On sait que $f(${x})=f(${y})=${m}$, alors pour la fonction $f$ :`
  101. reponses[i] = [[`$${x}$ et $${y}$ sont des antécédents de $${m}$.`, true], [`$${m}$ est l'image de $${x}$ et de $${y}$.`, true], [`$${x}$ et $${y}$ sont des images de $${m}$.`, false], [`$${m}$ est un antécédent de $${x}$ et $${y}$.`, false]]
  102. break
  103. }
  104. break
  105. }
  106. if (!context.isHtml) enonce += '<br>'
  107. this.autoCorrection[i] = {
  108. enonce: enonce,
  109. options: { ordered: false, vertical: true },
  110. propositions: []
  111. }
  112. for (let k = 0; k < reponses[i].length; k++) {
  113. this.autoCorrection[i].propositions.push({ texte: reponses[i][k][0] + (context.isHtml ? '' : '<br>'), statut: reponses[i][k][1] })
  114. }
  115. monQcm = propositionsQcm(this, i)
  116. if (!context.isAmc) {
  117. texte = enonce + monQcm.texte
  118. texteCorr = monQcm.texteCorr
  119. } else {
  120. texte = enonce
  121. texteCorr = ''
  122. }
  123. if (this.questionJamaisPosee(i, listeTypeDeQuestions[i], x, y, sousChoix[i])) {
  124. // Si la question n'a jamais été posée, on en créé une autre
  125. this.listeQuestions.push(texte)
  126. this.listeCorrections.push(texteCorr)
  127. i++
  128. }
  129. cpt++
  130. }
  131. listeQuestionsToContenu(this)
  132. }
  133. this.besoinFormulaireNumerique = [
  134. 'Choix des questions',
  135. 3,
  136. '1 : Vocabulaire\n2 : Notations \n3 : Mélange'
  137. ]
  138. }