0786 - Mat Sim

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 principală 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 o 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 ⩽ 20
  • elementele matricei vor fi mai mici decât 1.000.000
  • două matrice A și B sunt simetrice față de diagonala principală dacă A[i,j]=B[j,i], pentru orice i,j. principală sunt nenule

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 2 9
1 8 2 8
8 5 6 1
5 1 7 3

Rezolvare

#Funcția care verifică dacă datele introduse corespund restricțiilor impuse 
def valideaza_matrice(matrice):
    for i in range(n):
        for j in range(n):
            if matrice[i][j] >= 1000000:
                return False
    return True

def construieste_matrice_simetrica(matrice):
    if not valideaza_matrice(matrice):
        return None
    # Construiește matricea simetrică
    matrice_simetrica = [[0 for j in range(n)] for i in range(n)]
    for i in range(n):
        for j in range(n):
            matrice_simetrica[i][j] = matrice[j][i]
    return matrice_simetrica

# Funcția principală
if __name__ == '__main__':
    # Citirea datelor de la tastatură
    n = int(input())
    matrice = [[0 for j in range(n)] for i in range(n)]
    for i in range(n):
        linie = input().split()
        for j in range(n):
            matrice[i][j] = int(linie[j])

    # Construirea și afișarea matricei simetrice
    matrice_simetrica = construieste_matrice_simetrica(matrice)
    if matrice_simetrica is not None:
        for i in range(n):
            for j in range(n):
                print(matrice_simetrica[i][j], end=" ")
            print()
        print("Datele sunt introduse corect.")
    else:
        print("Datele nu corespund restricțiilor impuse.")