1700 - Produs Matrice Rara: Diferență între versiuni

De la Universitas MediaWiki
(Ștergerea conținutului paginii)
Etichetă: Golire
 
Linia 1: Linia 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]
== 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>

Versiunea curentă din 2 iunie 2024 22:11