1313 - Produs Matrice: Difference between revisions
Line 41: | Line 41: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def citeste_matrice( | def citeste_matrice(file): | ||
dimensiuni = list(map(int, file.readline().split())) | |||
matrice = [list(map(int, file.readline().split())) for _ in range(dimensiuni[0])] | |||
matrice = [] | return dimensiuni, matrice | ||
def scrie_matrice(file, matrice): | |||
for | for linie in matrice: | ||
file.write(' '.join(map(str, linie)) + '\n') | |||
def produs_matrice(matrice_a, matrice_b): | |||
m, n = len(matrice_a), len(matrice_a[0]) | |||
n1, p = len(matrice_b), len(matrice_b[0]) | |||
if n != n1: | |||
return None # Nu se poate realiza produsul matriceal | |||
matrice_c = [[0 for _ in range(p)] for _ in range(m)] | |||
for i in range(m): | for i in range(m): | ||
for j in range(p): | for j in range(p): | ||
for k in range(n): | for k in range(n): | ||
matrice_c[i][j] += matrice_a[i][k] * matrice_b[k][j] | |||
return | return matrice_c | ||
# Citire date de intrare | |||
with open("produs_matricein.txt", "r") as file: | |||
dimensiuni_a, matrice_a = citeste_matrice(file) | |||
_ = file.readline() # Ignorăm linia cu numărul p | |||
dimensiuni_b, matrice_b = citeste_matrice(file) | |||
# Calcul produs matriceal | |||
rezultat = produs_matrice(matrice_a, matrice_b) | |||
# Scriere rezultat în fișierul de ieșire | |||
with open(" | if rezultat: | ||
scrie_matrice( | with open("produs_matriceout.txt", "w") as file: | ||
scrie_matrice(file, rezultat) | |||
else: | |||
print("Produsul matriceal nu este posibil din cauza dimensiunilor incorecte.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 09:28, 27 December 2023
Cerinta
Se dau dimensiunile a două matrice, A și B și valorile acestora. Calculați produsul lor .
Date de intrare
Fișierul de intrare produs_matricein.txt conține pe prima linie numerele m n, apoi începând cu următoarea linie matricea A de dimensiuni (m,n) . Pe linia m+2 numărul p, apoi matricea B de dimensiuni (n,p) .
Date de iesire
Fișierul de ieșire produs_matriceout.txt va conține matricea C , construită pe baza cerinței .
Restrictii si precizari
- 1 ⩽ n , m , p ⩽ 100
- -10.000 ⩽ A[i][j] , B[i][j] ⩽ 10.000
Exemplul 1
- produs_matricein.txt
- 2 3
- 1 -2 3
- 0 1 -1
- 2
- 3 1
- -1 -1
- 0 1
- produs_matriceout.txt
- Datele introduse corespund restrictiilor impuse
- 5 6
- -1 -2
Exemplul 2
- produs_matricein.txt
- 2 3
- -100 2000 0
- 5982 0 0
- 1
- 4683
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def citeste_matrice(file):
dimensiuni = list(map(int, file.readline().split())) matrice = [list(map(int, file.readline().split())) for _ in range(dimensiuni[0])] return dimensiuni, matrice
def scrie_matrice(file, matrice):
for linie in matrice: file.write(' '.join(map(str, linie)) + '\n')
def produs_matrice(matrice_a, matrice_b):
m, n = len(matrice_a), len(matrice_a[0]) n1, p = len(matrice_b), len(matrice_b[0])
if n != n1: return None # Nu se poate realiza produsul matriceal
matrice_c = [[0 for _ in range(p)] for _ in range(m)]
for i in range(m): for j in range(p): for k in range(n): matrice_c[i][j] += matrice_a[i][k] * matrice_b[k][j]
return matrice_c
- Citire date de intrare
with open("produs_matricein.txt", "r") as file:
dimensiuni_a, matrice_a = citeste_matrice(file) _ = file.readline() # Ignorăm linia cu numărul p dimensiuni_b, matrice_b = citeste_matrice(file)
- Calcul produs matriceal
rezultat = produs_matrice(matrice_a, matrice_b)
- Scriere rezultat în fișierul de ieșire
if rezultat:
with open("produs_matriceout.txt", "w") as file: scrie_matrice(file, rezultat)
else:
print("Produsul matriceal nu este posibil din cauza dimensiunilor incorecte.")
</syntaxhighlight>
Explicatie
Dacă se înmulțeste A cu B și rezultatul se află în C , atunci elementul C[i][j] reprezintă suma de produse dintre elementele de pe linia i a matricei A cu elementele de pe coloana j a matricei B. Având exemplul nostru , luăm C[1][2] = A[1][1] * B[1][2] + A[1][2] * B[2][2] + A[1][3] * B[3][2].