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

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

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

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

Задание 8 #16211

Определите, при каком наименьшем введённом значении переменной s программа выведет число 1280. Для Вашего удобства программа представлена на трёх языках программирования.

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; int(input()) & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 5 & using\; namespace\; std; & begin \\ while\; s\; >\; 23: & int\; main()\; \{ & \quad readln\; (s); \\ \quad s\; =\; s\; -\; 5& \quad int\; s,\; \; n\; =\; 5; & \quad n\; :=\; 5; \\ \quad n\; =\; n\; *\; 2& \quad cin\; >>\; s; & \quad while\; s\; >\; 23\; do\; begin \\ print(\; n\; ) & \quad while(\; s\; >\; 23\; )\; \{ & \quad\quad s\; :=\; s\; -\; 5; \\ \quad & \quad\quad s\; =\; s\; -\; 5; & \quad\quad n\; :=\; n\; *\; 2; \\ & \quad\quad n\; =\; n\; *\; 2; & \quad end; \\ & \quad\quad \} & \quad writeln(n); \\ & \quad cout\; <<\; n \; << \;endl; & end. \\ & \quad return \; 0; & \quad \\ & \} & \\ \hline \end{array}\]

Конечное значение переменной n равно 1280, начальное - 5. Составим уравнение: \(5 * 2^x = 1280\) (x - количество итераций)

\(x = 8\)

Цикл завершится тогда, когда s станет меньше или равен 23. Составив неравенство \(s - 5 * 8 \leq 23\), используя полученный х, можно понять, что оно сможет дать информацию лишь о верхней границе возможного s, в то время как нам нужна нижняя. В таком случае “откатимся” на одну итерацию назад и получим неравенство:

\(s - 5 * 7 \leq 23\)

\(s \leq 58\)

Это неравенство означает выполнение программы за 7 итераций, нам же для получения нужного n требуется именно 8 операций, поэтому определим такое минимальное s, которое нарушает условие \(s \leq 58\). Такое \(s = 59.\)

Ответ: 59

Задание 9 #16212

Определите, при каком наибольшем введённом значении переменной s программа выведет число 1000. Для Вашего удобства программа представлена на трёх языках программирования.

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; int(input()) & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 1000000 & using\; namespace\; std; & begin \\ while\; s\; >=\; 120: & int\; main() & \quad readln\; (s); \\ \quad s\; =\; s\; -\; 12 & \{\; & \quad n\; :=\; 1000000; \\ \quad n\; =\; n\; //\; 10& \quad int\; s,\; n; & \quad while\; s\; >=\; 120\; do \\ print(n) & \quad cin\; >>\; s; & \quad begin \\ & \quad n\; =\; 1000000\; ; & \quad\quad s\; :=\; s\; -\; 12; \\ & \quad while\; (s\; \; >=\; 120)\; \{ & \quad\quad n\; :=\; n\; div\; 10; \\ & \quad\quad s\; =\; s\; -\; 12; & \quad end; \\ & \quad\quad n\; =\; n\; /\; 10; & \quad writeln(n); \\ & \quad \} & end. \\ & \quad cout\; <<\; n\; <<\; endl; & \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]

Цикл завершится после того, как значение переменной s станет меньше 120.

Переменная n уменьшает себя в 10 раз и в конце будет равняться 1000, то есть количество итераций будет равно 3, так как \(\frac{1000000}{10 * 10 * 10 } = 1000)\).

Составим неравенство \(s - 12x < 120\) (где x - количество итераций, т.е. \(x = 3\))

Получим, что \(s < 36 + 120\)

\(s < 156\)

\(s = 155\)

Ответ: 155

Задание 10 #16213

Определите, при каком наибольшем введённом значении переменной s программа выведет число 8192. Для Вашего удобства программа представлена на трёх языках программирования.

