0629 - Zet: Difference between revisions

From Bitnami MediaWiki
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...
 
No edit summary
 
Line 1: Line 1:
== Enunt ==
== Enunt ==


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


== Cerinta ==
= Cerința =
Dându-se <code>k</code> și un număr natural <code>n</code>, se cere:


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


== Date de intrare ==
b) să se determine  z^n + 1/z^n.


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 intrare =
Fişierul de intrare <code>zetIN.txt</code> conţine pe prima linie un număr natural <code>p</code>. Pentru toate testele de intrare, numărul <code>p</code> poate avea doar valoarea <code>1</code> sau valoarea <code>2</code>. Pe următoarea linie se află numerele <code>k</code> şi <code>n</code>, cu semnificaţiile din enunţ.


== Date de ieșire ==
= Date de ieșire =
p. Dacă valoarea lui <code>p</code> este <code>1</code>, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire <code>zetOUT.txt</code> se va scrie un singur număr natural reprezentând rezultatul calculului cerut la punctul a).


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 <code>p</code> este <code>2</code>, se va rezolva numai punctul b) din cerință. În acest caz, fişierul de ieşire <code>zetOUT.txt</code> 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".


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 =


== Restricții și precizări ==
* <code>2 ≤ k < 30</code>
* <code>3 ≤ n ≤ 13</code>
* Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.


*2 ≤ k < 30
= Exemplul 1: =
*3 ≤ n ≤ 13
<code>zetIN.txt</code>
*Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.
1
3 5
<code>zetOUT.txt</code>
7


== Exemplul 1 ==
= Explicație =
<code>p = 1</code>


;zetin.txt
== Exemplul 2: ==
 
<code>zetIN.txt</code>
:1
1
 
313 5
:3 5
<code>zetOUT.txt</code>
 
Datele nu corespund restrictiilor impuse
;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 ==
== Rezolvare ==


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


import cmath
def genereaza(k, f):
 
     f[0] = 2
def calcul_z(k):
     f[1] = k
    delta = cmath.sqrt(k**2 - 4)
     for x in range(2, 14):
    z1 = (k + delta) / 2
         f[x] = k * f[x-1] - f[x-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}")


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>
</syntaxhighlight>

Latest revision as of 19:45, 12 February 2024

Enunt[edit | edit source]

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

Cerința[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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:[edit | edit source]

zetIN.txt

1
3 5

zetOUT.txt

7

Explicație[edit | edit source]

p = 1

Exemplul 2:[edit | edit source]

zetIN.txt

1
313 5

zetOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<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>