end;
Procedure Sokr (var A: Frac);
Procedure Summa (A, B: Frac; var C: Frac);
Procedure Raznost (A, B: Frac; var C: Frac);
Procedure Proizvedenie (A, B: Frac; var C: Frac);
Procedure Chastnoe (A, B: Frac; var C: Frac);
Procedure Stepen (A: Frac; N: Natur; var C: Frac);
Function Menshe (A, B: Frac): boolean;
Function Bolshe (A, B: Frac): boolean;
Function Ravno (A, B: Frac): boolean;
Function MensheRavno (A, B: Frac): boolean;
Function BolsheRavno (A, B: Frac): boolean;
Function NeRavno (A, B: Frac): boolean;
Implementation{Раздел реализации модуля}
{Наибольший общий делитель двух чисел – вспомогательная функция, ранее не объявленная}
Function NodEvklid (A, B: Natur): Natur;
Begin
while A <> B do
if A > B then
if A mod B <> 0 then A:=A mod B
else A:=B
Else
if B mod A <> 0 then B:=B mod A
else B:=A;
NodEvklid:=A
end;
Procedure Sokr; {Сокращение дроби}
var M, N: Natur;
Begin
if A.P <> 0 then
Begin
if A.P < 0 then M:=abs(A.P)
else M:=A.P; {Совмещение типов, т.к. A.P - longint}
N:= NodEvklid(M, A.Q);
A.P:=A.P div N;
A.Q:=A.Q div N
End
end;
Procedure Summa; {Сумма дробей}
Begin
C.Q:=(A.Q*B.Q) div NodEvklid(A.Q, B.Q); {Знаменатель дроби}
C.P:=A.P*C.Q div A.Q + B.P*C.Q div B.Q; {Числитель дроби}
Sokr (C)
end;
Procedure Raznost; {Разность дробей}
Begin
C.Q:=(A.Q*B.Q) div NodEvklid(A.Q, B.Q); {Знаменатель дроби}
C.P:=A.P*C.Q div A.Q - B.P*C.Q div B.Q; {Числитель дроби}
Sokr (C)
end;
Procedure Proizvedenie; {Умножение дробей}
Begin
C.Q:= A.Q*B.Q; {Знаменатель дроби}
C.P:=A.P*B.P; {Числитель дроби}