| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Поправьте/допишите код! |
| Автор: Tep4k111 3.12.2013, 11:16 | ||
| Собственно вот условие задачи: Составить программу и вычислить сумму ряда с точностью e=pow(10,-3), e=pow(10,-6), e=pow(10,-9). Сравнить число итераций для каждого из этих случаев. ![]() Вот мой код:
Модератор: не забываем пользоваться кнопочкой "Код" |
| Автор: smalcom 3.12.2013, 12:53 |
| 1. используйте тег "код". мусорник же 2. в чём проблема? |
| Автор: feodorv 3.12.2013, 15:46 | ||
Числа с плавающей точкой так сравнивать не стоит. У Вас заранее задана точность вычисления, поэтому сравнение должно выглядеть так:
хотя, конечно, не понятно, какая точность задана - относительная или абсолютная... Ну и всегда имеете 2 итерации, при которых всё в S складывается и складывается... Смысла возводить 1.0 в степень k никакого нет (а потом умножать на -1), тем более в формуле стоит -1 в степени k (то есть это знакопеременный ряд). /2.0*k+1.0 компилятором воспринимается несколько иначе, чем Вам хотелось бы, выражение нужно взять в скобки: (2.0*k+1.0) При чём здесь Даламбер, наверное, не скажет никто, судя по всему, это из какого-то другого задания. e не только не задана, но даже не прописана в числе переменных. Никакого сравнения числа итераций нет... Зачем счётчику цикла быть float??? |
| Автор: borisbn 3.12.2013, 16:34 |
Это даже не сравнение )) Tep4k111, пока не отформатируешь по-человечески код, тебе вряд-ли кто-то захочет помогать. feodorv, пожалуй, исключение, подтверждающее правило |
| Автор: Tep4k111 3.12.2013, 16:45 | ||||
спасибо за ценный комментарий, но меня всё так интересует, можно ли как-то показать эти итерации? Насчёт float: там целочисленные значения должны быть, мой косяк. Как я понял, Даламбер там вообще не нужен. Переменная "e" была задана через double. Нужно ли так делать, либо лучше вводить? Тогда как ввести степень? |
| Автор: baldina 3.12.2013, 17:26 | ||||||||
1. надо оформить функцию в виде функции, так удобнее. заодно исправить её, т.к. у вас функция не соответствует картинке
функцию для расчета точного значения - тоже. и pi при этом взять поточнее, например как результат arccos(-1)
2. у вас задание посчитать сумму несколько раз, с заданной точностью, и выяснить число итераций напрашивается решение - расчет суммы оформить в виде функции. разумно также задать максимальное число итераций, что бы программа всегда завершалась. Если число итераций совпало с максимальным значением, значит требуемая точность не достигнута.
3. Вот эту функцию и надо вызывать для различных значений epsilon.
4. Если введенное значение x не лежит в диапазоне ]0..pi/2[, то и ряд считать смысла нет, надо попросить пользователя вернуть правильное значение |
| Автор: Tep4k111 4.12.2013, 01:12 | ||||||||||
спасибо! |
| Автор: Tep4k111 6.12.2013, 22:49 | ||||||||||||||
Вот что получилось... укажите на недочёты.
|
| Автор: baldina 6.12.2013, 23:31 |
| код не отформатирован, вырви глаз контроля числа итераций нет, возможно зацикливание (ряд кстати сходится медленно) бессмысленно считаете с точностью 1e-9, задавая pi с точностью 1e-2 зачем числа 1e-3, 1e-6, 1e-9 вычислять при помощи pow()? переменные iter1..3 лишние, у вас есть k контроль значения х отсутствует про copy-paste я уж не говорю, видимо функции С++ вы ниасилили Добавлено через 59 секунд ну вобщем на троечку, если у преподавателя настроение хорошее |