3416 - Gen Mat 22
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>