website

source code for the ttmaths.uk website
Log | Files | Refs | README

AddingFractionsQuestion.jsx (1350B)


      1 import { formatFraction } from '../../scripts/formatUtils.js';
      2 import { simplifyFraction, getHCF } from '../../scripts/mathsUtils.js';
      3 import { getRandomInt, getRandomSelection } from '../../scripts/randomUtils.js';
      4 import Question from '../Question.jsx';
      5 
      6 function getRandomFraction(seed) {
      7   const num0 = getRandomInt(1, 5, seed++);
      8   const denom0 = getRandomInt(2, 10, seed++);
      9   const [num, denom] = simplifyFraction(num0, denom0);
     10   if (denom == 1) return getRandomFraction(seed++);
     11   return [num, denom];
     12 }
     13 
     14 function getRandomFractions(seed) {
     15   const [num1, denom1] = getRandomFraction(seed++);
     16   const [num2, denom2] = getRandomFraction(seed++);
     17   return [num1, denom1, num2, denom2];
     18 }
     19 
     20 export default function AddingFractionsQuestion({ seed, showAnswer, sign }) {
     21 
     22   const sign2 = getRandomSelection(sign, { "Addition": [1], "Subtraction": [-1] }, seed++);
     23 
     24   const [num1, denom1, absNum2, denom2] = getRandomFractions(seed++);
     25   const num2 = sign2 * absNum2;
     26 
     27   const question = formatFraction(num1, denom1) + formatFraction(num2, denom2, { showPlus: true });
     28 
     29   const hcf = getHCF(denom1, denom2);
     30   const sum = (num1 * denom2 + num2 * denom1) / hcf;
     31   const lcm = denom1 * denom2 / hcf;
     32 
     33   const answer = formatFraction(sum, lcm, { simplify: true });
     34 
     35   return <Question question={question} answer={answer} showAnswer={showAnswer} />;
     36 }