3416 - Gen Mat 22: Difference between revisions
Line 29: | Line 29: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#3416 Gen Mat 22 | # 3416 Gen Mat 22 | ||
def validare(nr_linii): | |||
if nr_linii < 1 or nr_linii > 20: | |||
raise ValueError | |||
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)] | |||
index_linie = 0 | |||
index_coloana = 0 | |||
valoare = 1 | |||
while index_linie < nr_linii: | |||
matrice[index_linie][index_coloana] = valoare | |||
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 | |||
index_coloana += 3 | |||
if index_coloana >= nr_coloane: | |||
index_coloana = 0 | |||
index_linie += 3 | |||
for index_linie in range(nr_linii): | |||
for index_coloana in range(nr_coloane): | |||
print(matrice[index_linie][index_coloana], end=" ") | |||
print() | |||
if __name__ == '__main__': | |||
try: | |||
n = int(input("Introduceți n: ")) | |||
validare(n) | |||
gen_mat_22(n) | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> |
Revision as of 21:42, 14 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>
- 3416 Gen Mat 22
def validare(nr_linii):
if nr_linii < 1 or nr_linii > 20: raise ValueError
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)]
index_linie = 0 index_coloana = 0 valoare = 1
while index_linie < nr_linii:
matrice[index_linie][index_coloana] = valoare 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 index_coloana += 3
if index_coloana >= nr_coloane: index_coloana = 0 index_linie += 3
for index_linie in range(nr_linii): for index_coloana in range(nr_coloane): print(matrice[index_linie][index_coloana], end=" ") print()
if __name__ == '__main__':
try: n = int(input("Introduceți n: ")) validare(n) gen_mat_22(n) except ValueError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>