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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2011, 14:42   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C++ ошибка в математике... но где?

Господа и милые дамы программисты!
У меня проблема - написан код для вычисления по формуле, но почему-то результаты (в том числе и промежуточные) совсем не похожи на то, что должно быть... а где ошибка - не могу понять.

Вот сама задача: дано вещественное число X (|X| < 1) и целое число N (> 0). Найти значение выражения (прикрепрено внизу). Предполагается что X и N вводит пользователь

Код:

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

using namespace std;


int main ()
double x=0;
	int N=1, stepen=0 ;
	long double Sum=0;
	double pow_result_1=0, pow_result_x=0, x_result=0, one=-1;


	cout<<"Vvedite x (ot -1 do 1):"<<endl;
	cin>>x;
	cout<<"Vvedite N (cheloe polozitelnoe chislo):"<<endl;
	cin>>N;
	
	abs (x);

		for ( int i=1; i<=N; i++)
		{
			Sum=x_result;
			stepen=i-1;
			
			pow_result_1=pow(one,stepen);

			pow_result_x=(x, i);
			x_result=pow_result_1*pow_result_x/i;
			Sum=Sum + x_result;
			cout<<"Step "<<i<<":    Znak pered slagaemim:  " <<pow_result_1<<"       Slagaemoe:    "<< pow_result_x<< endl;
		}

cout<< "Itogo resultat formuli: "<< Sum << endl;

	_getch ();
	return 0;
}
Изображения
Тип файла: jpg c_6.JPG (6.1 Кб, 92 просмотров)
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

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

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

using namespace std;


int main ()      // Тут хорошо бы открывающую фигурную скобочку поставить...
double x=0;
	int N=1, stepen=0 ;
	long double Sum=0;
	double pow_result_1=0, pow_result_x=0, x_result=0, one=-1;


	cout<<"Vvedite x (ot -1 do 1):"<<endl;
	cin>>x;
	cout<<"Vvedite N (cheloe polozitelnoe chislo):"<<endl;
	cin>>N;
	
	abs (x);  // Не имеет отношения к результату, но что это за одинокий abs()]?!

		for ( int i=1; i<=N; i++)
		{
			Sum=x_result;  // Инициализация сумматора внутри цикла - это от души, конечно!..
			stepen=i-1;
			
			pow_result_1=pow(one,stepen);

			pow_result_x=(x, i); // Опять, хорошо бы pow() написать!
			x_result=pow_result_1*pow_result_x/1;  // Что это за единица в знаменателе?!
			Sum=Sum + x_result;
			cout<<"Step "<<i<<" " <<pow_result_1<< pow_result_x<< endl;//x_result
		}

cout<< "Itogo resultat formuli: "<< Sum << endl;

	_getch ();
	return 0;
}
А вообще-то, за использование pow() ( ^, **,..) для вычисления знака, нормальный преподаватель должен студента отправить "учить матчасть". Сразу же. Без разговоров...
Vago вне форума Ответить с цитированием
Старый 20.03.2011, 17:18   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Тфу, забыла когда слагаемое нахожу добавить функцию степени.... Все работает как часы!

Ага, спасибо! Я сейчас только что сама это выяснила что в степень не возвожу..
А насчет знака перед слагаемым - ну что в формуле говорится, как он вычисляется я так и сделала... можно было конечно разбить на четные и нечетные шаги (четное и не четное i), найти сумму одних, и сумму других, и вычесть потом эти суммы...Но я сделала как в формуле сказано - и так запуталась))) Плохо у меня с математикой...особенно с такими формулами)))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 20.03.2011, 21:04   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Не нужна тут никакая "сумма одних". И "сумма других" - тоже не нужна. Надо просто вдуматься в смысл термина "знакопеременный ряд"...
Код:
   ...
   Sum = 0. ;
   pow_result_1 = 1. ;
   for ( int i=1; i<=N; i++ ) {
      pow_result_x = pow( x, double( i ) ) ;
      x_result = pow_result_1 * pow_result_x / double( i ) ;
      Sum = Sum + x_result ;   
      pow_result_1 = -pow_result_1 ;
   }
   ...
Второй этап - это написать вообще без pow(), найдя рекуррентную зависимость числителя последующего члена ряда от предыдущего.

Ну и смесь чистого Цэ и "плюсов" - некузяво как-то...
Vago вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написал программу, где то ошибка, не пойму где... Kelevra91 Общие вопросы C/C++ 5 17.01.2011 16:38
Где ошибка? mia34933 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2010 03:46
Где ошибка? С++ Namolem Помощь студентам 1 15.09.2010 18:59
где ошибка ? mouse697 Помощь студентам 2 22.03.2009 15:01