0390 - SPFractii

De la Universitas MediaWiki
Versiunea din 29 martie 2023 16:56, autor: Robert Manc (discuție | contribuții) (Pagină nouă: == Cerinţa == Se dau '''4''' numere naturale '''a b c d''', reprezentând fracțiile '''a/b''' și '''c/d'''. Calculați suma și produsul celor două fracții, aduse la forma ireductibilă. == Date de intrare == Programul citește de la tastatură numerele '''a b c d'''. == Date de ieşire == Programul afișează pe ecran numerele '''suma_numarator''' și '''suma_numitor''', reprezentând numărătorul și numitorul sumei celor două fracţii, adusă la forma ireductibilă,...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

Se dau 4 numere naturale a b c d, reprezentând fracțiile a/b și c/d. Calculați suma și produsul celor două fracții, aduse la forma ireductibilă.

Date de intrare

Programul citește de la tastatură numerele a b c d.

Date de ieşire

Programul afișează pe ecran numerele suma_numarator și suma_numitor, reprezentând numărătorul și numitorul sumei celor două fracţii, adusă la forma ireductibilă, iar linia următoare numerele produs_numarator și produs_numitor, reprezentând numărătorul și numitorul produsului celor două fracții, adus la forma ireductibilă.

Restricții și precizări

  • a, b, c, d ∈ Ν
  • 1 ⩽ a, b, c, d ⩽ 10.000

Exemplu1

Intrare
1 2 4 3
Ieșire
Datele introduse corespund restricțiilor impuse.
11 6
2 3

Explicație

Suma fractiilor 1/2 și 4/3 este 11/6, iar produsul este 2/3.

Exemplu2

Intrare
4 2 8 2
Ieșire
Datele introduse corespund restricțiilor impuse.
6 1
8 1

Explicație

Suma fractiilor 4/2 și 8/2 este 12/2, care adus la forma lui ireductibila este 6/1, iar produsul este 8/1.

Rezolvare

def validare_date(n):
    flag = all(isinstance(x, int) and 0 < x <= 10000 for x in n)
    return flag


def cmmdc(numar1, numar2):
    while numar2:
        rest = numar1 % numar2
        numar1, numar2 = numar2, rest
    return numar1


def impartire_la_cmmdc(numar1, numar2):
    cmmdc_nr = cmmdc(numar1, numar2)
    return numar1 // cmmdc_nr, numar2 // cmmdc_nr


def calculeaza(n):
    a, b, c, d = n
    suma_numarator = a*d + b*c
    suma_numitor = b*d
    produs_numarator = a*c
    produs_numitor = b*d
    suma_numarator, suma_numitor = impartire_la_cmmdc(suma_numarator, suma_numitor)
    produs_numarator, produs_numitor = impartire_la_cmmdc(produs_numarator, produs_numitor)
    print(suma_numarator, suma_numitor)
    print(produs_numarator, produs_numitor)


if __name__ == '__main__':
    n = list(map(int, input().split()))
    if validare_date(n):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        calculeaza(n)
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")