0313 - Diagonale

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Calculaţi diferenţa în valoare absolută dintre sumele elementelor de pe cele două diagonale.

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 numărul D, reprezentând valoarea calculată.Î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 10000

Exemplu[edit | edit source]

Intrare
4
8 3 3 7
1 1 6 5
8 7 1 1
9 8 7 1
Ieșire
Datele sunt introduse corect.
18

Explicație[edit | edit source]

Sumele elementelor pe cele două diagonale sunt: 11 şi 29. Diferenţa în valoare absolută este: 18

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> from typing import List

def validare_date(n: int, matrice: List[List[int]]) -> bool:

   # Verifică dacă dimensiunea matricei este în intervalul corect
   if n < 1 or n > 20:
       return False
   # Verifică dacă toate elementele matricei sunt în intervalul corect
   for rand in matrice:
       for elem in rand:
           if elem < 0 or elem >= 10000:
               return False
   # Returnează True dacă matricea este validă
   return True


def calculeaza_diferenta_diagonalelor(n: int, matrice: List[List[int]]) -> int:

   # Inițializează sumele diagonalelor cu 0
   suma_dp, suma_ds = 0, 0
   # Calculează sumele elementelor de pe cele două diagonale
   for i in range(n):
       for j in range(n):
           if i == j:
               suma_dp += matrice[i][j]
           if i + j == n - 1:
               suma_ds += matrice[i][j]
   # Returnează diferența dintre cele două sume, calculată ca valoare absolută
   return abs(suma_dp - suma_ds)


if __name__ == '__main__':

   # Citește dimensiunea matricei de la tastatură
   n = int(input())
   # Inițializează matricea cu valorile citite de la tastatură
   matrice = []
   for i in range(n):
       rand = list(map(int, input().split()))
       matrice.append(rand)
   # Verifică dacă matricea este validă și afișează mesajul corespunzător
   if validare_date(n, matrice):
       print("Datele sunt introduse corect.")
       # Dacă matricea este validă, calculează diferența dintre diagonale și o afișează
       D = calculeaza_diferenta_diagonalelor(n, matrice)
       print(D)
   else:
       print("Datele nu corespund restrictiilor impuse.")


</syntaxhighlight>