3416 - Gen Mat 22

From Bitnami MediaWiki
Revision as of 19:46, 29 April 2023 by Hotico Iulia Denisa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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">

  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>