2278 - MMultiplication: Difference between revisions
No edit summary |
No edit summary |
||
Line 5: | Line 5: | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul de intrare | Fișierul de intrare '''mmultiplicationin.txt''' conține pe prima linie numerele '''n''' și '''m''' reprezentând numărul de linii, respectiv de coloane, al matricii '''A'''. Pe următoarele '''n''' linii sunt câte '''m''' numere întregi separate printr-un spațiu, reprezentând elementele matricii A. Pe linia '''n+2''' a fișierului se află două numere '''p''' și '''q''' reprezentând numărul de linii, respectiv de coloane, al matricii '''B'''. Pe următoarele '''p''' linii sunt câte '''q''' numere întregi separate printr-un spațiu, reprezentând elementele matricii B. | ||
== Date de iesire == | == Date de iesire == | ||
Fișierul de ieșire | Fișierul de ieșire '''mmultiplicationout.txt''' va conține pe prima linie numărul '''-1''', în cazul în care matricele nu pot fi înmulțite. Dacă matricele pot fi înmulțite, se va afișa matricea rezultată după înmulțirea celor două, câte o linie a matricei pe o linie din fișier, elementele fiecărei linii fiind separate prin câte un spațiu. | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *1 &;les; n, m, p, q ⩽ 1000 | ||
*elementele matricelor vor fi numere întregi cu valoarea absolută mai mică decât 2000 | *elementele matricelor vor fi numere întregi cu valoarea absolută mai mică decât '''2000''' | ||
== Exemplul 1 == | == Exemplul 1 == | ||
;Intrare | ;Intrare | ||
;mmultiplicationin.txt | |||
:4 3 | :4 3 | ||
:1 2 3 | :1 2 3 | ||
Line 29: | Line 30: | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
;mmultiplicationout.txt | |||
:46 52 58 64 25 | :46 52 58 64 25 | ||
:100 115 130 145 70 | :100 115 130 145 70 | ||
Line 37: | Line 39: | ||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
;mmultiplicationin.txt | |||
:2 3 | :2 3 | ||
:3600 0 -10 | :3600 0 -10 | ||
Line 46: | Line 49: | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Line 83: | Line 86: | ||
def main(): | def main(): | ||
# Citirea datelor de intrare din fisier | # Citirea datelor de intrare din fisier | ||
with open(" | with open("mmultiplicationin.txt", "r") as f: | ||
matrice_A, n_A, m_A = citeste_matrice(f) | matrice_A, n_A, m_A = citeste_matrice(f) | ||
matrice_B, n_B, m_B = citeste_matrice(f) | matrice_B, n_B, m_B = citeste_matrice(f) | ||
Line 92: | Line 95: | ||
# Scrierea rezultatului in fisierul de iesire | # Scrierea rezultatului in fisierul de iesire | ||
with open(" | with open("mmultiplicationout.txt", "w") as g: | ||
scrie_matrice(g, matrice_produs, n_produs, m_produs) | scrie_matrice(g, matrice_produs, n_produs, m_produs) | ||
Revision as of 08:49, 27 December 2023
Cerinta
Se dau două matrice cu elemente numere întregi. Determinați produsul lor, dacă este posibil.
Date de intrare
Fișierul de intrare mmultiplicationin.txt conține pe prima linie numerele n și m reprezentând numărul de linii, respectiv de coloane, al matricii A. Pe următoarele n linii sunt câte m numere întregi separate printr-un spațiu, reprezentând elementele matricii A. Pe linia n+2 a fișierului se află două numere p și q reprezentând numărul de linii, respectiv de coloane, al matricii B. Pe următoarele p linii sunt câte q numere întregi separate printr-un spațiu, reprezentând elementele matricii B.
Date de iesire
Fișierul de ieșire mmultiplicationout.txt va conține pe prima linie numărul -1, în cazul în care matricele nu pot fi înmulțite. Dacă matricele pot fi înmulțite, se va afișa matricea rezultată după înmulțirea celor două, câte o linie a matricei pe o linie din fișier, elementele fiecărei linii fiind separate prin câte un spațiu.
Restrictii si precizari
- 1 &;les; n, m, p, q ⩽ 1000
- elementele matricelor vor fi numere întregi cu valoarea absolută mai mică decât 2000
Exemplul 1
- Intrare
- mmultiplicationin.txt
- 4 3
- 1 2 3
- 4 5 6
- 7 8 9
- 10 11 12
- 3 5
- 1 2 3 4 5
- 6 7 8 9 10
- 11 12 13 14 0
- Iesire
- Datele introduse corespund restrictiilor impuse
- mmultiplicationout.txt
- 46 52 58 64 25
- 100 115 130 145 70
- 154 178 202 226 115
- 208 241 274 307 160
Exemplul 2
- Intrare
- mmultiplicationin.txt
- 2 3
- 3600 0 -10
- 54 2479 1
- 3 2
- 0 0
- 1 1
- 0 1
- 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 inmulteste_matrici(matrice_A, n_A, m_A, matrice_B, n_B, m_B):
if m_A != n_B: raise ValueError("Numarul de coloane al primei matrici nu coincide cu numarul de linii al celei de-a doua matrici")
matrice_produs = [[0] * m_B for _ in range(n_A)]
for i in range(n_A): for j in range(m_B): for k in range(m_A): matrice_produs[i][j] += matrice_A[i][k] * matrice_B[k][j]
return matrice_produs, n_A, m_B
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("mmultiplicationin.txt", "r") as f: matrice_A, n_A, m_A = citeste_matrice(f) matrice_B, n_B, m_B = citeste_matrice(f)
# Calcularea produsului matricelor try: matrice_produs, n_produs, m_produs = inmulteste_matrici(matrice_A, n_A, m_A, matrice_B, n_B, m_B)
# Scrierea rezultatului in fisierul de iesire with open("mmultiplicationout.txt", "w") as g: scrie_matrice(g, matrice_produs, n_produs, m_produs)
except ValueError as e: # Nu se poate efectua inmultirea with open("mmultiplication.txt", "w") as g: g.write("-1")
if __name__ == "__main__":
main()
</syntaxhighlight>