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