// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
type
fraction=class
private
class function GCD(a,b:BigInteger):BigInteger;
begin
while b<>0 do (a,b):=(b,a mod b);
Result:=a
end;
public
numerator:BigInteger;
denominator:BigInteger;
constructor Create(num:BigInteger:=0; denom:BigInteger:=1);
begin
var n:=GCD(num,denom);
numerator:=num div n;
denominator:=denom div n
end;
class function operator +(a,b:fraction):fraction;
begin
var n:=GCD(a.denominator,b.denominator);
Result:=new fraction(a.numerator*(b.denominator div n)+
b.numerator*(a.denominator div n),a.denominator div n*b.denominator);
end;
end;
function Print(Self:fraction; s:string:=' '):fraction; extensionmethod;
begin
Result:=Self;
if Self.denominator=1 then Write(Self.numerator,s)
else Write(Self.numerator,'/',Self.denominator,s)
end;
function Read:fraction;
begin
var s:=ReadlnString('Введите через пробел числитель и знаменатель:');
var w:=s.ToWords;
Result:=new fraction(BigInteger.Parse(w[0]),BigInteger.Parse(w[1]))
end;
begin
var a:=Read;
var b:=Read;
(a+b).Print
end.
Примеры
Введите через пробел числитель и знаменатель: 1 2
Введите через пробел числитель и знаменатель: 5 130
7/13
Введите через пробел числитель и знаменатель: 132 65
Введите через пробел числитель и знаменатель: 1325 345
26333/4485
Введите через пробел числитель и знаменатель: 1231234450435679092 234535650234953469825
Введите через пробел числитель и знаменатель: 234346623432456207645 2345893524353652
2617268599782944014855731813763449145529/26199793481726210718128032276692900