Задача.
Даны натуральное число [latex]n[/latex], действительные числа [latex]a_{1},…,a_{n}[/latex] .
Вычислить: [latex]\sin \left|a_{1}+…+a_{n} \right|[/latex]
Тест
[latex]n[/latex] | последовательность | результат (wolframalpha) |
1 | 0 | 0 |
1 | 1000 | 0.82688 |
1 | -100 | 0.505366 |
3 | -100 1000 -100 | 0.89397 |
5 | 1 2 3 4 5 | 0.650287 |
Я показала , что период не [latex]\pi [/latex] , а [latex]2\pi [/latex] . Период [latex]\pi [/latex] был бы в случае [latex]\left|\sin a_{1}+…+a_{n} \right|[/latex] , а у нас [latex]\sin \left|a_{1}+…+a_{n} \right|[/latex] . Вот графики :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> #include <math.h> using namespace std; int main() { int n; double a, sum = 0; double period = 2*M_PI; cin >> n; for(int i=0; i<n; i++) { cin >> a; sum += a; if ( fabs ( sum ) >= period ) { sum = fmod( sum, period ); } } cout << sin ( fabs ( sum )) ; return 0; } |
Ссылка на программу: http://ideone.com/ICxfXU
Решение:
Переменной [latex]sum[/latex] присваиваем значение [latex]0[/latex]. Вводим элемент [latex]a[/latex], который мы будем суммировать в цикле до [latex]n[/latex]:
11 12 |
cin >> a; sum += a; |
Далее вводим в input соответствующие значения [latex]a[/latex] и получаем ответ.
А что будет, если n ~ 1000 и все ai ~ 1000? Возможно, такая задача не ставилась, но она тоже относительно несложно решается. Поищите «C++ fmod».
Исправила
Вы хорошо сделали, что привели графики. Хорошо видно, что если рассматривать функцию только для положительных значений то она периодическая. И отдельно для отрицательных тоже. Но в целом функция чётная.
Зачтено.