0235 - Gen Mat 18: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
Line 25: Line 25:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
# 0235 Gen Mat 18
# 0235 Gen Mat 18


def validare(nr_linii):
def validare(nr_linii):                     # functia de validare a datelor de intrare
     if nr_linii < 1 or nr_linii > 6:
     if nr_linii < 1 or nr_linii > 6:
         raise ValueError
         raise ValueError                   # daca nu corespund, ridicam eroarea Value Error


     print("Datele de intrare corespund restrictiilor impuse")
     print("Datele de intrare corespund restrictiilor impuse")
Line 37: Line 37:
def gen_mat_18(nr_linii):
def gen_mat_18(nr_linii):
     nr_coloane = nr_linii
     nr_coloane = nr_linii
     matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)]
     matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)]     # initializarea matricii


     ultim = 0
     ultim = 0       # pentru fibonacci avem nevoie de ultimele 2 numere introduse ca sa aflam noul numar
     penultim = 0
     penultim = 0


     for index_linie in range(nr_linii):
     for index_linie in range(nr_linii):
         if index_linie % 2 == 0:
         if index_linie % 2 == 0:
             for index_coloana in range(nr_coloane):
             for index_coloana in range(nr_coloane):     # daca linia e para, o parcurgem normal
                 valoare = ultim + penultim
                 valoare = ultim + penultim             # aplicam regula din fibonacci
                 if valoare == 0:
                 if valoare == 0:
                     valoare = 1
                     valoare = 1                         # primul element trebuie sa fie 1 nu 0


                 penultim = ultim
                 penultim = ultim                       # salvam noile ultime 2 elemente
                 ultim = valoare
                 ultim = valoare


                 matrice[index_linie][index_coloana] = valoare
                 matrice[index_linie][index_coloana] = valoare   # introducem valoarea
         else:
         else:
            # pe liniile impare facem acelasi lucru dar parcurgem coloanele invers
             for index_coloana in range(nr_coloane - 1, -1, -1):
             for index_coloana in range(nr_coloane - 1, -1, -1):
                 valoare = ultim + penultim
                 valoare = ultim + penultim
Line 64: Line 65:
                 matrice[index_linie][index_coloana] = valoare
                 matrice[index_linie][index_coloana] = valoare


     for index_linie in range(nr_linii):
     for index_linie in range(nr_linii):                 # afisarea
         for index_coloana in range(nr_coloane):
         for index_coloana in range(nr_coloane):
             print(matrice[index_linie][index_coloana], end=" ")
             print(matrice[index_linie][index_coloana], end=" ")
Line 71: Line 72:


if __name__ == '__main__':
if __name__ == '__main__':
    # ne asteptam ca datele de intrare sa fie gresite fapt care ar genera o eroare de tipul ValueError
    # pe care o tratam corespunzator
     try:
     try:
         n = int(input("Introduceți n: "))
         n = int(input("Introduceți n: "))       # citirea lui n
         validare(n)
         validare(n)                             # validarea
         gen_mat_18(n)
         gen_mat_18(n)                           # apelul functiei de rezolvare
     except ValueError:
     except ValueError:
         print("Datele de intrare nu corespund restrictiilor impuse")
         print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 19:33, 29 April 2023

Cerința[edit | edit source]

Se consideră şirul Fibonacci, definit astfel: f1=1, f2=1 ... fn=fn-1+fn-2 , dacă n>2. Scrieţi un program care citeşte de la tastatură un număr natural n şi construieşte în memorie o matrice cu n linii şi n coloane, astfel încât parcurgând liniile matricei de sus în jos şi de la stânga la dreapta se obţin, în prima linie primele n numere ale şirului Fibonacci în ordine crescătoare, în linia a doua următoarele n numere ale şirului Fibonacci în ordine descrescătoare, în linia a treia următoarele n numere ale acestui şir în ordine crescătoare, şi aşa mai departe.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa matricea construită, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse"

Restricții și precizări[edit | edit source]

1≤n≤6

Exemplu 1[edit | edit source]

Intrare
4
Ieșire
Datele introduse corespund restricțiilor impuse.
1 1 2 3
21 13 8 5
34 55 89 144
987 610 377 233


Exemplu 2[edit | edit source]

Intrare
10
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare[edit | edit source]

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

  1. 0235 Gen Mat 18

def validare(nr_linii): # functia de validare a datelor de intrare

   if nr_linii < 1 or nr_linii > 6:
       raise ValueError                    # daca nu corespund, ridicam eroarea Value Error
   print("Datele de intrare corespund restrictiilor impuse")


def gen_mat_18(nr_linii):

   nr_coloane = nr_linii
   matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)]     # initializarea matricii
   ultim = 0       # pentru fibonacci avem nevoie de ultimele 2 numere introduse ca sa aflam noul numar
   penultim = 0
   for index_linie in range(nr_linii):
       if index_linie % 2 == 0:
           for index_coloana in range(nr_coloane):     # daca linia e para, o parcurgem normal
               valoare = ultim + penultim              # aplicam regula din fibonacci
               if valoare == 0:
                   valoare = 1                         # primul element trebuie sa fie 1 nu 0
               penultim = ultim                        # salvam noile ultime 2 elemente
               ultim = valoare
               matrice[index_linie][index_coloana] = valoare   # introducem valoarea
       else:
           # pe liniile impare facem acelasi lucru dar parcurgem coloanele invers
           for index_coloana in range(nr_coloane - 1, -1, -1):
               valoare = ultim + penultim
               if valoare == 0:
                   valoare = 1
               penultim = ultim
               ultim = valoare
               matrice[index_linie][index_coloana] = valoare
   for index_linie in range(nr_linii):                 # afisarea
       for index_coloana in range(nr_coloane):
           print(matrice[index_linie][index_coloana], end=" ")
       print()


if __name__ == '__main__':

   # ne asteptam ca datele de intrare sa fie gresite fapt care ar genera o eroare de tipul ValueError
   # pe care o tratam corespunzator
   try:
       n = int(input("Introduceți n: "))       # citirea lui n
       validare(n)                             # validarea
       gen_mat_18(n)                           # apelul functiei de rezolvare
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>