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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2015, 10:59   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию C++, неверные результаты в решении примера

Может кто-то увидит, почему не верно рассчитывает программа.

Код:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#define e 2.71828182846
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	Edit1->Text = -2.235*pow(10,-2);
	Edit2->Text = 2.23;
	Edit3->Text = 15.221;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	double w;
	double a,b,c;
	double x,y,z;
	x = StrToFloat (Edit1->Text);
	y = StrToFloat (Edit2->Text);
	z = StrToFloat (Edit3->Text);
	a = pow((pow(x,6)+pow(log(y),2)),1/3);
	b = pow( e, fabs(x-y))*fabs(pow ((x-y),x+y));
	c = atan(x) + atan(z);
	w = a + b/c;
	Memo1->Lines->Add(FloatToStr(a));
	Memo1->Lines->Add(FloatToStr(b));
	Memo1->Lines->Add(FloatToStr(c));
	Memo1->Lines->Add(FloatToStr(w));
}
w = 39.374, по условию задания.
Чуть исправил первоначальный код, abs заменил на fabs. Выдает ошибку при расчете b

Последний раз редактировалось Dima-91; 21.12.2015 в 11:25.
Dima-91 вне форума Ответить с цитированием
Старый 21.12.2015, 11:06   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Думаю, проблема в 1/3. Так как оба числа целые, то будет применено целочисленное деление. Напишите 1.0/3.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.12.2015, 11:12   #3
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Думаю, проблема в 1/3. Так как оба числа целые, то будет применено целочисленное деление. Напишите 1.0/3.
Спасибо попробую, еще вопрос модуль числа fabs или abs?
Так "а" вроде рассчитало, проблема в "b".

Последний раз редактировалось Dima-91; 21.12.2015 в 11:15.
Dima-91 вне форума Ответить с цитированием
Старый 21.12.2015, 11:14   #4
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

А что, оператор приведения double к стрингу имеется? Ну и соблюдайте тип литералов: 1 и 3 - целые, значит оператор деления одного на другое целочисленный и результат 0.

Цитата:
Сообщение от Dima-91 Посмотреть сообщение
Так "а" вроде рассчитало, проблема в "b".
А зависимости от типа. Но можно перегрузить, или вообще сделать шаблонный:
Код:
template <typename Type> Type abs(Type x)
{
 if (x<((Type)0))
 {
  return -x;
 }
 return x;
}
.

Последний раз редактировалось Аватар; 21.12.2015 в 12:10.
taras-proger вне форума Ответить с цитированием
Старый 21.12.2015, 11:32   #5
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Всем спасибо, нашел ошибку.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	double w;
	double a,b,c;
	double x,y,z;
	x = StrToFloat (Edit1->Text);
	y = StrToFloat (Edit2->Text);
	z = StrToFloat (Edit3->Text);
	a = pow((pow(x,6)+pow(log(y),2)),1.0/3);
	b =	pow( e, fabs(x-y)) * pow( fabs(x-y),(x+y));
	c = atan(x) + atan(z);
	w = a + b/c;
	Memo1->Lines->Add(FloatToStr(a));
	Memo1->Lines->Add(FloatToStr(b));
	Memo1->Lines->Add(FloatToStr(c));
	Memo1->Lines->Add(FloatToStr(w));
}
В b неверное было написано.
Dima-91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] цикл while. Вводятся фамилии спортсменов и результаты в соревнованиях, выдавать на экран результаты... DMGpositive Помощь студентам 0 08.04.2015 09:04
ShellExecute и неверные пути Максим139 Помощь студентам 1 30.03.2011 17:35
Неверные символы в имени файла ! yahoo PHP 1 20.01.2011 03:06