Форум программистов, компьютерный форум CyberForum.ru

Задача про дроби - C++

Восстановить пароль Регистрация
 
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 29
28.01.2014, 13:21     Задача про дроби #1
Сделал вроде всё правильно, но задача не работает и выдаёт ошибку на компиляции:
Код
1>  Для всех выходных данных обновления не требуется.
1>  drobi.cpp
1>d:\microsoft vusual studio 2010\vc\include\ostream(604): error C2248: std::basic_ios<_Elem,_Traits>::basic_ios: невозможно обратиться к private член, объявленному в классе "std::basic_ios<_Elem,_Traits>"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          d:\microsoft vusual studio 2010\vc\include\ios(176): см. объявление "std::basic_ios<_Elem,_Traits>::basic_ios"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          Сообщение диагностики возникло в созданной компилятором функции "std::basic_ostream<_Elem,_Traits>::basic_ostream(const std::basic_ostream<_Elem,_Traits> &)"
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.56
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include <iostream>
#include "drob.h"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"Rus");
 
    drob d1(1,3);
    drob d2(1,7);
 
    cout<<"Дроби";
    cout<<"1:" <<d1<<endl;
    cout<<"2:" <<d2<<endl;
    cout<<endl;
 
    cout<<"d1+d2 = "<<d1+d2<<endl; 
    cout<<"d1-d2 = "<<d1-d2<<endl; 
    cout<<"d1*d2 = "<<d1*d2<<endl; 
    cout<<"d1/d2 = "<<d1/d2<<endl;
 
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//вот заголовочный файл
#pragma once
#include <iostream>
using namespace std;
class drob
{   public:
    int numenator; // числитель
    unsigned int denominator; // знаменатель
    int NOD(int a, int b) const //наименьший общий делитель
    {
    if(a<0)
        a*= -1;
    while(b)
        {
            a %= b;
            swap(a,b);
        }
    }
    int NOK(int a,int b)const //наименьшее общее кратное
    {
    return a*b/NOD(a,b);
    }
    void Sokraschenie()
    {
    int nod = NOD(numenator,denominator);
    numenator/= nod;
    denominator/= nod;
    }
public:
    drob():numenator(1),denominator(1){};
    drob(int n,unsigned int d)
    {
        if(d!=0)
        {
        numenator   = n;
        denominator = d;
        Sokraschenie();
        }
        else {cout<<"Знаменатель равен 0!"; drob();}
    }
    double result(){return (double)numenator/(double)denominator;}
    
 
    drob operator+(drob& d1) const
    {
        drob result;
        if(denominator==d1.denominator)
        {
        result.denominator  =   denominator;
        result.numenator    =   numenator+ d1.numenator;
        result.Sokraschenie();
        return result;
        }
        int nok = NOK(denominator,d1.denominator);
        int x = nok / denominator;
        int y = nok / d1.denominator;
        result.denominator  =   nok;
        result.numenator    =   numenator*x + d1.numenator*y;
        result.Sokraschenie();
        return result;
    }
    drob operator *  (drob& d1)const
    {return drob(numenator*d1.numenator, denominator *d1.denominator);}
    drob operator -  (drob& d1)const
    {return drob(numenator,denominator) + drob(-d1.numenator, d1.denominator);}
    drob operator /  (drob& d1)const
    {return drob(numenator*d1.denominator, denominator *d1.numenator);}
    bool operator == (drob&d1) const
    {if(d1.numenator==numenator&& d1.denominator==denominator)return true; else return false;}
    friend ostream operator <<(ostream os, drob&d1)
    {os<<d1.numenator<<"/"<<d1.denominator; return os;}
    ~drob(void);
};
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 13:21     Задача про дроби
Посмотрите здесь:

C++ Задача на масив.Ввод дробей и вычисление среднего значения дроби!
C++ Задача про слона 0о
C++ [C++] задача про вектор
Задача про 2 рюкзака C++
C++ Задача про год
Задача про Лестницу C++
C++ Задача про биты

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
28.01.2014, 15:48     Задача про дроби #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
чтобы твой оператор
C++
1
2
3
friend ostream operator <<(ostream os, drob&d1)
    {os<<d1.numenator<<"/"<<d1.denominator; return os;}
    ~drob(void);
работал с таким выражением как
C++
1
cout<<"d1+d2 = "<<d1+d2<<endl;
параметр drob&d1 должен быть const:
C++
1
ostream operator <<(ostream os, const drob&d1)
Добавлено через 9 минут
вот так у меня на code::block компайлится:
drob.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include "drob.h"
using namespace std;
 
int main()
{
 
 
    drob d1(1,3);
    drob d2(1,7);
    drob d3;
 
    cout<<"DROBI\n";
    cout<<"1:" <<d1<<endl;
    cout<<"2:" <<d2<<endl;
    cout<<endl;
 
 
    d3 = d1 + d2;
    cout << d3 << endl;
 
 
    cout<<"d1+d2 = "<<d1+d2<<endl;
    cout<<"d1-d2 = "<<d1-d2<<endl;
    cout<<"d1*d2 = "<<d1*d2<<endl;
    cout<<"d1/d2 = "<<d1/d2<<endl;
 
    return 0;
}
drob.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#pragma once
#include <iostream>
using namespace std;
class drob
{   private:
    int numenator; // числитель
    unsigned int denominator; // знаменатель
 
public:
    drob():numenator(1),denominator(1){};
    drob(int n,unsigned int d)
    {
        if(d!=0)
        {
        numenator   = n;
        denominator = d;
        Sokraschenie();
        }
        else {cout<<"Знаменатель равен 0!";
        numenator   = 1;
        denominator = 1;
        }
    }
 
 
int NOD(int a, int b) const //наименьший общий делитель
    {
    if(a<0)
        a*= -1;
    while(b)
        {
            a %= b;
            swap(a,b);
        }
        return a;
    }
    int NOK(int a,int b)const //наименьшее общее кратное
    {
    return a*b/NOD(a,b);
    }
    void Sokraschenie()
    {
    int nod = NOD(numenator,denominator);
    numenator/= nod;
    denominator/= nod;
    }
 
 
    drob operator+(drob& d1) const
    {
        drob result;
        if(denominator==d1.denominator)
        {
        result.denominator  =   denominator;
        result.numenator    =   numenator+ d1.numenator;
        result.Sokraschenie();
        return result;
        }
        int nok = NOK(denominator,d1.denominator);
        int x = nok / denominator;
        int y = nok / d1.denominator;
        result.denominator  =   nok;
        result.numenator    =   numenator*x + d1.numenator*y;
        result.Sokraschenie();
        return result;
    }
    drob operator *  (drob& d1)const
    {return drob(numenator*d1.numenator, denominator *d1.denominator);}
    drob operator -  (drob& d1)const
    {
        drob a(numenator, denominator);
         drob b(-d1.numenator, d1.denominator);
 
       return a + b;
    }
    drob operator /  (drob& d1)const
    {return drob(numenator*d1.denominator, denominator *d1.numenator);}
    bool operator == (drob&d1) const
    {if(d1.numenator==numenator&& d1.denominator==denominator)return true; else return false;}
 
    friend std::ostream& operator <<(std::ostream& os, const drob&d1)
    {os<<d1.numenator<<"/"<<d1.denominator; return os;}
 
};
Pro100Whisky
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 29
28.01.2014, 16:55  [ТС]     Задача про дроби #3
Спасибо
Yandex
Объявления
28.01.2014, 16:55     Задача про дроби
Ответ Создать тему
Опции темы

Текущее время: 19:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru