Опубликовано 03.01.2018 по предмету Информатика от Гость

Какой результат будет после выполнения следующей программы?
var s,d : real;
i : integer;
begin
s:=0
for i:=1 to 49 do
begin
d:=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
Помогите очень срочно!!!!!!!!


Ответ оставил Гость

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

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

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

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

Не нашел нужный ответ?

Если ответ по предмету Информатика отсутствует или он оказался неправильным, то попробуй воспользоваться поиском других ответов во всей базе сайта.


Найти другие ответы
Самые новые вопросы