0390 - SPFractii: Difference between revisions

From Bitnami MediaWiki
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ă,...
 
No edit summary
Line 12: Line 12:
: 1 2 4 3
: 1 2 4 3
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 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 introduse corespund restricțiilor impuse.
: 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>