\[\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\; >\; 89: & int\; main() & \quad readln\; (s); \\ \quad s\; =\; s\; -\; 12 & \{ & \quad n\; :=\; 1; \\ \quad n\; =\; n\; *\; 2 & \quad int\; s,\; n; & \quad while\; s\; >\; 89\; do \\ print(n) & \quad cin\; >>\; s; & \quad begin \\ & \quad n\; =\; 1\; ; & \quad\quad s\; :=\; s\; -\; 12; \\ & \quad while\; (s\; \; >\; 89)\; \{ & \quad\quad n\; :=\; n\; *\; 2; \\ & \quad\quad s\; =\; s\; -\; 12; & \quad end; \\ & \quad\quad n\; =\; n\; *\; 2; & \quad writeln(n); \\ & \quad \} & end. \\ & \quad cout\; <<\; n\; <<\; endl; & \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]

Цикл завершится после того, как значение переменной s станет меньше или равно 89.

Переменная n увеличивает себя в два раза и в конце будет равняться 8192, то есть количество итераций будет равно 13, так как \(2^{13} = 8192\).

Составим неравенство \(s - 12x \leq 89\) (где x - количество итераций, т.е. \(x = 13\))

Получим, что \(s \leq 89 + 156\)

\(s \leq 245\)

\(s = 245\)

Ответ: 245

Задание 11 #16214

Определите, при каком наименьшем введённом значении переменной s программа выведет число 16. Для Вашего удобства программа представлена на трёх языках программирования.

\[\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 n\; :=\; 4096; \\ \quad n\; =\; n\; //\; 2 &\quad int\; s,\; n; & \quad while\; s\; <\; 149\; do \\ print(n) & \quad cin\; >>\; s; & \quad begin \\ & \quad n\; =\; 4096\; ; & \quad\quad s\; :=\; s\; +\; 9; \\ & \quad while\; (s\; <\; 149)\; \{ & \quad\quad n\; :=\; n\; div\; 2; \\ & \quad\quad s\; =\; s\; +\; 9; & \quad end; \\ & \quad\quad n\; =\; n\; /\; 2; & \quad writeln(n); \\ & \quad \} & end. \\ & \quad cout\; <<\; n\; <<\; endl; & \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]

Цикл завершится после того, как значение переменной s превысит 149.

Переменная n делит саму себя пополам и в конце будет равняться 16, то есть количество итераций будет равно 8, так как \(\frac{4096}{2^{8}} = 16\) (то есть переменной n нужно поделить саму себя пополам 8 раз, чтобы получить число 16).

Составим неравенство \(s + 9x \geqslant 149\) (где x - количество итераций, т.е. \(x = 8\))

Получим, что \(s \geqslant 149 - 72\)

\(s \geqslant 77\)

\(s = 77\)

Ответ: 77

Задание 12 #16215

Определите, при каком наименьшем введённом значении переменной s программа выведет число 2187. Для Вашего удобства программа представлена на трёх языках программирования.

\[\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 n\; :=\; 1; \\ \quad n\; =\; n\; *\; 3& \quad int\; s,\; n; & \quad while\; s\; <\; 62\; do \\ print(n) & \quad cin\; >>\; s; & \quad begin \\ & \quad n\; =\; 1\; ; & \quad\quad s\; :=\; s\; +\; 7; \\ & \quad while\; (s\; <\; 62)\; \{ & \quad\quad n\; :=\; n\; *\; 3; \\ & \quad\quad s\; =\; s\; +\; 7; & \quad end; \\ & \quad\quad n\; =\; n\; *\; 3; & \quad writeln(n); \\ & \quad \} & end. \\ & \quad cout\; <<\; n\; <<\; endl; & \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]

Цикл завершится после того, как значение переменной s превысит или будет равно 62.

Переменная n увеличивает себя в три раза и в конце будет равняться 2187, то есть количество итераций будет равно 7, так как \(3^7 = 2187\).

Составим неравенство \(s + 7x \geqslant 62\) (где x - количество итераций, т.е. \(x = 7\))

Получим, что \(s \geqslant 62 - 49\)

\(s \geqslant 13\)

\(s = 13\)

Ответ: 13

Задание 13 #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

Задание 14 #16216

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

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; 15 & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 0 & using\; namespace\; std; & begin \\ while\; s\; <\; (s*s*s): & int\; main()\; \{ & \quad s\; :=\; 1; \\ \quad s\; =\; s\; -\; 1 & \quad int\; n,\; s; & \quad n\; :=\; 3; \\ \quad n\; =\; n\; +\; s & \quad s\; =\; 15; & \quad while\; s\; <(s * s * s) \; do\; begin\\ print(n) & \quad n\; =\; 0; & \quad\quad s\; :=\; s\; -\; 1; \\ & \quad while\; (s <s * s * s) & \quad\quad n\; :=\; n\; +\; s; \\ & \quad \{ & \quad end; \\ & \quad\quad s\; =\; s\; -\; 1; & \quad writeln(n); \\ & \quad\quad n\; =\; n\; +\; s; & end. \\ & \quad \} & \quad \\ & \quad cout\; <<\; n; & \quad \\ & \quad return\; 0; & \quad \\ & \} & \\ \hline \end{array}\]

Цикл завершится после того, как значение переменной s будет больше либо равна своего куба, а так как оно положительное и уменьшается, то это будет, когда s станет равно единице.

Переменная n увеличивает себя каждый раз на уменьшенное s c 14 до 1.

Получим, что \(s = 14+13+12...+1= \frac{14+1}2\cdot n=\frac{15}2\cdot14=15*7=105\)

Ответ: 105