1313 - Produs Matrice: Difference between revisions

From Bitnami MediaWiki
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...
 
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cerinta ==
== Cerinta ==


Se dau dimensiunile a două matrice, A și B și valorile acestora. Calculați produsul lor .
Se dau dimensiunile a două matrice, '''A''' și '''B''' și valorile acestora. Calculați produsul lor .


== Date de intrare ==
== 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) .
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 ==
== Date de iesire ==


Fișierul de ieșire produs_matrice.txt va conține matricea C , construită pe baza cerinței .
Fișierul de ieșire '''produs_matriceout.txt''' va conține matricea '''C''' , construită pe baza cerinței .


== Restrictii si precizari ==
== Restrictii si precizari ==


*1 n , m , p 100
*1 ⩽ n , m , p ⩽ 100
*-10.000 A[i][j] , B[i][j] 10.000  
*-10.000 ⩽ A[i][j] , B[i][j] ⩽ 10.000  


== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;produs_matricein.txt
:2 3
:2 3
:1 -2 3
:1 -2 3
Line 25: Line 25:
:-1 -1
:-1 -1
:0 1
:0 1
;Iesire
;produs_matriceout.txt
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
:5 6  
:5 6  
:-1 -2  
:-1 -2


== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;produs_matricein.txt
:2 3
:2 3
:-100 2000 0
:-100 2000 0
:5982 0 0
:5982 0 0
:1
:1
:4613
:4683
;Iesire
:Datele introduse nu corespund restrictiilor impuse
;Datele introduse nu corespund restrictiilor impuse
 


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def citeste_matrice(fisier):
def citeste_matrice(file):
     # Citeste dimensiunile matricei
     dimensiuni = list(map(int, file.readline().split()))
    m, n = map(int, fisier.readline().split())
     matrice = [list(map(int, file.readline().split())) for _ in range(dimensiuni[0])]
     matrice = []
    return dimensiuni, matrice
 
def scrie_matrice(file, matrice):
    for linie in matrice:
        file.write(' '.join(map(str, linie)) + '\n')


    # Citeste elementele matricei
def produs_matrice(matrice_a, matrice_b):
    for _ in range(m):
    m, n = len(matrice_a), len(matrice_a[0])
        linie = list(map(int, fisier.readline().split()))
    n1, p = len(matrice_b), len(matrice_b[0])
        matrice.append(linie)


     return matrice, m, n
     if n != n1:
        return None  # Nu se poate realiza produsul matriceal


def produs_matrici(matrice_A, m, n, matrice_B, n, p):
     matrice_c = [[0 for _ in range(p)] for _ in range(m)]
    # Initializare matrice rezultat
     matrice_C = [[0] * p for _ in range(m)]


    # Calculul produsului matricial
     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]
                 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():
     return matrice_c
     # 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
# Citire date de intrare
     matrice_C = produs_matrici(matrice_A, m, n, matrice_B, n, p)
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)


    # Scrierea rezultatului in fisierul de iesire
# Calcul produs matriceal
    with open("produs_matrice.out", "w") as g:
rezultat = produs_matrice(matrice_a, matrice_b)
        scrie_matrice(g, matrice_C)


if __name__ == "__main__":
# Scriere rezultat în fișierul de ieșire
     main()
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>
</syntaxhighlight>

Latest revision as of 11:33, 29 December 2023

Cerinta[edit]

Se dau dimensiunile a două matrice, A și B și valorile acestora. Calculați produsul lor .

Date de intrare[edit]

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[edit]

Fișierul de ieșire produs_matriceout.txt va conține matricea C , construită pe baza cerinței .

Restrictii si precizari[edit]

  • 1 ⩽ n , m , p ⩽ 100
  • -10.000 ⩽ A[i][j] , B[i][j] ⩽ 10.000

Exemplul 1[edit]

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[edit]

produs_matricein.txt
2 3
-100 2000 0
5982 0 0
1
4683
Datele introduse nu corespund restrictiilor impuse

Rezolvare[edit]

<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
  1. 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)
  1. Calcul produs matriceal

rezultat = produs_matrice(matrice_a, matrice_b)

  1. 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[edit]

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