1395 - MSuma: Diferență între versiuni
De la Universitas MediaWiki
Fără descriere a modificării |
|||
Linia 5: | Linia 5: | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul 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. | 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 == | == Date de iesire == | ||
Fișierul de ieșire | 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 == | == Restrictii si precizari == | ||
*1 | *1 ⩽ n , m , p , q ⩽ 100; | ||
*valoarea absolută a elementelor fiecărei matrice vor fi mai mici decât 1.000.000.000; | *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. | *adunarea matricelor se poate efectua pentru fiecare test. | ||
Linia 21: | Linia 21: | ||
== Exemplul 1 == | == Exemplul 1 == | ||
;Intrare | ;Intrare | ||
;msumain.txt | |||
:3 4 | :3 4 | ||
:2 1 4 6 | :2 1 4 6 | ||
Linia 31: | Linia 32: | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
;msumaout.txt | |||
:3 4 | :3 4 | ||
:5 8 -1 6 | :5 8 -1 6 | ||
Linia 39: | Linia 41: | ||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
;msumain.txt | |||
:2 3 | :2 3 | ||
:-3 7 0 | :-3 7 0 | ||
Linia 48: | Linia 51: | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Linia 84: | Linia 87: | ||
def main(): | def main(): | ||
# Citirea datelor de intrare din fisier | # Citirea datelor de intrare din fisier | ||
with open(" | with open("msumain.txt", "r") as f: | ||
matrice1, n1, m1 = citeste_matrice(f) | matrice1, n1, m1 = citeste_matrice(f) | ||
matrice2, n2, m2 = citeste_matrice(f) | matrice2, n2, m2 = citeste_matrice(f) | ||
Linia 93: | Linia 96: | ||
# Scrierea rezultatului în fisierul de iesire | # Scrierea rezultatului în fisierul de iesire | ||
with open(" | with open("msumaout.txt", "w") as g: | ||
scrie_matrice(g, matrice_suma, n_suma, m_suma) | scrie_matrice(g, matrice_suma, n_suma, m_suma) | ||
Versiunea de la data 27 decembrie 2023 08:40
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 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:
matrice1, n1, m1 = citeste_matrice(f)
matrice2, n2, m2 = citeste_matrice(f)
# 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()