0787 - Mat Sim 1

De la Universitas MediaWiki

Cerinţa

Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Să se construiască o matrice care să fie simetrica față de diagonala secundară a matricei date.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n*n numere naturale, separate prin spaţii, reprezentând elementele matricei, linie cu linie.

Date de ieşire

Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou elementele matricei construite, câte un linie a matricei pe o linie a ecranului, elementele de pe o linie fiind separate prin câte un spațiu.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • elementele matricei vor fi mai mici decât 1.000.000

Exemplu

Date de intrare
4
3 1 8 5
7 8 5 1
2 2 6 7
9 8 1 3
Date de ieșire
Datele sunt introduse corect.
3 7 1 5
1 6 5 8
8 2 8 1
9 2 7 3

Rezolvare

# Funcția de validare a datelor de intrare
def validare_date_intrare(n, a):
    # parcurgem matricea
    for i in range(n):
        for j in range(n):
            # verificăm dacă există cel putin un element mai mare sau egal cu 1000000
            if a[i][j] >= 1000000:
                # daca există, returnam False
                return False
    # dacă toate elementele din matricea a respecta condiția, returnam True
    return True


# Funcția care construiește matricea simetrică față de diagonala secundară
def construieste_matrice_simetrica(a, n):
    # inițializăm matricea b cu 0
    b = [[0 for j in range(n)] for i in range(n)]
    # parcurgem matricea a
    for i in range(n):
        for j in range(n):
            # construim matricea b astfel încat fiecare element de pe poziția (i,j) să fie
            # egal cu elementul de pe poziția (n-1-j, n-1-i) din matricea a
            b[i][j] = a[n - 1 - j][n - 1 - i]
    # returnăm matricea b construită
    return b


# Funcția principală
if __name__ == '__main__':
    # citim n de la tastatură
    n = int(input())
    # inițializăm matricea a cu 0
    a = [[0 for j in range(n)] for i in range(n)]
    # citim elementele matricei a de la tastatură
    for i in range(n):
        linie = input().split()
        for j in range(n):
            a[i][j] = int(linie[j])

    # verificăm dacă datele de intrare sunt valide
    if validare_date_intrare(n, a):
        # construim matricea b simetrică față de diagonala secundară
        b = construieste_matrice_simetrica(a, n)
        # afișăm mesajul "Datele sunt introduse corect."
        print("Datele sunt introduse corect.")
        # afișăm matricea b pe ecran
        for i in range(n):
            for j in range(n):
                print(b[i][j], end=" ")
            print()

    else:
        # afișăm mesajul "Datele nu corespund restricțiilor impuse."
        print("Datele nu corespund restricțiilor impuse.")