Форум программистов, компьютерный форум CyberForum.ru

Вычислить значение выражения - C++

Восстановить пароль Регистрация
 
romichj
0 / 0 / 0
Регистрация: 23.10.2011
Сообщений: 21
31.03.2012, 22:48     Вычислить значение выражения #1
Я новичок в этом деле.Буду рад любой помощи.
Задача:
вычислить S
вычисление прекратить если (рис1)
Подсчитать кол-во слагаемых.
Изображения
  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 22:48     Вычислить значение выражения
Посмотрите здесь:

Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
Вычислить значение выражения C++
C++ Вычислить значение выражения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.03.2012, 23:07     Вычислить значение выражения #2
если сумма действительно начинается от n=0 то как минимум выражение ln n некорректно. Не трать время.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 23:10     Вычислить значение выражения #3
Если от 1, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <math.h>
int main()
{
 double s1=0;
 double s2;
 int n=1;
 do
  {
   s2=s1;
   s1+=pow((1+cos(n))/(2+cos(n)),2*n-log(n));
   n++;
  }
 while (fabs(s1-s2)>0.0001);
 std::cout<<"S="<<s1<<"\nn="<<n<<"\n";
 system("pause");
 return 0;
}
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
31.03.2012, 23:15     Вычислить значение выражения #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cmath>
 
int main(void)
{
    double res = 0, tmp, eps = 1e-4, n = 1;
    while((tmp = pow((1+cos(n))/(2+cos(n)),2*n-log(n))) > eps)
    {
        res += tmp;
        ++n;
    }
    std::cout << "s = " << res << std::endl; 
    std::cout << "n = " << n - 1 << std::endl;
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.03.2012, 23:34     Вычислить значение выражения #5
Вай-вай. А что такое сумма ты не знаешь, и что такое циклы тоже? Или вот ты написал "Итерация", а немного погуглить на эту тему ты пробовал?

А ещё ты не пробовал разбить задачу на отдельные подзадачи, не пробовал, например, для начала вычислить один элемент этого ряда?
Разве сложно написать вот так?
C
1
2
n=0;
a=(1+cos(n))/(2+cos(n))
Ну вот хотя бы так для начала. Потом появиться на форуме с вопросом "Ой, а как возводить в степень в С???"
Так были б видны попытки работать. тебе б посоветовали использовать функцию pow
Ты бы вернулся к решению и самостоятельно сообразил бы, что выражение следует возвести в степень 2*n-log(n). Посмотрел бы в гугле пример использования функции pow и по аналогии написал бы
a=pow(a, 2*n-log(n))
Затем поискал бы пример программы "сумма ряда", или самостоятельно подумал, а зачем ты столько лекций посетил по программированию, на которых давались примеры циклов и как циклы используются на практике. И нельзя ли просуммировать твой ряд в цикле.
Взял бы для примера цикл while и написал бы
C
1
2
3
4
5
n=0;
while(условие){
a=(1+cos(n))/(2+cos(n));
a=pow(a, 2*n-log(n));
}
Что тебе нужно чтобы найти сумму в цикле? Наверное каждый раз надо запоминать просуммированное ранее в некоторой переменной и каждый раз прибавлять к ней новое a!

C
1
2
3
4
5
6
7
n=0;
summa=0;
while(условие){
a=(1+cos(n))/(2+cos(n));
a=pow(a, 2*n-log(n));
summa=summa+a;
}
Ну! Думаешь ты, вот сумма ряда и найдена! Только почему то у нас всегда n=0
А греческий значок "сигма" в формуле (я надеюсь, что ты к математике не относишься так как к программированию, а поэтому) ты знаешь, что обозначает сумму ряда при изменении n=0, 1, 2, 3, т.е. n должен с каждым шагом увеличиваться.
добавим это в программу
C
1
2
3
4
5
6
7
8
n=0;
summa=0;
while(условие){
a=(1+cos(n))/(2+cos(n));
a=pow(a, 2*n-log(n));
summa=summa+a;
n=n+1;// вот здесь с новым шагом цикла n увеличивается
}
Осталась последняя неясность в нашей программе. Что за "условие" стоит в цикле while?
Т.е. сколько элементов ряда нужно суммировать? А нам не сказано сколько! Давай! Смотри в условие! Там сказано (1+cos(n))/(2+cos(..., короче это наше слагаемое а должно быть меньше эпсилон
Ну! Так прямо так и запишем! Видишь? для того что бы выполнить аналогичное задание надо только понять условие и записать все действия, которые там требуются на языке программирования.
Пишем:
C
1
2
3
4
5
6
7
8
9
10
n=0;
summa=0;
epsilon=1e-4;
a=1;
while(a>=epsilon){
a=(1+cos(n))/(2+cos(n));
a=pow(a, 2*n-log(n));
summa=summa+a;
n=n+1;// вот здесь с новым шагом цикла n увеличивается
}
видишь? а в цикле постоянно уменьшается, и когда оно будет меньше epsilon цикл завершится.
Разве это какая-то высшая математика?
Короче, объяснил подробно. Надеюсь ты понял. Как вывести summa на экран думаю догадаешься.
Или ты даже Hello World написать не можешь?
Yandex
Объявления
31.03.2012, 23:34     Вычислить значение выражения
Ответ Создать тему
Опции темы

Текущее время: 06:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru