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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 21:42   #1
maxick96
Пользователь
 
Регистрация: 18.02.2012
Сообщений: 45
По умолчанию исправление программы

вообще такая проблема
есть формула ((x*x)*(2*k-1))/((2*k+1)*(k+1))
задача найти сумму ряда с заданной точностью эпсилон
вобщем я сделал вроде, но ответ при любых значениях 0 в любом цикле:
main
Код:
#include <conio.h>
#include <iostream>
using namespace std;
float fundw(double,float,int&);
float funf(double,float);
float funw(double,float);
char menu();
void main()
{
	setlocale(LC_ALL, "RUS");
	double x,sum,e;
	int k;
	cout <<"Введите x которое не равно 0: ";
	do
	{ 
	cin>>x;
	} while (x=0);
	cout<<"Введите эпсилон которое [1>=e>0]: ";
	do
	{  
	cin>>e;
	} while (1<=e || e<0);
    while (1) 
			{ switch (menu()) 
				{ case '1' : 
				  sum=fundw(e,x,k);
				  cout<<"Выбран цикл DOWHILE"<<endl;
				  cout<<"Сумма: "<<sum;
				  break; 
					
				  case '2' : 
				  sum=funf(e,x);
				  cout<<"Выбран цикл FOR"<<endl;
				  cout<<"Сумма: "<<sum;
				  break;
				  
				  case '3' : 
				  sum=funw(e,x);
				  cout<<"Выбран цикл WHILE"<<endl;
				  cout<<"Сумма: "<<sum;
				  break;
				
				  case '4' : 
					  cout<<"Вы не туда попали";
				  break;

				  case '0':
					  cout<<"Goodbye!";
					  break;
				}	
			  break; 
			}
	_getch();
}
dowhile
Код:
#include <math.h>
float fundw ( double e,float x,int& k)
{
	double sum = 0;
 do
	{
      sum=((x*x)*(2*k-1))/((2*k+1)*(k+1));
      k++;
	}
	while ( abs(sum) > e );
	return sum;
}
while
Код:
#include <math.h>
float funw ( double e,float x)
{
	float sum=0,k=0;
   while ( abs(sum) > e )
 {
sum=(x*x)*(2*k-1)/((2*k+1)*(k+1));
   k++;
 }
   return sum;
}
for
Код:
#include <math.h>
float funf ( double e,float x)
{
	float sum = 0,k=0;
 for (abs(sum); abs(sum) > e; )
	{
sum=(x*x)*(2*k-1)/((2*k+1)*(k+1));
    k++; 
} 
 return sum;
}
menu
Код:
#include <iostream> 
using namespace std;

char menu (void)  
	{ char c; 
	  cout  << endl << "Для выбора цикла DOWHILE введите 1" << endl
		   << "Для выбора цикла FOR введите 2" << endl 
		   << "Для выбора цикла WHILE введите 3" << endl
		   << "Для выхода введите 0" << endl;
	  cin >> c;
	  return c; 
	}
maxick96 вне форума Ответить с цитированием
Старый 06.11.2012, 00:01   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
	cout <<"Введите x которое не равно 0: ";
	do
	{ 
	cin>>x;
	} while (x=0);
это не проверка на равенство, как хотелось бы
pu4koff вне форума Ответить с цитированием
Старый 06.11.2012, 00:14   #3
maxick96
Пользователь
 
Регистрация: 18.02.2012
Сообщений: 45
По умолчанию

ну а как сделать?
как сделать так чтобы ответ не был равен 0
maxick96 вне форума Ответить с цитированием
Старый 06.11.2012, 01:02   #4
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

'=' - присваивание
'==' - сравнение на равенство
'!=' - сравнение на не равенство
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 06.11.2012, 10:03   #5
maxick96
Пользователь
 
Регистрация: 18.02.2012
Сообщений: 45
По умолчанию

исправил на x==0
dowhile ОТВЕТ НОРМАЛЬНЫЙ ПОКАЗЫВАЕТ
а while for то же замое - одни нули
maxick96 вне форума Ответить с цитированием
Старый 06.11.2012, 10:19   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Циклы эти с предусловием, а sum инициализируется нулём. Ноль заведомо меньше e (условие abs(sum) > e не выполняется), а значит в тело цикла просто не попадаем. Как вариант тупого костыля: инициализировать sum значением e+1;
pu4koff вне форума Ответить с цитированием
Старый 06.11.2012, 10:23   #7
maxick96
Пользователь
 
Регистрация: 18.02.2012
Сообщений: 45
По умолчанию

так ну сделал sum=e+1
теперь ответы в while и for постоянно отрицательные
ещё надо сделать вычисление последнего слагаемого включённого в сумму(формула дана)

Последний раз редактировалось maxick96; 06.11.2012 в 10:43.
maxick96 вне форума Ответить с цитированием
Старый 06.11.2012, 11:24   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

По идее, в данном случае, найти сумму ряда с заданной точностью - это значит найти сумму элементов, пока очередной элемент не окажется меньше погрешности.
В данной реализации сумма никак не считается, а считается только k-элемент ряда.
Код:
float fundw ( double e,float x/*,int& k*/) // третий параметр не нужен
{
	double sum = 0;
	int k = 1;
	double i = x*x/6; // 1-й элемент ряда (просто подставляем в формулу единичку и получаем это выражение)
 do
	{
      sum += i;
      k++;
      i = ((x*x)*(2*k-1))/((2*k+1)*(k+1));
	}
	while ( abs(i) > e );
	return sum;
}

float funw ( double e,float x)
{
	double sum = 0;
	int k = 1;
	double i = x*x/6; // 1-й элемент ряда (просто подставляем в формулу единичку и получаем это выражение)
while ( abs(i) > e );
	{
      sum += i;
      k++;
      i = ((x*x)*(2*k-1))/((2*k+1)*(k+1));
	}
	return sum;
}

float funf ( double e,float x)
{
	double sum = 0;
	int k = 1;
for (double i = x*x/6; abs(i) > e; ++k, i = ((x*x)*(2*k-1))/((2*k+1)*(k+1)));
	{
      sum += i;
	}
	return sum;
}
Как-то так по идее должно быть. Писал здесь, университетские задачки уже смутно помню.
pu4koff вне форума Ответить с цитированием
Старый 06.11.2012, 16:35   #9
maxick96
Пользователь
 
Регистрация: 18.02.2012
Сообщений: 45
По умолчанию

короче такая фигня
мне сказали сегодня то, что неправильно всё сделано, надо формулу разделить на слагаемые, а формулу писать в функции не нужно
maxick96 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправление программы ace93 Помощь студентам 0 17.10.2012 14:27
Исправление программы для нахождения факториала числа leiprechain Помощь студентам 8 19.12.2011 20:49
Исправление программы на Delphi Verwolf Помощь студентам 1 05.06.2011 11:50
Исправление Behold Фриланс 5 10.09.2009 13:32