<?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=1421_-_tabel</id>
	<title>1421 - tabel - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1421_-_tabel"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1421_-_tabel&amp;action=history"/>
	<updated>2026-05-01T14:22:09Z</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=1421_-_tabel&amp;diff=10212&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: = Enunț = După cum probabil ştiţi, contabilii îşi ţin datele sub formă de tabele şi calculează tot felul de sume pe linii şi pe coloane. Contabilul nostru Atnoc şi-a organizat valorile sub forma unui tabel cu &lt;code&gt;n&lt;/code&gt; linii (numerotate de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;n&lt;/code&gt;) şi &lt;code&gt;m&lt;/code&gt; coloane (numerotate de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;m&lt;/code&gt;). Elementele de pe ultima coloană sunt sumele elementelor de pe linii (mai exact, elementul de pe linia &lt;co...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1421_-_tabel&amp;diff=10212&amp;oldid=prev"/>
		<updated>2024-08-04T13:20:05Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Enunț = După cum probabil ştiţi, contabilii îşi ţin datele sub formă de tabele şi calculează tot felul de sume pe linii şi pe coloane. Contabilul nostru Atnoc şi-a organizat valorile sub forma unui tabel cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii (numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane (numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;). Elementele de pe ultima coloană sunt sumele elementelor de pe linii (mai exact, elementul de pe linia &amp;lt;co...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Enunț =&lt;br /&gt;
După cum probabil ştiţi, contabilii îşi ţin datele sub formă de tabele şi calculează tot felul de sume pe linii şi pe coloane. Contabilul nostru Atnoc şi-a organizat valorile sub forma unui tabel cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii (numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane (numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;). Elementele de pe ultima coloană sunt sumele elementelor de pe linii (mai exact, elementul de pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; şi coloana &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; este egal cu suma elementelor de pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; aflate pe coloanele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;m-1&amp;lt;/code&amp;gt;), iar elementele de pe ultima linie sunt sumele elementelor de pe coloane (mai exact, elementul de pe linia &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi coloana &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; este egal cu suma elementelor de pe coloana &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; aflate pe liniile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;n-1&amp;lt;/code&amp;gt;). Un exemplu de astfel de tabel este dat în figura următoare.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;14&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;23&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;13&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;13&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;37&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Din păcate, Atnoc a stropit cu apă minunatul său tabel şi astfel o parte dintre numerele din tabel au devenit ilizibile.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care să reconstituie toate datele din tabel.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului text de intrare &amp;lt;code&amp;gt;tabel.in&amp;lt;/code&amp;gt; se află două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, separate printr-un spaţiu, ce reprezintă numărul de linii şi respectiv numărul de coloane ale tabelului. Pe cea de a doua linie a fişierului de intrare se află un număr natural &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; care reprezintă numărul de valori nedeteriorate din tabel. Pe fiecare dintre următoarele &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; linii se află câte trei numere naturale, separate prin câte un spaţiu &amp;lt;code&amp;gt;l c v&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; este numărul liniei, &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; este numărul coloanei şi &amp;lt;code&amp;gt;v&amp;lt;/code&amp;gt; este valoarea elementului de pe linia &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; şi coloana &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; din tabel.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fişierul text de ieşire &amp;lt;code&amp;gt;tabel.out&amp;lt;/code&amp;gt; se va scrie tabelul reconstituit, pe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; valori separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;n, m&amp;lt;51&amp;lt;/code&amp;gt;&lt;br /&gt;
* Valorile din tabel sunt numere naturale &amp;lt;code&amp;gt;&amp;lt; 32000&amp;lt;/code&amp;gt;&lt;br /&gt;
* În toate testele datele din tabel pot fi reconstituite.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;tabel.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 3 4&lt;br /&gt;
 10&lt;br /&gt;
 1 1 2&lt;br /&gt;
 1 2 5&lt;br /&gt;
 1 3 7&lt;br /&gt;
 1 4 14&lt;br /&gt;
 2 2 6&lt;br /&gt;
 2 4 23&lt;br /&gt;
 3 1 13&lt;br /&gt;
 3 2 11&lt;br /&gt;
 3 3 13&lt;br /&gt;
 3 4 37&lt;br /&gt;
&amp;lt;code&amp;gt;tabel.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2 5 7 14&lt;br /&gt;
 11 6 6 23&lt;br /&gt;
 13 11 13 37&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def reconstruct_table(table):&lt;br /&gt;
    n = len(table)        # numărul de linii&lt;br /&gt;
    m = len(table[0])     # numărul de coloane&lt;br /&gt;
    &lt;br /&gt;
    # Functie pentru a calcula suma unei linii&lt;br /&gt;
    def calculate_row_sum(row):&lt;br /&gt;
        return sum(x for x in row if x is not None)&lt;br /&gt;
    &lt;br /&gt;
    # Functie pentru a calcula suma unei coloane&lt;br /&gt;
    def calculate_col_sum(table, col):&lt;br /&gt;
        return sum(table[i][col] for i in range(n-1) if table[i][col] is not None)&lt;br /&gt;
    &lt;br /&gt;
    # Pasul 1: Completarea liniilor folosind suma liniei&lt;br /&gt;
    for i in range(n-1):&lt;br /&gt;
        row_sum = table[i][m-1]&lt;br /&gt;
        current_sum = calculate_row_sum(table[i])&lt;br /&gt;
        missing_count = table[i][:m-1].count(None)&lt;br /&gt;
        if missing_count == 1:&lt;br /&gt;
            for j in range(m-1):&lt;br /&gt;
                if table[i][j] is None:&lt;br /&gt;
                    table[i][j] = row_sum - current_sum&lt;br /&gt;
    &lt;br /&gt;
    # Pasul 2: Completarea coloanelor folosind suma coloanei&lt;br /&gt;
    for j in range(m-1):&lt;br /&gt;
        col_sum = table[n-1][j]&lt;br /&gt;
        current_sum = calculate_col_sum(table, j)&lt;br /&gt;
        missing_count = sum(1 for i in range(n-1) if table[i][j] is None)&lt;br /&gt;
        if missing_count == 1:&lt;br /&gt;
            for i in range(n-1):&lt;br /&gt;
                if table[i][j] is None:&lt;br /&gt;
                    table[i][j] = col_sum - current_sum&lt;br /&gt;
    &lt;br /&gt;
    # Pasul 3: Calcularea sumei pe ultima linie și ultima coloană&lt;br /&gt;
    for i in range(n-1):&lt;br /&gt;
        table[i][m-1] = calculate_row_sum(table[i])&lt;br /&gt;
    &lt;br /&gt;
    for j in range(m-1):&lt;br /&gt;
        table[n-1][j] = calculate_col_sum(table, j)&lt;br /&gt;
    &lt;br /&gt;
    # Calcularea colțului de jos-dreapta&lt;br /&gt;
    table[n-1][m-1] = sum(table[n-1][j] for j in range(m-1))&lt;br /&gt;
    &lt;br /&gt;
    return table&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
table = [&lt;br /&gt;
    [2, 5, 7, 14],&lt;br /&gt;
    [11, None, 6, 23],&lt;br /&gt;
    [None, 11, 13, 37]&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
reconstructed_table = reconstruct_table(table)&lt;br /&gt;
for row in reconstructed_table:&lt;br /&gt;
    print(row)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RaulOtet</name></author>
	</entry>
</feed>