Var
n1, d1, n2, d2, m, n, d, nn, dd, nod: integer;
r: double;
begin
Writeln('Нахождение суммы двух простых дробей.');
Write('Введите через пробел числитель и знаменатель первой дроби: ');
Readln(n1, d1);
Write('Введите через пробел числитель и знаменатель второй дроби: ');
Readln(n2, d2);
{Находим результат, как простую дробь}
n := n1 * d2 + n2 * d1;
d := d1 * d2;
r := n / d;
{Если дробь неправильная, надо исключить целое число}
if n > d then begin m := n div d; n := n mod d end
else if n = d then begin m := 1; n := 0; d := 1 end
else m := 0;
{Возможно числитель и знаменатель дроби могут быть частично сокращены}
if n <> 0 then begin
{ищем НОД числителя и знаменателя и делим их на него}
nn := n; dd := d;
while nn <> dd do
if nn > dd then nn := nn - dd else dd := dd - nn;
nod := nn;
if nod <> 1 then begin n := n div nod; d := d div nod end;
end;
Write(n1, '/', d1, ' + ', n2, '/', d2, ' = ');
if m > 0 then
if n <> 0 then Writeln(m, ' ', n, '/', d, ' = ', r)
else Writeln(m)
else
Writeln(n, '/', d, ' = ', r)
end.
Тестовые примеры:
Нахождение суммы двух простых дробей.
Введите через пробел числитель и знаменатель первой дроби: 25 5
Введите через пробел числитель и знаменатель второй дроби: 64 256
25/5 + 64/256 = 5 1/4 = 5.25
Нахождение суммы двух простых дробей.
Введите через пробел числитель и знаменатель первой дроби: 8 19
Введите через пробел числитель и знаменатель второй дроби: 154 221
8/19 + 154/221 = 1 495/4199 = 1.11788521076447
Нахождение суммы двух простых дробей.
Введите через пробел числитель и знаменатель первой дроби: 5 7
Введите через пробел числитель и знаменатель второй дроби: 12 42
5/7 + 12/42 = 1
Нахождение суммы двух простых дробей.
Введите через пробел числитель и знаменатель первой дроби: 1 5
Введите через пробел числитель и знаменатель второй дроби: 3 11
1/5 + 3/11 = 26/55 = 0.472727272727273