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

Дружественная функция подсчета площадей - C++

Восстановить пароль Регистрация
 
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
14.05.2014, 17:19     Дружественная функция подсчета площадей #1
Требуется для класса «круг» (определяется радиусом) и «треугольник»(определяется тремя точками на плоскости) написать дружественную функцию подсчета площадей этих фигур. Проверить возможность вписывания (описания) в (около) треугольник (треугольника)

В общем простенькую программу для подсчета площадей написал, а вот как переделать с дружественной функцией - не совсем понял, пробовал, переделывал с friend, но не выходит,а уж тем более проверку вписывания

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
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
    class ger
    {
public:
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    void show();
    };
    void ger::enter()
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));
    };
    void ger::show()
    {
        cout<<"Площадь треугольника S="<<S<<endl;
    }
 
 class ker
 
    {
public:
    double R, S1;
    void enter1();
    void show1();
    };
    void ker::enter1()
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
    };
    void ker::show1()
    {
        cout<<"Площадь круга S="<<S1<<endl;
    }
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    s.show();
    d.enter1();
    d.show1();
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 17:19     Дружественная функция подсчета площадей
Посмотрите здесь:

Дружественная 2-м классам функция. C++
классы , конструктор, дружественная функция C++
C++ Дружественная функция
Дружественная функция. Графы C++
C++ Дружественная функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
16.05.2014, 17:17  [ТС]     Дружественная функция подсчета площадей #2
мало времени осталось ..помогите.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
16.05.2014, 18:12     Дружественная функция подсчета площадей #3
C++
1
2
3
4
5
6
7
8
9
class ger
{
...  
 friend void show(ger GG);
};
void show(ger GG)
{
    cout<<"Площадь треугольника S="<<GG.S<<endl;
}
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
16.05.2014, 20:44  [ТС]     Дружественная функция подсчета площадей #4
Цитата Сообщение от zss Посмотреть сообщение
friend void show(ger GG);
разве это не просто вывод уже вычисленной площади?
мне нужно вычисление площади в friend функцию
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 74
16.05.2014, 21:51     Дружественная функция подсчета площадей #5
Подойдет?
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
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
    class ger
    {
public:
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    };
    void ger::enter()
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));    
        cout<<"Площадь треугольника S="<<S<<endl;
    }
 class ker
    {
public:
    double R, S1;
    void enter1();
    void show1();
    };
    void ker::enter1()
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
        cout<<"Площадь круга S="<<S1<<endl;
    };
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    d.enter1();
    system("pause");
}
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
16.05.2014, 22:05     Дружественная функция подсчета площадей #6
Цитата Сообщение от lna Посмотреть сообщение
разве это не просто вывод уже вычисленной площади?
Уж коли Вы вычислили ее в конструкторе, то зачем вычислять еще раз?
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 07:09  [ТС]     Дружественная функция подсчета площадей #7
zss, все дело в том, что я не хочу вычислять ее в конструкторе. это просто как бы набросок программы.
требуется вычислить ее в дружественной ф-ции.

как бы так или может даже отдельно от конструктора
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
#include <iostream>
#include <math.h>
#include <locale>
 
using namespace std;
    class ger
    {
public:
 
    double a, b, c, p, S;
    double x1, y1, x2, y2, x3, y3;
    void enter();
    };
    friend void enter(ger GG);
    void enter(ger GG)
    {
        cout<<"x1="; cin>>x1;
        cout<<"y1="; cin>>y1;
                cout<<endl;
        cout<<"x2="; cin>>x2;
        cout<<"y2="; cin>>y2;
                cout<<endl;
        cout<<"x3="; cin>>x3;
        cout<<"y3="; cin>>y3;
                cout<<endl;
        a=sqrt( pow((x1-x2),2)+pow((y1-y2),2) );
        b=sqrt( pow((x2-x3),2)+pow((y2-y3),2) );
        c=sqrt( pow((x1-x3),2)+pow((y1-y3),2) );
        p = a+b+c/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));    
        cout<<"Площадь треугольника S="<<GG.S<<endl;
    }
 class ker
    {
public:
    double R, S1;
    void enter1();
    };
    friend void enter1(ger GG);
    void enter1(ger GG)
    {
        cout<<"R="; cin>>R;
        S1 =3.14*(pow(R,2));
        cout<<"Площадь круга S="<<GG.S1<<endl;
    };
