{Файл: prog61.pas
Задача:
  Даны две обыкновенные дроби a1/a2 и b1/b2(a1, a2, b1, b2 - целые числа, 
  при этом a2, b2 не равны нулю). Найти обыкновенную несокрагимую дробь c1/c2, 
  равную сумме двух данных.
  
}
type
  Fraction = record
            num, den : integer;
          end;
          
var 
  a, b, c : Fraction;
  
{процедура ввода дроби}
procedure ReadF(var x : Fraction);
begin {ReadF}
  readln(x.num, x.den);
end; {ReadF}

{функция NOD возвращает НОД двух целых чисел }
function NOD (t1, t2 : integer):integer;
begin {NOD}
  while t1<>t2 do
    if t1 > t2 then
      t1 := t1 - t2
    else
      t2:= t2- t1;
  NOD := t1;
end; {NOD}

{функция NOK возвращает НОК двух целых чисел t1 и t2}
function NOK (t1, t2 : integer):integer;
begin {NOK}
  NOK := t1 * t2 div NOD (t1, t2);
end; {NOK}
   
{процедура SumF суммирует дроби x и y, результат - в z}
procedure SumF (x, y : Fraction; var z : Fraction);
begin {SumF}
  z.den := NOK(x.den, y.den);
  z.num := x.num * z.den div x.den +
           y.num * z.den div y.den
end; {SumF}

{процедура Reduction сокращает дробь x}
procedure Reduction ( var x : Fraction);
var 
  t : integer;
begin {Reduction }
  t:= NOD(x.num, x.den);
  x.num := x.num div t;
  x.den := x.den div t;
end; {Reduction }  

{процедура вывода дроби на экран}
procedure writeF( x : Fraction);
begin {writeF}
  writeln(x.num,'/', x.den);
end; {writeF}  

  
begin
  writeln ('Ввелите первую дробь');
  ReadF(a);
  writeln ('Ввелите вторую дробь');
  ReadF(b);
  
  writeln('Исходные дроби');
  writeF(a);
  writeF(b);
  
  SumF(a, b, c);
  Reduction(c);
  
  writeln('Сумма дробей =');
  writeF(c);
end.  