Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\begin{array}{| l | l | l |}
\hline
\textbf{C++} & \textbf{Python} & \textbf{Pascal}\\
\hline
\textit{\#include <iostream>} & s=0 & \textit{var k, s: integer;}\\
\textit{using namespace std;} & k=1 & begin\\
\textit{int main() \{} & \textit{while k <= 10} & \quad s:=0;\\
\textit{int s, k;} & \quad s=s+k & \quad k:=1;\\
s=0;k=1; & \quad k=k*2 & \quad \textit{while k <= 10 do begin}\\
\textit{while (k <= 10) \{} & print(s) & \quad \quad s:=s+k;\\
s=s+k;& & \quad \quad k:=k*2;\\
k=k*2;& & \quad end;\\
\textit{\}}& & \quad write(s);\\
\textit{cout $<<$ s $<<$ endl;}& & end.\\
\textit{return 0;}&&\\
\textit{\}}&&\\
\hline
\end{array}\]
Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&1\\
1&2\\
3&4\\
7&8\\
15&16\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(k<=10)\) не выполняется, значит, последнее значение \(s=15\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) — знаменатель прогрессии, \(b_1\) — начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Найдем \(n\): цикл перестает выполняться, когда \(k>10\). Т.к. значения \(k\) - степени двойки, оно превысит 10 на 4 шаге цикла(т.к. \(2^4=16\)), следовательно, \(n=4\). Теперь подставим все известные данные в формулу и посчитаем сумму: \[s=\frac{1\cdot(2^4-1)}{2-1}=15\]
Ответ: 15