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 }