1313 - Produs Matrice

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

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.")

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