Задача. Вычислить бесконечную сумму с заданной точностью [latex]\varepsilon(\varepsilon >0)[/latex]. Считать, что требуемая точность достигнута, если несколько первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем [latex]\varepsilon[/latex], это и все последующие слагаемые можно уже не учитывать. Вычислить:
[latex]\sum_{i=1}^{\infty}{\frac{1}{i(i+1)}}[/latex].Тесты:
[latex]\varepsilon[/latex] | s | Комментарий |
0.035 | 0.800 | Пройден |
0.085 | 0.667 | Пройден |
0.025 | 0.833 | Пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> int main(void) { double e; scanf ("%lf", &e); double s = 0; double a=0.5; int i=1; while(a>e) { i++; s+=a; a=1.0/(i*(i+1.0)); } printf("%0.4lf\n", s); return 0; } |
С помощью цикла подсчитываем сумму.
С работой программы можно ознакомиться здесь.
Что будет, если eps > 0.5? Думаю, тут лучше подойдет оператор do{ }while( );
А правда, что нужно выходить сразу как только очередное слагаемое меньше eps? Вроде в условии про несколько написано.
Дополню Олега… Довольно интересный цикл у Вас получился… А описан всего фразой «С помощью цикла подсчитываем сумму.» — которая не говорит почти ничего. Да и строчку double a=0.5; нужно пояснить — ведь она не будет очевидна человеку, который подобные задачи не решал.
Кроме того, вы, на удивление, выбираете только довольно плохую точность (лучшая точность в Ваших тестах достигается при eps=0.025). Добавьте, пожалуйста, тест с меньшим значением eps.
А условие этой задачи из Абрамова действительно странное какое-то и фразу «если несколько первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем \varepsilon, это и все последующие слагаемые можно уже не учитывать. » до конца понять я не могу, хотя общий замысел задачи конечно понятен. «несколько первых слагаемых» — к чему относится, они что должны быть «по модулю меньше, чем \varepsilon»?
Учитывая вышеприведенные недостатки (плюс неаккуратные отступы) и то, что, по сути, задача сделана выставляю 5 баллов (исходя из максимума в 8 баллов за октябрьскую задачу в ноябре).