#include "Fraction.h" template struct Fraction { T num, denom; //num - Numerator ; demon-Denominator }; template void inputFraction(Fraction a[], int& n) { cout << "Enter n:"; //number of Fractions cin >> n; for (int i = 0;i < n;i++) { cout << "Enter Numerator:"; cin >> a[i].num; cout << "Enter Denominator:"; cin >> a[i].denom; } } template bool compareFractionsAscending(Fraction a, Fraction b) //Compare fraction a > b { T num1 = a.num; T denom1 = a.denom; T num2 = b.num; T denom2 = b.denom; T result = (num1 * denom2) - (num2 * denom1); return (result > 0) ? true : false; } template bool compareFractionsDescending(Fraction a, Fraction b) //Compare fraction a < b { T num1 = a.num; T denom1 = a.denom; T num2 = b.num; T denom2 = b.denom; T result = (num1 * denom2) - (num2 * denom1); return (result < 0) ? true : false; } template void swapFraction(Fraction& a, Fraction& b) //Change seat two fractions { Fraction temp = a; a = b; b = temp; } template void printArrayFraction(Fraction a[], int n) { for (int i = 0;i < n;i++) { cout << a[i].num << " / " << a[i].denom << endl; } } template void sortArrayFraction(Fraction a[], int n, bool (*compareFractions)(Fraction, Fraction)) { for (int i = 0;i < n;i++) { for (int j = i + 1;j < n;j++) { if (compareFractions(a[i], a[j])) //Function pointer compare (Descending or Ascending) swapFraction(a[i], a[j]); // if true then swap two fractions } } }