zadach521.PAS

{* Задача 521 *}

Unit ZADACH521;
Interface
Implementation
Begin
 writeln('Даны натуральные числа m, n, p, q такие, что дроби m/n и p/q - правильные и несократимые. Вывести сумму этих дробей так же в виде правильной и несократимой дроби. Пример. Дано: m=1, n=2, p=2, q=3. Ответ: 1 +1.6 ');
End.

Program zadach521;

Uses zadach521.pas; {* Эту строку можно удалить *}
Uses Crt; {* Подключаем внешние файлы *}
Var {* Необходимые переменные *}
  m    : Word;
  n    : Word;
  p    : Word;
  q    : Word;
  dopl : Word;
  cel  : Word;
  ost  : Word;
  znam : Word;
Begin
  ClrScr; {* Стираем всё с экрана *}
  Writeln; {* Вывод пустой строки *}
  write('Введите m, n, p, q: ');
  readln(m, n, p, q); {Определение целой части числа}
  cel := (m * q+n * p) Div (n * q); {Определение остатка от деления}
  ost := (m * q+n * p) Mod (n * q); {znam-это знаменатель числа}
  znam := n * q; {dopl-дополнительная переменная}
  dopl := ost; {цикл в котором сокращается число вида ost/znam}
  While (dopl > 1) Do
  Begin
    If (ost Mod dopl = 0) And (znam Mod dopl = 0) Then
    Begin
      ost := ost Div dopl;
      znam := znam Div dopl
    End;
    dec(dopl) {* Вычтем из dopl единицу *}
  End;
  If cel = 0 Then
    writeln(ost, ' / ', znam)
  Else writeln(cel, ' + ', ost, ' / ', znam);
    ReadKey
End.