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

Анализ условия в цикле while

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

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

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

Решаем задачи
Задание 1 #16219

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

\[\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; & \\ & \} & \\ \hline \end{array}\]

Показать решение

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

\(k = 4\)

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

\[1000 - 4x \leq 0\]

\[-4x \leq -1000\]

\[4x \geq 1000\]

\[x \geq 250\]

Ответ: 250
Задание 2 #16223

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

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

Показать решение

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

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

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

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

\(s \leq 233\)

\(s = 233\)

Ответ: 233
Задание 3 #16222

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

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

Показать решение

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

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

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

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

\(s < 148\)

\(s = 147\)

Ответ: 147
Задание 4 #16221

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

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

Показать решение

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

\(x = 6\)

Цикл завершится тогда, когда s станет меньше либо равно 23. Составим неравенство: \(s - 5x \leq 23\)

Так как x = 6, то \(s \leq 53\)

\(s = 53\)

Ответ: 53
Задание 5 #16220

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

\[\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\; 100\; <\; (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\; 100\; <\; (2 * s*s)\; do\; begin \\ print(n) & \quad n\; =\; 0; & \quad\quad s\; :=\; s\; -\; 1; \\ & \quad while\; (100\; <\; (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 станет меньше 100 или равным ему. Это случится, когда s = 7. Тогда программе понадобится 8 итераций для того чтобы получить s = 7.

Тогда \(n = 2 * 8 = 16\)

Ответ: 16
Задание 6 #16217

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

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

Показать решение

Заметим, что начальное значение переменной n равно 5, конечное – 7. Программе понадобится 2 итерации для того чтобы получить из 5 –> 7.

Цикл завершится тогда, когда значение переменной s превысит 110. Составим неравенство: \(s + n+(n+1) \geq 110\) (n=5)

\(s + 2*5+1 \geq 110\)

\(s \geq 110-11\)

\(s \geq 99\)

\(s = 99\)

Ответ: 99
Задание 7 #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

1

2

...

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