0424 - Fibonacci generalizat

From Bitnami MediaWiki
Revision as of 21:31, 8 January 2023 by Bogdan.Pop (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Context

Se consideră şirul Fibonacci generalizat, definit astfel: f1=a, f2=b, fk=fk-1+fk-2, dacă k > 2, unde a, b ∈ ℤ.

Cerinţa

Se dă un număr natural termen_maxim și două numere întregi termen1 și termen2. Să se afişeze în ordine termenii şirului lui Fibonacci generalizat cu valoarea absolută mai mică sau egală cu termen_maxim.

Date de intrare

Programul citește de la tastatură numerele termen1, termen2 si termen_maxim.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.", urmat, pe rândul următor, programul afișează pe ecran termenii determinați, separați prin câte o virgulă și un spaţiu. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • numar_elemente ∈ ℕ
  • 1 ⩽ termen_maxim ⩽ 500.000.000
  • termenii se vor afișa în ordinea: f1, f2, f3, ...

Exemplu

Intrare
-1
2
40
Ieșire
Datele introduse corespund restricțiilor impuse.
-1, 2, 1, 3, 4, 7, 11, 18, 29


Intrare
3
5
abc
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Intrare
0
0
0
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0424 - Fibonacci Generalizat

def validare_date_termen_maxim(numar):

   if numar.isdigit():
       if 1 <= int(numar) <= 500_000_000:
           return True
       else:
           return False
   else:
       return False
   
   

def validare_date_termeni(termen1, termen2):

   all_int = True
   if not isinstance(termen1, str) and not isinstance(termen2, str):
       all_int = False
   else:
       try:
           int(termen1)
           int(termen2)
       except ValueError:
           all_int = False
   
   return all_int
   
   

def fibonacci_generalizat(termen1, termen2, termen_maxim):

   fibo1 = termen1
   fibo2 = termen2
   fibo3 = fibo1 + fibo2
   
   if termen_maxim >= 1:
       print(fibo1, fibo2, sep=", ", end=", ")
       while(abs(fibo3) < termen_maxim):  
           fibo1, fibo2 = fibo2, fibo3  
           if fibo1 + fibo2 > termen_maxim:
               print(fibo3)
           else:
               print(fibo3, end=", ")
           fibo3 = fibo2 + fibo1
   
       

if __name__ == "__main__":

   termen1 = input()
   termen2 = input()
   termen_maxim = input()
   
   if validare_date_termeni(termen1, termen2):
       termen1, termen2 = int(termen1), int(termen2)
       if validare_date_termen_maxim(termen_maxim):
           termen_maxim = int(termen_maxim)
           print("Datele de intrare corespund restricțiilor impuse.")
           fibonacci_generalizat(termen1, termen2, termen_maxim)
       else:
           print("Datele de intrare nu corespund restricțiilor impuse.")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>