Использовал оперативную память
Var
c: integer;
begin
readln(c);
writeln(sqr(c mod 10));
end.
<span>program</span><span>factorial</span><span>;</span>
<span>function</span><span>fact</span><span>(</span><span>n</span><span>:</span><span>integer</span><span>)</span><span>:</span><span>longint</span><span>;</span><span>begin</span><span>if</span><span>(</span><span>n</span><span>=</span><span>0</span><span>)</span><span>then</span><span>fact</span><span>:=</span><span>1</span><span>else</span><span>fact</span><span>:=</span><span>n</span><span>*</span><span>fact</span><span>(</span><span>n</span><span>-</span><span>1</span><span>)</span><span>;</span>
<span>end</span><span>;</span>
<span>var</span><span>n</span><span>:</span><span>integer</span><span>;</span>
<span>begin</span>
<span>for</span><span>n</span><span>:=</span><span>0</span><span>to</span><span>16</span><span>do</span>
<span>writeln</span><span>(</span><span>n</span><span>,</span><span>'! = '</span><span>,</span><span>fact</span><span>(</span><span>n</span><span>))</span><span>;</span><span>end</span><span>.</span>
<h2>Уточнение</h2>
Если в выражении z:= (z + x/2)/2 всё-таки сначала высчитывается (z + x), а потом делится на 4, то ответ будет другой.
Но также влияет на ответ то, какой тип у x и z. Если они оба int, то дробная часть отбрасывается и в ответе получится также, если же тип double или float, то ответ будет другим.
<h2>Ответ</h2>
x = 39
z = 1, i = 0
z = (z + x/2)/2 = (1 + 39/2)/2 = 10.25
i = 0 + 1 = 1
1 < 4 - да
...
z = (10.25 + 39/2)/2 = 14.87500
i = 2
2 < 4 - да
...
z = (14.87500 + 39/2)/2 = 17.1875
i = 3
3 < 4 - да
...
z = (17.1875 + 39/2)/2 = 18.34375
i = 4
4 < 4 нет
<h3>z = 18.34375</h3>
1) 65536/16 = 4096
2) 16*32 = 512
1000*512=512000 битов