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

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

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

Геометрическая прогрессия

Задание 1 #12639

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

Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&2\\ 3&4\\ 7&8\\ 15&16\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(k<=10)\) не выполняется, значит, последнее значение \(s=15\), именно его и выведет на экран программа.

Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) — знаменатель прогрессии, \(b_1\) — начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Найдем \(n\): цикл перестает выполняться, когда \(k>10\). Т.к. значения \(k\) - степени двойки, оно превысит 10 на 4 шаге цикла(т.к. \(2^4=16\)), следовательно, \(n=4\). Теперь подставим все известные данные в формулу и посчитаем сумму: \[s=\frac{1\cdot(2^4-1)}{2-1}=15\]

Ответ: 15

Задание 2 #12640

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

Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&3\\ 4&9\\ 13&27\\ 40&81\\ 121&243\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(k<=230)\) не выполняется, значит, последнее значение \(s=121\), именно его и выведет на экран программа.

Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) — знаменатель прогрессии, \(b_1\) — начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Найдем \(n\): цикл перестает выполняться, когда \(k>230\). Т.к. значения \(k\) - степени тройки, оно превысит 230 на 5 шаге цикла(т.к. \(3^5=243\)), следовательно, \(n=5\). Теперь подставим все известные данные в формулу и посчитаем сумму: \[s=\frac{1\cdot(3^5-1)}{3-1}=121\]

Ответ: 121

Задание 3 #12641

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

Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&2\\ 3&4\\ 7&8\\ 15&16\\ 31&32\\ 63&64\\ 127&128\\ 255&256\\ 511&512\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(k<=500)\) не выполняется, значит, последнее значение \(s=511\), именно его и выведет на экран программа.

Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) — знаменатель прогрессии, \(b_1\) - начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Найдем \(n\): цикл перестает выполняться, когда \(k>500\). Т.к. значения \(k\) - степени двойки, оно превысит 500 на 9 шаге цикла(т.к. \(2^9=512\)), следовательно, \(n=9\). Теперь подставим все известные данные в формулу и посчитаем сумму: \[s=\frac{1\cdot(2^9-1)}{2-1}=511\]

Ответ: 511

Задание 4 #12642

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

Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 2&3\\ 8&9\\ 26&27\\ 80&81\\ 242&243\\ 728&729\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(k<=700)\) не выполняется, значит, последнее значение \(s=728\), именно его и выведет на экран программа.

 

Ответ: 728

Задание 5 #12644

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

Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&2\\ 3&4\\ 7&8\\ 15&16\\ 31&32\\ 63&64\\ 127&128\\ 255&256\\ 511&512\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(s<=300)\) не выполняется, значит, последнее значение \(k=512\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) — знаменатель прогрессии, \(b_1\) — начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Примем \(2^n=k\), найдем такие \(k\), при которых нарушается условие цикла: \[\frac{1\cdot(2^n-1)}{2-1}>300\]
\[2^n>301\]
Минимальное \(n\), удовлетворяющее данному неравенству: \(n=9\), следовательно, \(k=2^9=512\).

Ответ: 512

Задание 6 #12645

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

Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 1&3\\ 4&9\\ 13&27\\ 40&81\\ 121&243\\ 364&729\\ 1093&2187\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(s<=700)\) не выполняется, значит, последнее значение \(k=2187\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) умножается на одно и тоже значение на каждом шаге цикла, а \(s\) суммирует значения \(k\), можно сказать, что мы ищем сумму \(n\) первых членов геометрической прогрессии, где \(k\) - знаменатель прогрессии, \(b_1\) - начальное значение переменной \(k\): \[s=\frac{b_1(k^n-1)}{k-1}\]
Примем \(2^n=k\), найдем такие \(k\), при которых нарушается условие цикла: \(\frac{1\cdot(3^n-1)}{3-1}>700\)
\(3^n>1400\)
\(3^n>1401\)
Минимальное \(n\), удовлетворяющее данному неравенству: \(n=7\), следовательно, \(k=3^7=2187\).

Ответ: 2187

Задание 7 #16033

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

Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|} \hline s & k\\ \hline 0&1\\ 3&2\\ 9&4\\ 21&8\\ 45&16\\ 93&32\\ 189&64\\ 381&128\\ \hline \end{array}\] Так как на следующем шаге условие цикла \(while(k<=100)\) не выполняется, значит, последнее значение \(s=381\), именно его и выведет на экран программа.

 

Ответ: 381