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

Работа с циклами для вычисления выражения - C++

Восстановить пароль Регистрация
 
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 14:54     Работа с циклами для вычисления выражения #1
Дано такое выражение на фото
http://i.pixs.ru/storage/5/2/2/fotoJ...3_11179522.jpg

У меня больше ничего не получается кроме этого:
Заголовок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
using namespace std;
//функция вычисления факториала
int fact(int num){
    int i(0),f(1);
    if( num == 0)
        return 1;
    else {
        while(i!=num){
            i++;
            f*=i;
        }
        return f;
    }
}
Реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "qw.h"
 
int main(){
    int n(0);
    double F,P(0.0),cosX,x;
    cin >> x;
    while(1){
        cosX = ((pow(-1.0,n))*(pow(x,(2*n))))/(fact(2*n));
        //cout << "n = " << n << endl;
        //cout << "s = " << cosX << endl;
        //cout << endl;
        F=P+cosX;
        if ( F - P <= 10E-5 && F - P > 0)
            break;
        P = F;
        n++;
    }
    cout << "cos X = " << cos(x) << endl;
    cout << "n = " << n << endl;
    cout << "sum = " << F ;
    return 0;
}
Это только для while,но он не правильно работает,и я не понимаю как мне это решить
Миниатюры
Работа с циклами для вычисления выражения  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 15:25     Работа с циклами для вычисления выражения #2
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
#include <iostream>
#include <cmath>
 
int fact( int i )
{
    int ret = 1;
    while( i )
    {
        ret *= i--;
    }
    return ret;
}
 
double mycos( double x )
{
    const double eps = 1e-5;
    double res = 0;
    int i = 0;
    double term = 0;
    do
    {
        term = std::pow( x, i*2 ) / fact( 2*i );
        term = i & 1 ? -term : term;
        res += term;
        i++;
    }
    while( std::abs(term) > eps );
    return res;
}
 
int main() {
    
    double x = 0.5;
    std::cout << "mycos( " << x << " ) = " << mycos(x) << std::endl;
    std::cout << "std::cos( " << x << " ) = " << std::cos(x) << std::endl;
 
    return 0;
}
http://ideone.com/1k67Eu
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 15:45  [ТС]     Работа с циклами для вычисления выражения #3
Почему именно 1?,разве я не должен вводить число,и получать в последствие работы программы свой искомый косинус,или я чего то не понимаю,у меня работает только до ввода 2,потом просто ничего не выполняется если ввожу больше 2
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 15:48     Работа с циклами для вычисления выражения #4
Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
Почему именно 1?
Соберитесь с мыслями. О какой единице речь?

Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
разве я не должен вводить число
Вам виднее должно быть.
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 15:54  [ТС]     Работа с циклами для вычисления выражения #5
ой...)
double x = 0.5...,он выводит косинус при х=0.5,как написано в вашей программе.
Если я объявляю ввод переменной и ввожу больше 2 то косинус не находит,попросту ничего не делает,может я условие задачи не понимаю?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 16:13     Работа с циклами для вычисления выражения #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Maxvik_Grunge, измените функцию вычисления факториала:
C++
1
2
3
4
5
6
7
8
9
double fact( int i )
{
    double ret = 1;
    while( i )
    {
        ret *= i--;
    }
    return ret;
}
С интом там получается переполнение
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 18:10  [ТС]     Работа с циклами для вычисления выражения #7
Tulosba, Такой вопрос,у меня вот такой код :
Заголовок :
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
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
using namespace std;
char menu()  //объявление функции menu() (заголовок функции)
{   //тело функции--------------------------------------
    char choice;
    cout<<"1.Constants\n";
    cout<<"2.Variables\n";
    cout<<"3.Conditions\n";
    cout<<"4.Cycles\n";
    cout<<"5.Exit\n";
    cout<<"Your choice ->";
    cin>>choice;
    cout<< endl;
    return choice;
}
//функция вычисления факториала
double fact( int i )
{
    double ret = 1;
    while( i )
    {
        ret *= i--;
    }
    return ret;
}
//Библиотечная функция double cos(double x)
double mycos( double x )
{
    const double eps = 1e-5;
    double res = 0;
    int i = 0;
    double term = 0;
    return res;
}
Реализация:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "work__2.h"
 
