0629 - Zet

From Bitnami MediaWiki
Revision as of 19:45, 12 February 2024 by Aurelia Raluca (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunt

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

Cerința

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 zetIN.txt 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 zetOUT.txt 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 zetOUT.txt va conține un singur număr natural reprezentând rezultatul calculului cerut la punctul b). În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse".

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

7

Explicație

p = 1

Exemplul 2:

zetIN.txt

1
313 5

zetOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare

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

def genereaza(k, f):

   f[0] = 2
   f[1] = k
   for x in range(2, 14):
       f[x] = k * f[x-1] - f[x-2]

def verifica_restricții(k, n):

   if not (2 <= k < 30) or not (3 <= n <= 13):
       return False
   return True

def principal():

   with open('zetIN.txt', 'r') as intrare:
       cer = int(intrare.readline().strip())
       k, n = map(int, intrare.readline().split())
   f = [0]*16
   if verifica_restricții(k, n):
       genereaza(k, f)
       with open('zetOUT.txt', 'w') as iesire:
           if cer == 1:
               iesire.write(str(f[2]))
           else:
               iesire.write(str(f[n]))
   else:
       with open('zetOUT.txt', 'w') as iesire:
           iesire.write("Datele nu corespund restrictiilor impuse")

if __name__ == "__main__":

   principal()

</syntaxhighlight>