1395 - MSuma

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 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()