Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 02:10   #1
jennya
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 30
По умолчанию Вычисление косинуса и экспоненты

Всем доброго время суток! Правильно ли составлены программы:
а)вычисление косинуса:
Код:
#include <iostream>
using namespace std;
const int N = 100;
int main() {
	double x, q, s = 0;
		int n;
	cout << "Enter x = ";
	cin >> x;
	q = x;
	for (n = 1; n <= N; n++) {
		s += q;
		q *= (-1) * x * x /(2 * n - 1) / (2 * n);}
	cout << "cos("<<x<<") = "<< s << endl;
	return 0;
}
б) вычисление экспоненты:
Код:
#include <iostream>
using namespace std;
const int N = 100;
int main() {
	double x, q, s = 0;
		int n;
	cout << "Enter x = ";
	cin >> x;
	q = x;
	for (n = 1; n <= N; n++) {
		s += q;
		q *= x  /(n - 1) / n;}
	cout << "exp("<<x<<") = "<< s << endl;
	return 0;
Заранее огромное спасибо!!!

Последний раз редактировалось Stilet; 17.10.2010 в 12:55.
jennya вне форума Ответить с цитированием
Старый 17.10.2010, 10:44   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Компилируется? Результат правильный выдает?.. Значит правильно.
p51x вне форума Ответить с цитированием
Старый 17.10.2010, 11:21   #3
jennya
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 30
По умолчанию Вычисление косинуса и экспоненты

При вычисление экспоненты когда водится значение x = 2.7 результат выдается в виде: 1.#INF хотя должна быть просто единица. У меня вопрос правильно ли написана формула для расчета экспоненты:
q *= x /(n - 1) / n;}
jennya вне форума Ответить с цитированием
Старый 17.10.2010, 13:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы попробовал формулу отсюда:http://ru.wikipedia.org/wiki/%D0%AD%...BD%D1%82%D0%B0

Код:
    double e=1,x=1,xk=x;
    int k=1,fac=1;
    for(;k<20;k++){
        xk*=x;
        fac*=k;
        e+=xk/fac;
    }
    printf("%f=%f",e,exp(x));getchar();
    return 0;
Правда это я так с потолка, но...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 13:31   #5
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Формула для n-го члена разложения экспоненты в ряд Тейлора X^n/n!, поэтому должно быть
Код:
q *= x   / n;
Кроме того надо учесть X^0/0!=1 и т.к ты уже учел q=x, то цикл начнется с двойки
Код:
q = x;
s=1;//========учитывает первый член ряда X^0/0!=1
for (n = 2; n <= N; n++) {
	s += q;
	q *= x   / n;
}
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 17.10.2010, 19:54   #6
jennya
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 30
По умолчанию Вычисление косинуса и экспоненты

Огромное спасибо Sam Gold и Stilet, экспонента вычисляется, без ошибок, но в программе вычисления косинуса, программа выдает не правильные значения косинуса 30, 45, 60, 90 и 180 градусов:

Код:
#include <iostream>
using namespace std;
const int N = 100;
int main() {
	double x, q, s = 0;
		int n;
	cout << "Enter x = ";
	cin >> x;
	q = x;
	for (n = 1; n <= N; n++) {
		s += q;
		q *= (-1) * x * x /(2 * n - 1) / (2 * n);}
	cout << "cos("<<x<<") = "<< s << endl;
	return 0;
}
значение углов задаются в градусах

Последний раз редактировалось Stilet; 17.10.2010 в 20:38.
jennya вне форума Ответить с цитированием
Старый 17.10.2010, 23:35   #7
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

n-ый член разложения cos в ряд Тейлора (-1)^n*x^(2*n)/(2n!) для n=0,1,2...... поэтому первый член ряда х0=1 учитывается так
Код:
q=1;
for(....)
В приведенном коде х считается в радианах, чтобы считать в градусах, надо сделать так:
Код:
#include <math.h>
const double pi=asin(1)*2;// вычисляем число пи
//..............
double mul=pi/180;//множитель для перевода из градусов в радианы

q = 1;
for (n = 1; n <= N; n++) {
	s += q;
	q *= (-1) * x * x*mul*mul /(2 * n - 1) / (2 * n);}
Единственный способ стать умнее - играть с более умным противником.

Последний раз редактировалось Sam Gold; 18.10.2010 в 22:44. Причина: неточность комментария
Sam Gold вне форума Ответить с цитированием
Старый 18.10.2010, 21:40   #8
jennya
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 30
По умолчанию Вычисление косинуса и экспоненты Перезагрузить страницу Ответить в теме

Спасибо огромное Gold Sam, но почему в формуле:
q *= (-1) * x * x * mul * mul /(2 * n - 1) / (2 * n);
2 раза умножается на mul??
jennya вне форума Ответить с цитированием
Старый 18.10.2010, 21:50   #9
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Потому что если х ввоится в градусах, то его нужно перевести в радианы, т.е умномить на mul, а т.к в формуле x^2 то и mul должен быть в квадрате.
Изящнее конечно сделать так:
Код:
x*=mul;
//....................
q *= (-1) * x * x /(2 * n - 1) / (2 * n);
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 18.10.2010, 22:59   #10
jennya
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 30
По умолчанию Вычисление косинуса и экспоненты

Огромное спасибо Sam Gold очень помог!!!!
jennya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно рeweHue экспоненты artem2011 Помощь студентам 0 22.06.2010 20:29
Вычисление экспоненты средствами VBA fs444 Microsoft Office Excel 10 30.12.2009 10:42
Программа вычисления синуса и косинуса через тангенс Надежда.. Общие вопросы C/C++ 0 26.11.2009 22:03
помогите с вычислением синуса, косинуса, тангенса и котангенса Panika Помощь студентам 10 08.11.2009 16:54
Расчет коэффициентов экспоненты metrim Microsoft Office Excel 4 01.09.2009 17:32