HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/2F22-1-O7hef6gN.js.map
{"version":3,"file":"2F22-1-O7hef6gN.js","sources":["../../src/exercices/2e/2F22-1.js"],"sourcesContent":["import { lectureAntecedent } from '../../lib/2d/courbes.js'\nimport { droiteParPointEtPente } from '../../lib/2d/droites.js'\nimport { point } from '../../lib/2d/points.js'\nimport { repere } from '../../lib/2d/reperes.js'\nimport { texteParPosition } from '../../lib/2d/textes.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { spline } from '../../lib/mathFonctions/Spline.js'\nimport { choice } from '../../lib/outils/arrayOutils'\nimport { arrondi } from '../../lib/outils/nombres'\nimport { numAlpha } from '../../lib/outils/outilString.js'\nimport { texNombre } from '../../lib/outils/texNombre'\nimport { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport Exercice from '../Exercice'\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Résoudre graphiquement une équation du type $f(x)=k$'\nexport const interactifReady = true\nexport const interactifType = 'custom'\n\nexport const dateDePublication = '06/07/2023' // La date de publication initiale au format 'jj/mm/aaaa' pour affichage temporaire d'un tag\nexport const uuid = 'a2ac2' // @todo à changer dans un nouvel exo (utiliser pnpm getNewUuid)\nexport const ref = '2F22-1'// @todo à modifier aussi\n// une liste de nœuds pour définir une fonction Spline\nconst noeuds1 = [{ x: -4, y: -1, deriveeGauche: 0, deriveeDroit: 0, isVisible: true },\n  { x: -3, y: 1, deriveeGauche: 3, deriveeDroit: 3, isVisible: false },\n  { x: -2, y: 4, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: -1, y: 1, deriveeGauche: -3, deriveeDroit: -3, isVisible: false },\n  { x: 0, y: -2, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: 2, y: 1, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: 3, y: -2, deriveeGauche: -2.5, deriveeDroit: -2.5, isVisible: false },\n  { x: 4, y: -4, deriveeGauche: 0, deriveeDroit: 0, isVisible: true }\n]\n// une autre liste de nœuds...\nconst noeuds2 = [{ x: -5, y: 1, deriveeGauche: 1.5, deriveeDroit: 1.5, isVisible: true },\n  { x: -4, y: 3, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: -3, y: 1, deriveeGauche: -2, deriveeDroit: -2, isVisible: false },\n  { x: -2, y: 0, deriveeGauche: -1.5, deriveeDroit: -1, isVisible: false },\n  { x: -1, y: -1, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: 0, y: 0, deriveeGauche: 1, deriveeDroit: 1, isVisible: false },\n  { x: 1, y: 3, deriveeGauche: 3, deriveeDroit: 3, isVisible: false },\n  { x: 2, y: 5, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: 3, y: 4, deriveeGauche: -2, deriveeDroit: -2, isVisible: false },\n  { x: 4, y: 3, deriveeGauche: 0, deriveeDroit: 0, isVisible: false },\n  { x: 5, y: 4, deriveeGauche: 1, deriveeDroit: 1, isVisible: false },\n  { x: 6, y: 5, deriveeGauche: 0.2, deriveeDroit: 0.2, isVisible: true }\n]\n// une troisième utilisée pour fonctions2\nconst noeuds3 = [{ x: -6, y: -4, deriveeGauche: 0.5, deriveeDroit: 0.5, isVisible: true },\n  { x: -5, y: -3, deriveeGauche: 2, deriveeDroit: 2, isVisible: true },\n  { x: -4, y: 0, deriveeGauche: 2, deriveeDroit: 2, isVisible: true },\n  { x: -3, y: 1, deriveeGauche: 0, deriveeDroit: 0, isVisible: true },\n  { x: -2, y: 0, deriveeGauche: -2, deriveeDroit: -2, isVisible: true },\n  { x: -1, y: -3, deriveeGauche: -2, deriveeDroit: -2, isVisible: true },\n  { x: 0, y: -5, deriveeGauche: 0, deriveeDroit: 0, isVisible: true },\n  { x: 1, y: -3, deriveeGauche: 2.5, deriveeDroit: 2.5, isVisible: true },\n  { x: 2, y: 0, deriveeGauche: 1.5, deriveeDroit: 1.5, isVisible: true },\n  { x: 3, y: 1, deriveeGauche: 0, deriveeDroit: 0, isVisible: true },\n  { x: 4, y: 0, deriveeGauche: -1.5, deriveeDroit: -1.5, isVisible: true },\n  { x: 5, y: -2, deriveeGauche: 0, deriveeDroit: 0, isVisible: true }]\n\n// une liste des listes\nconst mesFonctions1 = [noeuds1, noeuds2, noeuds3]//, noeuds2\n// const mesFonctions2 = [noeuds3]//, noeuds4\n\n/**\n * choisit les caractèristique de la transformation de la courbe\n * @returns {Array<{x: number, y:number, deriveeGauche:number, deriveeDroit:number, isVisible:boolean}>}\n */\nfunction aleatoiriseCourbe (listeFonctions) {\n  const coeffX = choice([-1, 1]) // symétries ou pas\n  const coeffY = choice([-1, 1])\n  const deltaX = randint(-2, +2) // translations\n  const deltaY = randint(-2, +2)\n  const choix = choice(listeFonctions)\n  return choix.map((noeud) => Object({\n    x: (noeud.x + deltaX) * coeffX,\n    y: (noeud.y + deltaY) * coeffY,\n    deriveeGauche: noeud.deriveeGauche * coeffX * coeffY,\n    deriveeDroit: noeud.deriveeDroit * coeffX * coeffY,\n    isVisible: noeud.isVisible\n  }))\n}\n\n/**\n * Aléatoirise une courbe et demande les antécédents d'une valeur entière (eux aussi entiers)\n * @author Jean-Claude Lhote (Gilles Mora)\n * Référence (2F22-1)\n */\nexport default class LecturesGraphiquesSurSplines extends Exercice {\n  constructor () {\n    super()\n    this.titre = titre\n    this.nbQuestions = 1 // Nombre de questions par défaut\n    this.nbQuestionsModifiable = false\n    this.exoCustomResultat = true\n  }\n\n  nouvelleVersion () {\n    this.listeQuestions = []\n    this.listeCorrections = []\n    this.autoCorrection = []\n\n    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n      let bornes = {}\n      const objetsEnonce = []\n      const objetsCorrection1 = []\n      const objetsCorrection2 = []\n      // la liste des noeuds de notre fonction\n      const nuage = aleatoiriseCourbe(mesFonctions1)\n      const theSpline = spline(nuage)\n      // On a besoin de la spline pour la correction interactive\n      this.spline = theSpline\n      bornes = theSpline.trouveMaxes()\n      const nbAntecedentsEntiersMaximum = theSpline.nombreAntecedentsMaximum(bornes.yMin, bornes.yMax, true, true)\n      const nbAntecedentsMaximum = theSpline.nombreAntecedentsMaximum(bornes.yMin - 1, bornes.yMax + 1, false, false)\n      let nombreAntecedentCherches0, y0, nombreAntecedentCherches1, y1, nombreAntecedentsCherches2, y2\n      do {\n        nombreAntecedentCherches0 = randint(1, nbAntecedentsEntiersMaximum)\n        y0 = theSpline.trouveYPourNAntecedents(nombreAntecedentCherches0, bornes.yMin - 1, bornes.yMax + 1, true, true)\n        nombreAntecedentCherches1 = randint(0, nbAntecedentsEntiersMaximum, nombreAntecedentCherches0)\n        y1 = theSpline.trouveYPourNAntecedents(nombreAntecedentCherches1, bornes.yMin - 1, bornes.yMax + 1, true, true)\n        nombreAntecedentsCherches2 = randint(0, nbAntecedentsMaximum, [nombreAntecedentCherches1, nombreAntecedentCherches0])\n        y2 = arrondi(theSpline.trouveYPourNAntecedents(nombreAntecedentsCherches2, bornes.yMin - 1, bornes.yMax + 1, false, false), 1)\n      } while (isNaN(y0) || isNaN(y1) || isNaN(y2) || y0 === 0 || y2 === 0)\n\n      const solutions0 = theSpline.solve(y0)\n      const solutions1 = theSpline.solve(y1)\n      const reponse1 = solutions1.length === 0 ? 'aucune' : `${solutions1.join(';')}`\n      const horizontale1 = droiteParPointEtPente(point(0, y1), 0, '', 'green')\n      const horizontale2 = droiteParPointEtPente(point(0, y2), 0, '', 'green')\n      const nomD1 = texteParPosition(`$y=${y1}$`, bornes.xMax + 1.5, y1 + 0.3, 'milieu', 'green', 1.5)\n      const nomD2 = texteParPosition(`$y=${texNombre(y2, 1)}$`, bornes.xMax + 1.5, y2 + 0.3, 'milieu', 'green', 1.5)\n      horizontale1.epaisseur = 2\n      horizontale1.pointilles = 2\n      horizontale2.pointilles = 2\n      horizontale2.epaisseur = 2\n      objetsCorrection1.push(horizontale1, nomD1)\n      objetsCorrection2.push(horizontale2, nomD2)\n\n      for (let j = 0; j < nombreAntecedentCherches0; j++) {\n        objetsCorrection1.push(lectureAntecedent(solutions0[j], y0, 1, 1, 'red', '', ''))\n      }\n\n      for (const antecedentY2 of theSpline.solve(y2)) {\n        objetsCorrection2.push(lectureAntecedent(antecedentY2, y2, 1, 1, 'red', '', ''))\n      }\n\n      let enonceSousRepere = 'Répondre aux questions en utilisant le graphique.'\n      enonceSousRepere += `<br>${numAlpha(0)}Quel est le nombre de solutions de l'équation $f(x)=${y0}$ ?` + ajouteChampTexteMathLive(this, 3 * i, 'inline largeur10')\n      enonceSousRepere += `<br>${numAlpha(1)}Résoudre l'équation $f(x)=${y1}$.`\n      if (this.interactif) {\n        enonceSousRepere += '<br>Écrire les solutions rangées dans l\\'ordre croissant séparés par des points-virgules (saisir \"aucune\" s\\'il n\\'y en a pas).<br>'\n        enonceSousRepere += 'Solution(s) : ' + ajouteChampTexteMathLive(this, 3 * i + 1, 'alphanumeric nospacebefore inline largeur15') + '<br>'\n      }\n      enonceSousRepere += `<br>${numAlpha(2)}Déterminer une valeur de $k$ telle que $f(x)=k$ admette exactement $${nombreAntecedentsCherches2}$ solution${nombreAntecedentsCherches2 > 1 ? 's' : ''}.` +\n                ajouteChampTexteMathLive(this, 3 * i + 2, 'inline largeur25')\n      setReponse(this, 3 * i, nombreAntecedentCherches0)\n      setReponse(this, 3 * i + 1, reponse1)\n      setReponse(this, 3 * i + 2, y2)\n      const correctionPartA = `${numAlpha(0)} Le nombre de solutions de l'équation $f(x)=${y0}$ est donné par le nombre d'antécédents de $${y0}$ par $f$. <br>\n          ${solutions0.length === 0 ? 'Il n\\'y en a pas, donc l\\'équation n\\'a pas de solution.' : 'Il y en a $' + solutions0.length + '$ (tracé rouge en pointillés).'}<br>`\n      const correctionPartB = `${numAlpha(1)} Résoudre l'équation $f(x)=${y1}$ graphiquement revient à lire les abscisses des points d'intersection entre $\\\\mathscr{C}_f$ et ${y1 === 0 ? 'l\\'axe des abscisses.' : `la droite (parallèle à l'axe des abscisses tracée en pointillés verts) d'équation $y = ${y1}$.`}<br>\n          On en déduit : ${solutions1.length === 0 ? '$S=\\\\emptyset$.' : `$S=\\\\{${solutions1.join('\\\\,;\\\\,')}\\\\}$.`}<br>`\n      const correctionPartC = `${numAlpha(2)}  Par exemple, l'équation $f(x)=${texNombre(y2, 1)}$ possède exactement ${nombreAntecedentsCherches2} solution${nombreAntecedentsCherches2 > 1 ? 's' : ''}.<br>`\n      const repere1 = repere({\n        xMin: bornes.xMin - 1,\n        xMax: bornes.xMax + 1,\n        yMin: bornes.yMin - 1,\n        yMax: bornes.yMax + 1,\n        axesEpaisseur: 1.5,\n        thickEpaisseur: 1.2,\n        yLabelEcart: 0.6,\n        thickHauteur: 0.1,\n        // grille: true,\n        // grilleCouleur: 'gray',\n        grilleX: false,\n        grilleY: false,\n        grilleSecondaire: true,\n        grilleSecondaireYDistance: 1,\n        grilleSecondaireXDistance: 1,\n        grilleSecondaireYMin: bornes.yMin - 1,\n        grilleSecondaireYMax: bornes.yMax + 1,\n        grilleSecondaireXMin: bornes.xMin - 1,\n        grilleSecondaireXMax: bornes.xMax + 1\n      })\n      const courbeATracer = theSpline.courbe({\n        repere: repere1,\n        epaisseur: 1.2,\n        color: 'blue',\n        ajouteNoeuds: true,\n        optionsNoeuds: { color: 'blue', taille: 1, style: '.', epaisseur: 1.5 }\n\n      })\n      for (let j = 0; j < nombreAntecedentCherches1; j++) {\n        for (let k = 0; k < theSpline.visibles.length; k++) {\n          theSpline.visibles[k] = theSpline.y[k] === y1\n        }\n      }\n      const courbeCorrection = theSpline.courbe({\n        repere: repere1,\n        epaisseur: 1.2,\n        color: 'blue',\n        ajouteNoeuds: true,\n        optionsNoeuds: { color: 'blue', taille: 1, style: '.', epaisseur: 1.5 }\n      })\n\n      objetsEnonce.push(repere1, courbeATracer)\n      objetsCorrection1.push(repere1, courbeCorrection)\n      objetsCorrection2.push(repere1, courbeATracer)\n\n      const origine = texteParPosition('O', -0.3, -0.3, 'milieu', 'black', 1)\n      texte = `Voici la représentation graphique $\\\\mathscr{C}_f$ d'une fonction $f$ définie sur $[${theSpline.x[0]}\\\\,;\\\\,${theSpline.x[theSpline.n - 1]}]$.<br>`\n      texte += mathalea2d(Object.assign({\n        scale: 0.6,\n        style: 'display: block'\n      }, fixeBordures(objetsEnonce)), objetsEnonce, origine) + enonceSousRepere\n      texteCorr = correctionPartA +\n                correctionPartB +\n                mathalea2d(Object.assign({ scale: 0.6 }, fixeBordures(objetsCorrection1)), objetsCorrection1, origine) +\n                correctionPartC +\n                mathalea2d(Object.assign({ scale: 0.6 }, fixeBordures(objetsCorrection2)), objetsCorrection2, origine)\n      // Si la question n'a jamais été posée, on l'enregistre\n      if (this.questionJamaisPosee(i, texte)) { // <- laisser le i et ajouter toutes les variables qui rendent les exercices différents (par exemple a, b, c et d)\n        this.listeQuestions.push(texte)\n        this.listeCorrections.push(texteCorr)\n        i++\n      }\n      cpt++\n    }\n    listeQuestionsToContenu(this) // On envoie l'exercice à la fonction de mise en page\n  }\n\n  correctionInteractive = (i) => {\n    // 10/10/2023 le console.log() ci-dessous est à décommenter pour enquêter sur ce qui semble être un bug : deux passages dans cette fonction au lieu d'un !\n    // console.log(`passage dans this.correctionInteractive avec la valeur i = ${i}`)\n    let resultat1, resultat2, resultat3\n    for (let k = 0; k < 3; k++) {\n      const divFeedback = document.querySelector(`#resultatCheckEx${this.numeroExercice}Q${i * 3 + k}`)\n      const reponseEleve = document.getElementById(`champTexteEx${this.numeroExercice}Q${i * 3 + k}`)?.value\n      if (reponseEleve != null) {\n        if (this.autoCorrection[i * 3 + k] != null && this.autoCorrection[i * 3 + k].reponse != null && Array.isArray(this.autoCorrection[i * 3 + k].reponse.valeur)) {\n          switch (k) {\n            case 0:\n              if (Number(reponseEleve) === Number(this.autoCorrection[i * 3 + k].reponse.valeur[0])) {\n                divFeedback.innerHTML = '😎'\n                resultat1 = 'OK'\n              } else {\n                divFeedback.innerHTML = '☹️'\n                resultat1 = 'KO'\n              }\n              break\n            case 1:\n              if ((reponseEleve === this.autoCorrection[i * 3 + k].reponse.valeur[0]) ||\n                (reponseEleve.replaceAll(/\\s/g, '') === this.autoCorrection[i * 3 + k].reponse.valeur[0])) {\n                divFeedback.innerHTML = '😎'\n                resultat2 = 'OK'\n              } else {\n                divFeedback.innerHTML = '☹️'\n                resultat2 = 'KO'\n              }\n              break\n            case 2:\n            // Si l'élève répond autre chose qu'un nombre, il faut blinder ici !\n              if (isNaN(Number(reponseEleve.replace(',', '.'))) || isNaN(this.autoCorrection[i * 3 + k].reponse.valeur[0])) {\n                if (isNaN(this.autoCorrection[i * 3 + k].reponse.valeur[0])) {\n                  window.notify('La réponse ne sont pas des number', {\n                    reponse: this.autoCorrection[i * 3 + k].reponse.valeur[0]\n                  })\n                }\n                divFeedback.innerHTML = '☹️'\n                resultat3 = 'KO'\n              } else {\n                if (this.spline.nombreAntecedents(Number(reponseEleve.replace(',', '.'))) === this.spline.nombreAntecedents(this.autoCorrection[i * 3 + k].reponse.valeur[0])) {\n                  divFeedback.innerHTML = '😎'\n                  resultat3 = 'OK'\n                } else {\n                  divFeedback.innerHTML = '☹️'\n                  resultat3 = 'KO'\n                }\n              }\n              break\n          }\n        }\n      } else {\n        window.notify('Quelque chose de pas normal avec l\\'autoCorrection : ', { nbQuestions: this.nbQuestions, index: i * 3 + k, autoCorrection: this.autoCorrection })\n        switch (k) {\n          case 0:\n            divFeedback.innerHTML = '☹️'\n            resultat1 = 'KO'\n            break\n          case 1:\n            divFeedback.innerHTML = '☹️'\n            resultat2 = 'KO'\n            break\n          case 2:\n            divFeedback.innerHTML = '☹️'\n            resultat3 = 'KO'\n            break\n        }\n      }\n    }\n    return [resultat1, resultat2, resultat3]\n  }\n}\n"],"names":["titre","interactifReady","interactifType","dateDePublication","uuid","ref","noeuds1","noeuds2","noeuds3","mesFonctions1","aleatoiriseCourbe","listeFonctions","coeffX","choice","coeffY","deltaX","randint","deltaY","noeud","LecturesGraphiquesSurSplines","Exercice","__publicField","i","resultat1","resultat2","resultat3","k","divFeedback","reponseEleve","_a","texte","texteCorr","cpt","bornes","objetsEnonce","objetsCorrection1","objetsCorrection2","nuage","theSpline","spline","nbAntecedentsEntiersMaximum","nbAntecedentsMaximum","nombreAntecedentCherches0","y0","nombreAntecedentCherches1","y1","nombreAntecedentsCherches2","y2","arrondi","solutions0","solutions1","reponse1","horizontale1","droiteParPointEtPente","point","horizontale2","nomD1","texteParPosition","nomD2","texNombre","j","lectureAntecedent","antecedentY2","enonceSousRepere","numAlpha","ajouteChampTexteMathLive","setReponse","correctionPartA","correctionPartB","correctionPartC","repere1","repere","courbeATracer","courbeCorrection","origine","mathalea2d","fixeBordures","listeQuestionsToContenu"],"mappings":"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"}