0391 - Fractii

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dau n perechi de numere naturale nenule, fiecare reprezentând câte o fracţie. Calculaţi suma celor n fracţii, aducând rezultatul la forma ireductibilă.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale, reprezentând numărătorul şi numitorul unei fracţii.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numerele numarator1 numitor1, separate prin exact un spaţiu, reprezentând numărătorul şi numitorul fracţiei sumă, adusă la forma ireductibilă.

Restricții și precizări[edit | edit source]

  • n ∈ Ν
  • 1 ⩽ n ⩽ 10
  • numărătorul şi numitorul fiecărei fracţii sunt numere naturale cu cel mult două cifre

Exemplu1[edit | edit source]

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

Exemplu2[edit | edit source]

Intrare
3
4 5
8 2
9 10
Ieșire
Datele de intrare corespund restricțiilor impuse.
57 10

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math


def validare_date(numar, numere):

   flag = False
   if 0 < int(numar) < 10 and len(numere) == 2:
       flag = all(isinstance(x, int) and 1 <= x <= 1_000_000_000 for x in numere)
   return flag


def suma(n, numarator1, numitor1):

   date = True
   for i in range(n-1):
       pereche = input().split()
       if validare_date(pereche[0], [int(pereche[0]), int(pereche[1])]):
           numarator2, numitor2 = int(pereche[0]), int(pereche[1])
           numarator1 = numarator1 * numitor2 + numarator2 * numitor1
           numitor1 = numitor1 * numitor2
           cmmdc = math.gcd(numarator1, numitor1)
           numarator1 = numarator1 // cmmdc
           numitor1 = numitor1 // cmmdc
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
           date = False
           break
   if date:
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       print(numarator1, numitor1)


if __name__ == '__main__':

   n = int(input())
   a, b = map(int, input().split())
   if validare_date(n, [a, b]):
       suma(n, a, b)
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>

Explicație[edit | edit source]

Codul primește la intrare un număr întreg n, urmat de două numere întregi a și b, și apoi primește încă n-1 perechi de numere întregi. Programul calculează suma fracțiilor primite la intrare și afișează rezultatul sub forma unei fracții ireductibile.

Funcția suma primește numărul de fracții ce urmează a fi adunate, numărătorul și numitorul primei fracții. Apoi, pentru fiecare fracție următoare, se face următoarele: se citește perechea de numere, se verifică dacă aceasta respectă restricțiile impuse prin intermediul funcției validare_date, se adună fracția la suma totală și se simplifică rezultatul.

Dacă toate datele de intrare sunt valide, programul afișează suma fracțiilor.