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