Задача
Вычислить с точностью [latex]\varepsilon [/latex] сумму ряда [latex]\sum _{i=1}^{\infty }{\frac{i}{fib(i)}}[/latex]
Входные данные
Точность [latex]\varepsilon [/latex].
Выходные данные
Сумма ряда.
Тесты
№ | Точность [latex]\varepsilon [/latex] | Сумма ряда | Количество членов |
1 | 1 | 3 | 2 |
2 | 0.5 | 8.502 | 8 |
3 | 0.1 | 9.156 | 12 |
4 | 0.01 | 9.307 | 18 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> using namespace std; int main() { double fib1=1,fib2=1,fib3,sum=3,E,a=1; //задаем переменные int k=2; cin>>E; //вводим точность, с которой будут происходить вычисления //если точность равна 1 то сумма последовательности if(E==2 || E==1)cout<<2<<endl<<3; //если точность равна 1 или 2 по сумма будет равнна сумме двух первых членов последовательности else if(E<1){ for(int i=3;a>=E;i++){ //задаем цикл:пока следующее слагаемое больше точности fib3=fib1+fib2; a=i/fib3; //слагаемое sum+=a; fib1=fib2; fib2=fib3; //k++; //считаем количество слагаемых, для того чтобы потом проверить результат } //cout<<k<<endl; cout<<sum; } return 0; } |
Решение
Предлагаю следующее решение. Вычисляем первые два члена суммы:[latex]\sum _{i=1}^{2}{\frac{i}{fib(i)}}=1+\frac{1}{2}[/latex]. Каждое следующее слагаемое находим по формуле [latex]\frac{i}{fib(i)}[/latex] и записываем в переменную [latex]a[/latex], которую прибавляем к переменной [latex]sum[/latex], где хранится сумма, известная нам на данный момент (изначально это сумма первых двух членов) . [latex]fib_1[/latex] и [latex]fib_2[/latex] это два последних числа Фибоначчи, которые нам нужны для вычисления следующего [latex]fib_3[/latex]. Продолжаем искать слагаемые пока следующее слагаемое больше точности [latex]\varepsilon [/latex]. Вводим дополнительную переменную [latex]k[/latex] для того чтоб сосчитать количество слагаемых. Затем можно проверить правильность вычислений тут, подставляя [latex]k[/latex] как количество слагаемых.
Ссылка на код.
Поздновато Вы взялись за октябрьские задания…
Результат неверный.
Тест явная подделка. Вы просто указали, что считает Ваша программа, а не то, что должно быть.
Тесты нужно просчитать самому или при помощи какого-либо математического пакета. Например, так.
Кстати, ряд не знакочередующийся. Это значит, что небольшой по величине член ряда не гарантирует соответствующей близости к результату. Сейчас это не важно, но в следующем году в курсе численных методов на это обратят внимание.
Я просто не до конца понял как сделать задание. Все исправил. Проверьте пожалуйста.
Вы не сосчитали сумму ряда с требуемой точностью. Вы же видите, что результаты отличаются друг от друга больше чем на требуемую величину. Можете что-то придумать на досуге.
С точки зрения элементарного программирования меня всё устраивает. Работу зачёл.