Решение: Результат работы цикла
Запишите число, которое будет напечатано в результате выполнения следующей программы. Программа представлена на пяти языках программирования.
Бейсик:
DIM S, N AS INTEGER
S = 309
N = 0
WHILE S > 0
S = S - 20
N = N + 2
WEND
PRINT N
Python:
s = 309
n = 0
while s > 0:
s = s - 20
n = n + 2
print(n)
Алгоритмический язык:
алг
нач
цел n, s
s := 309
n := 0
нц пока s > 0
s := s - 20
n := n + 2
кц
вывод n
кон
Паскаль:
var s, n: integer;
begin
s := 309;
n := 0;
while s > 0 do
begin
s := s - 20;
n := n + 2
end;
writeln(n)
end.
Си:
#include <stdio.h>
int main()
{
int s = 309, n = 0;
while (s > 0) { s = s - 20; n = n + 2; }
printf("%d\n", n);
return 0;
}
Решение по шагам
3 шагаИзначально $s = 309$, $n = 0$. На каждой итерации цикла из $s$ вычитается 20.
$$s_k = 309 - 20k$$Цикл продолжается, пока значение $s$ положительно. После 15 итераций $s = 309 - 20 \cdot 15 = 9$, поэтому выполняется ещё одна итерация.
После 16-й итерации $s = 9 - 20 = -11$, условие $s > 0$ становится ложным. Значение $n$ увеличивалось на 2 на каждой из 16 итераций.
$$n = 0 + 16 \cdot 2 = 32$$Где здесь ошибаются
Остановить цикл после того, как значение $s$ станет равным 0; в данном случае оно становится отрицательным.
Посчитать 15 итераций вместо 16.
Забыть, что на каждой итерации к $n$ прибавляется 2.