Математика ЕГЭ
Русский язык ЕГЭ
Математика 5-7
Математика ОГЭ
Информатика
Физика
Обществознание
Кликните, чтобы открыть меню

6. Анализ простейших программ

1. Вспоминай формулы по каждой теме
2. Решай новые задачи каждый день
3. Вдумчиво разбирай решения

Анализ условия в цикле while (страница 4)

Задание 22 #12636

Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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}\]

Ответ: 729

Задание 23 #12637

Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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\).

Ответ: 109

Задание 24 #12638

Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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\).

Ответ: 105

Задание 25 #16204

Определите, при каком наименьшем введённом значении переменной 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\)

Ответ: 59

Задание 26 #16205

Определите, при каком наименьшем введённом значении переменной 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\)

Ответ: 20

Задание 27 #16206

Определите, что выведет программа.

\[\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.

Ответ: 55

Задание 28 #12632


Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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\).

 

Ответ: 41