<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4024_-_Matprod</id>
	<title>4024 - Matprod - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4024_-_Matprod"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4024_-_Matprod&amp;action=history"/>
	<updated>2026-06-17T03:46:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4024_-_Matprod&amp;diff=5299&amp;oldid=prev</id>
		<title>Alexandra Leș: Pagină nouă: == Cerinţa == Se consideră o matrice pătratică &#039;&#039;&#039;A=(ai,j)&#039;&#039;&#039;de ordin &#039;&#039;&#039;n&#039;&#039;&#039;, elementele sale fiind cifre în baza &#039;&#039;&#039;10&#039;&#039;&#039;. Pentru fiecare element ai,j al matricei definim drumul de la elementul a1,1 la elementul ai,j ca fiind format din elementele: &#039;&#039;&#039;a1,1, a2,1, …, ai,1, ai,2, ai,3, …, ai,j&#039;&#039;&#039;. Pentru fiecare element &#039;&#039;&#039;ai,j&#039;&#039;&#039; al matricei, se cere să se calculeze suma produselor oricăror două elemente situate pe drumul de la elementul &#039;&#039;&#039;a1,1&#039;&#039;&#039; la elementul &#039;...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4024_-_Matprod&amp;diff=5299&amp;oldid=prev"/>
		<updated>2023-04-28T22:17:01Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se consideră o matrice pătratică &amp;#039;&amp;#039;&amp;#039;A=(ai,j)&amp;#039;&amp;#039;&amp;#039;de ordin &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, elementele sale fiind cifre în baza &amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039;. Pentru fiecare element ai,j al matricei definim drumul de la elementul a1,1 la elementul ai,j ca fiind format din elementele: &amp;#039;&amp;#039;&amp;#039;a1,1, a2,1, …, ai,1, ai,2, ai,3, …, ai,j&amp;#039;&amp;#039;&amp;#039;. Pentru fiecare element &amp;#039;&amp;#039;&amp;#039;ai,j&amp;#039;&amp;#039;&amp;#039; al matricei, se cere să se calculeze suma produselor oricăror două elemente situate pe drumul de la elementul &amp;#039;&amp;#039;&amp;#039;a1,1&amp;#039;&amp;#039;&amp;#039; la elementul &amp;#039;...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se consideră o matrice pătratică &amp;#039;&amp;#039;&amp;#039;A=(ai,j)&amp;#039;&amp;#039;&amp;#039;de ordin &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, elementele sale fiind cifre în baza &amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039;. Pentru fiecare element ai,j al matricei definim drumul de la elementul a1,1 la elementul ai,j ca fiind format din elementele: &amp;#039;&amp;#039;&amp;#039;a1,1, a2,1, …, ai,1, ai,2, ai,3, …, ai,j&amp;#039;&amp;#039;&amp;#039;. Pentru fiecare element &amp;#039;&amp;#039;&amp;#039;ai,j&amp;#039;&amp;#039;&amp;#039; al matricei, se cere să se calculeze suma produselor oricăror două elemente situate pe drumul de la elementul &amp;#039;&amp;#039;&amp;#039;a1,1&amp;#039;&amp;#039;&amp;#039; la elementul &amp;#039;&amp;#039;&amp;#039;ai,j&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;matprod.in&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar pe următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii câte &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; cifre separate prin spaţiu, reprezentând elementele matricei &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Dacă datele sunt introduse corect,în fişierul de ieşire &amp;#039;&amp;#039;&amp;#039;matprod.out&amp;#039;&amp;#039;&amp;#039; se va afișa :&amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&amp;#039;&amp;#039;&amp;#039;,apoi pe un rând va conţine pe primele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii câte &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale separate prin spaţiu, reprezentând suma cerută pentru fiecare element al matricei.În cazul contrar,se va afișa pe ecran &amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 2 &amp;amp;les; n &amp;amp;les; 1000&lt;br /&gt;
* elementele matricei A sunt cifre&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; matprod.in&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 3 &lt;br /&gt;
: 4 5 0&lt;br /&gt;
: 9 3 7&lt;br /&gt;
; matprod.out&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 0 2 11&lt;br /&gt;
: 4 29 29&lt;br /&gt;
: 49 91 210&lt;br /&gt;
== Explicație == &lt;br /&gt;
De exemplu, pentru elementul &amp;#039;&amp;#039;&amp;#039;a3,2&amp;#039;&amp;#039;&amp;#039;, drumul este format din &amp;#039;&amp;#039;&amp;#039;1, 4, 9, 3&amp;#039;&amp;#039;&amp;#039;, iar suma este &amp;#039;&amp;#039;&amp;#039;1•4+1•9+1•3+4•9+4•3+9•3=91&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare_matrice(matrice):&lt;br /&gt;
    n = len(matrice)&lt;br /&gt;
    # Verificăm dacă matricea este patratică și dacă fiecare element este un numar întreg pozitiv&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if len(matrice[i]) != n:&lt;br /&gt;
            return False&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            if not matrice[i][j].isdigit():&lt;br /&gt;
                return False&lt;br /&gt;
            matrice[i][j] = int(matrice[i][j])&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma_produselor(matrice):&lt;br /&gt;
    n = len(matrice)&lt;br /&gt;
    # Inițializăm două matrici pentru a calcula sumele și produsele&lt;br /&gt;
    s = [[0 for j in range(n)] for i in range(n)]&lt;br /&gt;
    b = [[0 for j in range(n)] for i in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Calculăm sumele parțiale ale matricei&lt;br /&gt;
    s[0][0] = matrice[0][0]&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        s[i][0] = s[i-1][0] + matrice[i][0]&lt;br /&gt;
    for j in range(1, n):&lt;br /&gt;
        s[0][j] = s[0][j-1] + matrice[0][j]&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        for j in range(1, n):&lt;br /&gt;
            s[i][j] = s[i][j-1] + s[i-1][j] - s[i-1][j-1] + matrice[i][j]&lt;br /&gt;
&lt;br /&gt;
    # Calculăm suma produselor pentru fiecare element al matricei&lt;br /&gt;
    b[0][0] = 0&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        b[i][0] = b[i-1][0] + s[i-1][0] * matrice[i][0]&lt;br /&gt;
    for j in range(1, n):&lt;br /&gt;
        b[0][j] = b[0][j-1] + s[0][j-1] * matrice[0][j]&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        for j in range(1, n):&lt;br /&gt;
            b[i][j] = b[i][j-1] + (s[i][j-1] - s[i-1][j-1] + s[i-1][0]) * matrice[i][j]&lt;br /&gt;
&lt;br /&gt;
    return b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    # Citim datele de intrare din fișier&lt;br /&gt;
    with open(&amp;#039;matprod.in&amp;#039;, &amp;#039;r&amp;#039;) as f:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        matrice = [f.readline().split() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Validăm matricea&lt;br /&gt;
    if not validare_matrice(matrice):&lt;br /&gt;
        # Dacă matricea nu este validă, afișăm o eroare in fișierul de ieșire și ieșim din program&lt;br /&gt;
        with open(&amp;#039;matprod.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Daca matricea este validă, calculăm suma produselor și o afisam în fișierul de ieșire&lt;br /&gt;
        rezultat = calculeaza_suma_produselor(matrice)&lt;br /&gt;
&lt;br /&gt;
        with open(&amp;#039;matprod.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele sunt introduse corect.\n&amp;quot;)&lt;br /&gt;
            for i in range(n):&lt;br /&gt;
                f.write(&amp;#039; &amp;#039;.join(str(x) for x in rezultat[i]) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alexandra Leș</name></author>
	</entry>
</feed>