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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 16:13   #11
blondino4ka_milk
Пользователь
 
Аватар для blondino4ka_milk
 
Регистрация: 02.03.2010
Сообщений: 59
По умолчанию

Vago,
if(x>1.0) atan=(pi/2)-pow(((1/3)*x),3)-pow(((1/5)*x),5);
if(x<=1.0) atan=x-pow(x,3/3)-pow(x,5/5)-pow(x,7/7);
if(x<(-1.0)) atan=(-pi/2)-(1/x)+pow(1/3,3)-pow(1/5*x,5);

кол-во членов ряда не считает! а сумму всегда и везде одинаковая 1.5708

Последний раз редактировалось blondino4ka_milk; 10.04.2010 в 16:18.
blondino4ka_milk вне форума Ответить с цитированием
Старый 10.04.2010, 16:54   #12
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Очень плохо. Как Вы таким манером многоточия в конце формул собираетесь программировать?..

Хоть тот вариант, черновик которого я в #2 для |x|<=1 выложил, сами можете дописать? Для какого-то одного x?..
Vago вне форума Ответить с цитированием
Старый 10.04.2010, 16:59   #13
blondino4ka_milk
Пользователь
 
Аватар для blondino4ka_milk
 
Регистрация: 02.03.2010
Сообщений: 59
По умолчанию

ужас!! я уже не могу!! я тупая. ничего не понимаю!
blondino4ka_milk вне форума Ответить с цитированием
Старый 10.04.2010, 18:00   #14
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Пишите ветвь else.
Код:
#include <math.h>
#include <iostream>
using namespace std;

main() {

   double   x = 1.,
               eps = 0.001;
   int      n;
   double   chlen,        // Член ряда
               nom,          // Числитель
               den = 1.,   // Знаменатель
               f;

   if ( fabs( x ) <= 1. ) {
      nom = x;
      chlen = nom / den;
      f = chlen;     
      n = 0;        
      while ( fabs( chlen ) >= eps ) {
         nom = -nom * x * x;
         den = den + 2.;
         chlen  = nom / den;
         f = f + chlen;
         ++n;
         cout << nom << " " << den << " " << chlen << " " << " " << 4.*f << " " << n << endl;
      }
   } else {
   }

   return 0;

}
Контрольный вопрос. Для чего при x = 1 я в отладочной печати вывожу 4.*f ?
Vago вне форума Ответить с цитированием
Старый 10.04.2010, 18:49   #15
blondino4ka_milk
Пользователь
 
Аватар для blondino4ka_milk
 
Регистрация: 02.03.2010
Сообщений: 59
По умолчанию

Vago,для то чтобы получить данные о ходе и состоянии процесса вычислений!
спасибо! но я ничего не поняла! =(
blondino4ka_milk вне форума Ответить с цитированием
Старый 10.04.2010, 18:58   #16
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от blondino4ka_milk Посмотреть сообщение
Vago,для то чтобы получить данные о ходе и состоянии процесса вычислений!
"ВторА-Ая попытка!"

x = 1. Мы вычисляем f = arctg( x ). Зачем я вывожу не f, но 4.*f ?
Vago вне форума Ответить с цитированием
Старый 10.04.2010, 19:29   #17
blondino4ka_milk
Пользователь
 
Аватар для blondino4ka_milk
 
Регистрация: 02.03.2010
Сообщений: 59
По умолчанию

Vago, можно и 3.*f . это для того чтобы получить нужную информацию о прячущихся ошибках!

формулу сначала я вывела не правильно! а теперь вот что получилось у меня (2*n+1)/((2*n+3)*(x*x))
Код:
#include <iostream.h>
#include <math.h>
#include <windows.h>

char*Rus(const char*text); 

char bufRus[256];
char*Rus(const char*text){
CharToOem(text, bufRus);
return bufRus;
}
 
void main()
{
	float Xn, Xk, Xd, x, eps;
    const double pi = acos(-1); 
	        
cout <<Rus("Введите начало Xn\n");
cin >>Xn;

cout <<Rus("Введите конец Xk\n");
cin >>Xk;

cout <<Rus("Введите шаг dX\n");
cin >>Xd;

cout <<Rus("Введите точность Eps:\n");
cin >>eps;

cout <<endl<<endl<<Rus("\nТаблица табулирования функции arctg(x)\n");
cout << "_________________________________________________" <<endl;
cout << Rus("|       x       |      arctg(x) |     n    |") <<endl;
cout << "_________________________________________________" <<endl; 
for(x=Xn;x<=Xk; x+=Xd){
    while( x <= Xk)
{
int  n = 0;
double result = pi/2;
double sum = 0;
double Eps = 0;
do
{
    sum+=(2*n+1)/((2*n+3)*(x*x)) ;
    n++;
    Eps = 1.0/((2*n+1)*pow(x, 2*n+1));
}
while(Eps >= eps);
    cout <<"|\t" <<x <<"\t|\t" <<result - sum <<"\t|\t"<<n-1 <<"\t|"<<endl;
    x+=Xd;}
}
}
Должно вроде как быть правильно! я уже не знаю что с ним сделать!

Посмотрите пожалуйста вот этот вариант всё ли верно? ответ правильно ли выдаёт?

Код:
#include <iostream.h>
#include <math.h>
#include <windows.h>

char*Rus(const char*text); 

char bufRus[256];
char*Rus(const char*text){
CharToOem(text, bufRus);
return bufRus;
}
 
int main(){
	const int MaxIter=500;
	double Xn, Xk, dX, eps;
           //const double pi = acos(-1);                  нужен он?
	        
cout <<Rus("Введите начало Xn\n");
cin >>Xn;

cout <<Rus("Введите конец Xk\n");
cin >>Xk;

	if (Xn>=Xk) cout<<Rus("Ошибка Xn > = Xk")<<endl;
	else

cout <<Rus("Введите шаг dX\n");
cin >>dX;

cout <<Rus("Введите точность Eps:\n");
cin >>eps;

cout <<endl<<endl<<Rus("\nТаблица табулирования функции arctg(x)\n");
cout << "_________________________________________________" <<endl;
cout << Rus("|       x       |      arctg(x) |       n       |") <<endl;
cout << "_________________________________________________" <<endl; 

for(double x=Xn;x<=Xk;x+=dX){	
   
		bool done=true; 
		double ch=x,y=ch; 
	           //double f = pi/2;                  нужен он?
		for(int n=0;fabs(ch)>eps; n++){		
		ch *=(2*n+1)/((2*n+3)*(x*x));	
		y+=ch;

				
			if (n>MaxIter){	
				cout<<Rus("Ряд расходится!")<<endl;
				done = false;break;}
		}

			if (done){
    cout <<"|\t" <<x <<"\t|\t" <<y <<"\t|\t"<<n <<"\t|"<<endl;
		}
	}
	return 0;
}

Последний раз редактировалось Stilet; 13.04.2010 в 10:26.
blondino4ka_milk вне форума Ответить с цитированием
Старый 13.04.2010, 09:58   #18
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну что-то уже ближе к истине. Только там же еще знаки чередуются, так что напишите ch *= - (/**/);
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При вычислении максимального значения выдает О kerill385884 Помощь студентам 3 25.03.2010 18:52
С++, найти ошибку в вычислении бесконечной нормы матрицы OffyGhost Помощь студентам 2 09.03.2010 14:18
Ошибка при вычислении.. CodeExpert Помощь студентам 7 17.02.2010 17:24
Чем отличается описание функции от определения функции в С++? Go6a Помощь студентам 4 18.07.2009 18:07
ошибка в вычислении wowka Помощь студентам 4 21.07.2008 15:51