3416 - Gen Mat 22: Difference between revisions

From Bitnami MediaWiki
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">

  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>