1395 - MSuma: Difference between revisions

From Bitnami MediaWiki
No edit summary
Line 5: Line 5:
== Date de intrare ==
== Date de intrare ==


Fișierul de intrare msuma.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.
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 msuma.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ă.
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 n , m , p , q 100;
*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  
Line 31: Line 32:


;Iesire
;Iesire
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
;msumaout.txt
:3 4
:3 4
:5 8 -1 6  
:5 8 -1 6  
Line 39: Line 41:
== 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
:Datele introduse nu corespund restrictiilor impuse




Line 84: Line 87:
def main():
def main():
     # Citirea datelor de intrare din fisier
     # Citirea datelor de intrare din fisier
     with open("msuma.txt", "r") as f:
     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)
Line 93: Line 96:


         # Scrierea rezultatului în fisierul de iesire
         # Scrierea rezultatului în fisierul de iesire
         with open("msuma.txt", "w") as g:
         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)



Revision as of 08:40, 27 December 2023

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

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

</syntaxhighlight>