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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2012, 00:59   #1
absxx
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 12
По умолчанию C++ Builder. Проблема с abs

Здравствуйте. Пишу на билдере метод деления отрезка пополам, и столкнулся с проблемой. Функция модуля искажает результаты, ибо то же самое задание для проверки сделал на делфи и результаты совсем вышли разные. Кто сможет, прошу, помогите.

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int i,j;
 double c;
 int count=0;
  double a=0.0, b=1.0, epsilon=0.0000001;


 while (abs(b-a)>epsilon)
  {
   c=(a+b)/2.0;
   if(((5*a*a*a-a-1)*(5*c*c*c-c-1))<0.0)
   {
   b=c;
   }
   else
   {
   a=c;
   }

   count=count+1;
  }


 Form1->Edit1->Text=FloatToStr(c);
MessageDlg(FloatToStr(count), mtInformation, TMsgDlgButtons() << mbOK,1200);

}

Последний раз редактировалось absxx; 16.12.2012 в 01:04.
absxx вне форума Ответить с цитированием
Старый 16.12.2012, 12:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if(((5*a*a*a-a-1)*(5*c*c*c-c-1))<0.0)
Что это за условие?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2012, 14:01   #3
absxx
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что это за условие?
это уравнение которое необходимо решить методом половинного деления. Да, знаю , на самом деле криво я написал , просто на скорую руку а так в программе реализовано вот таким вот способом

Код:
double f(double x)
{
return 5*x*x*x-x-1;
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int i,j;
 double c;
 int count=0;
  double a=0.0, b=1.0, epsilon=0.0000001;


 while (abs(b-a)>epsilon)
  {
   c=(a+b)/2.0;
   if (f(a)*f(c)<0.0)
   {
   b=c;
   }
   else
   {
   a=c;
   }

   count=count+1;
  }


 Form1->Edit1->Text=FloatToStr(c);
MessageDlg(FloatToStr(count), mtInformation, TMsgDlgButtons() << mbOK,1200);

}
absxx вне форума Ответить с цитированием
Старый 16.12.2012, 14:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я всегда думал что должно быть так:
Код:
// fsd.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdlib.h>
#include <math.h>

double f(double x)
{
return 5*x*x*x-x-1;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int i,j;
 double c;
 int count=0;
  double a=0.0, b=1.0, epsilon=0.0000001;


 while (abs(b-a)>epsilon)  {
   c=(a+b)/2.0;
   if (abs(f(a)-f(c))<epsilon) b=c;
   else a=c;
   count=count+1;
  }

	printf("%f",f(a));
	getchar();

	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2012, 22:05   #5
absxx
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А я всегда думал что должно быть так:
Код:
// fsd.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdlib.h>
#include <math.h>

double f(double x)
{
return 5*x*x*x-x-1;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int i,j;
 double c;
 int count=0;
  double a=0.0, b=1.0, epsilon=0.0000001;


 while (abs(b-a)>epsilon)  {
   c=(a+b)/2.0;
   if (abs(f(a)-f(c))<epsilon) b=c;
   else a=c;
   count=count+1;
  }

	printf("%f",f(a));
	getchar();

	return 0;
}
спасибо за помощь, но этот метод верный . замену функции модуля я решил вот таким образом

Код:
#define ABS(A) ((A) >= 0 ? (A) : -(A))
absxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABS - загрузка с сети D-Snaker Паскаль, Turbo Pascal, PascalABC.NET 0 12.10.2011 11:17
abs символа? dukales Помощь студентам 5 06.09.2011 12:47
Как из базы ABS достать файлы oleg17 БД в Delphi 5 21.09.2010 17:02
log(abs(cos(x))) DeFace Общие вопросы C/C++ 3 28.09.2008 17:32