0786 - Mat Sim

From Bitnami MediaWiki

Cerinţa[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line>

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


</syntaxhighlight>