Анализ условия в цикле while (страница 3)
Определите, что выведет программа.
\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; 1 & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 0 & using\; namespace\; std; & begin \\ while\; (2*s*s)\; <=\; 200: & int\; main()\; \{ & \quad s\; :=\; 1; \\ \quad n\; =\; n\; +\; s & \quad int\; n,\; s; & \quad n\; :=\; 0; \\ \quad s\; =\; s\; +\; 1 & \quad s\; =\; 1; & \quad while\; (2*s*s)\; <=\; 200\; do \\ print(n) & \quad n\; =\; 0; & \quad begin \\ \quad & \quad while\; ((2\; *\; s\; *\; s) \; <=\; 200)\; \{ & \quad\quad n\; :=\; n\; +\; s; \\ \quad & \quad\quad n\; =\; n\; +\; s; & \quad\quad s\; :=\; s\; +\; 1; \\ & \quad\quad s\; =\; s\; +\; 1; & \quad end; \\ & \quad \} & \quad writeln(n) \\ & \quad cout\; <<\; n; & end. \\ & \quad return\; 0; & \quad \\ & \} & \quad \\ & \quad & \\ \hline \end{array}\]
Программа ищет сумму натурального ряда различных s, удвоенный квадрат которых меньше либо равен 200.
Определите, при каком наименьшем введённом значении переменной s программа выведет число 729. Для Вашего удобства программа представлена на трёх языках программирования.
\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; int(input()) & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 1 & using\; namespace\; std; & begin \\ while\; s\; <\; 62: & int\; main() \; \{ & \quad readln\; (s); \\ \quad s\; =\; s\; +\; 7 & \quad int\; s,\; n; & \quad n\; :=\; 1; \\ \quad n\; =\; n\; *\; 3 & \quad cin\; >>\; s; & \quad while\; s\; <\; 62\; do \\ print(n) & \quad n\; =\; 1; & \quad begin \\ & \quad while\; (s\; <\; 62)\; \{ & \quad\quad s\; :=\; s\; +\; 7; \\ & \quad\quad s\; =\; s\; +\; 7; & \quad\quad n\; :=\; n\; *\; 3; \\ & \quad\quad n\; =\; n\; *\; 3; & \quad end; \\ & \quad \} & \quad writeln(n) \\ & \quad cout\; <<\; n\; <<\; endl; & end. \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]
Цикл завершится после того, как значение переменной s превысит, либо будет равен 62.
Переменная n увеличивает себя в три раза и в конце будет равняться 729, то есть количество итераций будет равно 6, так как \(3^6 = 729\).
Составим неравенство \(s + 7x \geqslant 62\) (где x - количество итераций, т.е. \(x = 6\))
Получим, что \(s \geqslant 62 - 42\)
\(s \geqslant 20\)
\(s = 20\)
Определите, при каком наименьшем введённом значении переменной 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\)
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 $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=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\).