0390 - SPFractii
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
<syntaxhighlight lang="python" line> 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.")
</syntaxhighlight>