1396 - MDiferenta: Difference between revisions
No edit summary |
|||
Line 57: | 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 64: | 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 76: | 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 81: | 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("mdiferentain.txt", "r") as f: | with open("mdiferentain.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 diferenței matricelor | # Calcularea diferenței matricelor | ||
Line 98: | Line 112: | ||
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 | edit source]
Se dau două matrice cu elemente numere întregi. Calculați diferența dintre prima și a doua matrice.
Date de intrare[edit | edit source]
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 | edit source]
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 | 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;
- scăderea matricelor se poate efectua pentru fiecare test.
Exemplul 1[edit | edit source]
- 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 | edit source]
- 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 | 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 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>