0235 - Gen Mat 18: Difference between revisions
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">
- 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>