Project: Fractions
Unit: DelphiDabbler.Lib.Fractions
Record: TFraction
Applies to: ~>0.1
class function LCD(const A, B: TFraction): Int64; static;
Returns the least common denominator of the two fraction A and B.
Here’s a little procedure that uses LCD and Convert to convert two fractions to have the same denominator.
procedure MakeSameDenominator(var A, B: TFraction);
var
Common: Int64;
begin
Common := TFraction.LCD(A, B);
A := A.Convert(Common div A.Denominator);
B := B.Convert(Common div B.Denominator);
end;
To test this use code such is this:
procedure Convert(A, B: TFraction);
begin
Write(
Format(
'%d/%d and %d/%d => ',
[A.Numerator, A.Denominator, B.Numerator, B.Denominator]
)
);
MakeSameDenominator(A, B);
WriteLn(
Format(
'%d/%d and %d/%d',
[A.Numerator, A.Denominator, B.Numerator, B.Denominator]
)
);
end;
procedure Test;
var
A, B: TFraction;
begin
A := TFraction.Create(1, 4);
B := TFraction.Create(5, 6);
Convert(A, B);
A := TFraction.Create(-1, 3);
B := TFraction.Create(5, 6);
Convert(A, B);
A := TFraction.Create(11, 7);
B := TFraction.Create(3, 5);
Convert(A, B);
A := TFraction.Create(3, 8);
B := TFraction.Create(3, 12);
Convert(A, B);
end;
Running this test program writes the following:
1/4 and 5/6 => 3/12 and 10/12
-1/3 and 5/6 => -2/6 and 5/6
11/7 and 3/5 => 55/35 and 21/35
3/8 and 3/12 => 9/24 and 6/24