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

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

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

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

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