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

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

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

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

Задание 29 #16208

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

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; 0 & \#include\; <iostream> & var\; s,\; i:\; integer; \\ for\; i\; in\; range(15,\; 30): & using\; namespace\; std; & begin \\ \quad if\; (i\; *\; i)\; \%\; 2\; ==\; 0: & int\; main() & \quad s\; :=\; 0; \\ \quad\quad s\; +=\; i & \{ & \quad for\; i\; :=\; 15\; to\; 29\; do \\ print(s) & \quad int\; s\; =\; 0; & \quad begin \\ & \quad for\; (int\; i\; =\; 15;\; i\; <\; 30;\; i++)\; \{ & \quad\quad if\; (i\; *\; i)\; mod\; 2\; =\; 0\; then \\ & \quad\quad if\; ((i\; *\; i)\; \%\; 2\; ==\; 0) & \quad\quad\quad s\; :=\; s\; +\; i; \\ & \quad\quad\quad s\; +=\; i; & \quad end; \\ & \quad \} & \quad writeln(s); \\ & \quad cout\; <<\; s\; <<\; endl; & end. \\ & \quad return \; 0; & \\ & \} & \\ \hline \end{array}\]

Программа ищет сумму чисел в промежутке \([15;29]\), у которых квадраты кратны 2.

Ответ: 154

Задание 30 #16209

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

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

Так как сказано по условию, что s в конце равен 25, то мы можем составить уравнение, чтобы узнать количество итераций: \(100 - 15k = 25\) (где k - количество итераций).

\(k = 5\)

Цикл завершится тогда, когда n станет меньше нуля или равным ему. Составим неравенство: \(1000 - kx \leq 0\) (k = 5)

\[1000 - 5x \leq 0\]

\[-5x \leq -1000\]

\[5x \geq 1000\]

\[x \geq 200\]

Ответ: 200

Задание 31 #16210

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

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

Цикл завершится, когда удвоенный квадрат переменной s станет меньше 50 или равным ему. Это случится, когда s = 5. Тогда программе понадобится 10 итераций для того чтобы получить s = 5.

Тогда \(n = 2 * 10 = 20\)

Ответ: 20

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

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

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

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