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

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

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

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

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

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

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

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

Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&3\\ 4&9\\ 13&27\\ 40&81\\ 121&243\\ 364&729\\ \hline \end{array}\]

Ответ: 729
Задание 5 #12637

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

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

Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&0\\ 0&1\\ 1&4\\ 5&7\\ 12&8\\ 20&9\\ 29&12\\ 41&15\\ 56&16\\ 72&17\\ 89&20\\ 109&23\\ \hline \end{array}\]
Т.к. на следующем шаге \(k=23\) не удовлетворяет условию, ответом является \(s=109\).

Ответ: 109
Задание 6 #12638

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

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

Отобразим действия программы с помощью таблицы, посчитаем искомое значение \(k\):
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&0\\ 0&1\\ 1&5\\ 6&6\\ 12&10\\ 22&11\\ 33&15\\ 48&16\\ 64&20\\ 84&21\\ \hline \end{array}\]
Т.к. на следующем шаге \(k=21\) не удовлетворяет условию, ответом является \(s+k=84+21=105\).

Ответ: 105
Задание 7 #16204

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

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

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

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

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

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

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

\(s \geqslant 59\)

\(s = 59\)

Ответ: 59

1

2

...

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