Школы

Как решить задачу? (БЕЗ РУЧНОГО СЧЕТА, то есть чтобы не приходилось 500 позиций писать)

Var
a, b: integer;
begin
a := 1;
b := 0;
while a < 500 do
begin
a := a * 2;
b := b + a;
end;
writeln(b);
end.
Вася Иванов, с точки зрения алгебры Вам представлен алгоритм вычисления суммы членов геометрической прогрессии.
Можно было бы подумать, что проще эту сумму вычислить по формуле, нежели гонять циклический процесс. Однако, в данной задаче число n — количество членов в сумме прогрессии — как раз и не задано! Вместо этого задано неравенство наибольшего из членов прогрессии.

В таком случае сначала решается неравенство, из которого находится число n. Остаётся подставить все известные данные в формулу суммы и вычислить эту сумму.

••• ЗАМЕЧАНИЕ! Обозначения переменных в программе не совпадают с обозначениями в приведённых ниже формулах!!!

В программе:
  a — каждый член геометрической прогрессии,
  b — искомая сумма членов прогрессии.

✓ Начальный член прогрессии равен 1, но он не используется в сумме, поэтому примем первым членом тот, который первым используется в сумме, то есть 2. a₁ = 2

Множитель q равен 2. Таким образом aₙ = 2ⁿ

Подзадача 1. Из кода программы видно, что выход из цикла произойдёт, только когда нарушится условие цикла. То есть aₙ ≥ 500. Также очевидно, что именно это значение aₙ будет вычислено внутри цикла и прибавлено к частичной сумме. Значит, оно тоже является частью суммы.
  aₙ ≥ 500   =>   2ⁿ ≥ 500
Поскольку n положительное, получаем, что n ≥ log₂500
Замечаем, что при n = 8 2ⁿ = 256 < 500, цикл продолжится; при n = 9 2ⁿ = 512 > 500, и цикл завершится.
Следовательно, n = 9, а aₙ = 512.

Подзадача 2. Подставляем данные в формулу суммы геометрической прогрессии, получаем: в знаменателе 2 – 1 = 1, в числителе 2¹⁰ – 2 = 1024 – 2 = 1022. 1022 / 1 = 1022.
    Это и есть искомая сумма членов геометрической прогрессии!

ЕБ
Елена Борисова
16 172
Лучший ответ
Елена Борисова Выписывать 500 позиций в любом случае не пришлось бы.

Если Вы захотите трассировать программу, то Вам понадобятся всего лишь 9 позиций.

вход в цикл→2→4→8→16→32→64→128→256→512→выход из цикла
Елена Борисова Выше Дивергент очень сжато записал трассировку алгоритма.
b=2+4+8+16+...+512=2^1+2^2+2^3+2^4+...+2^9=2^10-2=1022
Виктория Калюх
Виктория Калюх
56 842
Степень двойки меньше 500 это седьмая (128). Алгоритм складывает степени двойки от 1 до 128
дайте задачу саму, а то паскаль не знаю