3416 - Gen Mat 22: Difference between revisions

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

  1. 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>