3307 - Fractie 6: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 96: Line 96:


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
Programul verifică dacă numerele introduse de utilizator reprezintă fracții finite sau periodice, și afișează tipul fracției pentru fiecare număr.
Funcția '''gcd''' calculează cel mai mare divizor comun dintre cele două numere date, iar funcția '''fractie''' calculează tipul fracției pentru fiecare număr. Dacă numărul este o fracție finită, se adaugă în lista '''rezultate''' string-ul "fractie finita", altfel se calculează numărul de doi și cinci din descompunerea în factori primi ai numitorului. Dacă numitorul are factori diferiți de 2 și 5, atunci este o fracție periodică simplă, altfel este o fracție periodică mixtă.
Dacă toate fracțiile au fost verificate, lista '''rezultate''' este afișată, altfel se afișează un mesaj de eroare.

Latest revision as of 16:04, 28 April 2023

Cerinţa[edit]

Se dă un numar n și n perechi de numere naturale numar1 și numar2.Să se determine dacă numar1/numar2 este fracție finită sau periodică, iar dacă este fracție periodică să se determine dacă este fracție periodică simplă sau mixtă.

Date de intrare[edit]

Se citește de la tastatură un număr n și apoi n perechi de numere numar1 numar2.

Date de ieşire[edit]

Programul afișează pentru fiecare pereche citită, pe câte un rând, mesajul fractie finita, fractie periodica simpla sau fractie periodica mixta în funcție de caz.

Restricții și precizări[edit]

  • n ∈ Ν
  • 1 ⩽ n ⩽ 100
  • 1 ⩽ numar1, numar2 ⩽ 1.000.000.000, numere naturale

Exemplu1[edit]

Intrare
5
2 5
7 90
90 270
50 81000
9 3
Ieșire
Datele de intrare corespund restricțiilor impuse.
fractie finita
fractie periodica mixta
fractie periodica simpla
fractie periodica mixta
fractie finita

Exemplu2[edit]

Intrare
4
5 10
65 34
88 168
91 71
Ieșire
Datele de intrare corespund restricțiilor impuse.
fractie finita
fractie periodica simpla
fractie periodica simpla
fractie periodica simpla

Rezolvare[edit]

<syntaxhighlight lang="python" line> def validare_n(n):

   return 1 <= n <= 100


def validare_numere(numar1, numar2):

   return 1 <= numar1 <= 1_000_000_000 and 1 <= numar2 <= 1_000_000_000


def gcd(numar1, numar2):

   if numar2 == 0:
       return numar1
   return gcd(numar2, numar1 % numar2)


def fractie(n, numere):

   rezultate = []
   for i in range(n):
       numar1, numar2 = numere[i]
       if not validare_numere(numar1, numar2):
           print("Datele de intrare nu corespund restrictiilor impuse.")
           break
       g = gcd(numar1, numar2)
       numar2 //= g
       twos, fives = 0, 0
       while numar2 % 2 == 0:
           twos += 1
           numar2 //= 2
       while numar2 % 5 == 0:
           fives += 1
           numar2 //= 5
       if numar2 == 1:
           rezultate.append("fractie finita")
       elif twos or fives:
           rezultate.append("fractie periodica mixta")
       else:
           rezultate.append("fractie periodica simpla")
   if len(rezultate) == n:
       print("\nDatele de intrare corespund restrictiilor impuse.\n")
       for r in rezultate:
           print(r)


if __name__ == '__main__':

   n = int(input())
   if validare_n(n):
       numere = [tuple(map(int, input().split())) for _ in range(n)]
       fractie(n, numere)
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>

Explicație[edit]

Programul verifică dacă numerele introduse de utilizator reprezintă fracții finite sau periodice, și afișează tipul fracției pentru fiecare număr.

Funcția gcd calculează cel mai mare divizor comun dintre cele două numere date, iar funcția fractie calculează tipul fracției pentru fiecare număr. Dacă numărul este o fracție finită, se adaugă în lista rezultate string-ul "fractie finita", altfel se calculează numărul de doi și cinci din descompunerea în factori primi ai numitorului. Dacă numitorul are factori diferiți de 2 și 5, atunci este o fracție periodică simplă, altfel este o fracție periodică mixtă.

Dacă toate fracțiile au fost verificate, lista rezultate este afișată, altfel se afișează un mesaj de eroare.