Proc 47. Используя функцию NOD2 из задания Proc46, описать процедуру Frac1(a, b, p, q), преобразующую дробь a/b к несократимому виду p/q (все параметры процедуры — целого типа, a и b — входные, p и q — выходные). Знак результирующей дроби p/q приписывается числителю (т. е. q > 0). С помощью Frac1 найти несократимые дроби, равные a/b + c/d, a/b + e/f, a/b + g/h (числа a, b, c, d, e, f, g, h даны).

Решение на Python 3

import random
import math

def NOD2(A,B):
while B != 0:
A,B = B,A%B
return A

def Frac1(a,b,p,q):
L = []
Numerator = a*q + b*p
Denominator = b*q
Divisor = NOD2(Numerator, Denominator)
L.append(int(round(Numerator / Divisor)))
L.append(int(round(Denominator / Divisor)))
return L

for i in range(0,4):
A = random.randrange(1,1000)
B = random.randrange(1,1000)
C = random.randrange(1,1000)
D = random.randrange(1,1000)
#A = 1
#B = 2
#C = 1
#D = 3
print(A,";",B,";",C,";",D,";",Frac1(A,B,C,D))