1396 - MDiferenta: Difference between revisions
No edit summary |
|||
Line 5: | Line 5: | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare | 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 | 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 | *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 | |||
;mdiferentaout.txt | |||
:3 4 | :3 4 | ||
:-1 -6 9 6 | :-1 -6 9 6 | ||
Line 38: | Line 40: | ||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
;mdiferentain.txt | |||
:2 3 | :2 3 | ||
:5 0 -10 | :5 0 -10 | ||
Line 46: | Line 49: | ||
:0 15 -10 0 | :0 15 -10 0 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
Line 81: | Line 84: | ||
def main(): | def main(): | ||
# Citirea datelor de intrare din fisier | # Citirea datelor de intrare din fisier | ||
with open(" | with open("mdiferentain.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 90: | Line 93: | ||
# Scrierea rezultatului în fisierul de iesire | # Scrierea rezultatului în fisierul de iesire | ||
with open(" | 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) | ||
Revision as of 08:45, 27 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 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
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
- 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
- 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
- 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
<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("mdiferentain.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("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>