Method of Multiplying Fractions
Multiplying fractions is pretty straightforward:
Cancel out all common factors between numerators and denominators,
then multiply whatever is left numerator to numerator and
denominator to denominator.
Algorithm Steps to Multiply Fractions in C++:
If we have
4/9 x 21/8;
Step 1:
Find any common factor between any numerator and any denominator.
Step 2:
Cancel out any such common factor.
Step 3:
Repeat Steps 1 & 2 recursively until there are no
more common factors.
Create a new class file;
call it MultiplyFraction.
Type out the adjoining C++ code for multiplying fractions.
Note: You can comment out the LowestTerm C++ object
code in the main class from the previous lesson or simply continue from where it stopped.
So!
Feel free to try out your own set of numerators and denominators for fractional multiplication.
C++ code for MultiplyFraction Header File
#pragma once
#include <vector>
using namespace std;
class MultiplyFraction {
public:
MultiplyFraction(vector<unsigned>, vector<unsigned>);
virtual ~MultiplyFraction();
void doMultiply();
unsigned int answer[2];
protected:
vector<unsigned> numerators;
vector<unsigned> denominators;
unsigned int n_index, d_index;
unsigned int trial_factor;
bool mutual_factor;
};
MultiplyFraction Class File
#include "stdafx.h"
#include "MultiplyFraction.h"
MultiplyFraction::MultiplyFraction(vector<unsigned> num, vector<unsigned> denom) {
numerators = num;
denominators = denom;
trial_factor = 0;
n_index = 0;
d_index = 0;
answer[0] = 1;
answer[1] = 1;
for (unsigned n : num) {
if (n > trial_factor) {
trial_factor = n;
}
}
for (unsigned d : denom) {
if (d > trial_factor) {
trial_factor = d;
}
}
}
void MultiplyFraction::doMultiply() {
while (trial_factor > 1) {
while (n_index < numerators.size()) {
mutual_factor = false;
if ((numerators[n_index] % trial_factor) == 0) {
while (d_index < denominators.size()) {
if ((denominators[d_index] % trial_factor) == 0) {
mutual_factor = true;
break;
}
d_index++;
}
break;
}
n_index++;
}
if (mutual_factor) {
numerators[n_index] /= trial_factor;
denominators[d_index] /= trial_factor;
continue;
}
n_index = 0;
d_index = 0;
trial_factor--;
}
for (int i = 0; i < numerators.size(); i++) {
answer[0] *= numerators[i];
answer[1] *= denominators[i];
}
}
MultiplyFraction::~MultiplyFraction() {
}
main class
#include "stdafx.h"
#include "MultiplyFraction.h"
#include <iostream>
#include <vector>
#include <exception>
using namespace std;
int main()
{
cout << "\n Welcome to our demonstration sequels";
cout << "\n Hope you enjoy (and follow) the lessons.\n\n";
vector<unsigned> numerators;
vector<unsigned> denominators;
try {
numerators = { 16, 20, 27, 20 };
denominators = { 9, 9, 640, 7 };
cout << "\n Solving:\n";
for (unsigned n : numerators) {
printf("%13u", n);
}
printf("\n%12s", " ");
for (unsigned i = 0; i < numerators.size() - 1; i++) {
cout << "- X ";
}
printf("%1s", "-");
cout << "\n";
for (unsigned d : denominators) {
printf("%13u", d);
}
cout << "\n";
MultiplyFraction mul_fract(numerators, denominators);
mul_fract.doMultiply();
printf("\n%26u\n", mul_fract.answer[0]);
printf("%26s\n", "Answer = -");
printf("%26u\n", mul_fract.answer[1]);
cout << "\n\n";
} catch (exception& e) {
cout << "\n" << e.what() << "\n";
}
return 0;
}