{"id":"informatyka-2015-maj-matura-rozszerzona/zad/5.3","paper_id":"informatyka-2015-maj-matura-rozszerzona","number":"5.3","points":6,"ptype":"open","subject":"informatyka","category":"matura","year":2015,"month":"maj","level":"rozszerzona","text":"Kontekst - patrz zadanie 5.1.\n\nTempo wzrostu w danym województwie to iloraz ludnosc(2014)/ludnosc(2013), zaokrąglany w dół do 4 miejsc po przecinku. Ludność dla roku r > 2014 obliczamy: ludnosc(r) = ludnosc(r-1) · tempo_wzrostu, zaokrąglając w dół do liczby całkowitej.\n\nJeżeli w jakimś województwie w danym roku ludność jest ponaddwukrotnie większa niż stan z roku 2013, to występuje efekt **przeludnienia** - począwszy od następnego roku ludność tego województwa nie będzie się zmieniać.\n\nPrzykład dla w01D: ludność 2013 = 2 812 202; 2014 = 2 980 175; tempo = 1,0597; ludność 2015 = 3 158 091. W 2025 przekroczy ponaddwukrotnie i od tego czasu się nie zmienia.\n\nWykonaj polecenia:\n- Podaj liczbę wszystkich mieszkańców Edulandii w 2025 roku i wskaż, które województwo będzie miało w tym roku najwięcej mieszkańców.\n- Podaj liczbę województw, w których kiedykolwiek wystąpi efekt przeludnienia w latach 2014-2025 włącznie.","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n- **Liczba mieszkańców w 2025 roku: 125 930 205**\n- **Najliczniejsze województwo w 2025: w12C**\n- **Liczba województw z efektem przeludnienia (2014-2025): 18**\n\n## Sposób 1 - symulacja roku po roku w Pythonie\n\n```python\nimport pandas as pd\nimport math\n\ndf = pd.read_csv('kraina.txt', sep=';', header=None,\nnames=['nazwa', 'k2013', 'm2013', 'k2014', 'm2014'])\n\nwyniki = {}\nprzeludnienie = 0\n\nfor _, row in df.iterrows():\nnazwa = row['nazwa']\nL_2013 = row['k2013'] + row['m2013']\nL_2014 = row['k2014'] + row['m2014']\n# Tempo wzrostu - zaokrąglone W DÓŁ do 4 miejsc po przecinku\ntempo_dokladne = L_2014 / L_2013\ntempo = math.floor(tempo_dokladne * 10000) / 10000\nL = L_2014\nczy_przeludnione = False\n# Symulacja od 2015 do 2025\nfor rok in range(2015, 2026):\nif not czy_przeludnione:\nL = math.floor(L * tempo) # nowa ludność, zaokrąglana w dół\nif L > 2 * L_2013:\nczy_przeludnione = True\n# od następnego roku ludność się NIE ZMIENIA\n# czyli wartość L pozostaje\nif czy_przeludnione:\nprzeludnienie += 1\nwyniki[nazwa] = L\n\nsuma_2025 = sum(wyniki.values())\nnajwieksze = max(wyniki, key=wyniki.get)\n\nprint('Suma 2025:', suma_2025) # 125 930 205\nprint('Najwięcej:', najwieksze, wyniki[najwieksze]) # w12C\nprint('Przeludnione:', przeludnienie) # 18\n\n## Sposób 2 - arkusz kalkulacyjny\n\n**Krok 1: kolumny pomocnicze**\n- Kolumna G: `=B2+C2` (ludność 2013)\n- Kolumna H: `=D2+E2` (ludność 2014)\n- Kolumna I: `=ZAOKR.DÓŁ(H2/G2; 4)` (tempo, zaokrąglone w dół)\n- Limit 2x2013: `=G2*2`\n\n**Krok 2: kolumny lat 2015-2025 (J, K, L, , U)**\n- J2 (2015): `=JEŻELI(I2<=$V$1; ZAOKR.DÓŁ(H2*I2; 0); H2)` - ale lepiej:\n- J2: `=ZAOKR.DÓŁ(H2*I2; 0)` - naiwnie bez sprawdzania przeludnienia\n- Następna kolumna: `=JEŻELI(J2 > 2*G2; J2; ZAOKR.DÓŁ(J2*I2; 0))` - \"zamrażamy\" wartość po przekroczeniu.\n**Krok 3: agregacja**\n- Suma 2025: `=SUMA(U2:U51)` → 125 930 205\n- Najwięcej: `=INDEKS(A2:A51; PODAJ.POZYCJĘ(MAX(U2:U51); U2:U51; 0))` → w12C\n- Liczba przeludnionych: kolumna pomocnicza X = `=JEŻELI(U2>2*G2; 1; 0)`, suma X → 18\n\n## Sposób 3 - Pascal pełny\n\n```pascal\nprogram Demografia;\nvar\nf: TextFile;\nnazwa: array[1 50] of String;\nL_2013, L: array[1 50] of LongInt;\ntempo: array[1 50] of Double;\nprzeludnione: array[1 50] of Boolean;\ni, rok: Integer;\nsuma2025, max_lud: LongInt;\nmax_nazwa: String;\npl_count: Integer;\nlinia: String;\npos: Integer;\nk13, m13, k14, m14: LongInt;\nbegin\nAssignFile(f, 'kraina.txt');\nReset(f);\ni := 0;\nwhile not Eof(f) do\nbegin\nInc(i); Readln(f, linia);\n// Parsowanie (uproszczone - pełne jak w 5.2)\n// extract nazwa[i], k13, m13, k14, m14\nL_2013[i] := k13 + m13;\nL[i] := k14 + m14;\ntempo[i] := Trunc(L[i] / L_2013[i] * 10000) / 10000;\nprzeludnione[i] := False;\nend;\nCloseFile(f);\nfor rok := 2015 to 2025 do\nfor i := 1 to 50 do\nif not przeludnione[i] then\nbegin\nL[i] := Trunc(L[i] * tempo[i]);\nif L[i] > 2 * L_2013[i] then przeludnione[i] := True;\nend;\nsuma2025 := 0; max_lud := 0; pl_count := 0;\nfor i := 1 to 50 do\nbegin\nsuma2025 := suma2025 + L[i];\nif L[i] > max_lud then begin max_lud := L[i]; max_nazwa := nazwa[i]; end;\nif przeludnione[i] then Inc(pl_count);\nend;\nWriteln('Suma 2025: ', suma2025); // 125 930 205\nWriteln('Najwięcej: ', max_nazwa); // w12C\nWriteln('Przeludnione: ', pl_count); // 18\nend.\n\n## Reference informatyczny - symulacja iteracyjna\n\n> Reference - Iterative simulation:\n> - Symulacja procesu wieloletniego: pętla po latach, każdy rok aktualizuje stan.\n> - **Zaokrąglenie w dół**: `math.floor()` (Python), `Trunc()` lub `Int()` (Pascal), `floor()` (C++).\n> - **Tempo zaokrąglone do 4 miejsc**: `floor(x * 10000) / 10000`.\n> - **Stała wartość po warunku**: flag boolean `przeludnione` + pomijanie aktualizacji.\n> - **Argmax w grupie**: `max(dict, key=dict.get)` (Python), `INDEKS+PODAJ.POZYCJĘ` (Excel).\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 5.3, max 6 pkt):\n> - **6 pkt** - 3 poprawne odpowiedzi (suma, najliczniejsze województwo, liczba przeludnionych)\n> - **4 pkt** - 2 poprawne\n> - **2 pkt** - 1 poprawna\n> - **0 pkt** - niepełna lub błędna albo brak\n> - Nie przyznaje się 5, 3, 1 pkt.\n\n## Typowe pułapki\n\n- **Zaokrąglenie tempa**: musi być W DÓŁ do 4 miejsc, np. 1.05978 → 1.0597 (nie 1.0598!).\n- **Zaokrąglenie ludności**: w dół do całkowitej, np. 2 980 175.4 → 2 980 175.\n- **Moment przeludnienia**: \"OD NASTĘPNEGO ROKU ludność się nie zmienia\" - czyli rok, w którym wystąpi przekroczenie, ma jeszcze policzoną nową wartość; dopiero kolejne lata zostają zamrożone.\n- **Definicja przeludnienia**: \"ponaddwukrotnie WIĘKSZA\" = `L > 2*L_2013` (ostre nieostre).\n- **Lata 2014-2025 włącznie**: trzeba sprawdzić, czy w którymkolwiek z tych lat doszło do przeludnienia.\n- **Pomylenie sumy z liczbą województw** - w nazwie województwo identyfikuje się też pełnym imieniem (w12C).\n\n## Złożoność obliczeniowa\n\n- Symulacja: O(N · T), gdzie N = 50 województw, T = 11 lat (2015-2025).\n- Wybór maksimum, suma: O(N).\n- **Całkowita: O(N · T)** = O(550) - natychmiastowe.","image":null,"solution_image":null,"topics":null,"page_from":null,"source":"maturazai","answer_source":null,"answer_text_source":null,"solution_source":"maturazai","text_source":"maturazai","source_label":"Informatyka · Matura · maj 2015 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Kontekst - patrz zadanie 5.1.</p>\n<p>Tempo wzrostu w danym województwie to iloraz ludnosc(2014)/ludnosc(2013), zaokrąglany w dół do 4 miejsc po przecinku. Ludność dla roku r &gt; 2014 obliczamy: ludnosc(r) = ludnosc(r-1) · tempo_wzrostu, zaokrąglając w dół do liczby całkowitej.</p>\n<p>Jeżeli w jakimś województwie w danym roku ludność jest ponaddwukrotnie większa niż stan z roku 2013, to występuje efekt <strong>przeludnienia</strong> - począwszy od następnego roku ludność tego województwa nie będzie się zmieniać.</p>\n<p>Przykład dla w01D: ludność 2013 = 2 812 202; 2014 = 2 980 175; tempo = 1,0597; ludność 2015 = 3 158 091. W 2025 przekroczy ponaddwukrotnie i od tego czasu się nie zmienia.</p>\n<p>Wykonaj polecenia:</p>\n<ul><li>Podaj liczbę wszystkich mieszkańców Edulandii w 2025 roku i wskaż, które województwo będzie miało w tym roku najwięcej mieszkańców.</li><li>Podaj liczbę województw, w których kiedykolwiek wystąpi efekt przeludnienia w latach 2014-2025 włącznie.</li></ul>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<ul><li><strong>Liczba mieszkańców w 2025 roku: 125 930 205</strong></li><li><strong>Najliczniejsze województwo w 2025: w12C</strong></li><li><strong>Liczba województw z efektem przeludnienia (2014-2025): 18</strong></li></ul>\n<h4>Sposób 1 - symulacja roku po roku w Pythonie</h4>\n<p>```python<br>import pandas as pd<br>import math</p>\n<p>df = pd.read_csv(&#x27;kraina.txt&#x27;, sep=&#x27;;&#x27;, header=None,<br>names=[&#x27;nazwa&#x27;, &#x27;k2013&#x27;, &#x27;m2013&#x27;, &#x27;k2014&#x27;, &#x27;m2014&#x27;])</p>\n<p>wyniki = {}<br>przeludnienie = 0</p>\n<p>for _, row in df.iterrows():<br>nazwa = row[&#x27;nazwa&#x27;]<br>L_2013 = row[&#x27;k2013&#x27;] + row[&#x27;m2013&#x27;]<br>L_2014 = row[&#x27;k2014&#x27;] + row[&#x27;m2014&#x27;]</p>\n<h3>Tempo wzrostu - zaokrąglone W DÓŁ do 4 miejsc po przecinku</h3>\n<p>tempo_dokladne = L_2014 / L_2013<br>tempo = math.floor(tempo_dokladne * 10000) / 10000<br>L = L_2014<br>czy_przeludnione = False</p>\n<h3>Symulacja od 2015 do 2025</h3>\n<p>for rok in range(2015, 2026):<br>if not czy_przeludnione:<br>L = math.floor(L * tempo) # nowa ludność, zaokrąglana w dół<br>if L &gt; 2 * L_2013:<br>czy_przeludnione = True</p>\n<h3>od następnego roku ludność się NIE ZMIENIA</h3>\n<h3>czyli wartość L pozostaje</h3>\n<p>if czy_przeludnione:<br>przeludnienie += 1<br>wyniki[nazwa] = L</p>\n<p>suma_2025 = sum(wyniki.values())<br>najwieksze = max(wyniki, key=wyniki.get)</p>\n<p>print(&#x27;Suma 2025:&#x27;, suma_2025) # 125 930 205<br>print(&#x27;Najwięcej:&#x27;, najwieksze, wyniki[najwieksze]) # w12C<br>print(&#x27;Przeludnione:&#x27;, przeludnienie) # 18</p>\n<h4>Sposób 2 - arkusz kalkulacyjny</h4>\n<p><strong>Krok 1: kolumny pomocnicze</strong></p>\n<ul><li>Kolumna G: <code>=B2+C2</code> (ludność 2013)</li><li>Kolumna H: <code>=D2+E2</code> (ludność 2014)</li><li>Kolumna I: <code>=ZAOKR.DÓŁ(H2/G2; 4)</code> (tempo, zaokrąglone w dół)</li><li>Limit 2x2013: <code>=G2*2</code></li></ul>\n<p><strong>Krok 2: kolumny lat 2015-2025 (J, K, L, , U)</strong></p>\n<ul><li>J2 (2015): <code>=JEŻELI(I2&lt;=<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>V</mi></mrow></math>1; ZAOKR.DÓŁ(H2*I2; 0); H2)</code> - ale lepiej:</li><li>J2: <code>=ZAOKR.DÓŁ(H2*I2; 0)</code> - naiwnie bez sprawdzania przeludnienia</li><li>Następna kolumna: <code>=JEŻELI(J2 &gt; 2<em>G2; J2; ZAOKR.DÓŁ(J2</em>I2; 0))</code> - &quot;zamrażamy&quot; wartość po przekroczeniu.</li></ul>\n<p><strong>Krok 3: agregacja</strong></p>\n<ul><li>Suma 2025: <code>=SUMA(U2:U51)</code> → 125 930 205</li><li>Najwięcej: <code>=INDEKS(A2:A51; PODAJ.POZYCJĘ(MAX(U2:U51); U2:U51; 0))</code> → w12C</li><li>Liczba przeludnionych: kolumna pomocnicza X = <code>=JEŻELI(U2&gt;2*G2; 1; 0)</code>, suma X → 18</li></ul>\n<h4>Sposób 3 - Pascal pełny</h4>\n<p>```pascal<br>program Demografia;<br>var<br>f: TextFile;<br>nazwa: array[1 50] of String;<br>L_2013, L: array[1 50] of LongInt;<br>tempo: array[1 50] of Double;<br>przeludnione: array[1 50] of Boolean;<br>i, rok: Integer;<br>suma2025, max_lud: LongInt;<br>max_nazwa: String;<br>pl_count: Integer;<br>linia: String;<br>pos: Integer;<br>k13, m13, k14, m14: LongInt;<br>begin<br>AssignFile(f, &#x27;kraina.txt&#x27;);<br>Reset(f);<br>i := 0;<br>while not Eof(f) do<br>begin<br>Inc(i); Readln(f, linia);<br>// Parsowanie (uproszczone - pełne jak w 5.2)<br>// extract nazwa[i], k13, m13, k14, m14<br>L_2013[i] := k13 + m13;<br>L[i] := k14 + m14;<br>tempo[i] := Trunc(L[i] / L_2013[i] * 10000) / 10000;<br>przeludnione[i] := False;<br>end;<br>CloseFile(f);<br>for rok := 2015 to 2025 do<br>for i := 1 to 50 do<br>if not przeludnione[i] then<br>begin<br>L[i] := Trunc(L[i] * tempo[i]);<br>if L[i] &gt; 2 * L_2013[i] then przeludnione[i] := True;<br>end;<br>suma2025 := 0; max_lud := 0; pl_count := 0;<br>for i := 1 to 50 do<br>begin<br>suma2025 := suma2025 + L[i];<br>if L[i] &gt; max_lud then begin max_lud := L[i]; max_nazwa := nazwa[i]; end;<br>if przeludnione[i] then Inc(pl_count);<br>end;<br>Writeln(&#x27;Suma 2025: &#x27;, suma2025); // 125 930 205<br>Writeln(&#x27;Najwięcej: &#x27;, max_nazwa); // w12C<br>Writeln(&#x27;Przeludnione: &#x27;, pl_count); // 18<br>end.</p>\n<h4>Reference informatyczny - symulacja iteracyjna</h4>\n<blockquote>Reference - Iterative simulation:<br>- Symulacja procesu wieloletniego: pętla po latach, każdy rok aktualizuje stan.<br>- <strong>Zaokrąglenie w dół</strong>: <code>math.floor()</code> (Python), <code>Trunc()</code> lub <code>Int()</code> (Pascal), <code>floor()</code> (C++).<br>- <strong>Tempo zaokrąglone do 4 miejsc</strong>: <code>floor(x * 10000) / 10000</code>.<br>- <strong>Stała wartość po warunku</strong>: flag boolean <code>przeludnione</code> + pomijanie aktualizacji.<br>- <strong>Argmax w grupie</strong>: <code>max(dict, key=dict.get)</code> (Python), <code>INDEKS+PODAJ.POZYCJĘ</code> (Excel).</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 5.3, max 6 pkt):<br>- <strong>6 pkt</strong> - 3 poprawne odpowiedzi (suma, najliczniejsze województwo, liczba przeludnionych)<br>- <strong>4 pkt</strong> - 2 poprawne<br>- <strong>2 pkt</strong> - 1 poprawna<br>- <strong>0 pkt</strong> - niepełna lub błędna albo brak<br>- Nie przyznaje się 5, 3, 1 pkt.</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Zaokrąglenie tempa</strong>: musi być W DÓŁ do 4 miejsc, np. 1.05978 → 1.0597 (nie 1.0598!).</li><li><strong>Zaokrąglenie ludności</strong>: w dół do całkowitej, np. 2 980 175.4 → 2 980 175.</li><li><strong>Moment przeludnienia</strong>: &quot;OD NASTĘPNEGO ROKU ludność się nie zmienia&quot; - czyli rok, w którym wystąpi przekroczenie, ma jeszcze policzoną nową wartość; dopiero kolejne lata zostają zamrożone.</li><li><strong>Definicja przeludnienia</strong>: &quot;ponaddwukrotnie WIĘKSZA&quot; = <code>L &gt; 2*L_2013</code> (ostre nieostre).</li><li><strong>Lata 2014-2025 włącznie</strong>: trzeba sprawdzić, czy w którymkolwiek z tych lat doszło do przeludnienia.</li><li><strong>Pomylenie sumy z liczbą województw</strong> - w nazwie województwo identyfikuje się też pełnym imieniem (w12C).</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>Symulacja: O(N · T), gdzie N = 50 województw, T = 11 lat (2015-2025).</li><li>Wybór maksimum, suma: O(N).</li><li><strong>Całkowita: O(N · T)</strong> = O(550) - natychmiastowe.</li></ul>"}]}