void main()
{
 setlocale(LC_ALL, "Russian");
    system("cls");
    ger s;
    ker d;
    s.enter();
    d.enter1();
    system("pause");
}
Darkos, спасибо что убрали везде show и перенесли ввод и вывод в одну ф-цию. но это совсем не то
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 74
17.05.2014, 07:27     Дружественная функция подсчета площадей #8
lna, если я правильно понял, нужно чтоб все расчеты велись в дружественной функции, но сама функция была вне класса, так?
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 07:38  [ТС]     Дружественная функция подсчета площадей #9
Darkos, необязательно наверное вне класса. а то что расчеты в друж ф-ции это да
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.05.2014, 08:48     Дружественная функция подсчета площадей #10
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
#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
using namespace std;
class ker
{
private:
    double R;
public:
    ker():R(0){}
    ker(double r):R(r){}
    friend double Square(ger GG);
};
double Square(ger GG)
{
        return M_PI*GG.R*GG.R;
}
int main()
{
    double r;
    cout<<"R="; cin>>r;    
    ker A(r);
    double s=Square(A);
    cout<<"Площадь круга S="<<s<<endl;
    system("pause");
    return 0;
}
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 08:54  [ТС]     Дружественная функция подсчета площадей #11
zss, для меня что-то это очень сложное ..
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.05.2014, 09:14     Дружественная функция подсчета площадей #12
Цитата Сообщение от lna Посмотреть сообщение
что-то это очень сложное
Здесь используется минимум знании ООП.
Если этого не поймете, то дальше двигаться бессмысленно.
Разъясняю подробно.
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
#include <iostream>
#define _USE_MATH_DEFINES // нужна чтобы видна была константа M_PI
#include <cmath>
using namespace std;
class ker
{
private:
    double R; // это защищенные данные класса. К ним доступа из вне нет.
public:
    ker():R(0){} // конструктор по умолчанию (без параметров)
    ker(double r):R(r){} // конструктор с 1 параметром типа double 
    friend double Square(ker GG); // нужная Вам дружественная функция, которая НЕ ЯВЛЯЕТСЯ членом класса
};
// описание функции Square, как видите, она глобальная (вне класса)
double Square(ker GG)
{
        return M_PI*GG.R*GG.R;
}
int main()
{
    double r;
    cout<<"R="; cin>>r;    // вводим значение радиуса в обычную переменную.
    ker A(r);   // создаем объект A имеющий тип ker, значение r запишется в A.R через конструктор
    double s=Square(A);  // вычисляем площадь
    cout<<"Площадь круга S="<<s<<endl;
    system("pause");
    return 0;
}
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
17.05.2014, 09:34  [ТС]     Дружественная функция подсчета площадей #13
zss, а вот так можно? - это для окружности

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
 #include <conio.h>
#include <iostream>
 
using namespace std;
class A
  {
     double x; 
     friend void get_x(double, A &);  
   public:
 
      void show(); 
};
 
   void get_x(double N, A &obj_A)
    {
        cout<<"R="; cin>>N;
      obj_A.x=3.14*(pow(N,2)); 
    }
  
   void A::show() {
     cout<<x<<endl; 
    }
  void main()
   {
     system("cls");
      A obj_A;
      get_x(1,obj_A); 
      obj_A.show(); 
    getch();
    return;
   }
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.05.2014, 09:42     Дружественная функция подсчета площадей #14
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
#include <conio.h>
#include <iostream>
using namespace std;
class A
{
     double x; 
public:
     A(double x0):x(x0);
     void show(); 
     friend double get_Sqare(A a);  
};
double get_Square(A a)
{
     return M_PI*a.x*a.x;
}
void A::show() 
{
     cout<<"R="<<x<<endl; 
}
int main()
{
     cout<<"R=?"; 
     double r;cin>>r;
     A obj_A(r);
     obj_A.show(); 
     double s=get_Sqare(obj_A);
     cout<<"Площадь круга S="<<s<<endl; 
     getch();
     return 0;
   }
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
23.05.2014, 18:33  [ТС]     Дружественная функция подсчета площадей #15
zss, хотел было сделать как вы, но ругается на две ошибки в строчке
C++
1
return M_PI*GG.R*GG.R;
error C2100: недопустимое косвенное обращение
IntelliSense: операнд * должен быть указателем
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
23.05.2014, 19:36     Дружественная функция подсчета площадей #16
Приведите код всей функции и код объявления класса,
членом которого является GG
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
23.05.2014, 20:01  [ТС]     Дружественная функция подсчета площадей #17
zss, код тот что вы в 14 сообщении написали
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
23.05.2014, 21:34     Дружественная функция подсчета площадей #18
У меня никакого GG нет
С исправлением опечаток:
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
#include <conio.h>
#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
using namespace std;
class A
{
private:
     double x; 
public:
    A(double x0):x(x0){}
    void A::show() 
    {
        cout<<"R="<<x<<endl; 
    }
    friend double get_Sqare(A a);
};
 
double get_Sqare(A a)
{
   return M_PI*a.x*a.x;
}
int main()
{
     cout<<"R=?"; 
     double r;cin>>r;
     A obj_A(r);
     obj_A.show(); 
     double s=get_Sqare(obj_A);
     cout<<"Площадь круга S="<<s<<endl; 
     getch();
     return 0;
   }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2014, 21:42     Дружественная функция подсчета площадей
Еще ссылки по теме:

C++ Дружественная функция
C++ Дружественная функция класса
C++ Дружественная функция

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

Или воспользуйтесь поиском по форуму:
lna
7 / 1 / 1
Регистрация: 01.10.2012
Сообщений: 86
23.05.2014, 21:42  [ТС]     Дружественная функция подсчета площадей #19
zss, вру. это было в 12 сообщении.

вот опять

Ошибка 1 error C2100: недопустимое косвенное обращение \visual studio 2010\projects\ldb4\ldb4\in.cpp 18 1 ldb4
2 IntelliSense: операнд * должен быть указателем \visual studio 2010\projects\ldb4\ldb4\in.cpp 18 23 ldb4
Yandex
Объявления
23.05.2014, 21:42     Дружественная функция подсчета площадей
Ответ Создать тему
Опции темы

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