8. Анализ простейших программ
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\begin{array}{|l|l|l|}
\hline
\text{C++} & \text{Python} & \text{Pascal}\\
\hline
\# \text{include <iostream>} & s=0 & \text{var $k, s$: integer;}\\
\text{using namespace std;} & k=0 & \text{begin}\\
\text{int main() \{} & \text{while $k$ < $15$} & \quad s:=0;\\
\text{int $s$, $k$;} & \quad k=k+3 & \quad k:=0;\\
s=0;k=0; & \quad s=s+k & \quad \text{while $k < 15$ do begin}\\
\text{while ($k < 15$) \{} & \text{print($s$)} & \quad \quad k:=k+3;\\
k=k+3;& & \quad \quad s:=s+k;\\
s=s+k;& & \quad \text{end;}\\
\text{\}}& & \quad \text{write($s$);}\\
\text{cout $<<$ $s$ $<<$ endl;}& & end.\\
\text{return 0;}&&\\
\text{\}}&&\\
\hline
\end{array}\]
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
k & s\\
\hline
0&0\\
0+3=3&0+3=3\\
3+3=6&3+6=9\\
6+3=9&9+9=18\\
9+3=12&18+12=30\\
12+3=15&30+15=45\\
\hline
\end{array}\] Так как на следующем шаге \(k=15+3=18\), условие цикла \(while(k<15)\) не выполняется, значит, последнее значение \(s=45\), именно его и выведет на экран программа.
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 < 15} & \quad s:=0;\\
\textit{int s, k;} & \quad k=k+3 & \quad k:=0;\\
s=0;k=0; & \quad s=s+k & \quad \textit{while k < 15 do begin}\\
\textit{while (k < 15) \{} & print(s) & \quad \quad k:=k+3;\\
k=k+3;& & \quad \quad s:=s+k;\\
s=s+k;& & \quad end;\\
\textit{\}}& & \quad write(s);\\
\textit{cout $<<$ s $<<$ endl;}& & end.\\
\textit{return 0;}&&\\
\textit{\}}&&\\
\hline
\end{array}\]
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
k & s\\
\hline
0&0\\
0+3=3&0+3=3\\
3+3=6&3+6=9\\
6+3=9&9+9=18\\
9+3=12&18+12=30\\
12+3=15&30+15=45\\
\hline
\end{array}\] Так как на следующем шаге \(k=15+3=18\), условие цикла \(while(k<15)\) не выполняется, значит, последнее значение \(s=45\), именно его и выведет на экран программа.
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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 < }20 & \quad s:=0;\\
\textit{int s, k;} & \quad k=k+2 & \quad k:=0;\\
s=0;k=0; & \quad s=s+k & \quad \textit{while s < 20 do begin}\\
\textit{while (s < 20) \{} & print(k) & \quad \quad k:=k+2;\\
k=k+2;& & \quad \quad s:=s+k;\\
s=s+k;& & \quad end;\\
\textit{\}}& & \quad write(k);\\
\textit{cout $<<$ k $<<$ endl;}& & end.\\
\textit{return 0;}&&\\
\textit{\}}&&\\
\hline
\end{array}\]
Первый способ решения
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
k & s\\
\hline
0&0\\
0+2=2&0+2=2\\
2+2=4&2+4=6\\
4+2=6&6+6=12\\
6+2=8&12+8=20\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(s<20)\) не выполняется, значит, последнее значение \(k=8\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) каждый раз увеличивается на одно и тоже значение, а \(s\) суммирует эти значения, можно сказать, что \(s\) — сумма \(n\)-ого количества членов арифметической прогрессии, где \(k\) — разность (шаг) прогрессии. Поскольку цикл \(while(s<20)\) выполняется до тех пор, пока истинно \(s<20\), именно переменная \(s\) определяет количество повторов цикла или же \(n\). Найдем \(n\): для этого подставим в формулу арифметической прогрессии уже известные нам данные:
\[s=\frac{2a_1+(n-1)k}{2}n\]
\[\frac{2\cdot2+(n-1)\cdot2}{2}\cdot n<20\] \[n^2+n-20<0\] \[D=1^2-4\cdot(-20)=81; \sqrt D=9\]
\[\left[
\begin{gathered}
n=\frac{-1+9}{2}=4 \hfill
\\
n=\frac{-1-9}{2}=-5<0, \text{количество шагов не может быть отрицательным}\\
\end{gathered}
\right.\] Т.к. количество шагов 4, значит, \(k=0+4\cdot2=8\).
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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=5 & begin\\
\textit{int main() \{} & \textit{while k <= $20$} & \quad s:=0;\\
\textit{int s, k;} & \quad s=s+k & \quad k:=5;\\
s=0;k=5; & \quad k=k+2 & \quad \textit{while k <= $20$ do begin}\\
\textit{while (k <= $20$) \{} & 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&5\\
5&7\\
12&9\\
21&11\\
32&13\\
45&15\\
60&17\\
77&19\\
96&21\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(k<=20)\) не выполняется, значит, последнее значение \(s=96\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) каждый раз увеличивается на одно и тоже значение, а \(s\) суммирует эти значения, можно сказать, что \(s\) - сумма n-ого количества членов арифметической прогрессии, где \(k\) - разность(шаг) прогрессии. Поскольку цикл \(while(k<=20)\) выполняется до тех пор, пока истинно \(k<=20\), именно переменная \(k\) определяет количество повторов цикла или же \(n\). Найдем \(n: (20-5):2=7,5\). Т.к. \(n\) натуральное число, округляем в бóльшую сторону: \(n=8\). Теперь подставим известные данные в формулу суммы n членов арифметической прогрессии:
\[s=\frac{2a_1+(n-1)k}{2}n\]
\[s=\frac{2\cdot5+(8-1)\cdot2}{2}\cdot8=96\]
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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=3 & begin\\
\textit{int main() \{} & \textit{while k <= 15} & \quad s:=0;\\
\textit{int s, k;} & \quad s=s+k & \quad k:=3;\\
s=0;k=3; & \quad k=k+4 & \quad \textit{while k <= 15 do begin}\\
\textit{while (k <= 15) \{} & print(s) & \quad \quad s:=s+k;\\
s=s+k;& & \quad \quad k:=k+4;\\
k=k+4;& & \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&3\\
3&7\\
10&11\\
21&15\\
36&19\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(k<=15)\) не выполняется, значит, последнее значение \(s=36\), именно его и выведет на экран программа.
Второй способ решения
Т.к. \(k\) каждый раз увеличивается на одно и тоже значение, а \(s\) суммирует эти значения, можно сказать, что \(s\) - сумма n-ого количества членов арифметической прогрессии, где \(k\) - разность(шаг) прогрессии. Поскольку цикл \(while(k<=15)\) выполняется до тех пор, пока истинно \(k<=15\), именно переменная \(k\) определяет количество повторов цикла или же \(n\). Найдем \(n:\\ 3+4\cdot n > 15\)
\(n>=4\)
Теперь подставим известные данные в формулу суммы n членов арифметической прогрессии:
\[s=\frac{2a_1+(n-1)k}{2}n\]
\[s=\frac{2\cdot3+(4-1)\cdot4}{2}\cdot4=36\]
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\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;\\
\textit{int s, k;} & \quad k=k+5 & \quad k:=0;\\
s=0;k=0; & \quad s=s+k & \quad \textit{while s <= 100 do begin}\\
\textit{while (s <= 100) \{} & print(k) & \quad \quad k:=k+5;\\
k=k+5;& & \quad \quad s:=s+k;\\
s=s+k;& & \quad end;\\
\textit{\}}& & \quad write(k);\\
\textit{cout $<<$ k $<<$ endl;}& & end.\\
\textit{return 0;}&&\\
\textit{\}}&&\\
\hline
\end{array}\]
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
k & s\\
\hline
0&0\\
0+5=5&0+5=5\\
5+5=10&5+10=15\\
10+5=15&15+15=30\\
15+5=20&30+20=50\\
20+5=25&50+25=75\\
25+5=30&75+30=105\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(s<=100)\) не выполняется, значит, последнее значение \(k=30\), именно его и выведет на экран программа.
Определите, что будет напечатано в результате работы следующего фрагмента программы:
\[\begin{array}{| l | l | l |}
\hline
\textbf{C++} & \textbf{Python} & \textbf{Pascal}\\
\hline
\textit{\#include <iostream>} & s=100 & \textit{var k, s: integer;}\\
\textit{using namespace std;} & k=0 & begin\\
\textit{int main() \{} & \textit{while s >= 50} & \quad s:=100;\\
\textit{int s, k;} & \quad k=k+1 & \quad k:=0;\\
s=100;k=0; & \quad s=s-k & \quad \textit{while s >= 50 do begin}\\
\textit{while (s >= 50) \{} & print(k) & \quad \quad k:=k+1;\\
k=k+1;& & \quad \quad s:=s-k;\\
s=s-k;& & \quad end;\\
\textit{\}}& & \quad write(k);\\
\textit{cout $<<$ k $<<$ endl;}& & end.\\
\textit{return 0;}&&\\
\textit{\}}&&\\
\hline
\end{array}\]
Вручную просчитаем все действия программы, для удобства отобразим это с помощью таблицы:
\[\begin{array}{|c|c|}
\hline
k & s\\
\hline
0&100\\
1&99\\
2&97\\
3&94\\
4&90\\
5&85\\
6&79\\
7&72\\
8&64\\
9&55\\
10&45\\
\hline
\end{array}\] Так как на следующем шаге условие цикла \(while(s>=50)\) не выполняется, значит, последнее значение \(k=10\), именно его и выведет на экран программа.