|
|
(One intermediate revision by the same user not shown) |
Line 1: |
Line 1: |
| == 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<br>
| |
| 2<br>
| |
| 0 1 5<br>
| |
| 2 0 3<br>
| |
| [1, 2, 3]
| |
|
| |
| ;Iesire
| |
| [10, 0, 3]
| |
|
| |
| == Exemplu 2 ==
| |
| ;Intrare
| |
| 2<br>
| |
| 3<br>
| |
| 0 0 4<br>
| |
| 0 1 7<br>
| |
| 1 0 1<br>
| |
| [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>
| |