0390 - SPFractii: Difference between revisions
Robert Manc (talk | contribs) 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ă,... |
Robert Manc (talk | contribs) No edit summary |
||
Line 12: | Line 12: | ||
: 1 2 4 3 | : 1 2 4 3 | ||
; Ieșire | ; Ieșire | ||
: Datele | : Datele de intrare corespund restricțiilor impuse. | ||
: 11 6 | : 11 6 | ||
: 2 3 | : 2 3 | ||
Line 21: | Line 21: | ||
: 4 2 8 2 | : 4 2 8 2 | ||
; Ieșire | ; Ieșire | ||
: Datele | : Datele de intrare corespund restricțiilor impuse. | ||
: 6 1 | : 6 1 | ||
: 8 1 | : 8 1 |
Revision as of 10:34, 11 April 2023
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 de intrare 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 de intrare 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>