1396 - MDiferenta: Difference between revisions

From Bitnami MediaWiki
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
== Date de intrare ==
== 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.
Fișierul de intrare '''mdiferentain.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 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ță.
Fișierul de ieșire '''mdiferentaout.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 ==
== 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;
*scăderea matricelor se poate efectua pentru fiecare test.
*scăderea matricelor se poate efectua pentru fiecare test.
Line 21: Line 21:
== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;Intrare
;mdiferentain.txt
:3 4
:3 4
:2 1 4 6  
:2 1 4 6  
Line 30: Line 31:
:-4 2 8 7  
:-4 2 8 7  
;Iesire
;Iesire
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
;mdiferentaout.txt
:3 4
:3 4
:-1 -6 9 6  
:-1 -6 9 6  
Line 38: Line 40:
== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;Intrare
;2 3
;mdiferentain.txt
;5 0 -10
:2 3
;4 300 2
:5 0 -10
;3 4
:4 300 2
;5 10 8 -3
:3 4
;6 100 34 -8
:5 10 8 -3
;0 15 -10 0
:6 100 34 -8
:0 15 -10 0
;Iesire
;Iesire
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse
 


== Rezolvare ==
== Rezolvare ==
Line 55: Line 57:
     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 62: Line 64:


     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 diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2):
def diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2):
Line 74: Line 81:


     return matrice_diferenta, n1, m1
     return matrice_diferenta, n1, m1


def scrie_matrice(fisier, matrice, n, m):
def scrie_matrice(fisier, matrice, n, m):
Line 79: Line 87:
     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("mdiferenta.txt", "r") as f:
     with open("mdiferentain.txt", "r") as f:
         matrice1, n1, m1 = citeste_matrice(f)
        n1, m1 = map(int, f.readline().split())
         matrice2, n2, m2 = citeste_matrice(f)
         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 diferenței matricelor
     # Calcularea diferenței matricelor
Line 91: Line 107:


         # Scrierea rezultatului în fisierul de iesire
         # Scrierea rezultatului în fisierul de iesire
         with open("mdiferenta.txt", "w") as g:
         with open("mdiferentaout.txt", "w") as g:
             scrie_matrice(g, matrice_diferenta, n_diferenta, m_diferenta)
             scrie_matrice(g, matrice_diferenta, n_diferenta, m_diferenta)


     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:29, 29 December 2023

Cerinta[edit]

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

Date de intrare[edit]

Fișierul de intrare mdiferentain.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]

Fișierul de ieșire mdiferentaout.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[edit]

  • 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[edit]

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

Exemplul 2[edit]

Intrare
mdiferentain.txt
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[edit]

<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 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("mdiferentain.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 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("mdiferentaout.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>