0787 - Mat Sim 1

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

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

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

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


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


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

</syntaxhighlight>