1395 - MSuma

From Bitnami MediaWiki

Cerinta[edit | edit source]

Se dau două matrice cu elemente numere întregi. Calculați suma lor.

Date de intrare[edit | edit source]

Fișierul de intrare msumain.txt conține pe prima linie numerele n m, reprezentând dimensiunile primei matrice. Urmează n linii cu câte m valori, elementele primei matrice.

Linia n+2 conține numerele p q, reprezentând dimensiunile celei de-a doua matrice. Urmează p linii cu câte q valori, elementele celei de-a doua matrice.

Date de iesire[edit | edit source]

Fișierul de ieșire msumaout.txt va conține pe prima linie numerele S T, reprezentând dimensiunile matricei sumă. Următoarele S linii vor conține câte T valori separate prin exact un spațiu, reprezentând valorile din matricea sumă.

Restrictii si precizari[edit | edit source]

  • 1 ⩽ n , m , p , q ⩽ 100;
  • valoarea absolută a elementelor fiecărei matrice vor fi mai mici decât 1.000.000.000;
  • adunarea matricelor se poate efectua pentru fiecare test.

Exemplul 1[edit | edit source]

Intrare
msumain.txt
3 4
2 1 4 6
5 -8 5 5
2 5 -2 4
3 4
3 7 -5 0
1 -4 1 5
-4 2 8 7
Iesire
Datele introduse corespund restrictiilor impuse
msumaout.txt
3 4
5 8 -1 6
6 -12 6 10
-2 7 6 11

Exemplul 2[edit | edit source]

Intrare
msumain.txt
2 3
-3 7 0
8000 1 -2
3 2
7 0
5438 870
0 0
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

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

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


def este_input_valid(n1, m1, n2, m2):

   return 1 <= n1 <= 100 and 1 <= m1 <= 100 and 1 <= n2 <= 100 and 1 <= m2 <= 100


def suma_matricelor(matrice1, n1, m1, matrice2, n2, m2):

   if n1 != n2 or m1 != m2:
       raise ValueError("Dimensiunile matricelor nu corespund")
   matrice_suma = [[0] * m1 for _ in range(n1)]
   for i in range(n1):
       for j in range(m1):
           matrice_suma[i][j] = matrice1[i][j] + matrice2[i][j]
   return matrice_suma, n1, m1


def scrie_matrice(fisier, matrice, n, m):

   fisier.write(f"{n} {m}\n")
   for linie in matrice:
       fisier.write(" ".join(map(str, linie)) + "\n")


def main():

   # Citirea datelor de intrare din fisier
   with open("msumain.txt", "r") as f:
       n1, m1 = map(int, f.readline().split())
       matrice1, _, _ = citeste_matrice(f)
       n2, m2 = map(int, f.readline().split())
       matrice2, _, _ = citeste_matrice(f)
   # Verificare validitate date de intrare
   if not este_input_valid(n1, m1, n2, m2):
       print("Datele introduse nu corespund restrictiilor impuse.")
       return
   # Calcularea sumei matricelor
   try:
       matrice_suma, n_suma, m_suma = suma_matricelor(matrice1, n1, m1, matrice2, n2, m2)
       # Scrierea rezultatului în fisierul de iesire
       with open("msumaout.txt", "w") as g:
           scrie_matrice(g, matrice_suma, n_suma, m_suma)
   except ValueError as e:
       print(f"EROARE: {e}")


if __name__ == "__main__":

   main()

</syntaxhighlight>