LCD class method

Project: Fractions

Unit: DelphiDabbler.Lib.Fractions

Record: TFraction

Applies to: ~>0.1

class function LCD(const A, B: TFraction): Int64; static;

Description

Returns the least common denominator of the two fraction A and B.

Example

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

See Also