File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/outilsStat-csXHeSjv.js.map
{"version":3,"file":"outilsStat-csXHeSjv.js","sources":["../../src/modules/outilsStat.js"],"sourcesContent":["import { choice } from '../lib/outils/arrayOutils'\nimport { nomDuMois } from '../lib/outils/dateEtHoraires'\nimport { deprecatedTexFraction } from '../lib/outils/deprecatedFractions.js'\nimport { ecritureParentheseSiNegatif } from '../lib/outils/ecritures'\nimport { lampeMessage } from '../lib/format/message.js'\nimport { arrondi } from '../lib/outils/nombres'\nimport { prenom } from '../lib/outils/Personne'\nimport { texteGras } from '../lib/format/style'\nimport { stringNombre, texNombre } from '../lib/outils/texNombre'\nimport { miseEnEvidence } from '../lib/outils/embellissements'\nimport FractionEtendue from './FractionEtendue'\n\nfunction underbraceMediane (nbVal) {\n let sortie\n if (nbVal % 2 === 0) { // nb pair de valeurs\n sortie = `$\\\\underbrace{1^e\\\\hspace{0.25cm}2^e ... ${nbVal / 2 - 1}^e}_{${nbVal / 2 - 1}\\\\; valeurs} \\\\hspace{0.25cm} ${nbVal / 2}^e \\\\hspace{0.25cm} ${nbVal / 2 + 1}^e \\\\hspace{0.25cm} \\\\underbrace{${nbVal / 2 + 2}^e ... ${nbVal}^e}_{${nbVal / 2 - 1}\\\\; valeurs}$`\n } else { // nb impair de valeurs\n sortie = `$\\\\underbrace{1^e\\\\hspace{0.25cm}2^e ... ${(nbVal - 1) / 2}^e}_{${(nbVal - 1) / 2}\\\\; valeurs} \\\\hspace{0.25cm} ${(nbVal - 1) / 2 + 1}^e \\\\hspace{0.25cm} \\\\underbrace{${(nbVal - 1) / 2 + 2}^e ... ${nbVal}^e}_{${(nbVal - 1) / 2}\\\\; valeurs}$`\n }\n return sortie\n}\n\nfunction desTabEffCumul (tirages, effCumulBool, categories = [], lignes = ['Catégories', 'Scores', 'Nombre d\\'apparitions', 'Nombre d\\'apparitions cumulées']) {\n let sortie\n if (!effCumulBool) {\n sortie = ''\n if (tirages.length > 12) {\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs 1/2\n for (let j = 0; j <= Math.round(tirages.length / 2); j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$<br><br>'\n\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs 2/2\n for (let j = Math.round(tirages.length / 2); j <= tirages.length; j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$'\n } else {\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs en un seul morceau\n for (let j = 0; j <= tirages.length; j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$'\n }\n } else {\n sortie = ''\n if (tirages.length > 12) {\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs 1/2\n for (let j = 0; j <= Math.round(tirages.length / 2); j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[3]}} `\n for (let j = 0; j < Math.round(tirages.length / 2); j++) {\n let cumul = 0\n for (let k = 0; k <= j; k++) {\n cumul += tirages[k][1]\n }\n sortie += '&' + cumul// tirages[j][1];\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$<br><br>'\n\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs 2/2\n for (let j = Math.round(tirages.length / 2); j <= tirages.length; j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[3]}} `\n for (let j = Math.round(tirages.length / 2); j < tirages.length; j++) {\n let cumul = 0\n for (let k = 0; k <= j; k++) {\n cumul += tirages[k][1]\n }\n sortie += '&' + cumul// tirages[j][1];\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$'\n } else {\n sortie += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // construction du tableau des effectifs en un seul morceau\n for (let j = 0; j <= tirages.length; j++) {\n sortie += '|c'\n }\n sortie += '}'\n if (categories.length > 0) {\n sortie += '\\\\hline ' + `\\\\text{${lignes[0]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&\\\\text{' + categories[j] + '}'\n }\n sortie += '\\\\\\\\'\n }\n sortie += '\\\\hline ' + `\\\\text{${lignes[1]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&' + tirages[j][0]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[2]}} `\n for (let j = 0; j < tirages.length; j++) {\n sortie += '&' + tirages[j][1]\n }\n sortie += '\\\\\\\\\\\\hline ' + `\\\\text{${lignes[3]}} `\n for (let j = 0; j < tirages.length; j++) {\n let cumul = 0\n for (let k = 0; k <= j; k++) {\n cumul += tirages[k][1]\n }\n sortie += '&' + cumul// tirages[j][1];\n }\n sortie += '\\\\\\\\\\\\hline\\\\end{array}$'\n }\n }\n\n return sortie\n}\n\nfunction computeMoyenne (notes) {\n let somme = 0\n for (let j = 0; j < notes.length; j++) {\n somme += notes[j]\n }\n\n return [deprecatedTexFraction(somme, notes.length), somme]\n}\n\nfunction computeMediane (notes) {\n const notesRangees = notes.sort((a, b) => a - b)\n let mediane\n if (notes.length % 2 === 0) { // attention les indices commencent à 0 !\n mediane = [notesRangees[notes.length / 2 - 1], notesRangees[notes.length / 2]]\n } else {\n mediane = notesRangees[(notes.length - 1) / 2]\n }\n let medianeCorr // pour la correction statique\n Array.isArray(mediane) ? medianeCorr = (mediane[0] + mediane[1]) / 2 : medianeCorr = mediane\n return [mediane, medianeCorr]\n}\n\nfunction computeEtendue (notes) {\n let min = notes[0]\n let max = notes[0]\n for (let j = 1; j < notes.length; j++) { // On cherche la note minimum et la note maximum\n min = Math.min(notes[j], min)\n max = Math.max(notes[j], max)\n }\n return [min, max]\n}\n\nfunction computeMoyenneTirages2D (tirages) {\n let somme = 0\n let effectif = 0\n for (let k = 0; k < tirages.length; k++) {\n somme += tirages[k][0] * tirages[k][1]\n effectif += tirages[k][1]\n }\n return [deprecatedTexFraction(somme, effectif), somme, effectif]\n}\n\nfunction computeMedianeTirages2D (nombreTirages, tirages) {\n const scoresMedians = []\n let medianeCorr // pour la correction statique\n if (nombreTirages % 2 === 0) {\n // on récupère le score des deux lancers médians\n // compteur\n let cpt = 0\n // Pour cumuler les effectifs, tirages est un tableau 2D qui contient les couples [score,effectif]\n let effCumulCroiss = tirages[0][1]\n // On récupère le premier score médian\n while (effCumulCroiss < nombreTirages / 2) {\n cpt += 1\n effCumulCroiss += tirages[cpt][1]\n }\n\n scoresMedians.push(tirages[cpt][0])\n // On récupère le second score médian\n cpt = 0\n effCumulCroiss = tirages[0][1]\n while (effCumulCroiss < nombreTirages / 2 + 1) {\n cpt += 1\n effCumulCroiss += tirages[cpt][1]\n }\n\n scoresMedians.push(tirages[cpt][0])\n scoresMedians[0] === scoresMedians[1] ? medianeCorr = scoresMedians[0] : medianeCorr = (scoresMedians[0] + scoresMedians[1]) / 2\n } else { // Le nombre de lancers est impair ici\n // on récupère le score des deux lancers médians\n // compteur\n let cpt = 0\n // Pour cumuler les effectifs, tirages est un tableau 2D qui contient les couples [score,effectif]\n let effCumulCroiss = tirages[0][1]\n // On récupère le premier score médian\n while (effCumulCroiss <= nombreTirages / 2) {\n cpt += 1\n effCumulCroiss += tirages[cpt][1]\n }\n\n scoresMedians.push(tirages[cpt][0])\n medianeCorr = scoresMedians[0]\n }\n return [scoresMedians, medianeCorr]\n}\n\nfunction texteCorrMoyenneNotes (notesSeries, somme, nombreNotes, notes = 'notes') {\n const data = [\n ['notes', 'la moyenne des notes', ''],\n ['lancers', 'la moyenne des lancers', ''],\n ['températures', 'la moyenne des températures', ' $\\\\mathbf{^\\\\circ\\\\text{C}}$'],\n ['salaires', 'le salaire moyen', ' €'],\n ['pointures', 'la pointure moyenne', '']\n ]\n\n const noteStr = data.find(el => el[0] === notes) || ['', '', '']\n\n let texteCorr = ''\n if (notesSeries !== undefined && notesSeries instanceof Array && notesSeries.length > 0 && notesSeries[0] instanceof Array && notesSeries[0].length > 0) {\n // tableau à deux entrées\n texteCorr += '$\\\\text{Moyenne} = '\n texteCorr += `\\\\dfrac{${notesSeries[0][0]} \\\\times ${notesSeries[0][1]}`\n let eff = `${notesSeries[0][1]}`\n for (let j = 1; j < notesSeries.length; j++) {\n if (notesSeries.length < 10) {\n texteCorr += `+ ${notesSeries[j][0]} \\\\times ${notesSeries[j][1]}`\n eff += `+ ${notesSeries[j][1]}`\n } else {\n if (j < 3) texteCorr += `+ ${notesSeries[j][0]} \\\\times ${notesSeries[j][1]}`\n if (j < 3) eff += `+ ${notesSeries[j][1]}`\n if (j === 3) texteCorr += '+ \\\\ldots '\n if (j === 3) eff += '+ \\\\ldots '\n if (j + 3 >= notesSeries.length) texteCorr += `+ ${notesSeries[j][0]} \\\\times ${notesSeries[j][1]}`\n if (j + 3 >= notesSeries.length) eff += `+ ${notesSeries[j][1]}`\n }\n }\n texteCorr += `}{${eff}}=\\\\dfrac{${texNombre(somme, 0)}}{${texNombre(nombreNotes, 0)}}$. <br>`\n } else {\n // tableau à une entrée\n texteCorr += '$\\\\text{Moyenne} = '\n texteCorr += `\\\\dfrac{${notesSeries[0]} `\n for (let j = 1; j < notesSeries.length; j++) {\n if (notesSeries.length < 10) {\n texteCorr += `+ ${notesSeries[j]}`\n } else {\n if (j < 3) texteCorr += `+ ${notesSeries[j]}`\n if (j === 3) texteCorr += '+ \\\\ldots '\n if (j + 3 >= notesSeries.length) texteCorr += `+ ${notesSeries[j]}`\n }\n }\n texteCorr += `}{${notesSeries.length}}=\\\\dfrac{${texNombre(somme, 0)}}{${texNombre(nombreNotes, 0)}}$. <br>`\n }\n texteCorr += `La somme des ${notes} est : $${texNombre(somme, 0)}$.<br> Il y a $${texNombre(nombreNotes, 0)}$ ${notes}.<br>`\n texteCorr += `Donc ${noteStr[1]} est $${new FractionEtendue(somme, nombreNotes).texFSD}`\n if (arrondi(somme / nombreNotes, 1) === somme / nombreNotes) { // moyenne exacte\n texteCorr += `=${miseEnEvidence(texNombre(somme / nombreNotes, 1))}$${noteStr[2]}.<br>`\n } else { // moyenne arrondie\n texteCorr += `\\\\approx${miseEnEvidence(texNombre(somme / nombreNotes, 1))}$${noteStr[2]}.<br>`\n }\n return texteCorr\n}\n\nfunction texteCorrEtendueNotes (min, max, note = 'note') {\n const data = [\n ['note', 'La note la plus basse', 'La note la plus haute', ''],\n ['lancer', 'Le résultat du lancer le plus faible', 'Le résultat du lancer le plus élevé', ''],\n ['température', 'La température la plus basse', 'La température la plus haute', ' $\\\\mathbf{^\\\\circ\\\\text{C}}$'],\n ['salaire', 'Le salaire le plus bas', 'Le salaire le plus haut', ' €'],\n ['pointure', 'La pointure la plus basse', 'La pointure la plus haute', '']\n ]\n const notes = data.find(el => el[0] === note) || ['', '', '', '']\n let texteCorr = `${notes[1]} est $${min}$${notes[3]}.<br>${notes[2]} est $${max}$${notes[3]}.<br>`\n texteCorr += `Donc ${texteGras(`l'étendue des ${note}s est $\\\\mathbf{${texNombre(max, 1)}-${ecritureParentheseSiNegatif(min)}=${texNombre(max - min, 1)}}$ ${notes[3]}`)}.`\n return texteCorr\n}\n\nfunction texteCorrMedianeTemperatures (temperatures, medianeCorr, scoresMedians) {\n return texteCorrMedianeNotes(temperatures, medianeCorr, scoresMedians, 'température')\n}\n\nfunction texteCorrMedianeNotes (notes, medianeCorr, scoresMedians, note = 'note') {\n const data = [\n ['note', '', '', ''],\n ['température', ' $\\\\mathbf{^\\\\circ\\\\text{C}}$', '', '']\n ]\n const noteStr = data.find(el => el[0] === note) || ['', '', '', '']\n let texteCorr = `Au total, il y a $${notes.length}$ ${noteStr[0]}s. `\n if (notes.length % 2 === 0) {\n texteCorr += `Le nombre de ${noteStr[0]}s est pair.<br>`\n } else {\n texteCorr += `Le nombre de ${noteStr[0]}s est impair.<br>`\n }\n\n texteCorr += `Les ${noteStr[0]}s sont rangées dans l'ordre croissant : <br> $${notes[0]}$`\n for (let j = 1; j < notes.length - 1; j++) {\n if (notes.length < 10) {\n texteCorr += `; $${notes[j]}$ `\n } else {\n if (j < 2) texteCorr += `; $${notes[j]}$ `\n if (j === 2) texteCorr += '; $\\\\dots$ '\n if (notes.length % 2 === 0 && j === notes.length / 2 - 2) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 0 && j === notes.length / 2 - 1) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 0 && j === notes.length / 2) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 0 && j === notes.length / 2 + 1) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 0 && j === notes.length / 2 + 2) texteCorr += '; $\\\\dots$ '\n if (notes.length % 2 === 1 && j === (notes.length - 1) / 2 - 1) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 1 && j === (notes.length - 1) / 2) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 1 && j === (notes.length - 1) / 2 + 1) texteCorr += `; $${notes[j]}$ `\n if (notes.length % 2 === 1 && j === (notes.length - 1) / 2 + 1) texteCorr += '; $\\\\dots$ '\n if (j + 2 > notes.length - 1) texteCorr += `; $${notes[j]}$ `\n }\n }\n texteCorr += `et $${notes[notes.length - 1]}$.<br>`\n\n if (notes.length % 2 === 0) {\n texteCorr += `Les valeurs centrales sont la $${notes.length / 2}^{e}$ valeur et la $${notes.length / 2 + 1}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(notes.length)}<br>\n Une médiane peut être la demi-somme des deux valeurs centrales. <br>\n La $${notes.length / 2}^{e}$ valeur est $${scoresMedians[0]}$ et la $${notes.length / 2 + 1}^{e}$ valeur est $${scoresMedians[1]}$.<br>`\n } else {\n texteCorr += `La valeur centrale est donc la $${(notes.length + 1) / 2}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(notes.length)}<br>\n La médiane est donc la $${(notes.length + 1) / 2}^{e}$ ${noteStr[0]}.<br>`\n }\n\n texteCorr += `D'où ${texteGras(`la médiane des ${noteStr[0]}s est ${scoresMedians[0] === scoresMedians[1] ? '' : `$\\\\mathbf{(${scoresMedians[0]} + ${scoresMedians[1]}) \\\\div 2=}$`} ${stringNombre(medianeCorr)}${noteStr[1]}`)}.<br>`\n if (notes.length % 2 === 0) {\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${notes.length / 2}$ ${noteStr[0]}s inférieures ou égales à $${texNombre(medianeCorr, 1)}$ et $${notes.length / 2}$ ${noteStr[0]}s supérieures ou égales à $${texNombre(medianeCorr, 1)}$.`,\n couleur: 'nombres'\n })\n } else {\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${(notes.length - 1) / 2}$ ${noteStr[0]}s inférieures ou égales à $${texNombre(medianeCorr, 1)}$ et $${(notes.length - 1) / 2}$ ${noteStr[0]}s supérieures ou égales à $${texNombre(medianeCorr, 1)}$.`,\n couleur: 'nombres'\n })\n }\n return texteCorr\n}\n\nfunction texteCorrMedianeTirages2DSalaires (nombreTirages, medianeCorr, scoresMedians, salaires, categories, salaire = 'salaire') {\n const data = [\n ['note', 'F', 'la médiane des notes', '', `Le nombre de notes est $${nombreTirages}$.`, ['', 'Note', 'Coefficient (Effectif)', 'Effectifs cumulés']],\n ['salaire', 'M', 'le salaire médian', ' €', `Dans l'entreprise, le nombre de salariés est $${nombreTirages}$.`, ['Catégories', 'Salaires en €', 'Effectif', 'Effectifs cumulés']],\n ['pointure', 'M', 'la pointure médiane', '', `Le nombre de pointures relevées est $${nombreTirages}$.`, ['', 'Pointure', 'Effectif', 'Effectifs cumulés']]\n ]\n const salairesStr = data.find(el => el[0] === salaire) || ['', '', '', '', '', '']\n\n let texteCorr = salairesStr[4] + '<br>'\n if (nombreTirages % 2 === 0) {\n texteCorr += `Ce nombre est pair, les ${salairesStr[0]}s sont rangé${salairesStr[0] === 'M' ? '' : 'e'}s dans l'ordre croissant.<br>\n Les deux valeurs centrales sont la $${nombreTirages / 2}^{e}$ valeur et la $${nombreTirages / 2 + 1}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(nombreTirages)} <br>\n Une médiane peut être la demi-somme des deux valeurs centrales. <br>\n On peut ajouter une ligne avec les effectifs cumulés pour trouver ces deux valeurs.<br><br>\n ${desTabEffCumul(salaires, true, categories, salairesStr[5])}<br><br>\n La $${nombreTirages / 2}^{e}$ valeur est $${scoresMedians[0]}$ et la $${nombreTirages / 2 + 1}^{e}$ valeur est $${scoresMedians[1]}$.<br>`\n texteCorr += `D'où ${texteGras(`${salairesStr[2]} est ${scoresMedians[0] === scoresMedians[1] ? '' : `$(${scoresMedians[0]} + ${scoresMedians[1]}) \\\\div 2=$`} ${stringNombre(medianeCorr)}`)}${salairesStr[3]}.<br>`\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${(nombreTirages) / 2}$ ${salairesStr[0]}s dont la valeur est inférieure ou égale à $${texNombre(medianeCorr, 1)}$${salairesStr[3]} et $${(nombreTirages) / 2}$ ${salairesStr[0]}s dont la valeur est supérieure ou égale à $${texNombre(medianeCorr, 1)}$${salairesStr[3]}.`,\n couleur: 'nombres'\n })\n } else { // Le nombre de tirages est impair\n texteCorr += `Ce nombre est impair, les ${salairesStr[0]}s sont rangé${salairesStr[0] === 'M' ? '' : 'e'}s dans l'ordre croissant.<br>\n La valeur centrale est la $${(nombreTirages - 1) / 2 + 1}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(nombreTirages)} <br>\n La médiane est donc la $${(nombreTirages - 1) / 2 + 1}^{e}$ valeur.<br>\n On peut ajouter une ligne avec les effectifs cumulés pour trouver cette valeur.<br><br>\n ${desTabEffCumul(salaires, true, categories, salairesStr[5])}<br><br>`\n texteCorr += `D'où ${texteGras(`${salairesStr[2]} est ${stringNombre(medianeCorr)}`)}${salairesStr[3]}.<br>`\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${(nombreTirages - 1) / 2}$ ${salairesStr[0]}s dont la valeur est inférieure ou égale à $${texNombre(medianeCorr, 1)}$${salairesStr[3]} et $${(nombreTirages - 1) / 2}$ ${salairesStr[0]}s dont la valeur est supérieure ou égale à $${texNombre(medianeCorr, 1)}$${salairesStr[3]}.`,\n couleur: 'nombres'\n })\n }\n return texteCorr\n}\n\nfunction texteCorrMedianeTirages2D (nombreTirages, medianeCorr, scoresMedians, tirages) {\n let texteCorr = `Au total, $${nombreTirages}$ lancers ont été réalisés.<br>`\n if (nombreTirages % 2 === 0) {\n texteCorr += `Le nombre de lancers est pair, les scores sont rangés dans l'ordre croissant.<br>\n Les deux valeurs centrales sont la $${nombreTirages / 2}^{e}$ et la $${nombreTirages / 2 + 1}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(nombreTirages)} <br>\n Une médiane peut être la demi-somme des deux valeurs centrales. <br>\n On peut ajouter une ligne avec les effectifs cumulés pour trouver ces deux valeurs.<br><br>\n ${desTabEffCumul(tirages, true)}<br><br>\n La $${nombreTirages / 2}^{e}$ valeur est $${scoresMedians[0]}$ et la $${nombreTirages / 2 + 1}^{e}$ valeur est $${scoresMedians[1]}$.<br>`\n texteCorr += `D'où ${texteGras(`le score médian est ${scoresMedians[0] === scoresMedians[1] ? '' : `$(${scoresMedians[0]} + ${scoresMedians[1]}) \\\\div 2=$`} ${stringNombre(medianeCorr)}`)}.<br>`\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${(nombreTirages) / 2}$ lancers dont le score est inférieur ou égal à $${texNombre(medianeCorr, 1)}$ et $${(nombreTirages) / 2}$ lancers dont le score est supérieur ou égal à $${texNombre(medianeCorr, 1)}$.`,\n couleur: 'nombres'\n })\n } else { // Le nombre de lancers est impair ici\n texteCorr += `Le nombre de lancers est impair, les scores sont rangés dans l'ordre croissant.<br>\n La valeur centrale est la $${(nombreTirages - 1) / 2 + 1}^{e}$ valeur.<br>\n En effet, ${underbraceMediane(nombreTirages)} <br>\n La médiane est donc le $${(nombreTirages - 1) / 2 + 1}^{e}$ lancer.<br>\n On peut ajouter une ligne avec les effectifs cumulés pour trouver cette valeur.<br><br>\n ${desTabEffCumul(tirages, true)}<br><br>`\n texteCorr += `D'où ${texteGras(`le score médian est ${stringNombre(medianeCorr)}`)}.<br>`\n texteCorr += lampeMessage({\n titre: 'Interprétation',\n texte: `Il y a bien $${(nombreTirages - 1) / 2}$ lancers dont le score est inférieur ou égal à $${texNombre(medianeCorr, 1)}$ et $${(nombreTirages - 1) / 2}$ lancers dont le score est supérieur ou égal à $${texNombre(medianeCorr, 1)}$.`,\n couleur: 'nombres'\n })\n }\n return texteCorr\n}\n\nfunction texteNotes (notes) {\n let texte = `${prenom()} a obtenu ces notes ce trimestre-ci en mathématiques :<br>`\n texte += `$${notes[0]}$`\n for (let j = 1; j < notes.length - 1; j++) {\n texte += `; $${notes[j]}$ `\n } // On liste les notes (série brute)\n texte += `et $${notes[notes.length - 1]}$.`\n return texte\n}\n\nfunction texteTemperatures (annee, mois, temperatures) {\n let texte = `En ${nomDuMois(mois)} ${annee}, à ${choice(['Moscou', 'Berlin', 'Paris', 'Bruxelles', 'Rome', 'Belgrade'])}, on a relevé les températures suivantes : <br>`\n texte += '<br>$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // On construit le tableau des températures\n texte += '|c'\n for (let j = 0; j < Math.round(temperatures.length / 2); j++) {\n texte += '|c'\n }\n texte += '}\\\\hline \\\\text{Jour}'\n for (let j = 0; j < Math.round(temperatures.length / 2); j++) {\n texte += '&' + texNombre(j + 1, 1)\n }\n texte += '\\\\\\\\\\\\hline \\\\text{Température en} ^\\\\circ\\\\text{C}'\n for (let j = 0; j < Math.round(temperatures.length / 2); j++) {\n texte += '&' + temperatures[j]\n }\n texte += '\\\\\\\\\\\\hline\\\\end{array}$<br><br>'\n texte += '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|c' // On construit le tableau des températures\n texte += '|c'\n for (let j = Math.round(temperatures.length / 2); j < temperatures.length; j++) {\n texte += '|c'\n }\n texte += '}\\\\hline \\\\text{Jour}'\n for (let j = Math.round(temperatures.length / 2); j < temperatures.length; j++) {\n texte += '&' + texNombre(j + 1, 1)\n }\n texte += '\\\\\\\\\\\\hline \\\\text{Température en} ^\\\\circ\\\\text{C}'\n for (let j = Math.round(temperatures.length / 2); j < temperatures.length; j++) {\n texte += '&' + temperatures[j]\n }\n texte += '\\\\\\\\\\\\hline\\\\end{array}$'\n texte += '<br>'\n return texte\n}\n\nfunction texteSalaires (salaires, categoriesCol, salaire = 'salaires') {\n const data = [\n ['salaires', 'La grille des salaires des employés d\\'une PME est donnée par le tableau ci-dessous', ['Catégories', 'Salaires en €', 'Effectif']],\n ['notes', `Voici les notes obtenues par ${prenom()} en mathématiques cette année`, ['', 'Note', 'Effectif']],\n ['pointures', `Pour passer une commande de chaussures de foot, ${prenom()} a noté les pointures des membres de son club dans un tableau`, ['', 'Pointure', 'Effectif']]\n ]\n const salairesStr = data.find(el => el[0] === salaire) || ['', '', '', '']\n let texte = salairesStr[1] + ' :<br> '\n texte += '<br>' + desTabEffCumul(salaires, false, categoriesCol, salairesStr[2]) + '<br>'\n return texte\n}\n\nfunction texteTirages2D (nombreDes, nombreTirages, nombreFaces, tirages, aveclampeMessage = true) {\n let texte = ''\n if (nombreDes > 1) {\n texte = `On a réalisé $${nombreTirages}$ lancers de $${nombreDes}$ dés à $${nombreFaces}$ faces.<br>\n On a relevé la somme des $${nombreDes}$ dés.<br>`\n } else {\n texte = `On a réalisé $${nombreTirages}$ lancers d'un dé à $${nombreFaces}$ faces.<br>`\n }\n texte += aveclampeMessage\n ? lampeMessage({\n titre: 'Vocabulaire',\n texte: `Le solide qui correspond à ce type de dé s'appelle ${texteGras(solidName(nombreFaces))}.`,\n couleur: 'nombres'\n })\n : ''\n texte += 'Les résultats sont inscrits dans le tableau ci-dessous :<br><br>'\n texte += desTabEffCumul(tirages, false) + '<br>'\n return texte\n}\n\nfunction solidName (nbCot) {\n switch (nbCot) {\n case 4:\n return 'tétraèdre'\n case 6:\n return 'hexaèdre'\n case 8:\n return 'octaèdre'\n case 10:\n return 'décaèdre'\n default:\n return 'cas non prévu'\n }\n}\n\nexport const OutilsStats = {\n desTabEffCumul,\n // consigne\n texteNotes,\n texteTirages2D,\n texteSalaires,\n texteTemperatures,\n // correction\n texteCorrMoyenneNotes,\n texteCorrMedianeTirages2D,\n texteCorrMedianeTirages2DSalaires,\n texteCorrMedianeTemperatures,\n texteCorrMedianeNotes,\n texteCorrEtendueNotes,\n // calcul\n computeEtendue,\n computeMoyenne,\n computeMediane,\n computeMoyenneTirages2D,\n computeMedianeTirages2D\n}\n"],"names":["underbraceMediane","nbVal","sortie","desTabEffCumul","tirages","effCumulBool","categories","lignes","j","cumul","k","computeMoyenne","notes","somme","deprecatedTexFraction","computeMediane","notesRangees","a","b","mediane","medianeCorr","computeEtendue","min","max","computeMoyenneTirages2D","effectif","computeMedianeTirages2D","nombreTirages","scoresMedians","cpt","effCumulCroiss","texteCorrMoyenneNotes","notesSeries","nombreNotes","noteStr","el","texteCorr","eff","texNombre","FractionEtendue","arrondi","miseEnEvidence","texteCorrEtendueNotes","note","texteGras","ecritureParentheseSiNegatif","texteCorrMedianeTemperatures","temperatures","texteCorrMedianeNotes","stringNombre","lampeMessage","texteCorrMedianeTirages2DSalaires","salaires","salaire","salairesStr","texteCorrMedianeTirages2D","texteNotes","texte","prenom","texteTemperatures","annee","mois","nomDuMois","choice","texteSalaires","categoriesCol","texteTirages2D","nombreDes","nombreFaces","aveclampeMessage","solidName","nbCot","OutilsStats"],"mappings":"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"}