1398 - Determinant

From Bitnami MediaWiki
Revision as of 10:20, 11 December 2023 by Simina (talk | contribs) (Pagină nouă: = Cerința = Se dă o matrice pătratică de dimensiune <code>n</code>. Să se calculeze determinantul ei. = Date de intrare = Fișierul de intrare <code>determinantIN.txt</code> conține pe prima linie numărul <code>n</code>, iar pe următoarele <code>n</code> linii câte <code>n</code> numere întregi, reprezentând elementele matricei. = Date de ieșire = Fișierul de ieșire <code>determinantOUT.txt</code> va conține pe prima linie numărul <code>D</code>, reprezentâ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Se dă o matrice pătratică de dimensiune n. Să se calculeze determinantul ei.

Date de intrare[edit | edit source]

Fișierul de intrare determinantIN.txt conține pe prima linie numărul n, iar pe următoarele n linii câte n numere întregi, reprezentând elementele matricei.

Date de ieșire[edit | edit source]

Fișierul de ieșire determinantOUT.txt va conține pe prima linie numărul D, reprezentând valoarea determinantului.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 10

Exemplul 1[edit | edit source]

determinantIN.txt

3
1 -2 3
0 1 -1
2 1 -3

determinantOUT.txt

-4

Exemplul 2[edit | edit source]

determinantIN.txt

20
1 -2 3
0 1 -1
2 1 -3

determinantOUT.txt

Datele de intrare nu respectas restrictiile impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def are_restricții_valide(n, matrice):

   if not (1 <= n <= 10):
       return False
   
   for linie in matrice:
       if len(linie) != n:
           return False
   
   return True

def calcul_cofactor(matrice, linie, coloana):

   submatrice = [row[:coloana] + row[coloana + 1:] for row in (matrice[:linie] + matrice[linie + 1:])]
   semn = (-1) ** (linie + coloana)
   return semn * calcul_determinant(submatrice)

def calcul_determinant(matrice):

   n = len(matrice)
   if n == 1:
       return matrice[0][0]
   elif n == 2:
       return matrice[0][0] * matrice[1][1] - matrice[0][1] * matrice[1][0]
   else:
       determinant = 0
       for coloana in range(n):
           determinant += matrice[0][coloana] * calcul_cofactor(matrice, 0, coloana)
       return determinant
  1. Citirea datelor de intrare

try:

   with open("determinantIN.txt", "r") as file_in:
       n = int(file_in.readline().strip())
       matrice = [list(map(int, file_in.readline().split())) for _ in range(n)]

except FileNotFoundError:

   with open("determinantOUT.txt", "w") as file_out:
       file_out.write("Fișierul determinantIN.txt nu a fost găsit.")
   exit()

except Exception as e:

   with open("determinantOUT.txt", "w") as file_out:
       file_out.write(f"Eroare la citirea datelor de intrare: {str(e)}")
   exit()
  1. Verificarea restricțiilor

if not are_restricții_valide(n, matrice):

   with open("determinantOUT.txt", "w") as file_out:
       file_out.write("Datele de intrare nu respecta restrictiile impuse.")
   exit()
  1. Calculul determinantului

determinant = calcul_determinant(matrice)

  1. Scrierea rezultatului în fișierul de ieșire

with open("determinantOUT.txt", "w") as file_out:

   file_out.write(str(determinant))

</syntaxhighlight>