1396 - MDiferenta: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinta == Se dau două matrice cu elemente numere întregi. Calculați diferența dintre prima și a doua matrice. == Date de intrare == Fișierul de intrare mdiferenta.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...
 
Line 21: Line 21:
== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;Intrare
;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 4
;3 7 -5 0  
:3 7 -5 0  
;1 -4 1 5  
:1 -4 1 5  
;-4 2 8 7  
:-4 2 8 7  
;Iesire
;Iesire
;Datele introduse corespund restrictiilor impuse
;Datele introduse corespund restrictiilor impuse
;3 4
:3 4
;-1 -6 9 6  
:-1 -6 9 6  
;4 -4 4 0  
:4 -4 4 0  
;6 3 -10 -3  
:6 3 -10 -3


== Exemplul 2 ==
== Exemplul 2 ==

Revision as of 10:12, 12 December 2023

Cerinta

Se dau două matrice cu elemente numere întregi. Calculați diferența dintre prima și a doua matrice.

Date de intrare

Fișierul de intrare mdiferenta.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 mdiferenta.txt va conține pe prima linie numerele S T, reprezentând dimensiunile matricei diferență. Următoarele S linii vor conține câte T valori separate prin exact un spațiu, reprezentând valorile din matricea diferență.

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;
  • scăderea matricelor se poate efectua pentru fiecare test.

Exemplul 1

Intrare
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
3 4
-1 -6 9 6
4 -4 4 0
6 3 -10 -3

Exemplul 2

Intrare
2 3
5 0 -10
4 300 2
3 4
5 10 8 -3
6 100 34 -8
0 15 -10 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 diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2):

   if n1 != n2 or m1 != m2:
       raise ValueError("Dimensiunile matricelor nu corespund")
   matrice_diferenta = [[0] * m1 for _ in range(n1)]
   for i in range(n1):
       for j in range(m1):
           matrice_diferenta[i][j] = matrice1[i][j] - matrice2[i][j]
   return matrice_diferenta, 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("mdiferenta.txt", "r") as f:
       matrice1, n1, m1 = citeste_matrice(f)
       matrice2, n2, m2 = citeste_matrice(f)
   # Calcularea diferenței matricelor
   try:
       matrice_diferenta, n_diferenta, m_diferenta = diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2)
       # Scrierea rezultatului în fisierul de iesire
       with open("mdiferenta.txt", "w") as g:
           scrie_matrice(g, matrice_diferenta, n_diferenta, m_diferenta)
   except ValueError as e:
       print(f"EROARE: {e}")

if __name__ == "__main__":

   main()

</syntaxhighlight>