int main()
{
    char number; //  вызов функции menu()
    do
    {
        number = menu();
        switch ( number ) // анализ значения nubmer
        {
        case '1': {
        // объявление констант----------
            const short SHORT(-20);
            const unsigned short UNshort(60000);
            const int INT(589);
            const unsigned int UNint(985);
            const long LONG(-123456789);
            const unsigned long UNlong(1789541312);
            const float FLOAT(1.156983F);
            const double DOUBLE(0.1597536450);
            const char CHAR('2');
            const unsigned char UNchar('3');
            const bool BOOL(true);
        // вывод констант-----------------
            cout<<SHORT<<endl;
            cout<<UNshort<<endl;
            cout<<INT<<endl;
            cout<<UNint<<endl;
            cout<<LONG<<endl;
            cout<<UNlong<<endl;
            cout<<FLOAT<<endl;
            cout<<DOUBLE<<endl;
            cout<<CHAR<<endl;
            cout<<UNchar<<endl;
            cout<<BOOL<<endl;
            cout<< endl;
            break;
                  } //Конец case '1'
        case '2':
            {
            //объявление переменных------------
                unsigned int UNint;
                bool BOOL;
                float FLOAT;
            //ввод переменных------------------
                cout<<"Enter UNint data type-> ";
                cin>>UNint;
                cout<<"Enter BOOL data type-> ";
                cin>>BOOL;
                cout<<"Enter FLOAT data type-> ";
                cin>>FLOAT;
                cout<< endl;
            //вывод переменных---------------------
                cout<<"UNint= ";cout<<UNint<<endl;
                cout<<"BOOL= ";cout<<BOOL<<endl;
                cout<<"FLOAT= ";cout<<FLOAT<<endl;
                cout<< endl;
                break;
            }//конец case'2'
        case '3':
            {
                double DOUBLE_1,DOUBLE_2,DOUBLE_3; //объявление переменных типа double(с плавающей точкой,двойной точности)
             //ввод переменных------------
                cout<<"DOUBLE_1= ";
                cin>>DOUBLE_1;
                cout<<"DOUBLE_2= ";
                cin>>DOUBLE_2;
                cout<<"DOUBLE_3= ";
                cin>>DOUBLE_3;
                if (DOUBLE_1 < DOUBLE_2 && DOUBLE_1 < DOUBLE_3)//Если 1 переменная меньше 2 и 3 то
                {
                cout<<"MIN= ";cout<<DOUBLE_1<<endl;//Вывести вывести 1 переменную
                }
                else if (DOUBLE_2 < DOUBLE_1 && DOUBLE_2 < DOUBLE_3)//Иначе если 2 переменная меньше 1 и 3 то
                {
                cout<<"MIN= ";cout<<DOUBLE_2<<endl;//вывести 2 переменную
                }
                else if (DOUBLE_3 < DOUBLE_1 && DOUBLE_3 < DOUBLE_2)//иначе если 3 меньше 2 и 1 то
                {
                cout<<"MIN= ";cout<<DOUBLE_3<<endl;//вывести 3 переменную
                }
                break;
            }//Конец case '3'
        case '4':
            {//цикл с while
               double x;
               const double eps = 1e-5;
               double res = 0;
               int i = 0;
               double term = 0;
               cout<<"x= ";
               cin>>x;
               while ( abs(term) > eps )
                    {
                        term = pow( x, i*2 ) / fact( 2*i );
                        term = i & 1 ? -term : term;
                        res += term;
                        i++;
                    }
                    cout << "mycos( " << x << " ) = " << mycos(x) <<endl;
                    cout << "cos( " << x << " ) = " <<cos(x) <<endl;
                    break;
                    
            }
 
        }
    }while (number !='5');//Конец цикла при вводе символа 5.
}

У меня вроде как работает,но результат вычисления не проверяется через библиотечную функцию,как у вас было,
cout << "mycos( " << x << " ) = " << mycos(x) <<endl; он выводит 0,я конечно понимаю что я торможу,просто голова кругом уже,но охота доделать со всеми циклами и разобраться.В чем я ошибся ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 18:21     Работа с циклами для вычисления выражения #8
Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
он выводит 0
Так а где вычисления? (стр.29-36)
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 18:35  [ТС]     Работа с циклами для вычисления выражения #9
Tulosba, я когда включаю эту функцию в файл реализации,компилятор выдает ошибку,может я ее не правильно вставляю,я подумал что если я функцию вставлю в заголовок,он будет ею пользоваться от туда

Добавлено через 9 минут
Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
cout << "cos( " << x << " ) = " <<cos(x) <<endl
Вот эту он вычисляет,я просто только начал С++ учить),не судите строго)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 18:39     Работа с циклами для вычисления выражения #10
Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
я просто только начал С++ учить),
Учить имеет смысл последовательно, а у Вас какая-то мешанина судя по сообщению #7.
Попробуйте разбить полную задачу на подзадачи, чтобы разобрать их по очереди.
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
10.03.2014, 18:44  [ТС]     Работа с циклами для вычисления выражения #11
Tulosba, Тут у меня просто лабораторная работа,и вот один из пунктов это добавить блок проверки операторов цикла(while,do while,for) ,для выражения,мне бы разобраться как сделать что бы у меня вот :
cout << "mycos( " << x << " ) = " << mycos(x) <<endl; не выводилось 0,то есть как правильно вставить эту библиотечную функцию для проверки результата
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.03.2014, 19:28     Работа с циклами для вычисления выражения #12
Цитата Сообщение от Maxvik_Grunge Посмотреть сообщение
как правильно вставить эту библиотечную функцию
Что Вы называете библиотечной функцией в данном случае?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2014, 01:12     Работа с циклами для вычисления выражения
Еще ссылки по теме:

Программа на С++ для вычисления арифметического выражения C++
Задачка с циклами (Вычислить значение выражения) C++
C++ Написать функцию для вычисления выражения

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

Или воспользуйтесь поиском по форуму:
Maxvik_Grunge
1 / 1 / 0
Регистрация: 10.03.2014
Сообщений: 30
11.03.2014, 01:12  [ТС]     Работа с циклами для вычисления выражения #13
Tulosba, Я разобрался вроде),я немного путал одно с другим)
Yandex
Объявления
11.03.2014, 01:12     Работа с циклами для вычисления выражения
Ответ Создать тему
Опции темы

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