3416 - Gen Mat 22: Difference between revisions
No edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 28: | Line 28: | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
#3416 Gen Mat 22 | # 3416 Gen Mat 22 | ||
def validare(nr_linii): # functia de validare a datelor de intrare | |||
if nr_linii < 1 or nr_linii > 20: | |||
raise ValueError # daca nu corespund, ridicam eroarea Value Error | |||
print("Datele de intrare corespund restrictiilor impuse") | |||
def gen_mat_22(nr_linii): | |||
nr_linii *= 3 | |||
nr_coloane = nr_linii | |||
matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)] # initializarea matricii conform cerintei | |||
index_linie = 0 # folosindu-ne de indexi vom parcurge pe rand fiecare patrat de 3x3 | |||
index_coloana = 0 | |||
valoare = 1 # primul patrat are valoarea 1 | |||
while index_linie < nr_linii: # cat timp nu iesim din matrice | |||
matrice[index_linie][index_coloana] = valoare # construirea patratului de 3x3 | |||
matrice[index_linie][index_coloana + 2] = valoare | |||
matrice[index_linie + 1][index_coloana + 1] = valoare | |||
matrice[index_linie + 2][index_coloana] = valoare | |||
matrice[index_linie + 2][index_coloana + 2] = valoare | |||
valoare += 1 # crestem valoarea | |||
index_coloana += 3 # trecem la urmatorul grup de 3x3 din dreapta | |||
if index_coloana >= nr_coloane: # daca nu mai avem in dreapta grupuri, trecem la grupurile de 3x3 de mai jos | |||
index_coloana = 0 | |||
index_linie += 3 | |||
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 datelor de intrare | |||
gen_mat_22(n) # apelul functiei de rezolvare | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> |
Latest revision as of 19:46, 29 April 2023
Cerința[edit | edit source]
Scrieți un program care citește de la tastatură un număr natural n și construiește o matrice cu 3*n linii și 3*n coloane, împărțită în n*n zone, numerotate de la 1 la n*n, de sus în jos și de la stânga la dreapta. Fiecare zonă ocupă 3 linii și 3 coloane și va conține pe diagonale numărul său de ordine, restul elementelor fiind egale cu 0.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran matricea construită, câte o linie din matrice pe o linie a ecranului, elementele de pe o linie fiind separate prin câte un spațiu.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 20
Exemplu 1[edit | edit source]
- Intrare
- 2
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 1 0 1 2 0 2
- 0 1 0 0 2 0
- 1 0 1 2 0 2
- 3 0 3 4 0 4
- 0 3 0 0 4 0
Exemplu 2[edit | edit source]
- Intrare
- 34
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Explicație[edit | edit source]
- S-a citit n=2 și se construiește o matrice cu 4 zone a câte 3 linii și 3 coloane.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 3416 Gen Mat 22
def validare(nr_linii): # functia de validare a datelor de intrare
if nr_linii < 1 or nr_linii > 20: raise ValueError # daca nu corespund, ridicam eroarea Value Error
print("Datele de intrare corespund restrictiilor impuse")
def gen_mat_22(nr_linii):
nr_linii *= 3 nr_coloane = nr_linii matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)] # initializarea matricii conform cerintei
index_linie = 0 # folosindu-ne de indexi vom parcurge pe rand fiecare patrat de 3x3 index_coloana = 0 valoare = 1 # primul patrat are valoarea 1
while index_linie < nr_linii: # cat timp nu iesim din matrice
matrice[index_linie][index_coloana] = valoare # construirea patratului de 3x3 matrice[index_linie][index_coloana + 2] = valoare matrice[index_linie + 1][index_coloana + 1] = valoare matrice[index_linie + 2][index_coloana] = valoare matrice[index_linie + 2][index_coloana + 2] = valoare
valoare += 1 # crestem valoarea index_coloana += 3 # trecem la urmatorul grup de 3x3 din dreapta
if index_coloana >= nr_coloane: # daca nu mai avem in dreapta grupuri, trecem la grupurile de 3x3 de mai jos index_coloana = 0 index_linie += 3
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 datelor de intrare gen_mat_22(n) # apelul functiei de rezolvare except ValueError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>