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

как это делать? - C++

Восстановить пароль Регистрация
 
akimbladina
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4
25.09.2011, 19:29     как это делать? #1
как это делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
akimbladina
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4
25.09.2011, 19:57  [ТС]     как это делать? #2
Честно говоря у меня даже мыслей нет как это решить
Given real number x. Calculate the expression shown on image
http://www.cyberforum.ru/attachment....5&d=1316964578

Код
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double n,a;
cin>>a;
cin >>n;
double p=1;double res=1;
for(int i=0;i<n;i++)
	p*=sqrt(a*i);
    res+=p;

	
    
	cout <<res;
	return 0;
}
Добавлено через 20 минут
неужели не у кого нет вариантов

Добавлено через 1 минуту
Спасибо всем классный сайт я уже решил
akimbladina
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4
25.09.2011, 19:58  [ТС]     как это делать? #3
кто-нибудь

Добавлено через 16 минут
Спасибо всем классный сайт я уже решил
Serejke_qq
 Аватар для Serejke_qq
149 / 107 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
25.09.2011, 19:59     как это делать? #4
Ну вот и молодец.. Но ведь перед тем как сесть и плодить темы, мог бы подумать и налабать код без всякой помощи)
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
25.09.2011, 20:04     как это делать? #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <vector>
#include <iostream>
#include <cmath>
 
std::vector < int > get_factorial( int M )
{
    std::vector < int > R;
    R.push_back( 1 );
    for ( int Z = 1; Z <= M; ++Z )
        R.push_back( Z * R.at( Z - 1 ) );
    return R;
}
 
int main()
{
    std::vector < int > Fact = get_factorial( 11 );
    long double X, S = 0;
    X = 2;
    for ( int Y = 1, P = 0; Y <= 11; Y += 2, ++P )
        S += pow( -1.0, P ) * ( long double )pow( X, Y ) / Fact.at( Y );
    std::cout << S << std::endl;
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
25.09.2011, 21:34     как это делать? #6
Цитата Сообщение от akimblyadina Посмотреть сообщение
не у кого нет вариантов
- степени нечётные, факториалы тоже, сейчас набросаю

Добавлено через 37 минут
Вот на плюсах (ввёл в программу вывод промежуточных результатов, для контроля решения)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <conio.h>
#include <cmath>
 
using namespace std;
 
unsigned long fact(int n);
 
int main () 
{
    int i,k,n;
    double x,sum,buf;
    do
    {
        std::cout<<"Enter x : ";
        std::cin>>x;
        std::cout<<"Enter max power in sequence : ";
        std::cin>>n;
        sum = x;
        for(k = 1, i = 3; i <= n; i += 2, k++)
        {
            std::cout<<"\tIteration "<<k<<std::endl;
            std::cout<<"pow("<<x<<","<<i<<")/"<<i<<"! = ";
            std::cout<<(buf = pow(x,1.0*i)/fact(i))<<std::endl;
            //совмещаем инициализацию с поиском макс и мин элементов
            if(k % 2 == 0)
                sum -= buf;//1.0*i - Неявное преобразование к double
            else
                sum += buf;
            std::cout<<"sum = "<<sum<<std::endl;
        }
        std::cout <<"answer : "<<sum<<std::endl;
        std::cout<<"\r\nPress Y to new input\r\n";
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
unsigned long fact(int n)
{
    unsigned long ret = 1;
    if(1 < n)
        ret = ret*fact(n - 1);
    return ret;
}
Миниатюры
как это делать?  
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
25.09.2011, 22:19     как это делать? #7
Все решается намного грамотней, чем выше предложенные варианты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cmath>
 
double Sin1 ( double x0, double Eps0 )
{
    short int i = 0;
    double sum = 0, y;
    y = x0;
    while ( fabs ( y ) >= Eps0 )
    {
        sum += y;
        i++;
        y *= - x0 * x0 / 2 / i / ( 2 * i + 1 );
    }
    return sum;
}
 
int main ()
{
    for ( int index = 0; index < 6; index++ )
        std::cout << "My sin : " << Sin1( 0.7, 0.0000001 * std::pow ( 10., index ) ) << std::endl;
    std::cout << "Std sin: " << std::sin ( 0.7 ) << std::endl;
    
    std::cin.get();
    return 0;
}
с помощью рекуррентных соотношений.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:26     как это делать? #8
Это ряд приближенного значения sin в точке x. А вот так можно вычислить тот же синус с наперед заданной точностью, так как это ряд Лейбница:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<math.h>
 
const double eps = 0.0000001;
 
int main()
{
   double sum, p, x;
   int i = 1;
   std::cin >> x;
   p = sum = x;
   while (fabs(p) >= eps)
   {
      i += 2;
      p *= -x*x/(i*(i - 1));
      sum += p;
   }
   std::cout << sum;
   std::cin.get();
   return 0;
}
Добавлено через 2 минуты
Mиxaил, посмотрел ваш пост после того, как написал программу. У вас abs нецелесообразно используется, для типа double - fabs
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2011, 22:28     как это делать?
Еще ссылки по теме:

Связанный список. Как это делается и зачем это нужно? C++
C++ как делать трассировку?
C++ Почему Linux понимает русский язык, и как разучить его это делать?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
25.09.2011, 22:28     как это делать? #9
Thinker, да, спасибо, изменил.
Yandex
Объявления
25.09.2011, 22:28     как это делать?
Ответ Создать тему
Опции темы

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