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

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

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела 6. Анализ простейших программ:

Это старая версия каталога задач

Нажмите для перехода на новую версию

Решаем задачи
Задание 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
1

...

4

5

Рулетка
Вы можете получить скидку в рулетке!