0390 - SPFractii: Diferență între versiuni

De la Universitas 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ă,...)
 
Fără descriere a modificării
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 12: Linia 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
Linia 21: Linia 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
Linia 66: Linia 66:


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
Programul citește de la tastatură o listă de 4 numere întregi și verifică dacă acestea îndeplinesc anumite restricții. Dacă aceste restricții sunt îndeplinite, programul calculează suma și produsul fracțiilor corespunzătoare numerelor din listă, simplifică fracțiile obținute și afișează rezultatele.
Funcția '''cmmdc''' calculează cel mai mare divizor comun dintre două numere utilizând algoritmul lui Euclid.
Funcția '''impartire_la_cmmdc''' simplifică o fracție prin împărțirea numărătorului și numitorului la cel mai mare divizor comun al acestora.
Funcția '''calculeaza''' primește lista de numere, descompune fiecare număr într-o fracție corespunzătoare și calculează suma și produsul acestora. Fracțiile obținute sunt simplificate prin împărțirea la cel mai mare divizor comun și afișate.

Versiunea curentă din 28 aprilie 2023 16:00

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

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.")

Explicație

Programul citește de la tastatură o listă de 4 numere întregi și verifică dacă acestea îndeplinesc anumite restricții. Dacă aceste restricții sunt îndeplinite, programul calculează suma și produsul fracțiilor corespunzătoare numerelor din listă, simplifică fracțiile obținute și afișează rezultatele.

Funcția cmmdc calculează cel mai mare divizor comun dintre două numere utilizând algoritmul lui Euclid.

Funcția impartire_la_cmmdc simplifică o fracție prin împărțirea numărătorului și numitorului la cel mai mare divizor comun al acestora.

Funcția calculeaza primește lista de numere, descompune fiecare număr într-o fracție corespunzătoare și calculează suma și produsul acestora. Fracțiile obținute sunt simplificate prin împărțirea la cel mai mare divizor comun și afișate.