3416 - Gen Mat 22: Difference between revisions
No edit summary |
|||
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): | def validare(nr_linii): # functia de validare a datelor de intrare | ||
if nr_linii < 1 or nr_linii > 20: | if nr_linii < 1 or nr_linii > 20: | ||
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 41: | Line 41: | ||
nr_linii *= 3 | nr_linii *= 3 | ||
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 conform cerintei | ||
index_linie = 0 | index_linie = 0 # folosindu-ne de indexi vom parcurge pe rand fiecare patrat de 3x3 | ||
index_coloana = 0 | index_coloana = 0 | ||
valoare = 1 | valoare = 1 # primul patrat are valoarea 1 | ||
while index_linie < nr_linii: | while index_linie < nr_linii: # cat timp nu iesim din matrice | ||
matrice[index_linie][index_coloana] = valoare | matrice[index_linie][index_coloana] = valoare # construirea patratului de 3x3 | ||
matrice[index_linie][index_coloana + 2] = valoare | matrice[index_linie][index_coloana + 2] = valoare | ||
matrice[index_linie + 1][index_coloana + 1] = valoare | matrice[index_linie + 1][index_coloana + 1] = valoare | ||
Line 55: | Line 55: | ||
matrice[index_linie + 2][index_coloana + 2] = valoare | matrice[index_linie + 2][index_coloana + 2] = valoare | ||
valoare += 1 | valoare += 1 # crestem valoarea | ||
index_coloana += 3 | index_coloana += 3 # trecem la urmatorul grup de 3x3 din dreapta | ||
if index_coloana >= nr_coloane: | if index_coloana >= nr_coloane: # daca nu mai avem in dreapta grupuri, trecem la grupurile de 3x3 de mai jos | ||
index_coloana = 0 | index_coloana = 0 | ||
index_linie += 3 | index_linie += 3 | ||
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 69: | Line 69: | ||
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 datelor de intrare | ||
gen_mat_22(n) | gen_mat_22(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:46, 29 April 2023
Cerința
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
Programul citește de la tastatură numărul n.
Date de ieșire
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
- 1 ≤ n ≤ 20
Exemplu 1
- 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
- Intrare
- 34
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Explicație
- S-a citit n=2 și se construiește o matrice cu 4 zone a câte 3 linii și 3 coloane.
Rezolvare
<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>