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