Rationalise (Canonise) the Fractions before Subtraction
Normally before fractions are subtracted, they are rationalised;
i.e., they are put in a form where their denominators become
the same. This same denominator is the LCM of the
denominators of all the separate fractions.
After this is done, the new numerators can then be subtracted.
Steps for Subtraction of Fractions Perl code
The following steps will guide us in writing our code.
Let's illustrate with
7/4 - 2/5
Step 1:
Find the LCM of the denominators.
⇒ LCM of 4 & 5 = 20
Step 2:
In a turn by turn fashion, divide the found LCM from Step 1
by each denominator, multiplying the quotient by the corresponding numerator.
⇒
((7 x 5) - (2 x 4))/20
= (35 - 8)/20
Step 3:
Go ahead and subtract the numerators.
⇒
27/20
Create a new module file;
call it SubtractFraction.pm
Type out the adjoining Perl code for subtracting fractions.
Note: You can comment out the AddFraction Perl 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 subtraction.
Perl code for SubtractFraction Module File
package SUBTRACTFRACTION;
BEGIN {
require Exporter;
our $VERSION = 2016.12;
our @EXPORT_OK = qw(doSubtract);
}
use warnings;
use strict;
use parent "ADDFRACTION";
my $answer;
my (@numerators, @denominators, @new_numerators);
my %fractions;
sub new {
no warnings "all";
my $this = shift;
my $parameters = shift;
bless $parameters, $this;
$this->_init($parameters);
return $this;
}
sub _init {
my $self = shift;
my $aux = shift;
$fractions{numerators} = $aux->{numerators};
$fractions{denominators} = $aux->{denominators};
@numerators = @{$fractions{numerators}};
@denominators = @{$fractions{denominators}};
$answer = 0;
}
sub doSubtract {
my $call = ADDFRACTION->new(\%fractions);
my @help = $call->canoniseFraction();
@new_numerators = @{$help[0]};
$answer = $new_numerators[0];
$answer -= $new_numerators[$_] for 1 .. $
return ($answer, $help[1]);
}
1;
Main class
use strict;
use warnings;
use SUBTRACTFRACTION;
my (@numerators, @denominators, @solutions);
my %fractions;
@numerators = (9, 3, 5, 7);
@denominators = (2, 4, 12, 18);
%fractions = (
numerators => \@numerators,
denominators => \@denominators
);
print "\n Solving:\n";
printf("%13u", $_) for @numerators;
printf("\n%12s", " ");
print "- - " for 1 .. $
printf("%2s\n", "-");
printf("%13u", $_) for @denominators;
print "\n";
my $sub_fract = SUBTRACTFRACTION->new(\%fractions);
@solutions = $sub_fract->doSubtract();
printf("\n%25u\n", $solutions[0]);
printf("%25s\n", "Answer = -");
printf("%25u\n", $solutions[1]);
print "\n\n";