Вопрос задан 26.05.2018 в 12:22. Предмет Информатика. Спрашивает Семиглазов Илья.

Какой результат будет после выполнения следующей программы?var s,d : real;i : integer;begins:=0for

i:=1 to 49 dobegind:=i*(i+1);s:=s+1/d;end;writeln('S=',s);end.A)S=0,02 B)S=0,98 C)S=0,0002 D)S=1Помогите очень срочно!!!!!!!!
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Онин Дима.

Подобные задачи ("значение, которое получат переменные..."), когда для получения ответа надо выполнять цикл значительное количество раз в реальном программировании не имеют никакого смысла.  Всегда можно сделать трассировку и посмотреть. Ниже - пример такой трассировки.

var
  s, d: real;
  i: integer;

begin
  writeln('Трассировка начата');
  s := 0;
  for i := 1 to 49 do
  begin
    d := i * (i + 1);
    s := s + 1 / d;
    writeln('i=', i:2, ', d=', d:4, ', s=', s:8:6);
  end;
  writeln('Трассировка завершена');
  writeln('S=', s);
end.

Трассировка начата
i= 1, d=   2, s=0.500000
i= 2, d=   6, s=0.666667
i= 3, d=  12, s=0.750000
i= 4, d=  20, s=0.800000
i= 5, d=  30, s=0.833333
i= 6, d=  42, s=0.857143
i= 7, d=  56, s=0.875000
i= 8, d=  72, s=0.888889
i= 9, d=  90, s=0.900000
i=10, d= 110, s=0.909091
i=11, d= 132, s=0.916667
i=12, d= 156, s=0.923077
i=13, d= 182, s=0.928571
i=14, d= 210, s=0.933333
i=15, d= 240, s=0.937500
i=16, d= 272, s=0.941176
i=17, d= 306, s=0.944444
i=18, d= 342, s=0.947368
i=19, d= 380, s=0.950000
i=20, d= 420, s=0.952381
i=21, d= 462, s=0.954545
i=22, d= 506, s=0.956522
i=23, d= 552, s=0.958333
i=24, d= 600, s=0.960000
i=25, d= 650, s=0.961538
i=26, d= 702, s=0.962963
i=27, d= 756, s=0.964286
i=28, d= 812, s=0.965517
i=29, d= 870, s=0.966667
i=30, d= 930, s=0.967742
i=31, d= 992, s=0.968750
i=32, d=1056, s=0.969697
i=33, d=1122, s=0.970588
i=34, d=1190, s=0.971429
i=35, d=1260, s=0.972222
i=36, d=1332, s=0.972973
i=37, d=1406, s=0.973684
i=38, d=1482, s=0.974359
i=39, d=1560, s=0.975000
i=40, d=1640, s=0.975610
i=41, d=1722, s=0.976190
i=42, d=1806, s=0.976744
i=43, d=1892, s=0.977273
i=44, d=1980, s=0.977778
i=45, d=2070, s=0.978261
i=46, d=2162, s=0.978723
i=47, d=2256, s=0.979167
i=48, d=2352, s=0.979592
i=49, d=2450, s=0.980000
Трассировка завершена
S=0.98

В исходном тексте программы была синтаксическая ошибка: после оператора S:=0 отсутствовала точка с запятой, на что немедленно указал компилятор.
Практически смысл имеет "трассировка на бумаге" для нескольких выполнений тела цикла с тем, чтобы убедиться в правильности работы алгоритма. И не более того.
Анализ программы показывает, что она вычисляет сумму вида
S=\Sigma^{49}_{i=1} \frac{1}{i(i+1)}
В книге "Интегралы и ряды" М.Прудников и др.., М,: Наука, 1981 на стр. 601 приводится формула 4.1.4.2
\Sigma^n_{k=1} \frac{1}{k(k+m)}= \frac{n}{m} \Sigma^m_{k=1} \frac{1}{k(k+n)}; \\ n=49, m=1 \to \frac{n}{m} \Sigma^m_{k=1} \frac{1}{k(k+n)}=\frac{49}{1} \Sigma^1_{k=1} \frac{1}{k(k+1)}= \frac{49}{1*(1+49)}= \frac{49}{50}=0.98

Итак, сумма может быть легко вычислена для любого количества повторений цикла. Нужно ли вообще в таких случаях писать программу?

Это был урок для делающих первые шаги в увлекательном мире программирования.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос