Анализ условия в цикле while
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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=0 & begin\\
\textit{int main() \{} &\textit{while $s <= 100$} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad \textit{if $k\%2==0$:}&\quad k:=0;\\
\quad s=0;k=0;&\quad \quad s=s+5&\quad \textit{while $s<=100$ do begin}\\
\quad \textit{while($s<=100$) \{}&\quad \quad k=k+1&\quad \quad \textit{if k mod $2=0$ then begin}\\
\quad \quad \textit{if ($k\%2==0$) \{}&\quad else:&\quad \quad \quad s:=s+5;\\
\quad \quad \quad s=s+5;&\quad \quad k=k+1&\quad \quad \quad k:=k+1;\\
\quad \quad \quad k=k+1;&print(k)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k+1;\\
\quad \quad \quad k=k+1;&&\quad end;\\
\quad \textit{\}}&&\quad write(k);\\
cout<<k<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Чтобы понять, как работает программа, с помощью таблицы отобразим несколько первых действий:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&0\\ 5&1\\ 5&2\\ 10&3\\ 10&4\\ ...&...\\ \hline \end{array}\]
На каждое увелечение \(s\) на 5 приходится +2 к значению \(k\). Таких увеличений \(s\) всего в цикле происходит \(100:5=20\). Значит, последнее значение \(k=0+2\cdot20\), но так как в момент, когда \(k=40\), \(s=100\), программа сделает следующий шаг и увеличит \(k\) еще на единицу. Таким образом, получаем ответ \(k=41\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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=0 & begin\\
\textit{int main() \{} &\textit{while s <= 500} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad \textit{if $k\%3==0$:}&\quad k:=0;\\
\quad s=0;k=0;&\quad \quad s=s+10&\quad \textit{while $s<=500$ do begin}\\
\quad \textit{while($s<=500$) \{}&\quad \quad k=k+2&\quad \quad \textit{if k mod $3=0$ then begin}\\
\quad \quad \textit{if ($k\%3==0$) \{}&\quad else:&\quad \quad \quad s:=s+10;\\
\quad \quad \quad s=s+10;&\quad \quad k=k+1&\quad \quad \quad k:=k+2;\\
\quad \quad \quad k=k+2;&print(k)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k+1;\\
\quad \quad \quad k=k+1;&&\quad end;\\
\quad \textit{\}}&&\quad write(k);\\
cout<<k<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Чтобы понять, как работает программа, с помощью таблицы отобразим несколько первых действий:
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&0\\
10&2\\
10&3\\
20&5\\
20&6\\
...&...\\
\hline
\end{array}\]
На каждое увелечение \(s\) на 10 приходится +3 к значению \(k\). Таких увеличений \(s\) всего в цикле происходит \(500:10=50\). Значит, последнее значение \(k=0+3\cdot50\), но так как в момент, когда \(k=150\), \(s=500\), программа сделает следующий шаг и увеличит \(k\) еще на два. Таким образом, получаем ответ \(k=152\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 $s <= 100$} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad s=s+k&\quad k:=1;\\
\quad s=0;k=1;&\quad \textit{if $k\%2==1:$}&\quad \textit{while $s<=100$ do begin}\\
\quad \textit{while($s<=100$) \{}&\quad \quad k=k+1&\quad \quad s=s+k;\\
\quad \quad s=s+k;&\quad else:&\quad \quad \quad \textit{if k mod $2=1$ then begin}\\
\quad \quad \textit{if ($k\%2==1$) \{}&\quad \quad k=k*2&\quad \quad \quad k:=k+1;\\
\quad \quad \quad k=k+1;&print(k)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k*2;\\
\quad \quad \quad k=k*2;&&\quad end;\\
\quad \textit{\}}&&\quad write(k);\\
cout<<k<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Чтобы понять, как работает программа, с помощью таблицы отобразим несколько первых действий:
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&1\\
1&2\\
3&4\\
7&8\\
15&16\\
31&32\\
...&...\\
\hline
\end{array}\]
После первого шага значения \(k\) становятся стпенями двойки, а \(s\) принимает значение на один меньше, чем \(k\). Значит, первым значением \(s\), которое привысит 100, будет 127. Тогда очевидно, что значение \(k=128\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 $s <= 200$} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad s=s+k&\quad k:=1;\\
\quad s=0;k=1;&\quad \textit{if $k\%3!=0:$}&\quad \textit{while $s<=200$ do begin}\\
\quad \textit{while($s<=200$) \{}&\quad \quad k=k+2&\quad \quad s=s+k;\\
\quad \quad s=s+k;&\quad else:&\quad \quad \quad \textit{if k mod $3<>0$ then begin}\\
\quad \quad \textit{if ($k\%3!=0$) \{}&\quad \quad k=k*3&\quad \quad \quad k:=k+2;\\
\quad \quad \quad k=k+2;&print(k)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k*3;\\
\quad \quad \quad k=k*3;&&\quad end;\\
\quad \textit{\}}&&\quad write(k);\\
cout<<k<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&1\\
1&3\\
4&9\\
13&27\\
40&81\\
121&243\\
364&729\\
\hline
\end{array}\]
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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=0 & begin\\
\textit{int main() \{} &\textit{while $k <= 20$} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad s=s+k&\quad k:=0;\\
\quad s=0;k=0;&\quad \textit{if $s\%2==0:$}&\quad \textit{while $k<=20$ do begin}\\
\quad \textit{while($k<=20$) \{}&\quad \quad k=k+1&\quad \quad s=s+k;\\
\quad \quad s=s+k;&\quad else:&\quad \quad \quad \textit{if s mod $2=0$ then begin}\\
\quad \quad \textit{if ($s\%2==0$) \{}&\quad \quad k=k+3&\quad \quad \quad k:=k+1;\\
\quad \quad \quad k=k+1;&print(s)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k+3;\\
\quad \quad \quad k=k+3;&&\quad end;\\
\quad \textit{\}}&&\quad write(s);\\
cout<<s<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&0\\
0&1\\
1&4\\
5&7\\
12&8\\
20&9\\
29&12\\
41&15\\
56&16\\
72&17\\
89&20\\
109&23\\
\hline
\end{array}\]
Т.к. на следующем шаге \(k=23\) не удовлетворяет условию, ответом является \(s=109\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 <= 20$} & \quad s:=0;\\
\quad \textit{int s,k;}&\quad s=s+k&\quad k:=1;\\
\quad s=0;k=1;&\quad \textit{if $k\%5==0:$}&\quad \textit{while $k<=20$ do begin}\\
\quad \textit{while($k<=20$) \{}&\quad \quad k=k+1&\quad \quad s=s+k;\\
\quad \quad s=s+k;&\quad else:&\quad \quad \quad \textit{if k mod $5=0$ then begin}\\
\quad \quad \textit{if ($k\%5==0$) \{}&\quad \quad k=k+4&\quad \quad \quad k:=k+1;\\
\quad \quad \quad k=k+1;&print(s+k)&\quad \quad end;\\
\quad \quad \textit{\}}&&\quad \quad else\\
\quad \quad else&&\quad \quad \quad k=k+4;\\
\quad \quad \quad k=k+4;&&\quad end;\\
\quad \textit{\}}&&\quad write(s+k);\\
cout<<s+k<<endl;&&end.\\
\textit{\}}&&\\
\hline
\end{array}\]
Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|}
\hline
s & k\\
\hline
0&0\\
0&1\\
1&5\\
6&6\\
12&10\\
22&11\\
33&15\\
48&16\\
64&20\\
84&21\\
\hline
\end{array}\]
Т.к. на следующем шаге \(k=21\) не удовлетворяет условию, ответом является \(s+k=84+21=105\).
Определите, при каком наименьшем введённом значении переменной s программа выведет число 4. Для Вашего удобства программа представлена на трёх языках программирования.
\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; int(input()) & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 4096 & using\; namespace\; std; & begin \\ while\; s\; <\; 149: & int\; main() \; \{ & \quad readln\; (s); \\ \quad s\; =\; s\; +\; 9 & \quad int\; s,\; n; & \quad n\; :=\; 4096; \\ \quad n\; =\; n\; //\; 2 & \quad cin\; >>\; s; & \quad while\; s\; <\; 149\; do \\ print(n) & \quad n\; =\; 4096; & \quad begin \\ & \quad while\; (s\; <\; 149)\; \{ & \quad\quad s\; :=\; s\; +\; 9; \\ & \quad\quad s\; =\; s\; +\; 9; & \quad\quad n\; :=\; n\; div\; 2; \\ & \quad\quad n\; =\; n\; /\; 2; & \quad end; \\ & \quad \} & \quad writeln(n) \\ & \quad cout\; <<\; n\; <<\; endl; & end. \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]
Цикл завершится после того, как значение переменной s превысит, либо будет равен 149.
Переменная n делит саму себя пополам и в конце будет равняться 4, то есть количество итераций будет равно 10, так как \(\frac{4096}{2^{10}} = 4\) (то есть переменной n нужно поделить саму себя пополам 10 раз, чтобы получить число 4).
Составим неравенство \(s + 9x \geqslant 149\) (где x - количество итераций, т.е. \(x = 10\))
Получим, что \(s \geqslant 149 - 90\)
\(s \geqslant 59\)
\(s = 59\)