Какой результат будет после выполнения следующей программы? 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.
В исходном тексте программы была синтаксическая ошибка: после оператора S:=0 отсутствовала точка с запятой, на что немедленно указал компилятор. Практически смысл имеет "трассировка на бумаге" для нескольких выполнений тела цикла с тем, чтобы убедиться в правильности работы алгоритма. И не более того. Анализ программы показывает, что она вычисляет сумму вида В книге "Интегралы и ряды" М.Прудников и др.., М,: Наука, 1981 на стр. 601 приводится формула 4.1.4.2
Итак, сумма может быть легко вычислена для любого количества повторений цикла. Нужно ли вообще в таких случаях писать программу?
Это был урок для делающих первые шаги в увлекательном мире программирования.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку