1395 - MSuma: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 5: | Line 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. | ||
Line 21: | Line 21: | ||
== Exemplul 1 == | == Exemplul 1 == | ||
;Intrare | ;Intrare | ||
;msumain.txt | |||
:3 4 | :3 4 | ||
:2 1 4 6 | :2 1 4 6 | ||
:5 -8 5 5 | :5 -8 5 5 | ||
:2 5 -2 4 | :2 5 -2 4 | ||
:3 4 | |||
:3 7 -5 0 | :3 7 -5 0 | ||
:1 -4 1 5 | :1 -4 1 5 | ||
Line 31: | Line 32: | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
;msumaout.txt | |||
:3 4 | :3 4 | ||
:5 8 -1 6 | :5 8 -1 6 | ||
:6 -12 6 10 | :6 -12 6 10 | ||
:-2 7 6 11 | :-2 7 6 11 | ||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
;msumain.txt | |||
:2 3 | :2 3 | ||
:-3 7 0 | :-3 7 0 | ||
Line 48: | Line 51: | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Line 57: | Line 60: | ||
n, m = map(int, fisier.readline().split()) | n, m = map(int, fisier.readline().split()) | ||
matrice = [] | matrice = [] | ||
# Citeste elementele matricei | # Citeste elementele matricei | ||
for _ in range(n): | for _ in range(n): | ||
Line 64: | Line 67: | ||
return matrice, n, m | 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): | def suma_matricelor(matrice1, n1, m1, matrice2, n2, m2): | ||
Line 76: | Line 84: | ||
return matrice_suma, n1, m1 | return matrice_suma, n1, m1 | ||
def scrie_matrice(fisier, matrice, n, m): | def scrie_matrice(fisier, matrice, n, m): | ||
Line 81: | Line 90: | ||
for linie in matrice: | for linie in matrice: | ||
fisier.write(" ".join(map(str, linie)) + "\n") | fisier.write(" ".join(map(str, linie)) + "\n") | ||
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 = map(int, f.readline().split()) | ||
matrice2, | 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 | # Calcularea sumei matricelor | ||
Line 93: | Line 110: | ||
# 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) | ||
except ValueError as e: | except ValueError as e: | ||
print(f"EROARE: {e}") | print(f"EROARE: {e}") | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 11:27, 29 December 2023
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>