1700 - Produs Matrice Rara: Difference between revisions
Benzar Ioan (talk | contribs) Pagină nouă: == 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 Matr... |
Benzar Ioan (talk | contribs) |
||
Line 40: | Line 40: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
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() | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 17:32, 2 June 2024
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]
Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line> 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()
</syntaxhighlight>