﻿program sumFractions;

var
  a1, a2: byte;// первая дробь
  b1, b2: byte;// вторая дробь
  ax, bx, cx, dx, ex: integer;// для вычислений

//Наибольший общий делитель
function GCD(a, b: integer): integer;
var
  x, y: integer;
begin
  x := a;
  y := b;
  while x <> y do
    if x > y then 
      x := x - y
    else 
      y := y - x;
  
  GCD := x;
end;

//Наименьшее общее кратное
function SCM(a, b: integer): integer;
begin
  SCM := (a * b) div GCD(a, b);
end;

begin
{
  a1:=2; a2:=5;
  b1:=3; b2:=6;
}
  write('Введите числитель и знаменатель первой дроби : ');
  readln(a1,a2);
  write('Введите числитель и знаменатель второй дроби : ');
  readln(b1,b2);

  ax := SCM(a2,b2);
  writeln('Наименьший общий знаменатель : ', ax );
  
  write(a1, '/', a2, ' + ', b1, '/', b2, ' = ');
  cx := a1* round(ax/a2);
  dx := b1* round(ax/b2);
  write(cx, '/', ax , ' + ', dx, '/', ax , ' = ');
  bx := cx+dx;
  write(bx, '/', ax);    
  
  if (bx=ax) then
    writeln(' =', 1)
  else if (bx>ax) then begin
    ex := bx div ax;
    writeln(' =', ex , ' целых ', bx-ex*ax, '/', ax);
  end else 
    cx := GCD(bx, ax); // проверка если можно сократить дробь
    if (cx>1) then
      writeln(' = ', bx/cx, '/', ax/cx);
end.