exercices/6e/6C32.js

import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenuSansNumero, randint, calcul, choice, texNombre, texPrix, arrondi, egalOuApprox } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const titre = 'Résoudre des problèmes de courses au marché'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCNum'

/**
 * On achète 2 aliments dont on connaît la masse (un en grammes et l'autre en kilogrammes) et le prix au kilogramme. Il faut calculer le prix total.
 * @author Rémi Angot
 * Référence 6C32
 */
export const uuid = '96b94'
export const ref = '6C32'
export default function ProblemeCourse () {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.titre = titre
  this.consigne = ''
  this.spacing = 2
  this.spacingCorr = 2
  this.nbQuestions = 1
  this.nbQuestionsModifiable = false
  this.nbCols = 1
  this.nbColsCorr = 1
  this.sup = false

  this.nouvelleVersion = function () {
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.autoCorrection = []
    const prenom = choice([
      'Benjamin',
      'Léa',
      'Aude',
      'Julie',
      'Corinne',
      'Mehdi',
      'Joaquim'
    ])
    let masseEnKgDeAliment1
    if (this.sup) {
      masseEnKgDeAliment1 = randint(2, 5)
    } else {
      masseEnKgDeAliment1 = calcul(
        randint(2, 5) + randint(1, 9) / 10
      )
    }
    const prixAliment1 = calcul(randint(2, 4) + randint(1, 9) / 10)
    const aliment1 = choice(['courgettes', 'carottes', 'pommes'])
    let masseEnGdeAliment2

    let prixAliment2
    if (this.sup) {
      prixAliment2 = randint(15, 25)
      masseEnGdeAliment2 = randint(2, 7) * 500
    } else {
      prixAliment2 = calcul(randint(12, 23) + randint(1, 9) / 10)
      masseEnGdeAliment2 = randint(21, 97) * 10
    }
    const aliment2 = choice(['boeuf', 'veau', 'poulet'])
    const prixTotalAliment1 = calcul(masseEnKgDeAliment1 * prixAliment1)
    const prixTotalAliment2 = calcul((masseEnGdeAliment2 * prixAliment2) / 1000)
    const prixTotal = calcul(prixTotalAliment1 + prixTotalAliment2)
    const masseEnKgDeAliment2 = calcul(masseEnGdeAliment2 / 1000)
    let texte = `${prenom} achète $${texNombre(masseEnKgDeAliment1, 1)}$ kg de ${aliment1} à $${texPrix(prixAliment1)}$ €/kg `
    texte += `et $${texNombre(masseEnGdeAliment2)}$ g de ${aliment2} à $${texPrix(prixAliment2)}$ €/kg. Quel est le prix total à payer ?`
    let texteCorr = `Prix des ${aliment1} : $${texNombre(masseEnKgDeAliment1, 1)}\\text{ kg} \\times ${texPrix(prixAliment1)}$ €/kg $ = ${texPrix(prixTotalAliment1)}$ €<br>`
    texteCorr += `Prix du ${aliment2} : $${texNombre(masseEnKgDeAliment2)}\\text{ kg} \\times ${texPrix(prixAliment2)}$ €/kg $${egalOuApprox(prixTotalAliment2, 2)} ${texPrix(prixTotalAliment2)}$ €<br>`
    texteCorr += `Prix total à payer : $${texPrix(prixTotalAliment1)}$ € + $${texPrix(prixTotalAliment2)}$ € `
    texteCorr += `$${egalOuApprox(prixTotal, 2)} ${texNombre(prixTotal, 2)}$ €<br>`
    texteCorr += `<br><i>Le prix total aurait aussi pu être trouvé en un seul calcul</i> : $${texNombre(masseEnKgDeAliment1, 1)} \\text{ kg} \\times ${texPrix(prixAliment1)}$ €/kg + $${texNombre(masseEnKgDeAliment2, 2)} \\text{ kg} \\times ${texPrix(prixAliment2)}$ €/kg `
    texteCorr += `$${egalOuApprox(prixTotal, 2)} ${texNombre(prixTotal, 2)}$ €<br>`
    if (!context.isHtml) {
      texteCorr = `Prix des ${aliment1} : $${texNombre(masseEnKgDeAliment1, 2)}\\text{ kg}\\times${texPrix(prixAliment1)}\\text{ \\euro{}/kg} = ${texPrix(prixTotalAliment1)}\\text{ \\euro}$` + '<br>'
      texteCorr += `Prix du ${aliment2} : $${texNombre(masseEnKgDeAliment2, 2)}\\text{ kg}\\times${texPrix(prixAliment2)}\\text{ \\euro{}/kg} ${egalOuApprox(prixTotalAliment2, 2)} ${texPrix(prixTotalAliment2)}\\text{ \\euro}$` + '<br>'
      texteCorr += `Prix total à payer : $${texPrix(prixTotalAliment1)}\\text{ \\euro} + ${texPrix(prixTotalAliment2)}\\text{ \\euro}`
      texteCorr += `${egalOuApprox(prixTotal, 2)} ${texPrix(prixTotal)}\\text{ \\euro}$<br>`
    }

    // Pour tolérer l'écriture d'un somme avec des centimes, par exemple 54,1 € ou 54,10 €
    const reponse = prixTotal.toFixed(2)
    setReponse(this, 0, reponse)
    if (context.isAmc) {
      this.autoCorrection[0].reponse.valeur[0] = arrondi(prixTotal, 2)
      this.autoCorrection[0].reponse.param.digits = 5
      this.autoCorrection[0].reponse.param.decimals = 2
    }
    if (this.interactif) {
      texte += `<br> ${ajouteChampTexteMathLive(this, 0, 'largeur20 inline', { texteApres: ' €', texte: 'Le prix total à payer sera de ' })}`
    }
    this.listeQuestions.push(texte)
    this.listeCorrections.push(texteCorr)

    listeQuestionsToContenuSansNumero(this)
  }
  this.besoinFormulaireCaseACocher = ['Calculs faciles']
}