1395 - MSuma
De la Universitas MediaWiki
Cerinta
Se dau două matrice cu elemente numere întregi. Calculați suma lor.
Date de intrare
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
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
- 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
- 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
- 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
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()