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

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

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

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

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

Решаем задачи
Задание 15 #16230

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

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline x\; =\; int(input()) & \#include\; <iostream> & var\; s,\; n,\; x:\; integer; \\ s\; =\; 115 & using\; namespace\; std; & begin \\ n\; =\; 1000 & int\; main() & \quad readln(x); \\ while\; n\; >\; 0: & \{ & \quad s\; :=\; 115; \\ \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\; =\; 115; & \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}\]

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

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

От переменной s отнимают 15 шесть раз и в конце будет равняться 25, то есть количество итераций будет равно 6, так как \(s-6\cdot15=25 =>s=115 \).

Составим неравенство \(n - 6x \leq 0\) (где x - то, что будем отнимать от n шесть раз)

Получим, что \(1000 \leq 6\cdot x\)

\(\dfrac{1000}6 \leq x\)

\(x \geq \dfrac{1000}6\)

\(x \geq 166,6(6)\)

\(x = 167\)

Ответ: 167
Задание 16 #16231

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

\[\begin{array}{ | l | l | l |} \hline Python & C++ & Pascal \\ \hline s\; =\; 19 & \#include\; <iostream> & var\; s,\; n:\; integer; \\ n\; =\; 0 & using\; namespace\; std; & begin \\ while\; 150\; <\; 2 * s*s: & int\; main()\; \{ & \quad s\; :=\; 19; \\ \quad s\; =\; s\; -\; 1 & \quad int\; n,\; s; & \quad n\; :=\; 0; \\ \quad n\; =\; n\; +\; 2 & \quad s\; =\; 19; & \quad while\; 150\; <\; 2 * s*s\; do\; begin \\ print(n) & \quad n\; =\; 0; & \quad\quad s\; :=\; s\; -\; 1; \\ & \quad while\; (150\; <\; 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; & \\ & \quad return\; 0; & \\ & \} & \\ \hline \end{array}\]

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

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

Тогда \(n = 2 * 11 = 22\)

Ответ: 22
Задание 17 #16232

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

\[\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 writeln(n); \\ & \quad cout\; <<\; n; & end. \\ & \} & \quad \\ & \quad & \\ \hline \end{array}\]

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

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

\(x = 9\)

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

Так как x = 9, то \(s \leq 68\)

\(s = 68\)

Ответ: 68
Задание 18 #16233

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

\[\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\; >=\; 240: & int\; main() \; \{ & \quad readln\; (s); \\ \quad s\; =\; s\; -\; 12 & \quad int\; s,\; n; & \quad n\; :=\; 1000000; \\ \quad n\; =\; n\; //\; 10 & \quad cin\; >>\; s; & \quad while\; s\; >=\; 240\; do \\ print(n) & \quad n\; =\; 1000000; & \quad begin \\ & \quad while\; (s\; \; >=\; 240)\; \{ & \quad\quad s\; :=\; s\; -\; 12; \\ & \quad\quad s\; =\; s\; -\; 12; & \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 станет меньше 240.

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

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

Получим, что \(s < 72 + 240\)

\(s < 312\)

\(s = 311\)

Ответ: 311
Задание 19 #16207

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

\[\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 s\; =\; s\; +\; n; & \quad\quad n\; :=\; n\; +\; 1; \\ & \quad\quad n\; =\; n\; +\; 1; & \quad end; \\ & \quad \} & \quad writeln(n); \\ & \quad cout\; <<\; n; & end. \\ & \quad return \; 0; & \quad \\ & \} & \quad \\ \hline \end{array}\]

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

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

Цикл завершится тогда, когда значение переменной s превысит, либо будет равно 110. На каждой итерации значение прибавляемой к s переменной n будет меняться. Сложение начнется с n равного 5 и закончится равным 24. Перед составлением нужного неравенства узнаем сумму арифметической прогрессии от 5 до 24:

\( S_{20} = \cfrac{(5+24)*20}{10} = 290 \)

Теперь можем найти s из неравенства

\(s + S_{20} >= 110\)

\(s >= -180\)

Таким образом, наименьшее s равно -180.

Ответ: -180
Задание 20 #12633

Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 <= 500} & \quad s:=0;\\ \quad \textit{int s,k;}&\quad \textit{if $k\%3==0$:}&\quad k:=0;\\ \quad s=0;k=0;&\quad \quad s=s+10&\quad \textit{while $s<=500$ do begin}\\ \quad \textit{while($s<=500$) \{}&\quad \quad k=k+2&\quad \quad \textit{if k mod $3=0$ then begin}\\ \quad \quad \textit{if ($k\%3==0$) \{}&\quad else:&\quad \quad \quad s:=s+10;\\ \quad \quad \quad s=s+10;&\quad \quad k=k+1&\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+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\\ 10&2\\ 10&3\\ 20&5\\ 20&6\\ ...&...\\ \hline \end{array}\]

На каждое увелечение \(s\) на 10 приходится +3 к значению \(k\). Таких увеличений \(s\) всего в цикле происходит \(500:10=50\). Значит, последнее значение \(k=0+3\cdot50\), но так как в момент, когда \(k=150\), \(s=500\), программа сделает следующий шаг и увеличит \(k\) еще на два. Таким образом, получаем ответ \(k=152\).

 

Ответ: 152
Задание 21 #12635

Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 <= 100$} & \quad s:=0;\\ \quad \textit{int s,k;}&\quad s=s+k&\quad k:=1;\\ \quad s=0;k=1;&\quad \textit{if $k\%2==1:$}&\quad \textit{while $s<=100$ do begin}\\ \quad \textit{while($s<=100$) \{}&\quad \quad k=k+1&\quad \quad s=s+k;\\ \quad \quad s=s+k;&\quad else:&\quad \quad \quad \textit{if k mod $2=1$ then begin}\\ \quad \quad \textit{if ($k\%2==1$) \{}&\quad \quad k=k*2&\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*2;\\ \quad \quad \quad k=k*2;&&\quad end;\\ \quad \textit{\}}&&\quad write(k);\\ cout<<k<<endl;&&end.\\ \textit{\}}&&\\ \hline \end{array}\]

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

Чтобы понять, как работает программа, с помощью таблицы отобразим несколько первых действий:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&2\\ 3&4\\ 7&8\\ 15&16\\ 31&32\\ ...&...\\ \hline \end{array}\]

После первого шага значения \(k\) становятся стпенями двойки, а \(s\) принимает значение на один меньше, чем \(k\). Значит, первым значением \(s\), которое привысит 100, будет 127. Тогда очевидно, что значение \(k=128\).

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