1700 - Produs Matrice Rara: Diferență între versiuni
Linia 37: | Linia 37: | ||
[29, 2] | [29, 2] | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> |
Versiunea de la data 2 iunie 2024 17:44
Cerința
Într-un tărâm digital, există o aplicație specializată în manipularea structurilor de date neomogene numită MatrixMaster. Această aplicație permite utilizatorilor să gestioneze și să opereze asupra matricelor rare (matrice care conțin majoritatea elementelor zero). O operație frecvent utilizată este calculul produsului scalar între o astfel de matrice rară și un vector dat. Sarcina ta este de a implementa această funcționalitate pentru MatrixMaster.
Date de intrare
Programul citește de la tastatură:
Dimensiunea n a matricei pătratice rare (n x n). m perechi de valori (i, j, val) reprezentând elementele nenule ale matricei, unde i este indicele de rând, j este indicele de coloană și val este valoarea elementului de la acea poziție. Un vector de dimensiune n.
Date de ieșire
Pe ecran se va afișa vectorul rezultat din produsul scalar între matricea rară și vectorul dat.
Restricții și precizări
- 1 ⩽ n ⩽ 1000
- 0 ⩽ m ⩽ n^2
Valorile i și j sunt indexate de la 0 la n-1 Valorile din matrice și vector sunt numere întregi în intervalul [-1000, 1000]
Exemplu 1
- Intrare
3
2
0 1 5
2 0 3
[1, 2, 3]
- Iesire
[10, 0, 3]
Exemplu 2
- Intrare
2
3
0 0 4
0 1 7
1 0 1
[2, 3]
- Iesire
[29, 2]
Rezolvare
def citeste_date():
n = int(input("Introduceți dimensiunea matricii pătratice rare (n): "))
m = int(input("Introduceți numărul de elemente nenule (m): "))
elemente_nenule = []
for _ in range(m):
i, j, val = map(int, input("Introduceți (i, j, val): ").split())
elemente_nenule.append((i, j, val))
vector = list(map(int, input("Introduceți vectorul (valori separate prin spațiu): ").split()))
return n, elemente_nenule, vector
def valideaza_date(n, elemente_nenule, vector):
if not (1 <= n <= 1000):
return False
if not (0 <= len(elemente_nenule) <= n * n):
return False
if len(vector) != n:
return False
for i, j, val in elemente_nenule:
if not (0 <= i < n and 0 <= j < n and -1000 <= val <= 1000):
return False
if not all(-1000 <= val <= 1000 for val in vector):
return False
return True
def produs_scalar_matrice_vector(n, elemente_nenule, vector):
rezultat = [0] * n
for i, j, val in elemente_nenule:
rezultat[i] += val * vector[j]
return rezultat
def main():
n, elemente_nenule, vector = citeste_date()
if not valideaza_date(n, elemente_nenule, vector):
print("Datele de intrare nu corespund restricțiilor impuse.")
return
print("Datele de intrare corespund restricțiilor impuse.")
rezultat = produs_scalar_matrice_vector(n, elemente_nenule, vector)
print(rezultat)
if __name__ == "__main__":
main()