Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++] перегрузка +,*,/

4.8K
18 июня 2007 года
anty
89 / / 29.10.2006
Нужно написать программу которая вычисляет эту формулу

y = e^x = 1 + x/1! + x^2/2! + .... + x^n/n!

и перегружает операторы * / +

Пробывал писать ее без перегрузки...всеравно не работет!
4.3K
18 июня 2007 года
flat
142 / / 27.12.2005
Цитата: anty
Помогите не получается написать эту программку...

y = e^x = 1 + x/1! + x^2/2! + .... + x^n/n!

Пробывал писать ее без перегрузки...всеравно не работет!


При чем здесь перегрузка операторов? Что и зачем Вы собрались перегружать? Что именно у Вас не получается, Вы не знаете, как посчитать факториал?
Уточните вопрос, и тогда Вам наверняка помогут :)

4.8K
18 июня 2007 года
anty
89 / / 29.10.2006
Цитата: flat
При чем здесь перегрузка операторов? Что и зачем Вы собрались перегружать? Что именно у Вас не получается, Вы не знаете, как посчитать факториал?
Уточните вопрос, и тогда Вам наверняка помогут :)



С факториалом проблем нету =) я не могу сооброзить как перегрузить эти операторы =\

247
18 июня 2007 года
wanja
1.2K / / 03.02.2003
А что за класс?
320
18 июня 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: flat
При чем здесь перегрузка операторов? Что и зачем Вы собрались перегружать? Что именно у Вас не получается, Вы не знаете, как посчитать факториал?
Уточните вопрос, и тогда Вам наверняка помогут :)


Вот именно.
anty,[COLOR="Red"]уточни условие или тема будет удалена.Перегрузка операций - описана в любом учебнике по С++.Обсуждать на форуме эту тему целиком не представляется возможным.[/COLOR]
Не понятно,что не получается.Ты собираешься изменять операции, которые работают со встроенными типами ?:eek: Это - синтаксическая ошибка ! Если речь идет о классе,то о каком ?

4.8K
18 июня 2007 года
anty
89 / / 29.10.2006
ммм я почему-то всегда думал, что если перегрузка операторов, то всегда создается класс =\ Хотя я уже почти разобрался, тему можно уделить.
4.8K
19 июня 2007 года
anty
89 / / 29.10.2006
С перегрузкой разобрался, но вот такая вот проблема!
Не могу сравнить e=2.71828 и y=2.718282, можно их как-нибудь сравнивать приблизительно?

Код:
#include<iostream.h>
#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();
}
4.3K
19 июня 2007 года
flat
142 / / 27.12.2005
Я может чего-то не понимаю...
Но какая нужда создавать класс, инкапсулирующий работу с типом double и перегружать для него операторы? Чем тебя встроенный тип не устраивает?
Или у Вас задание такое экзотическое?

Цитата:

Не могу сравнить e=2.71828 и y=2.718282, можно их как-нибудь сравнивать приблизительно?


 
Код:
//e=2.71828 и y=2.718282
double precision = 0.00005; // точность, с какой надо сравнивать
if (fabs(e - y) >= precision)
  // величины НЕ равны
else
  // равны
4.8K
19 июня 2007 года
anty
89 / / 29.10.2006
Цитата: flat

Или у Вас задание такое экзотическое?


Ну а чтож еще :D Не знаю откуда препод их выкапывает :)

4.8K
19 июня 2007 года
anty
89 / / 29.10.2006
не знаю почему если сравнивать так:
 
Код:
t2=c6.get(); //e
t3=e;          //y
if(t2=t3)
{....}

...все пралвельно раотает.. а если так:
 
Код:
cl ep(e); //y
c6=operator + (c6,c7.get()); //e
 if(c6.get()==ep.get())
{....}

Не работает =\
...мм наверно еще надо перегрузить ==
309
19 июня 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
if(t2=t3)
{....}


Оригинально. Так что именно написано "=" или "==".
Потому что в данном случае вместо сравнения получается присвоение, после чего t2 проверяется на валидность. Соотвественно, при любом t3, неравном нулю, будет true.

P.S.
Вообще-то правильно настроенный компилятор здесь должен warning сделать.

4.8K
19 июня 2007 года
anty
89 / / 29.10.2006
да он матюкается, но ошыбку пропускает.
4.3K
19 июня 2007 года
flat
142 / / 27.12.2005
Цитата: anty
да он матюкается, но ошыбку пропускает.


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

 
Код:
if (pointer = malloc(size))
//....

компилятор выдаст предупреждение, но в данном случае это верная конструкция: выполняется вызов функции и присвоение возвращаемого значения переменной. Если это значение ненулевое, выполняется блокif.
4.8K
20 июня 2007 года
anty
89 / / 29.10.2006
Перегрузил == но всеравно не работает =\ в чем дело?

Код:
#include<iostream.h>
#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();
}
4.3K
20 июня 2007 года
flat
142 / / 27.12.2005
Цитата: anty
Перегрузил == но всеравно не работает =\ в чем дело?

 
Код:
[color=red]double[/color] operator == (double);


Должно быть bool

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог