0425 - Viete: Difference between revisions
Pagină nouă: ==Cerință== Se consideră ecuația de gradul al doilea '''ax^2+bx+c'''=0 cu coeficienți întregi și un număr natural n. Să se determine '''Sn=xn1+xn2''' unde '''x1''' și '''x2''' sunt rădăcinile ecuației, folosind relațiile lui Viete. ==Date de intrare== Programul citește de la tastatură numerele '''a b c n'''. ==Date de ieșire== Programul afișează pe ecran numărul S, reprezentând valoarea cerută. ==Restricții de precizări== *'''1 ≤ n ≤ 10''' *... |
No edit summary |
||
Line 33: | Line 33: | ||
Pentru rezolvarea problemei folosim relațiile de mai sus. | Pentru rezolvarea problemei folosim relațiile de mai sus. | ||
== | ==Exemplul 1:== | ||
;Intrare | ;Intrare | ||
:1 -3 2 4 | :1 -3 2 4 | ||
;Ieșire | ;Ieșire | ||
:Datele de intrare corespund restrictiilor impuse. | |||
:17 | :17 | ||
==Exemplul 2:== | |||
;Intrare | |||
:5 20 20 4 | |||
;Ieșire | |||
:Datele de intrare nu corespund restrictiilor impuse. | |||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def verificare_restrictii(nr_a, nr_b, nr_c, nr_n): # functia de verificare a datelor de intrare | |||
if | if nr_a == 1 and -10 <= nr_b <= 10 and -10 <= nr_c <= 10 and 1 <= nr_n <= 10: | ||
return True | |||
return | |||
else: | else: | ||
return False | |||
for _ in range(3, | def solve(nr_a, nr_b, nr_c, nr_n): | ||
global sn | |||
s = -nr_b/nr_a | |||
p = nr_c/nr_a | |||
return int( | |||
if nr_n == 1: | |||
return int(s) | |||
elif nr_n == 2: | |||
return int(s**2 - 2*p) | |||
else: | |||
sn_minus_1 = s**2 - 2*p | |||
sn_minus_2 = s | |||
for _ in range(3, nr_n+1): | |||
sn = s*sn_minus_1 - p*sn_minus_2 | |||
sn_minus_2 = sn_minus_1 | |||
sn_minus_1 = sn | |||
return int(sn) # Adăugăm această linie pentru a returna sn | |||
if __name__ == '__main__': | |||
try: | |||
a = int(input("Introduceti numarul a: ")) | |||
b = int(input("Introduceti numarul b: ")) | |||
c = int(input("Introduceti numarul c: ")) | |||
n = int(input("Introduceti numarul n: ")) | |||
if verificare_restrictii(a, b, c, n): | |||
print("Datele de intrare corespund restrictiilor impuse.") | |||
print(solve(a, b, c, n)) | |||
else: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 15:53, 11 November 2023
Cerință
Se consideră ecuația de gradul al doilea ax^2+bx+c=0 cu coeficienți întregi și un număr natural n. Să se determine Sn=xn1+xn2 unde x1 și x2 sunt rădăcinile ecuației, folosind relațiile lui Viete.
Date de intrare
Programul citește de la tastatură numerele a b c n.
Date de ieșire
Programul afișează pe ecran numărul S, reprezentând valoarea cerută.
Restricții de precizări
- 1 ≤ n ≤ 10
- -10 ≤ b,c ≤ 10, a = 1
- rezultatul se va înscrie pe 32 de biți cu semn
Indicații de rezolvare
Considerăm relațiile lui Viete
S=x1+x2=−ba
P=x1⋅x2=ca Se demonstrează că:
Sn=S⋅Sn−1−P⋅Sn−2
S1=S
S2=S2−2⋅P Pentru rezolvarea problemei folosim relațiile de mai sus.
Exemplul 1:
- Intrare
- 1 -3 2 4
- Ieșire
- Datele de intrare corespund restrictiilor impuse.
- 17
Exemplul 2:
- Intrare
- 5 20 20 4
- Ieșire
- Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line="1" start="1">
def verificare_restrictii(nr_a, nr_b, nr_c, nr_n): # functia de verificare a datelor de intrare
if nr_a == 1 and -10 <= nr_b <= 10 and -10 <= nr_c <= 10 and 1 <= nr_n <= 10: return True else: return False
def solve(nr_a, nr_b, nr_c, nr_n):
global sn s = -nr_b/nr_a p = nr_c/nr_a
if nr_n == 1: return int(s) elif nr_n == 2: return int(s**2 - 2*p) else: sn_minus_1 = s**2 - 2*p sn_minus_2 = s for _ in range(3, nr_n+1): sn = s*sn_minus_1 - p*sn_minus_2 sn_minus_2 = sn_minus_1 sn_minus_1 = sn return int(sn) # Adăugăm această linie pentru a returna sn
if __name__ == '__main__':
try: a = int(input("Introduceti numarul a: ")) b = int(input("Introduceti numarul b: ")) c = int(input("Introduceti numarul c: ")) n = int(input("Introduceti numarul n: "))
if verificare_restrictii(a, b, c, n): print("Datele de intrare corespund restrictiilor impuse.") print(solve(a, b, c, n)) else: print("Datele de intrare nu corespund restrictiilor impuse.") except ValueError: print("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>
Explicație
S=3,P=2 S1=S=3 S2=S2−2⋅P=32−2⋅2=5 S3=S⋅S2−P⋅S1=3⋅5−2⋅3=9 S4=S⋅S3−P⋅S2=3⋅9−2⋅5=17