Задача. Вычислить [latex]\sum_{i=1}^{100}{1/i^2}[/latex];
[latex]\sum_{i=1}^{100}{1/i^2}[/latex] | Комментарий |
1.63498 | Тест пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdio.h> #include <math.h> #include <iostream> using namespace std; int main() { double arr[101]; double asd = 0; for (int i = 1; i <= 100; i++) { arr[i] = 1 / pow(i, 2); asd += arr[i]; } cout << asd << endl; return 0; } |
1) Программа задает функцию и её сумму;
2) Вычисляет сумму элементов функций arr(i) в цикле(прибавляет к сумме asd каждое значение фунции arr(i) , где i от 1 до 100);
3) Выводит значение суммы.
Для проверки можете воспользоваться этой ссылкой
Я уже писал многим, что для возведения чисел в квадрат использовать функцию pow не эффективно. Гораздо лучше честно написать i*i — это и операций меньше занимает и во многих случаях точнее работает.
Не знаю в чём проблема. Когда я пишу i*i ответ не верный, а при pow все отлично выходит. Возможно это не тот случай(при i*i он выводит 2 , а при pow(i,2)- 1.63498).
Потому что i — int, 1 — тоже int. Соответственно деление целочисленное. Приведите знаменатель к double и будет Вам счастье.
при i — double
error: invalid types ‘double [101][double]’ for array subscript
arr[i]=1/(i*i);
Мне кажется Вы перепутали категорию задачи — правильная категория «Циклы»! Поэтому и массив здесь абсолютно не нужен.
Замечание по стилю: вместо i < 101 куда логичнее написать i <= 100, ведь верхний предел суммирования равен 100 (зачем в уме прибавлять к нему единицу?). А вот нижним пределом в математической формуле указан ноль, что невозможно (деление на ноль) — проверьте условие.
Кроме того в программе нет таблицы тестов. Правда, т.к. входных данных в программе нет, таблица тестов будет содержать только одну строку с ожидаемым результатом и комментарий о том, пройден ли тест.
i задан с помощью int и разницы в выборе i<=100 или i<101 нет. Почему же я беру с 0? в коде написано i=1; i<101;i++ , т.е. i от 1 до 100;
Тесты добавил. Объяснения исправил.
Олег предлагает Вам не сделать переменную i типа double, а привести ее тип к double в формуле слагаемого, например, так (double) i. Можно и числитель в этой формуле сделать вещественным — это еще проще.
«разницы в выборе i<=100 или i<101 нет. " - согласен. Так почему тогда Вы используете менее очевидный i<101, а не i<=100? Экономите один символ? "в коде написано i=1; i<101;i++ , т.е. i от 1 до 100;" - да и это правильно! А я что пишу: "нижним пределом в математической формуле указан ноль» — в условии задачи, в строчке «Задача. Вычислить \sum_{i=0}^{100}{1/i^2};» и еще в таблице теперь.
Таблицу сделали — хорошо.
И главное: повторю еще раз свои слова: «Мне кажется Вы перепутали категорию задачи – правильная категория “Циклы”! Поэтому и массив здесь абсолютно не нужен.» — категорию, то Вы исправили, а массив в программе остался. Неужели он так Вам нужен?
Так как остался ненужный массив (и еще в ноябре октябрьское задание), засчитываю на 5 баллов.