fractions.js

import FractionX from './FractionEtendue.js'
import ListeFraction from './ListeFraction.js'

/**
 * Des fonctions pour manipuler des objets Fraction ou ListeFraction
 * @module
 */

/**
 * Retourne une liste de fractions irréducibles
 * @return {Fraction[]}
 */
export function obtenirListeFractionsIrreductibles () { // sous forme de fractions
  return [
    fraction(1, 2),
    fraction(1, 3),
    fraction(2, 3),
    fraction(1, 4),
    fraction(3, 4),
    fraction(1, 5),
    fraction(2, 5),
    fraction(3, 5),
    fraction(4, 5),
    fraction(1, 6),
    fraction(5, 6),
    fraction(1, 7),
    fraction(2, 7),
    fraction(3, 7),
    fraction(4, 7),
    fraction(5, 7),
    fraction(6, 7),
    fraction(1, 8),
    fraction(3, 8),
    fraction(5, 8),
    fraction(7, 8),
    fraction(1, 9),
    fraction(2, 9),
    fraction(4, 9),
    fraction(5, 9),
    fraction(7, 9),
    fraction(8, 9),
    fraction(1, 10),
    fraction(3, 10),
    fraction(7, 10),
    fraction(9, 10)]
}

/**
 * Retourne une liste de fractions irréducibles simples (1/2, 1/3, 2/3, 1/5 … 4/5, 1/7 … 6/7)
 * @return {Fraction[]}
 */
export function obtenirListeFractionsIrreductiblesFaciles () { // sous forme de fractions
  return [
    fraction(1, 2),
    fraction(1, 3),
    fraction(2, 3),
    fraction(1, 5),
    fraction(2, 5),
    fraction(3, 5),
    fraction(4, 5),
    fraction(1, 7),
    fraction(2, 7),
    fraction(3, 7),
    fraction(4, 7),
    fraction(5, 7),
    fraction(6, 7)
  ]
}

export function listeFractions (...fractions) {
  return new ListeFraction(...fractions)
}

/**
 * Construit et Retourne un objet FractionX(a, b)
 * @param {number} a
 * @param {number} b
 * @return {Fraction}
 */
export function fraction (a, b) {
  if (b === undefined) { // pas d'argument b
    if (a === undefined) {
      window.notify('fraction de fractions.js : aucun argument n\'est défini ', { a, b })
      return NaN
    } else {
      if (typeof a === 'number') {
        return new FractionX(a)
      } else if (!isNaN(a)) {
        return new FractionX(Number(a))
      }
      window.notify('fraction de fractions.js : l\'argument est de type inconvenant ', { a })
      return NaN
    }
  } else { // on a un argument b
    if (a === undefined) {
      window.notify('fraction de fractions.js : le premier argument n\'est pas défini ', { a, b })
      return NaN
    } else {
      if (typeof a === 'number' && typeof b === 'number') {
        return new FractionX(a, b)
      } else if (!isNaN(b) && !isNaN(a)) {
        return new FractionX(Number(a), Number(b))
      }
      window.notify('fraction de fractions.js : les arguments sont de type inconvenant ', { a, b })
      return NaN
    }
  }
}