[C++] перегрузка +,*,/
y = e^x = 1 + x/1! + x^2/2! + .... + x^n/n!
и перегружает операторы * / +
Пробывал писать ее без перегрузки...всеравно не работет!
y = e^x = 1 + x/1! + x^2/2! + .... + x^n/n!
Пробывал писать ее без перегрузки...всеравно не работет!
При чем здесь перегрузка операторов? Что и зачем Вы собрались перегружать? Что именно у Вас не получается, Вы не знаете, как посчитать факториал?
Уточните вопрос, и тогда Вам наверняка помогут :)
Уточните вопрос, и тогда Вам наверняка помогут :)
С факториалом проблем нету =) я не могу сооброзить как перегрузить эти операторы =\
Уточните вопрос, и тогда Вам наверняка помогут :)
Вот именно.
anty,[COLOR="Red"]уточни условие или тема будет удалена.Перегрузка операций - описана в любом учебнике по С++.Обсуждать на форуме эту тему целиком не представляется возможным.[/COLOR]
Не понятно,что не получается.Ты собираешься изменять операции, которые работают со встроенными типами ?:eek: Это - синтаксическая ошибка ! Если речь идет о классе,то о каком ?
Не могу сравнить e=2.71828 и y=2.718282, можно их как-нибудь сравнивать приблизительно?
#include<conio.h>
#include <math.h>
class cl{
public:
cl(double);
double x;
double get(){return x;}
double operator * (double);
double operator / (double);
double operator + (double);
};
cl::cl(double a){
x=a;}
double cl::operator * (double x1){
return x*x1;}
double operator * (cl&x2,float x1){
return x2.get()*x1;}
double cl::operator / (double x3){
return x/x3;}
double operator / (cl&x4,float x3){
return x4.get()/x3;}
double cl::operator + (double x5){
return x+x5;}
double operator + (cl&x6,float x5){
return x6.get()+x5;}
void main(void)
{
cl c4(1); //f
cl c6(1);
int i=1;
double t2,x;
double t1;
double e;
cout<<"BBedute x: ";
cin>>x;
cl c2(x); //x
cl c3(1);
e=exp(x);
cout<<"e="<<e<<"\n\n";
cl ep(e); //y
do{
c3=operator * (c3,c2.get()); //возведение в сетпень
cl c5(i);
c4=operator * (c4,c5.get()); //факториал
t1=operator / (c3,c4.get()); // x/f
cl c7(t1);
c6=operator + (c6,c7.get());
//if(c6.get()==ep.get()) не сравнивает е и у
printf("x=%f f=%f t1=%f t2=%f\n",c3,c4,t1,c6);
i++;
}while(i<15);
getch();
}
Но какая нужда создавать класс, инкапсулирующий работу с типом double и перегружать для него операторы? Чем тебя встроенный тип не устраивает?
Или у Вас задание такое экзотическое?
Не могу сравнить e=2.71828 и y=2.718282, можно их как-нибудь сравнивать приблизительно?
double precision = 0.00005; // точность, с какой надо сравнивать
if (fabs(e - y) >= precision)
// величины НЕ равны
else
// равны
Или у Вас задание такое экзотическое?
Ну а чтож еще :D Не знаю откуда препод их выкапывает :)
t3=e; //y
if(t2=t3)
{....}
...все пралвельно раотает.. а если так:
c6=operator + (c6,c7.get()); //e
if(c6.get()==ep.get())
{....}
Не работает =\
...мм наверно еще надо перегрузить ==
{....}
Оригинально. Так что именно написано "=" или "==".
Потому что в данном случае вместо сравнения получается присвоение, после чего t2 проверяется на валидность. Соотвественно, при любом t3, неравном нулю, будет true.
P.S.
Вообще-то правильно настроенный компилятор здесь должен warning сделать.
По тому, что это не является синтаксической ошибкой. Компилятор, выдавая предупреждение, информирует тебя, что в этой строке возможно ошибка.
Но иногда так писать удобно, это специфика синтаксиса C.
Например на строчку:
//....
компилятор выдаст предупреждение, но в данном случае это верная конструкция: выполняется вызов функции и присвоение возвращаемого значения переменной. Если это значение ненулевое, выполняется блокif.
#include<conio.h>
#include <math.h>
#include <stdio.h>
class cl{
public:
double x;
cl(double);
double get(){return x;}
double operator * (double);
double operator / (double);
double operator + (double);
double operator == (double);
};
cl::cl(double a){
x=a;}
double cl::operator * (double x1){
return x*x1;}
double operator * (cl&x2,float x1){
return x2.get()*x1;}
double cl::operator / (double x3){
return x/x3;}
double operator / (cl&x4,float x3){
return x4.get()/x3;}
double cl::operator + (double x5){
return x+x5;}
double operator + (cl&x6,float x5){
return x6.get()+x5;}
double cl::operator == (double x7)
{ return x==x7;}
double operator == (cl&x8,float x7)
{return x8.get()==x7;}
void main(void)
{
cl c4(1); //f
cl c6(1);
int i=1;
int x;
double t1;
double e;
double t2,t3;
cout<<"BBedute x: ";
cin>>x;
cl c2(x); //x
cl c3(1);
e=exp(x);
cl c8(e);
cout<<"e="<<e<<"\n\n";
do{
c3=operator * (c3,c2.get()); //возведение в сетпень
cl c5(i);
c4=operator * (c4,c5.get()); //факториал
t1=operator / (c3,c4.get()); // x/f
cl c7(t1);
c6=operator + (c6,c7.get());
if(c6==c8.get())
{printf("%f",e); getch(); break;}
i++;
}while(i<50);
getch();
}
Должно быть bool