0629 - Zet

From Bitnami MediaWiki
Revision as of 10:14, 9 January 2024 by Aurelia Raluca (talk | contribs) (Pagină nouă: == Enunt == Fie z∈R,z≠0 astfel încât z+1/z=k,k∈N. == Cerinta == Dându-se k și un număr natural n, se cere: a) să calculați z^2+1/z^2; b) să se determine z^n+1/z^n. == Date de intrare == Fişierul de intrare zet.in conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe următoarea linie se află numerele k şi n, cu semnificaţiile din enunţ. == Date de ieșire == p. Dacă val...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunt

Fie z∈R,z≠0 astfel încât z+1/z=k,k∈N.

Cerinta

Dându-se k și un număr natural n, se cere: a) să calculați z^2+1/z^2; b) să se determine z^n+1/z^n.

Date de intrare

Fişierul de intrare zet.in conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe următoarea linie se află numerele k şi n, cu semnificaţiile din enunţ.

Date de ieșire

p. Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire zet.out se va scrie un singur număr natural reprezentând rezultatul calculului cerut la punctul a).

Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință. În acest caz, fişierul de ieşire zet.out va conține un singur număr natural reprezentând rezultatul calculului cerut la punctul b).

Restricții și precizări

  • 2 ≤ k < 30
  • 3 ≤ n ≤ 13
  • Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.

Exemplul 1

zetin.txt
1
3 5
zetout.txt
Datele introduse corespund restrictiilor impuse.
7

Exemplul 2

zetin.txt
-3
9 7
zetout.txt
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

<syntaxhighlight lang="python3" line="1">

import cmath

def calcul_z(k):

   delta = cmath.sqrt(k**2 - 4)
   z1 = (k + delta) / 2
   z2 = (k - delta) / 2
   return z1, z2

def calcul_a(k):

   z1, z2 = calcul_z(k)
   rezultat = z1**2 + z2**2
   return rezultat

def calcul_b(k, n):

   z1, z2 = calcul_z(k)
   a = k**2 - 2  # rezultatul pentru z^2 + 1/z^2
   for _ in range(n - 2):
       a = (k**2 - 2) * a - (z1 + z2)
   return a

print(f"Rezultatul pentru b) este {rezultat_b}")



</syntaxhighlight>