1398 - Determinant
De la Universitas MediaWiki
Cerința
Se dă o matrice pătratică de dimensiune n
. Să se calculeze determinantul ei.
Date de intrare
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
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
1 ≤ n ≤ 10
Exemplul 1
determinantIN.txt
3 1 -2 3 0 1 -1 2 1 -3
determinantOUT.txt
-4
Exemplul 2
determinantIN.txt
20 1 -2 3 0 1 -1 2 1 -3
determinantOUT.txt
Datele de intrare nu respectas restrictiile impuse.
Rezolvare
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
# 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()
# 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()
# Calculul determinantului
determinant = calcul_determinant(matrice)
# Scrierea rezultatului în fișierul de ieșire
with open("determinantOUT.txt", "w") as file_out:
file_out.write(str(determinant))