3416 - Gen Mat 22

De la Universitas MediaWiki

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

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