1313 - Produs Matrice

From Bitnami MediaWiki
Revision as of 10:31, 12 December 2023 by Mesarosdenisa (talk | contribs) (Pagină nouă: == 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_matrice.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_matrice.txt va conține matricea C , construită pe baza cerinței . == Restrictii s...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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_matrice.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_matrice.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

Intrare
2 3
1 -2 3
0 1 -1
2
3 1
-1 -1
0 1
Iesire
Datele introduse corespund restrictiilor impuse
5 6
-1 -2

Exemplul 2

Intrare
2 3
-100 2000 0
5982 0 0
1
4613
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def citeste_matrice(fisier):

   # Citeste dimensiunile matricei
   m, n = map(int, fisier.readline().split())
   matrice = []
   # Citeste elementele matricei
   for _ in range(m):
       linie = list(map(int, fisier.readline().split()))
       matrice.append(linie)
   return matrice, m, n

def produs_matrici(matrice_A, m, n, matrice_B, n, p):

   # Initializare matrice rezultat
   matrice_C = [[0] * p for _ in range(m)]
   # Calculul produsului matricial
   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

def scrie_matrice(fisier, matrice):

   # Scrie dimensiunile matricei rezultat
   m = len(matrice)
   n = len(matrice[0])
   fisier.write(f"{m} {n}\n")
   # Scrie elementele matricei rezultat
   for linie in matrice:
       fisier.write(" ".join(map(str, linie)) + "\n")

def main():

   # Citirea datelor de intrare din fisier
   with open("produs_matrice.in", "r") as f:
       matrice_A, m, n = citeste_matrice(f)
       p = int(f.readline())
       matrice_B, n, p = citeste_matrice(f)
   # Calculul produsului matricial
   matrice_C = produs_matrici(matrice_A, m, n, matrice_B, n, p)
   # Scrierea rezultatului in fisierul de iesire
   with open("produs_matrice.out", "w") as g:
       scrie_matrice(g, matrice_C)

if __name__ == "__main__":

   main()

</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].